#二*按照逻辑表达式筛选 逻辑运算符 && 、 || 、 ! 、 and 、 or 、 not
#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 department_id < 90
OR department_id > 110
OR salary > 15000 ;
#也可以 NOT(department_id >= 90 AND department_id <=110) OR salary >15000;
模糊查询
#2-模糊查询 like 、 between and 、in 、 is null /is not null
#一-查询员工名中包含字符 a 的员工信息
#**like**通常和通配符搭配 ((通配符)% 任意多个字符,包含0 个 / (通配符) _ 任意单个字符)
SELECT
*
FROM
employees
WHERE last_name LIKE '%a%' ;
#(%)百分号代表通配符
**#二-查询员工名中第三个字符为 n ,第五个字符为 l 的员工名和工资**
SELECT
last_name,
salary
FROM
employees
WHERE last_name LIKE '__n_l%' ;
**#三-查询员工命中第二个字符为_的员工名**
SELECT
last_name
FROM
employees
WHERE last_name LIKE '_s_%' ESCAPE 's' ;
/* 包含特殊符号,使用转义 LIKE '_\_% 或者 LIKE '_s_%'ESCAPE 's' (' s' 任意指定(字母,符号等)) ESCAPE 关键字,说明前面 s 是转义字符 */
**#四-between and**
#案例 查询员工编号100-120之间的员工信息
SELECT * FROM employees WHERE employee_id >= 100 AND employee_id<= 120;
/*
1*使用 between and 可以提升语言简洁度
2*包含临界值
3*两个临界值顺序不能调换
4*上下两种表述,完全等价
*/
SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;
# 五- in 判断某字段的值是否属于 in 列表中的 某一项
# #案例: 查询员工的工种编号是 IT_PROG 、AD_VP、 AD_PRES 中的一个 的 员工名和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE job_id = 'IT_PROG'
OR job_id = 'AD_VP'
OR job_id = 'AD_PRES' ;
/*当查询量少,这种写法还可行,多了就比较麻烦. 用 in简化
特点:
1-使用in 比使用多个 or 提高语句简洁渡
2-in 列表中值类型必须一致或者兼容 123 / '123'
3- in 就像上面案例中的 = 等号 (=比较具体)( job_id = 'AD_PRES') ,因此不能用like和通配符代替 AD_%
*/
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
同样 不能使用is代替等号 select..... where salary is 12000
*/
#案例 :查询没有奖金的员工名和奖金率
# select last_name,commission_pct from employees where commission_pct = null ;
# 由于等号不能判断null值,因此使用 is 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值 可读性查,, 较少使用
#案例 :查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE commission_pct <=> NULL ;
#select..... where salary <=> 12000
#
#练习 1- 查询员工号为90 的员工姓名和部门号和年薪
SELECT
last_name,
department_id,
salary * 12 * (1+ commission_pct) AS 年薪
FROM
employees ;
#由于有奖金率为null的出现,则对其进行处理 # ifnull()如果是null,显示为0
SELECT
last_name,
department_id,
salary * 12 * (1+ IFNULL(commission_pct, 0)) AS 年薪
FROM
employees
WHERE department_id = 90 ;
#练习2-查询没有奖金,且工资小于18000的 salary 和last_name
SELECT
salary,
last_name
FROM
employees
WHERE commission_pct IS NULL
AND salary < 18000 ;
#练习3-查询employees表中 job_id不为 'IT'或者 工资为1200的员工信息
SELECT
*
FROM
employees
WHERE job_id <>'IT' #WHERE NOT job_id = 'IT'
OR salary = 12000 ;
#练习4- 查看部门departments表结构
DESC departments;
#练习 5- 查询部门departments表中涉及到了哪些位置编号
SELECT DISTINCT location_id FROM departments;
#因为有重复项,因此使用 DISTINCT 关键字去重
#
#练习6-select +from employees 和 select *from employees where commission_ pct like '%%' and last_ name like '%%’结果是否一样?
/*
不一样, 假如判断的字段中存在null值,判断不一样,没有null,判断一样
将上面 表中所有字段都加上 and 改为 or 结果一样
*/