【MySQL】MySQL基础03 — SQL学习 — DQL — 条件查询

发布时间 2023-04-04 21:58:45作者: 陈景中

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