一.运算符(括号内的先运算)

1.算术运算符

(1)与字符运算会把字符当作0
(2)除数为0,结果为NULL
(3)取余结果的正负与%前面的那个数一样

运算符 含义
+
-
*
/或DIV
%或MOD 取余

2.比较运算符

(1)结果为真返回1,为假返回0,否则返回NULL
(2)可用于有字符串的比较
(3)有NULL出现,结果就为NULL
(4)安全等于可用于NULL的运算,其他与等于一样;当两边操作数都是NULL返回1,否则返回0

运算符 含义
= 等于
<=> 安全等于
<>或!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
运算符 名称 解释
IS NULL 为空运算符 判断值,字符串或表达式是否为空
IS NOTNULL 不为空运算符 判断值,字符串或表达式是否不为空
LEAST 最小值运算符 在多个值中返回最小值
GREATEST 最大值运算符 在多个值中返回最大值
BETWEEN…AND… 两值之间的运算符 判断一个值是否在两个值之间
ISNULL 为空运算符 判断一个值,字符串或表达式是否为空
IN 属于运算符 判断一个值是否为列表中的任意一个值
NOT IN 不属于运算符 判断一个值是否不是列表中的任意一个值
LIKE 模糊匹配运算符 判断一个值是否符合模糊匹配规则
REGEXP 正则表达式运算符 判断一个值是否符合正则表达式规则
RLIKE 正则表达式运算符 判断一个值是否符合正则表达式规则
  1. SELECT B FROM TABLE WHERE A IS NULL;
  2. SELECT B FROM TABLE WHERE A IS NOT NULL;
  3. SELECT D FROM TABLE WHERE C LEAST(A,B);
  4. SELECT D FROM TABLE WHERE C GREATEST(A,B);
  5. SELECT D FROM TABLE WHERE C BETWEEN A AND B;
  6. SELECT B FROM TABLE WHERE ISNULL(A);#相当于函数
  7. SELECT D FROM TABLE WHERE C IN(A,B);
  8. SELECT D FROM TABLE WHERE C NOT IN(A,B);
  9. SELECT C FROM TABLE WHERE A LIKE B;
  10. SELECT C FROM TABLE WHERE A REGEXP B;
  11. SELECT C FROM TABLE WHERE A RLIKE B;
  12. #模糊匹配,%代表匹配任意字符 _一个下划线代表一个不确定的字符
  13. SELECT last_name FROM employees WHERE last_name LIKE 'a';#查询带a
  14. SELECT last_name FROM employees WHERE last_name LIKE '%a%';#查询只要有a
  15. SELECT last_name FROM employees WHERE last_name LIKE 'a%';查询a开头的
  16. SELECT last_name FROM employees WHERE last_name LIKE '_a%';查询第二个字是a的,一个_是一个占位符

3.转义字符

(1)+符合
(2)用关键字声明:ESCAPE 字符(中间有空格)

  1. SELECT last_name FROM employees WHERE last_name LIKE '&_a%' ESCAPE &;#查询已_开头的

4.逻辑运算符

(1)对NULL进行逻辑运算时,结果为不确定。一般数据库表属性都会设为NOT NULL,来简化对NULL的条件判断

运算符 含义
!或NOT 逻辑非
AND或&& 逻辑与
OR或|| 逻辑或
XOR 逻辑异或

5.位运算符

运算符 作用
& 按位与
按位或
^ 按位异或
~ 按位取反
>> 按位右移
<< 按位左移

6.运算符得优先级

(1)有括号先算括号内
(2)同一优先级从左往右执行
image.png

7.练习

  1. #选择工资不在5000-12000的员工的姓名和工资
  2. SELECT employ_namesalary FROM employees WHERE salary NOT BETWEEN 5000 AND 12000;
  3. SELECT employ_namesalary FROM employees WHERE salary < 5000 OR salary > 12000;
  4. #选择在20或50号部门工作的员工的姓名和部门号
  5. SELECT employ_namedepartment_id FROM employees WHERE department_id=20 OR department_id=50;
  6. SELECT employ_namedepartment_id FROM employees WHERE department_id IN (20,50);
  7. #选择公司中没有管理者的员工姓名及job_id
  8. SELECT employ_namejob_id FROM employees WHERE manger_id IS NULL;
  9. SELECT employ_namejob_id FROM employees WHERE manger_id <=> NULL;--安全等于
  10. #选择公司中有奖金的员工姓名,工资及奖金级别
  11. SELECT employ_namesalary,grade_price FROM employees WHERE grade_price IS NOT NULL;
  12. SELECT employ_namesalary,grade_price FROM employees WHERE NOT grade_price <=> NULL;
  13. #选择员工姓名的第三个字母是a的员工姓名
  14. SELECT employ_name FROM employees WHERE employ_name LIKE '__a%';
  15. #选择姓名有字母a和k的员工姓名
  16. SELECT employ_name FROM employees WHERE employ_name LIKE '%a%k%' OR employ_name LIKE '%k%a%';
  17. SELECT employ_name FROM employees WHERE employ_name LIKE '%a%' AND employ_name LIKE '%k%';
  18. #显示出表employees表中first_name以e结尾的员工信息
  19. SELECT employ_information FROM employees WHERE first_name LIKE '%e';
  20. #显示出表employees部门编号在80-100之间的姓名,工资
  21. SELECT employ_name,salary FROM employees WHERE department_id>=80 AND department_id<=100;
  22. SELECT employ_name,salary FROM employees WHERE department_id BETWEEN 80 AND 100;
  23. #显示出表employees的manger_id是100,101,110的员工姓名,工资,管理者id
  24. SELECT employ_name,salary,root_id FROM employees WHERE manger_id=100 OR manger_id=101 OR manger_id=110;
  25. SELECT employ_name,salary,root_id FROM employees WHERE manger_id IN (100,101,110);