DQL语言学习
进阶2:条件查询
语法:
select
查询列表
from
表明
where
筛选条件;
分类:
一、按条件表达式筛选
条件运算符:>,<,=,<>(不等于),>=,<=
二、按逻辑表达式筛选
逻辑运算符
&& | || | ! |
---|---|---|
and | or | not |
&&/and:两个条件都为ture,结果为ture。反之为false。
||/or:只要有一方为ture,结果为ture。
!/not:如果连接的条件为false:结果为ture,反之为false。
三、模糊查询
like
between and
in
is null/is not null
#一、按条件表达式筛选
#案例1、查询工资大于12000的员工信息
SELECT
salary
FROM
employees
WHERE
salary > 12000;
#案例2、查询部门编号不等于90好的员工名和部门编号
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id <> 90;
#二、按逻辑表达式筛选
#案例一、查询工资在10000到20000之间的员工名、工资及奖金。
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary >= 10000
AND
salary <= 20000;
#案例二、查询部门编号不是在90到110之间,或者员工工资高于15000的员工信息
SELECT
*
FROM
employees
WHERE
NOT(department_id >= 90 AND department_id <= 110) OR salary > 15000;
#三、模糊查询
#1、like
/*
特点:
①一般和通配符搭配使用
通配符:
% 任意多个字符
如果对""进行模糊查询可以在在前面添加“\”转义
SQL语句支持使用 last_name LIKE 'KaTeX parse error: Expected group after '_' at position 1: _̲%' ESCAPE '’;格式语句转义。
*/
#案例一、查询员工中包含字符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 '_\_%';#使用“\”转义
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$';#escape'$'表示转义字符
#2、between and
/*
注意事项:
①使用between and
可以提升语句简洁度
②between and
完全等价于>= <=,包含临界值
③前后临界值不要颠倒
*/
#案例一、查询员工编号在100到120之间的员工信息
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120;
#3、in
/*
含义:判断某字段的值是否属于in列表中的某一项
①使用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');
#错误
IN
不支持通配符
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN ('IT_PROG','AD_%');
#4、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;
#补充:安全等于 <=>
#案例一:查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=> NULL;
#案例二、查询工资为12000的员工信息
SELECT
*
FROM
employees
WHERE
salary <=> 12000;
#比较is null
和<=>
#is null
:仅仅可以判断null
值,但可读性强,推荐使用
#<=>
:null
值和普通数值皆可判断,可读性低
#测试1:查询工资大于12000的员工姓名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
salary > 12000;
#测试2、:查询员工号为176的员工的姓名和部门号和年薪
SELECT
CONCAT(last_name,first_name),
department_id,
salary * 12 * (1 + IFNULL(commission_pct,0)) AS 年薪
FROM
employees
WHERE
employee_id LIKE 176;
#测试3、选择工资不在5000到12000的员工的姓名和工资
SELECT
CONCAT(last_name,first_name),
salary
FROM
employees
WHERE
NOT(salary BETWEEN 5000 AND 12000);
NOT(salary >= 5000 AND salary <= 12000);
#测试4、选择在20到50号部门工作的员工姓名和部门号
SELECT
CONCAT(last_name,first_name),
department_id
FROM
employees
WHERE
department_id BETWEEN 20 AND 50;
#测试5、选择公司中有奖金的员工的姓名工资和部门号
SELECT
CONCAT(last_name,first_name),
salary,
department_id
FROM
employees
WHERE
commission_pct IS NOT NULL;
#测试6、选择员工姓名第三个字母是a的员工姓名
SELECT
CONCAT(last_name,first_name)
FROM
employees
WHERE
last_name LIKE '__a%';
#测试7、选择姓名中有a和e的员工姓名
SELECT
CONCAT(last_name,first_name)
FROM
employees
WHERE
CONCAT(last_name,first_name) LIKE '%a%e%';
#测试8、显示表中的manager_id 是100,101,110的员工姓名职位
SELECT
CONCAT(last_name,first_name),
salary
FROM
employees
WHERE
manager_id IN (100,101,1110);