目录
1. 算术运算符

1.加法与减法运算符
一个整数类型的值对整数进行加法和减法操作,结果还是一个整数;一个整数类型的值对浮点数进行加法和减法操作,结果是一个浮点数;加法和减法的优先级相同,进行先加后减操作与进行先减后加操作的结果是一样的;在 Java 中, + 的左右两边如果有字符串,那么表示字符串的拼接。但是在 MySQL 中 + 只表示数值相加。如果遇到非数值类型,先尝试转成数值,如果转失败,就按 0 计算。(补充: MySQL中字符串拼接要使用字符串函数 CONCAT() 实现)
2.乘法与除法运算符
# 计算出员工的年基本工资SELECT employee_id,salary,salary * 12 annual_salFROM employees;
一个数乘以整数 1 和除以整数 1 后仍得原数;一个数乘以浮点数 1 和除以浮点数 1 后变成浮点数,数值与原数相等;一个数除以整数后,不管是否能除尽,结果都为一个浮点数;一个数除以另一个数,除不尽时,结果为一个浮点数,并保留到小数点后 4 位;乘法和除法的优先级相同,进行先乘后除操作与先除后乘操作,得出的结果相同。在数学运算中, 0 不能用作除数,在 MySQL 中,一个数除以 0 为 NULL 。
3.求模(求余)运算符
将t22表中的字段i对3和5进行求模(求余)运算。
# 筛选出 employee_id 是偶数的员工SELECT * FROM employeesWHERE employee_id MOD 2 = 0 ;
可以看到,12对3求模后的结果为0,对5求模后的结果为2
2. 比较运算符
1.等号运算符
如果等号两边的值、字符串或表达式都为字符串,则 MySQL 会按照字符串进行比较,其比较的是每个字符串中字符的ANSI 编码是否相等。如果等号两边的值都是整数,则 MySQL 会按照整数来比较两个值的大小。如果等号两边的值一个是整数,另一个是字符串,则 MySQL 会将字符串转化为数字进行比较。如果等号两边的值、字符串或表达式中有一个为 NULL ,则比较结果为 NULL 。对比: SQL 中赋值符号使用 :=

1 row in set , 2 warnings ( 0.00 sec)# 查询 salary=10000 ,注意在 Java 中比较是 ==SELECT employee_id,salary FROM employees WHERE salary = 10000 ;
2.安全等于运算符
# 查询 commission_pct 等于 0.40SELECT employee_id,commission_pct FROM employees WHERE commission_pct = 0.40 ;SELECT employee_id,commission_pct FROM employees WHERE commission_pct <=> 0.40 ;# 如果把 0.40 改成 NULL 呢?
3.不等于运算符
此外,还有非符号类型的运算符:
4. 空运算符
# 查询 commission_pct 等于 NULL 。比较如下的四种写法SELECT employee_id,commission_pct FROM employees WHERE commission_pct IS NULL ;SELECT employee_id,commission_pct FROM employees WHERE commission_pct <=> NULL ;SELECT employee_id,commission_pct FROM employees WHERE ISNULL(commission_pct);SELECT employee_id,commission_pct FROM employees WHERE commission_pct = NULL ;
SELECT last_name, manager_idFROM employeesWHERE manager_id IS NULL ;
5. 非空运算符
# 查询 commission_pct 不等于 NULLSELECT employee_id,commission_pct FROM employees WHERE commission_pct IS NOT NULL ;SELECT employee_id,commission_pct FROM employees WHERE NOT commission_pct <=> NULL ;SELECT employee_id,commission_pct FROM employees WHERE NOT ISNULL(commission_pct);
6. 最小值运算符
7. 最大值运算符
8. BETWEEN AND运算符
SELECT last_name, salaryFROM employeesWHERE salary BETWEEN 2500 AND 3500 ;
9. IN运算符
SELECT employee_id, last_name, salary, manager_idFROM employeesWHERE manager_id IN ( 100 , 101 , 201 )
11. LIKE运算符
“%” :匹配 0 个或多个字符。“_” :只能匹配一个字符。
SQL语句示例如下
SELECT first_nameFROM employeesWHERE first_name LIKE 'S%' ;
SELECT last_nameFROM employeesWHERE last_name LIKE '_o%' ;
ESCAPE
SELECT job_idFROM jobsWHERE job_id LIKE ‘IT\_%‘;
12. REGEXP运算符
REGEXP运算符在进行匹配时,常用的有下面几种通配符:
( 1 ) ‘^’ 匹配以该字符后面的字符开头的字符串。( 2 ) ‘$’ 匹配以该字符前面的字符结尾的字符串。( 3 ) ‘.’ 匹配任何一个单字符。( 4 ) “[...]” 匹配在方括号内的任何字符。例如, “[abc]” 匹配 “a” 或 “b” 或 “c” 。为了命名字符的范围,使用一个 ‘-’ 。 “[a-z]” 匹配任何字母,而 “[0-9]” 匹配任何数字。( 5 ) ‘*’ 匹配零个或多个在它前面的字符。例如, “x*” 匹配任何数量的 ‘x’ 字符, “[0-9]*” 匹配任何数量的数字,而 “*” 匹配任何数量的任何字符。
SQL语句示例如下:
3. 逻辑运算符
1.逻辑非运算符
SELECT last_name, job_idFROM employeesWHERE job_id NOT IN ( 'IT_PROG' , 'ST_CLERK' , 'SA_REP' );
2.逻辑与运算符
SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary >= 10000AND job_id LIKE '%MAN%' ;
3.逻辑或运算符
# 查询基本薪资不在 9000-12000 之间的员工编号和基本薪资SELECT employee_id,salary FROM employeesWHERE NOT (salary >= 9000 AND salary <= 12000 );SELECT employee_id,salary FROM employeesWHERE salary < 9000 OR salary > 12000 ;SELECT employee_id,salary FROM employeesWHERE salary NOT BETWEEN 9000 AND 12000 ;
SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary >= 10000OR job_id LIKE '%MAN%' ;
注意:OR 可以和 AND 一起使用,但是在使用时要注意两者的优先级,由于 AND 的优先级高于 OR ,因此先对AND 两边的操作数进行操作,再与 OR 中的操作数结合
4.逻辑异或运算符
select last_name,department_id,salaryfrom employeeswhere department_id in ( 10 , 20 ) XOR salary > 8000 ;
4. 位运算符
1.按位与运算符
2. 按位或运算符
3. 按位异或运算符

4. 按位取反运算符
按位取反(~)运算符将给定的值的二进制数逐位进行取反操作,即将1变为0,将0变为1。
5. 按位右移运算符
6. 按位左移运算符
5. 运算符的优先级
拓展:使用正则表达式查询

1. 查询以特定字符或字符串开头的记录
字符‘^’匹配以特定字符或者字符串开头的文本。
mysql> SELECT * FROM fruits WHERE f_name REGEXP '^b';
2. 查询以特定字符或字符串结尾的记录
字符‘$’匹配以特定字符或者字符串结尾的文本。
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'y$' ;
3. 用符号"."来替代字符串中的任意一个字符
字符‘.’匹配任意一个字符。 在fruits表中,查询f_name字段值
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'a.g';
4. 使用"*"和"+"来匹配多个字符
星号‘*’匹配前面的字符任意多次,包括0次。加号‘+’匹配前面的字符至少一次。
mysql> SELECT * FROM fruits WHERE f_name REGEXP '^ba*' ;
mysql> SELECT * FROM fruits WHERE f_name REGEXP '^ba+' ;
5. 匹配指定字符串
正则表达式可以匹配指定字符串,只要这个字符串在查询文本中即可,如要匹配多个字符串,多个字符串之间使用分隔符‘|’隔开。
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'on' ;
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'on|ap' ;
mysql> SELECT * FROM fruits WHERE f_name like 'on' ;Empty set ( 0.00 sec)
6. 匹配指定字符中的任意一个
方括号“[]”指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本。
mysql> SELECT * FROM fruits WHERE f_name REGEXP '[ot]' ;
mysql> SELECT * FROM fruits WHERE s_id REGEXP '[456]' ;
7. 匹配指定字符以外的字符
“[^字符集合]” 匹配不在指定集合中的任何字符。
mysql> SELECT * FROM fruits WHERE f_id REGEXP '[^a-e1-2]' ;
8. 使用{n,}或者{n,m}来指定字符串连续出现的次数
“字符串{n,}”表示至少匹配n次前面的字符;“字符串 {n,m}”表示匹配前面的字符串不少于n次,不多于m次。例如,a{2,}表示字母a连续出现至少2次,也可以大于2次;a{2,4}表示字母a连续出现最少2次,最多不能超过4次。
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'x{2,}' ;
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'ba{1,3}' ;