学习MySQL之NULL值处理、正则表达式

学习MySQL之NULL值处理、正则表达式


一、NULL 值处理

我们已经知道MySQL使用SQL SELECT命令依据WHERE子句来读取数据表中的数据,但是当提供的查询条件字段为NULL时,该命令可能就无法正常工作。为了处理这种情况,MySQL提供了三大运算符:

  1. IS NULL:当列的值是NULL,此运算符返回true。
  2. IS NOT NULL:当列的值不为NULL,运算符返回true。
  3. <=>:比较操作符(不同于=运算符),当比较的两个值相等或者都为NULL时返回true。

关于NULL的条件比较运算时比较特殊的。你不能使用= NULL 或 != NULL在列中查找NULL值。

在MySQL中,NULL值与任何其它值的比较(即使是NULL)永远返回NULL,即NULL = NULL返回NULL。

MySQL中处理NULL使用IS NULL和IS NOT NULL运算符。

mysql> SELECT * FROM Student WHERE chinese = NULL;
Empty set (0.00 sec)
mysql> SELECT * FROM Student WHERE chinese != NULL;
Empty set (0.01 sec)

以上实例中你可以看到=和!=运算符是不起作用的;

查找数据表中chinese列是否为NULL,必须使用IS NULL和IS NOT NULL,如下实例:

mysql> SELECT * FROM Student WHERE chinese IS NULL;
+---------------+--------------+
| name          | chinese      |
+---------------+--------------+
| 赵六           | NULL         |
+---------------+--------------+
1 rows in set (0.01 sec)
 
mysql> SELECT * FROM Student WHERE chinese IS NOT NULL;
+---------------+--------------+
| name          | chinese      |
+---------------+--------------+
| 张三           | 98           |
| 李四           | 76           |
+---------------+--------------+
2 rows in set (0.01 sec)

二、正则表达式

MySQL使用REGEXP操作符来进行正则表达式匹配。下表中的正则模式可应用于REGEXP操作符中。

模式 描述
^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配’\n’或’\r’之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配’\n’或’\r’之前的位置。
. 匹配除"\n"之外的任何单个字符。要匹配包括’\n’在内的任何字符,请使用像’[.\n]'的模式
[…] 字符集合。匹配所包含的任意一个字符。例如,’[abc]‘可以匹配"plain"中的’a’。
[^…] 负值字符集合。匹配未包含的任意字符。例如,’[ ^abc ]‘可以匹配"plain"中的’p’。
p1|p2|p3 匹配p1或p2或p3。例如,‘z|food’能匹配"z"或"food"。’(z|f)ood’则匹配"zood"或"food"。
* 匹配前面的子表达式零次或多次。例如,zo能匹配"z"以及"zoo"。 *等价于{0,}
+ 匹配前面的字表达式一次或多次。例如,'zo+'能匹配"zo"以及"zoo",但不能匹配"z"。+等价于{1,}。
{n} n是一个非负整数。匹配确定的n次。例如’o{2}‘不能匹配"Bob"中的’o’,但是能匹配"food"中的两个o。
{n,m} m和n均为非负整数,其中n <= m。最少匹配n次且最多匹配m次。

了解以上的正则需求后,我们就可以根据自己的需求来编写带有正则表达式的SQL语句。以下我们将列出几个小实例来加深我们的理解:

1、查找name字段中以’st’为开头的所有数据:

mysql> SELECT name FROM Student WHERE name REGEXP '^st';

2、查找name字段中以’ok’为结尾的所有数据:

mysql> SELECT name FROM Student WHERE name REGEXP 'ok$';

3、查找name字段中包含’mar’字符串的所有数据:

mysql> SELECT name FROM Student WHERE name REGEXP 'mar';

4、查找name字段中以元音字符开头或以’ok’字符串结尾的所有数据:

mysql> SELECT name FROM Student WHERE name REGEXP '^[aeiou]|ok$';
发布了48 篇原创文章 · 获赞 5 · 访问量 2600

猜你喜欢

转载自blog.csdn.net/Mr_robot_strange/article/details/104578673