算数运算符包括 +、-、*、/或者DIV、%或者MOD
# java中 100 + "a" => '100a' # sql 中 100 + 'a' => 100 (计算过程中将字符串看成0)
# 1 + null => null
# 12 % 0 => null # 12 / 0 => null
# 12 % 5 => 2 # 12 % -5 => 2 # -12 % 5 => -2 # -12 % -5 => -2
# 100 / 2 = 50.00000
比较运算符包括 =、<=>、<>、!=、<、<=、>、>=
其中和常见的不同的是安全等于<=>、不等于<>
# <=>安全等于可以用来进行判断null SELECT 1=null,1<=>null,1!=null, 1<>null; # 不等于<>等同于!=
最大LEAST()
最小GRLEAST()
# 最大可以比较数值或者字典序 LEAST('g', 'b', 't', 'm') => 'b' # 最小可以比较数值或者字典序 GRLEAST('g', 'b', 't', 'm') => 't'
# between and 表示范围值,包括两个边界 # between 6000 and 8000 => [6000,8000] # NOT between 6000 and 8000 # 工资在6000~8000的人id SELECT employee_id,salary FROM employees WHERE employees.salary BETWEEN 6000 AND 8000; # 工资不在在6000~8000的人id SELECT employee_id,salary FROM employees WHERE employees.salary NOT BETWEEN 6000 AND 8000;
# where id IN (10,20,30); # => where id = 10 or id = 20 or id = 30; # 查询部门编号是10、20、30的人id SELECT employee_id,department_id FROM employees WHERE employees.department_id in (10, 20, 30); SELECT employee_id,department_id FROM employees WHERE employees.department_id=10 or employees.department_id=20 or employees.department_id=30; # 不能写成这样 SELECT employee_id,department_id FROM employees WHERE employees.department_id=10 or 20 or 30; # 因为先计算id=10 or 20 or 30 相当于 id=10 || 1 || 1 结果为1
模糊查询使用Like
关键词,%
表示匹配不确定个数的字符(可以为0个),#
表示匹配一个确定字符
# %的用法 # 查找first_name中包含a的id和first_name SELECT employee_id,first_name FROM employees WHERE employees.first_name LIKE '%a%';
# _的用法 # 查找first_name第二个字母为a的id和first_name SELECT employee_id,first_name FROM employees WHERE employees.first_name LIKE '_a%';
# _与%结合使用 Like '__a%'; => 可以匹配eea # 如果需要匹配_与%特殊字符,可以用转义字符 Like '_\_a'; => 可以匹配 e_a # 或者指定转义字符,这里指定&为转义字符 Like '_$_a' ESCAPE '$'
关键字为REGEXP
或者是RLIKE
# ^字符 表示以该字符开头 # 字符$ 表示以该字符结束 # [ab] 表示a或者b # . 匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r] # 与通用的正则表达式同 SELECT 'shkstart' REGEXP '^shk', 'shkstart' REGEXP 't$', 'shkstart' REGEXP 'hk' FROM DUAL; SELECT 'atguigu' REGEXP 'gu.gu','atguigu' REGEXP '[ab]' FROM DUAL;
常见的逻辑运算符有
# OR 或者是 || # AND 或者是 && # NOT 或者是 ! # NOR(异或) # 注意: 逻辑运算优先级 NOT > AND > XOR > OR # 优先级高的先运算
常见的按位运算符
# 按位与 & # 按位或 | # 按位异或 ^ # 按位取反 ~ # 右移 >> # 左移 <<
重要的事情说三遍:运算带上括号,不然就得看运算符优先级
优先级由低到高排列 | 运算符 |
---|---|
1 | =(赋值运算)、:= |
2 | II、OR |
3 | XOR |
4 | &&、AND |
5 | NOT |
6 | BETWEEN、CASE、WHEN、THEN、ELSE |
7 | =(比较运算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN |
8 | | |
9 | & |
10 | <<、>> |
11 | -(减号)、+ |
12 | *、/、% |
13 | ^ |
14 | -(负号)、〜(位反转) |
15 | ! |