与许多其他语言类似(好吧,我们在这里承认SQL是一门语言)
(+)、减(-)、乘(*)、除(/)和取模(%,MOD)运算
符号类型运算符与非符号类型运算符
在mysql中,=
用作了判断,那么在mysql中,赋值符号是:=
SELECT BINARY 'a' = 'A';
不等于运算符(<>和!=)用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0。不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL。
判断一个值是否为NULL,如果为NULL则返回1,否则返回 0。
SELECT NULL IS NULL, ISNULL(NULL), ISNULL('a'), 1 IS NULL;
判断一个值是否不为NULL,如果不为NULL则返回1,否则返回0。
SELECT NULL IS NOT NULL, 'a' IS NOT NULL, 1 IS NOT NULL;
SELECT LEAST(1,0,2),LEAST('b','a','c'),
SELECT GREATEST(1,0,2), GREATEST('b','a','c'), GREATEST(1,NULL,2);
缺点:如果我想求出某个列的最小、最大值,这个函数是求不出来的,因为不可能把所有的值,一个一个的放进去,要解决这个问题必须要利用后面的聚合函数MIN()或者MAX()。
SELECT 1 BETWEEN 0 AND 1, 10 BETWEEN 11 AND 12, 'b' BETWEEN 'a' AND 'c';
在这里插入代码片
IN 运算符 SELECT 'a' IN ('a','b','c'), 1 IN (2,3), NULL IN ('a','b'), 'a' IN ('a', NULL);
SELECT 'a' NOT IN ('a','b','c'), 1 NOT IN (2,3);
“%”:匹配0个或多个字符。
“_”:只能匹配一个字符。## 逻辑运算符
-- 以S为首字母的字符串
SELECT first_name
FROM employees
WHERE first_name LIKE 'S%';
-- 第二个字母为o的
SELECT last_name
FROM employees
WHERE last_name LIKE '_o%';
总结起来就是如果 like
2. ESCAPE运算符
回避特殊符号的是:使用转义符\
或者使用选定的字符,但是需要用ESCAPE关键词标明
SELECT job_id
FROM jobs
WHERE job_id LIKE ‘IT\_%‘;
-- 或者使用ESCAPE
SELECT job_id
FROM jobs
WHERE job_id LIKE ‘IT$_%‘ escape ‘$‘;
注意\
运算符不能与ESCAPE同时使用。
例如下面得到语句是会报错的
SELECT job_id
FROM jobs
WHERE job_id LIKE 'IT\$_%' ESCAPE '\';
-- expr REGEXP 匹配条件
SELECT 'shkstart' REGEXP '^s', 'shkstart' REGEXP 't$', 'shkstart' REGEXP 'hk';
(1)‘^’匹配以该字符后面的字符开头的字符串。
(2)‘$’匹配以该字符前面的字符结尾的字符串。
(3)‘.’匹配任何一个单字符。
(4)“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”或“b”或“c”。为了命名字符的范围,使用一
个‘-’。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
(5)‘*’匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的‘x’字符,“[0-9]*”匹配任何数量的数字,而“*”匹配任何数量的任何字符。
与java基本类似,但是每一种都有符号类型与非符号类型,还要注意null值得参与处理
&&—AND
!—NOT
|| —OR
XOR
与java几乎一致
LIKE运算符也可以匹配指定的字符串,但与REGEXP不同,LIKE匹配的字符串如果在文本中间出现,则找不到它,相应的行也不会返回。REGEXP在文本内进行匹配,如果被匹配的字符串在文本中出现,REGEXP将会找到它,相应的行也会被返回。
SELECT * FROM fruits WHERE f_name REGEXP '^b';
SELECT * FROM fruits WHERE f_name REGEXP 'y$';
-- 在fruits表中,查询f_name字段值包含字符串“on”的记录,SQL语句如下:
SELECT * FROM fruits WHERE f_name REGEXP 'on';
-- 在fruits表中,查询f_name字段值包含字符串“on”或者“ap”的记录,SQL语句如下:
SELECT * FROM fruits WHERE f_name REGEXP 'on|ap';