mysql> SELECT NULL IS NULL, ISNULL(NULL), ISNULL('a'), 1 IS NULL; +--------------+--------------+-------------+-----------+ | NULL IS NULL | ISNULL(NULL) | ISNULL('a') | 1 IS NULL | +--------------+--------------+-------------+-----------+ | 1 | 1 | 0 | 0 | +--------------+--------------+-------------+-----------+ 1 row in set (0.00 sec)
4) 非空运算符
非空运算符(IS NOT NULL)判断一个值是否不为NULL,如果不为NULL则返回1,否则返回0。
1 2 3 4 5 6 7
mysql> SELECT NULL IS NOT NULL, 'a' IS NOT NULL, 1 IS NOT NULL; +------------------+-----------------+---------------+ | NULL IS NOT NULL | 'a' IS NOT NULL | 1 IS NOT NULL | +------------------+-----------------+---------------+ | 0 | 1 | 1 | +------------------+-----------------+---------------+ 1 row in set (0.00 sec)
BETWEEN运算符使用的格式通常为SELECT D FROM TABLE WHERE C BETWEEN A AND B,此时,当C大于或等于A,并且C小于或等于B时,结果为1,否则结果为0。
1 2 3 4 5 6 7
mysql> SELECT 1 BETWEEN 0 AND 1, 10 BETWEEN 11 AND 12, 'b' BETWEEN 'a' AND 'c'; +-------------------+----------------------+-------------------------+ | 1 BETWEEN 0 AND 1 | 10 BETWEEN 11 AND 12 | 'b' BETWEEN 'a' AND 'c' | +-------------------+----------------------+-------------------------+ | 1 | 0 | 1 | +-------------------+----------------------+-------------------------+ 1 row in set (0.00 sec)
mysql> SELECT 'a' IN ('a','b','c'), 1 IN (2,3), NULL IN ('a','b'), 'a' IN ('a', NULL); +----------------------+------------+-------------------+--------------------+ | 'a' IN ('a','b','c') | 1 IN (2,3) | NULL IN ('a','b') | 'a' IN ('a', NULL) | +----------------------+------------+-------------------+--------------------+ | 1 | 0 | NULL | 1 | +----------------------+------------+-------------------+--------------------+
mysql> SELECT 'a' IN ('a','b','c'), 1 IN (2,3), NULL IN ('a','b'), 'a' IN (NULL, 'b'); +----------------------+------------+-------------------+--------------------+ | 'a' IN ('a','b','c') | 1 IN (2,3) | NULL IN ('a','b') | 'a' IN (NULL, 'b') | +----------------------+------------+-------------------+--------------------+ | 1 | 0 | NULL | NULL | +----------------------+------------+-------------------+--------------------+ 1 row in set (0.00 sec)
9) NOT IN运算符
NOT IN运算符用于判断给定的值是否不是IN列表中的一个值,如果不是IN列表中的一 个值,则返回1,否则返回0。
1 2 3 4 5 6 7
mysql> SELECT 'a' NOT IN ('a','b','c'), 1 NOT IN (2,3); +--------------------------+----------------+ | 'a' NOT IN ('a','b','c') | 1 NOT IN (2,3) | +--------------------------+----------------+ | 0 | 1 | +--------------------------+----------------+ 1 row in set (0.00 sec)
mysql> SELECT NOT 1, NOT 0, NOT(1+1), NOT !1, NOT NULL; +-------+-------+----------+--------+----------+ | NOT 1 | NOT 0 | NOT(1+1) | NOT !1 | NOT NULL | +-------+-------+----------+--------+----------+ | 0 | 1 | 0 | 1 | NULL | +-------+-------+----------+--------+----------+ 1 row in set (0.00 sec)
mysql> SELECT 1 AND -1, 0 AND 1, 0 AND NULL, 1 AND NULL; +----------+---------+------------+------------+ | 1 AND -1 | 0 AND 1 | 0 AND NULL | 1 AND NULL | +----------+---------+------------+------------+ | 1 | 0 | 0 | NULL | +----------+---------+------------+------------+ 1 row in set (0.00 sec)
#在fruits表中,查询f_name字段以字母‘b’开头的记录: SELECT * FROM fruits WHERE f_name REGEXP '^b';
2) 查询以特定字符或字符串结尾的记录
字符‘$’匹配以特定字符或者字符串结尾的文本。
1 2
#在fruits表中,查询f_name字段以字母‘y’结尾的记录: SELECT * FROM fruits WHERE f_name REGEXP 'y$';
3) 用符号”.”来替代字符串中的任意一个字符
字符‘.’匹配任意一个字符。
1 2 3
#在fruits表中,查询f_name字段值包含字母‘a’与‘g’且两个 #字母之间只有一个字母的记录: SELECT * FROM fruits WHERE f_name REGEXP 'a.g';
4) 使用”*“和”+”来匹配多个字符
星号‘*’匹配前面的字符任意多次,包括0次。加号‘+’匹配前面的字符至少一次。
1 2 3 4 5
#在fruits表中,查询f_name字段值以字母‘b’开头且‘b’后面出现字母‘a’的记录: SELECT * FROM fruits WHERE f_name REGEXP '^ba*'; #在fruits表中,查询f_name字段值以字母‘b’开头 #且‘b’后面出现字母‘a’至少一次的记录: SELECT * FROM fruits WHERE f_name REGEXP '^ba+';
#在fruits表中,查询f_name字段值包含字符串“on”的记录: SELECT * FROM fruits WHERE f_name REGEXP 'on'; #在fruits表中,查询f_name字段值包含字符串“on”或者“ap”的记录: SELECT * FROM fruits WHERE f_name REGEXP 'on|ap';
#在fruits表中,使用LIKE运算符查询f_name字段值为“on”的记录: SELECT * FROM fruits WHERE f_name like 'on';
6) 匹配指定字符中的任意一个
方括号“[]”指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本。
1 2 3 4
#在fruits表中,查找f_name字段中包含字母‘o’或者‘t’的记录 SELECT * FROM fruits WHERE f_name REGEXP ‘[ot]’; #在fruits表中,查询s_id字段中包含4、5或者6的记录 SELECT * FROM fruits WHERE s_id REGEXP ‘[456]’;
7) 匹配指定字符以外的字符
“[^字符集合]” 匹配不在指定集合中的任何字符。
1 2
#在fruits表中,查询f_id字段中包含字母a~e和数字1-2以外字符的记录 SELECT * FROM fruits WHERE f_id REGEXP '[^a-e1-2]';
#查询f_name字段值出现字母‘x’至少2次的记录 SELECT * FROM fruits WHERE f_name REGEXP 'x{2,}'; #查询f_name字段值出现字符串“ba”最少1次、最多3次的记录 SELECT * FROM fruits WHERE f_name REGEXP 'ba{1,3}';