进阶二:条件查询
I 语法:
SELECT
查询列表 #第三步执行
FROM
表名 #第一步执行
WHERE
筛选条件; #第二步执行
II 分类:
一、按照条件表达式筛选
条件表达式:
>
<
=
!=
<=
>=
二、按照逻辑表达式筛选
逻辑运算符:
&&
||
!
and
or
not
三、模糊查询
like
between and
in
is null
USE myemployees;
一、按照条件表达式筛选
案例一:查询工资》12000的员工信息
SELECT
*
FROM
employees
WHERE
salary>12000;
案例二:查询部门编号不等于90号的员工名和部门编号
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id<>90;
二、按照逻辑表达式查询
案例一:查询工资z在10000到20000之间的员工名称、工资以及奖金
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary >=10000 AND salary <= 20000;
案例二:查询部门编号不是在90到110之间的,或者工资高于15000的员工信息
SELECT
*
FROM
employees
WHERE
#department_id <90 or department_id >110 or salary>15000; #第一种表达
NOT(department_id >90 AND department_id <1110 ) OR salary >15000; #第二种表达
三、模糊查询
LIKE
BETWEEN AND
IN
IS NULL
IS NOT NULL
/*
like一般和通配符一起使用;
通配符:
% 任意多个字符,包含0个字符
_ 任意单个字符
*/
1.like
案例一:查询员工姓名中包含字符a的员工信息
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 '_$_%' ESCAPE '$'; #定义转义字符
2. between and
/*
1.提高语句简洁度
2.包含临界值
3.两个临界值不可以颠倒
*/
案例一:查询员工编号在100-120之间的员工信息
常规表达
SELECT
*
FROM
employees
WHERE
employee_id >=100 AND employee_id <=120;
between and 的等价表达
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120; #包含临界值 【 】
3.in
/*
含义:使用in判断字段的值是否属于in列表的某一项
1.使用in语句提高语句简洁度
2.in列表的值类型必须统一或兼容
*/
案例:查询员工的公众编号是 IT_PROG、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表达
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN('IT_PROG','AD_VP','AD_PRES');
4. is null
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL
安全等于 <=>
案例1:查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=> NULL;
案例2:查询工资为12000的员工信息
SELECT
*
FROM
employees
WHERE
salary <=> 12000;
is null 与 <=>
IS NULL 仅仅可以判断NULL值,可读性较高,建议使用
<=> 既可以判断NULL值,又可以判断普通的数值,但是可读性较差
四. 经典面试题
试问
SELECT * FROM employees;
与
SELECT * FROM employees WHERE commission_pct LIKE '%%' AND last_name LIKE '%%';
结果是否一样,说明理由。
答:
不一样。如果判断的字段有NULL值,就不一样。
如果将AND换成OR,则结果是一样的。