2_条件查询
语法: select 查询列表 from 表名 where 筛选条件;
分类: 一、按 条件表达式筛选 条件运算符:> < = != <>(不等于)>= <=
二、 逻辑表达式筛选 逻辑运算符: && || ! and or not
and 两个条件都为 true 结果才为 true,反之 false
or 只要有一个条件为true 结果都为true 反之false
not 如果连接的条件本身为false,那么结果为 true,反之false
三、 模糊查询
like
between and
in
is null
1.按条件表达式筛选
案例1:查询工资>12000的员工信息
SELECT * FROM employees WHERE salary>12000;
案例2:查询部门编号不等于90号的员工名和部门编号
SELECT FIRST_NAME,DEPARTMENT_ID FROM employees WHERE DEPARTMENT_ID <> 90;# != 90
2.按逻辑表达式筛选
案例1:查询工资在10000到20000之间的员工名,工资和奖金
SELECT first_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
3.模糊查询
/*
like
between and
in
is null | is not null
*/
1.like
/*
特点:1.一般和通配符搭配使用
通配符:
% 任意多个字符
_ 任意单个字符
*/
案例1:查询 员工名中 包含 字符a 的员工信息
SELECT * FROM employees WHERE first_name LIKE '%a%'; #ABC
案例2:查询员工名中第三个字符为n,第五个字符为l的员工名和工资
SELECT LAST_NAME,SALARY FROM EMPLOYEES WHERE LAST_NAME LIKE '__n_l%';# 不要忘记 LAST_NAME 在哪个范围中查找
案例3:查询员工名中第二个字符为 ‘_’的员工名
SELECT LAST_NAME FROM EMPLOYEES WHERE LAST_NAME LIKE '_\_%' # \ 表示转义
SELECT LAST_NAME FROM EMPLOYEES WHERE LAST_NAME LIKE '_$_%' ESCAPE '$' # ESCAPE '$' 表示转义 意思是 转义 $ 后跟的字符
2.between and
/*
包含临界值
语句简洁
and 两个条件 前后不能 颠倒
*/
案例1:查询员工编号在100到120之间的员工信息
SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID BETWEEN 100 AND 120
3. in 等同于 =
/*
含义:判断 某字段的值 是否 属于 in列表中的 某一项
特点:
1. 简洁
2. in列表的 值类型 必须一致或兼容
3. in列表里不支持 _ % 等通配符
*/
案例1: 查询员工 工种编号是 IT_PROT,AD-VP,AD_PRES,中的一个的员工名和工种编号
SELECT LAST_NAME,JOB_ID FROM EMPLOYEES WHERE JOB_ID='IT_PROT' OR JOB_ID='AD_VP' OR JOB_ID='AD_PRES'
SELECT LAST_NAME,JOB_ID FROM EMPLOYEES WHERE JOB_ID IN('IT_PROT','AD_VP','AD_PRES')
4. is null
/*
= 或 <> 不能用于判断 null值
is null 或 is not null 可以判断null值
*/
案例1:查询没有奖金的员工名和奖金率
SELECT LAST_NAME,commission_pct FROM EMPLOYEES WHERE commission_pct IS NULL;
案例2:查询有奖金的员工名和奖金率
SELECT LAST_NAME,commission_pct FROM EMPLOYEES WHERE commission_pct IS NOT NULL;
4. <=> 安全等于
案例1:查询没有奖金的员工名和奖金率
SELECT LAST_NAME,commission_pct FROM EMPLOYEES WHERE commission_pct <=> NULL;
#### 案例2:查询工资为12000的员工信息
SELECT salary,LAST_NAME FROM EMPLOYEES WHERE SALARY <=>12000;
IS NULL PK <=>
/*
IS NULL ;仅可以判断 null值 可读性高 ,建议使用
<=>:既可以判断null值 也可以判断普通值 ,但可读性较低
*/
5. 练习
1.查询员工号为176的员工姓名和部门号和 年薪
SELECT CONCAT(LAST_NAME,FIRST_NAME)AS 姓名,manager_id AS 部门号,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 176;
2.查询没有奖金,且工资小于18000的salary,lastname
SELECT salary,last_name FROM employees WHERE (commission_pct IS NULL) AND salary < 18000;
3. 查询employees表中 job_ID 不为 ‘IT’ 或者 工资为12000的 员工信息
SELECT * FROM employees WHERE JOB_ID <>'IT' OR salary=12000;
4.查询部门departments表中涉及了哪些位置编号
SELECT DISTINCT LOCATION_ID FROM departments;
5.SELECT *FROM EMPLOYEES 和 SELECT *FROM EMPLOYEES WHERE COMISSION_PCT LIKE ‘%%’ AND LAST_NAME LIKE ‘%%’,结果是否一样?
答 不一样
如果COMISSION_PCT字段的值 有null,则查询结果(行)返回 null值
6.选择工资不在 5000 到 12000 的员工的姓名和工资
SELECT LAST_NAME,salary FROM employees WHERE NOT(salary BETWEEN 5000 AND 12000);
7.选择在 20 或 50 号部门工作的员工姓名和部门号
SELECT LAST_NAME,DEPARTMENT_ID FROM EMPLOYEES WHERE DEPARTMENT_ID IN(20,50);
8.选择公司中没有管理者的员工姓名及 job_id
SELECT LAST_NAME,JOB_ID FROM EMPLOYEES WHERE manager_id IS NULL;
9.选择公司中有奖金的员工姓名,工资和奖金级别
SELECT LAST_NAME,salary,commission_pct FROM EMPLOYEES WHERE commission_pct IS NOT NULL;
10.选择员工姓名的第三个字母是 a 的员工姓名
SELECT LAST_NAME FROM EMPLOYEES WHERE LAST_NAME LIKE '__a%';
11.选择姓名中有字母 a 和 e 的员工姓名
SELECT LAST_NAME FROM EMPLOYEES WHERE LAST_NAME LIKE '%a%' AND LAST_NAME LIKE '%e%';
12.显示出表 employees 表中 first_name 以 'e’结尾的员工信息
SELECT *FROM EMPLOYEES WHERE first_name LIKE '%e';
13.显示出表 employees 部门编号在 80-100 之间 的姓名、职位
SELECT LAST_NAME,JOB_ID,department_ID FROM EMPLOYEES WHERE department_ID BETWEEN 80 AND 100;
14.显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、职位
SELECT LAST_NAME,JOB_ID,manager_id FROM employees WHERE manager_id IN(100,101,110);