条件查询
基本语法:
SELECT 查询列表 FROM 表名 WHERE 筛选条件;
执行顺序:
- FROM 表名; 看看有没有这个表
- WHERE 筛选条件; 看看表中哪个部分满足条件
- SELECT 查询列表; 选择想要查询的信息
筛选条件分类:
-
按条件表达式筛选
条件运算符: > 大于 < 小于 = 等于 != 不等 <> 不等 >= 大于等于 <= 小于等于
-
按逻辑表达式筛选
逻辑运算符: AND 与 OR 或 NOT 非
-
模糊查询
LIKE BETWEEN ... AND... IN IS NULL IS NOT NULL
按条件表达式筛选
案例1:查询 工资>12000 的员工信息
SELECT * FROM employees WHERE salary > 12000;
案例2:查询部门编号不等于 90 号的员工名和部门编号
SELECT last_name, department_id FROM employees WHERE department_id <> 90;
按逻辑表达式筛选
案例1:查询工资在 10000 到 20000 之间的员工名、工资及奖金
SELECT last_name, salary, commission_pct FROM employees WHERE salary >= 10000 AND salary <= 20000;
案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT * FROM employees WHERE NOT(department_id >= 90 AND department_id <=110) OR salary >= 15000;
模糊查询
LIKE
BETWEEN ... AND ...
IN
IS NULL
IS NOT NULL
LIKE 关键字
一般和通配符搭配使用:
% 任意多个字符,包含0个字符
_ 任意单个字符
案例1:查询员工名中包含字符 a 的员工信息
SELECT * FROM employees WHERE last_name LIKE '%a%';
案例2:查询员工名中第三个字符为 e ,第五个字符为 a 的信息
SELECT * FROM employees WHERE last_name LIKE '__e_a'
案例3:查询员工名中第二个字符为_的员工名
SELECT * FROM employees WHERE last_name LIKE '_\_%'
# 或者
SELECT * FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';
# 这里的 ESCAPE 显示地说明哪个是转义字符
BEETWEEN AND 关键字
使用 BEETWEEN AND 提高代码的简洁度
包含两个临界值
两个临界值的顺序不要调换
案例一:查询员工编号在 100 到 120 之间的员工信息
SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;
IN关键字
使用 IN 比使用 OR 提高了语句的简洁度
IN列表的值类型必须一致或兼容
不支持模糊查询,因为 IN 是用等于来判断的。
案例一:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES 的其中一个的员工名和工种
SELECT last_name, job_id FROM employees WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES');
IS NULL & IS NOT NULL
= 号或者 <> 号不能判断 null 值,所以需要 IS NULL 和 IS NOT NULL
案例一:查询没有奖金的员工名和奖金率
SELECT last_name, commission_pct FROM employees WHERE commission_pct IS NULL;
案例二:查询有奖金的员工的员工名和奖金率
SELECT last_name, commission_pct FROM employees WHERE commission_pct IS NOT NULL;
补充
- 安全等于,可以判断 NULL 值,也可以判断普通值。
但是判断 NULL 值的时候还是用 IS NULL 或 IS NOT NULL 关键字吧,可读性高SELECT last_name, commission_pct FROM employees WHERE commission_pct <=> NULL; SELECT last_name, commission_pct FROM employees WHERE commission_pct <=> 0.2;
测试题
一:查询没有奖金且工资小于 180000 的 salary,last_name
SELECT last_name, salary FROM employees WHERE commission_pct IS NULL AND salary < 180000;
二、查询 employees 表中 job_id 不为 ‘IT’ 或者工资为 120000 的员工信息
SELECT * FROM employees WHERE job_id <> 'IT' OR salary = 120000;
三、查看 departments 表的结构
desc departments
四、查询 departments 表中涉及到了哪些位置编号
SELECT DISTINCT location_id FROM departments;
五、经典面试题
SELECT * FROM employees;
和
SELECT * FROM employees WHERE commission_pct LIKE '%%' AND last_name LIKE '%%';
的结果是否一样?并说明原因
不一样!!
因为判断的字段可能存在null值!!