SQL学习 — DQL — 条件查询
DQL语言学习
数据查询语言(Data Query Language),关键字 select
- 使用DQL前,先输入
USE 库名;
2.条件查询
-
语法:
select `查询列表` from 表名 where 筛选条件;
-
分类:
/* 分类: 一、按条件表达式筛选 条件运算符:> < = !=(<>) >= <= 二、按逻辑表达式筛选 作用:用于连接条件表达式 逻辑运算符:&&-and ||-or !-not 三、模糊查询 like between and in is null */
2.1 条件表达式筛选
# 一、按条件表达式筛选
# 案例1:查询工资>12000的员工信息
SELECT * FROM employees
WHERE salary > 12000;
# 案例2:查询部门编号不等于90号的员工名和部门编号
SELECT
CONCAT(last_name,first_name) AS "员工名",
department_id
FROM
employees
WHERE
department_id <> 90;
2.2 逻辑表达式筛选
# 二、按逻辑表达式筛选
# 案例1:查询工资在10000到20000之间的员工名、工资以及奖金
SELECT
CONCAT(last_name,first_name) AS "员工名",
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
# not(department_id >= 90 AND department_id <= 110)
OR
salary > 15000;
2.3 模糊查询
# 三、模糊查询总结
/*
like特点:
1. 一般和通配符搭配使用
通配符: % 任意多个字符,包含0个字符
_ 任意单个字符
between and注意事项:
1.使用between and 可以提高语句的简洁度
2.包含临界值
3.两个临界值不能颠倒
in含义:判断某字段的值是否属于in列表中的某一项
in特点:
1.使用in提高语句简洁度
2.in列表中的值类型必须一致或兼容
3.in不支持模糊查询,必须实打实的内容
is null注意事项:
1. != 或 <> 不能用于判断null值
2. is null 或 is not null可以判断null值
*/
# like案例
# like案例1:查询员工名中包含字符a的员工信息
SELECT * FROM employees
WHERE last_name LIKE '%a%';
# like案例2:查询员工名中第三个字符为n,第五个字符为l的员工名和工资
SELECT
last_name, salary
FROM
employees
WHERE
last_name LIKE '__n_l%';
# like案例3:查询员工名中第二字符为_的员工名
/*
需要用到转义的知识,有两种方式
方式一常规转义字符\:\_
方式二MySQL转义语法:'_$_%' ESCAPE '$' ($可任意个字符)
*/
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$';
# between and案例
# between and案例1:查询员工编号在100到120之间的员工信息
SELECT * FROM employees
WHERE employee_id BETWEEN 100 AND 120;
# in案例
# in案例1:查阅员工的工种编号是 IT_PROT、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT
last_name, job_id
FROM
employees
WHERE
job_id IN('IT_PROT', 'AD_VP', 'AD_PRES');
# is null案例
# is null案例1:查询没有奖金的员工名和奖金率
SELECT
last_name, commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
2.4 安全等于
# 安全等于 <=>
# <=>案例1:查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=> NULL;
# <=>案例2:查询工资为12000的员工信息
SELECT *
FROM employees
WHERE salary <=> 12000;
# is null pk 安全等于<=>
/*
is null:仅仅可以判断null值,可读性强,建议使用
<=> : 既可以判断Null值,又可以判断普通的数值,可读性差
*/
2.5 条件查询练习
# 将以下内容复制到sql图像化客户端界面进行思考
1. 查询工资大于 12000 的员工姓名和工资
2. 查询员工号为 176 的员工的姓名和部门号,奖金率和年薪
3. 选择工资不在 5000 到 12000 的员工的姓名和工资
4. 选择在 20 或 50 号部门工作的员工姓名和部门号
5. 选择公司中没有管理者的员工姓名及 job_id
6. 选择公司中有奖金的员工姓名,工资和奖金级别
7. 选择员工姓名的第三个字母是 a 的员工姓名
8. 选择姓名中有字母 a 和 e 的员工姓名
9. 显示出表 employees 表中 first_name 以 'e'结尾的员工信息
10. 显示出表 employees 部门编号在 80-100 之间 的姓名、职位
11. 显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、职位
12. 查询没有奖金,且工资不小于18000的员工名和工资
13. 查询employees表中,job_id不为'IT'或者工资为12000的员工信息
14. 查询部门departments表中涉及到了哪些位置编号
15. 经典面试题:试问
SELECT * FROM employees;
和
SELECT * FROM employees
WHERE commission_pct LIKE '%%' AND last_name LIKE '%%';
结果是否一样?并说明原因。
--------------------------------------------------------------
SELECT * FROM employees;
那么和
SELECT * FROM employees
WHERE commission_pct LIKE '%%' OR last_name LIKE '%%';
相比,结果是否一样?
2.6 条件查询练习答案
文件名:02SQL_conditionquery.sql
下载地址:链接:https://pan.baidu.com/s/1_slO9LaDORqLKIQtbLs3Ww?pwd=ccjz
提取码:ccjz