MySQL条件查询
- 进阶二:条件查询
- 按条件表达式筛选
- 案例1:查询工资>12000的员工信息
- 案例2:查询部门编号不等于90的员工名和部门编号
- 按逻辑表达式筛选
- 案例1:查询工资在10000在20000之间的员工名,工资以及奖金
- 案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
- 模糊查询 like, between and ,in ,is null
- like关键字
- 案例1:查询员工名中包含字符a的员工信息
- 案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
- 查询员工名中第二个字符为_的员工名
- between and 关键字
- 案例1:查询员工编号在100到120之间的员工信息
- in 关键字
- 案例1:查询员工的工种编号是IT_PROG,AD_VP中一个员工名和工种编号
- is null 关键字
- 案例1:查询没有奖金的员工和奖金率
- 补充 安全等于 <=>
- 案例1:查询没有奖金的员工名和奖金率
- 案例2:查询工资为12000的员工信息
- 测试
- 1.查询员工号为176的员工的姓名和部门号和年薪
- 2.查询没有奖金,且工资小于18000的salary,last_name
- 3.查询employees表中,job_id不为‘IT’ 或者工资为12000的员工信息
- 经典面试题
我们已经学习完基础查询语句,接下来我们涉足条件语句的查询,跟上我的步伐!
DQL语言的学习
基础查询
条件查询
排序查询
常见函数
分组函数
分组查询
连接查询
子查询
分页查询
联合查询
进阶二:条件查询
语法
SELECT 查询列表 FROM 表名 WHERE 筛选条件;
分类
1.按条件表达式筛选:>< = <> >= <=
2.按逻辑表达式筛选:& | && || and or not
3.模糊查询: like, between and ,in ,is null
按条件表达式筛选
案例1:查询工资>12000的员工信息
查询代码
SELECT
*
FROM
employees
WHERE
salary>12000
查询结果
案例2:查询部门编号不等于90的员工名和部门编号
查询代码
SELECT
first_name,last_name,department_id
FROM
employees
WHERE
department_id <> 90
查询结果
按逻辑表达式筛选
本质上就是连接条件表达式
&&和and: 两个条件都为true,结果为true,反之为false
|| 和 or: 只要其中一个条件为true,结果为true,反之为false
! 和 not 如果连接的条件本身为false,结果为true,反之为false
案例1:查询工资在10000在20000之间的员工名,工资以及奖金
查询代码
SELECT
first_name,last_name,salary,commission_pct
FROM
employees
WHERE
salary>10000 AND salary<20000
查询结果
案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
查询代码
SELECT
*
FROM
employees
WHERE
salary>15000 OR !(department_id>90 AND department_id<110);
查询结果
模糊查询 like, between and ,in ,is null
模糊,顾名思义就是不清晰,这里指的是给出的条件是不清晰的比如包含字样
特点
一般和通配符搭配使用
% 任意多个字符,包含0个字符
_ 任意单个字符
like关键字
案例1:查询员工名中包含字符a的员工信息
查询代码
SELECT
*
FROM
employees
WHERE
last_name LIKE '%a%';
查询结果
案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
查询代码
SELECT
last_name,salary
FROM
employees
WHERE
last_name LIKE '__e_a%';
查询结果 :无此条件数据
查询员工名中第二个字符为_的员工名
注意:表示通配符的方法,通配符前面加上\为默认,也可以自己自定义转义字符,示例如下ESCAPE '*'
特别注意需要加上单引号
查询代码
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_\_%';
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_*_%' ESCAPE '*';
查询结果
between and 关键字
注意点:
1.使用 between and 可以提高语句的简洁度
2.包含临界值
案例1:查询员工编号在100到120之间的员工信息
查询代码
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120;
查询结果
in 关键字
含义: 判断某字段的值是否属于in列表中的某一项
特点:
1.使用in提高语句简洁度
2.in列表的值类型必须一致或兼容 ‘123’ 123
3.不能使用通配符
案例1:查询员工的工种编号是IT_PROG,AD_VP中一个员工名和工种编号
查询代码
SELECT
last_name,job_id
FROM
employees
WHERE
job_id IN('IT_PROG','AD_VP');
SELECT
last_name,job_id
FROM
employees
WHERE
job_id ='IT_PROG' OR job_id ='AD_VP';
查询结果
is null 关键字
注意:= 或 <> 不能用于判断null值
is null 或者 is not null 可以判断null值
案例1:查询没有奖金的员工和奖金率
查询代码
SELECT
last_name,commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
查询结果
补充 安全等于 <=>
注意: 等于的情况下,可以用来判断null 或者数据的等价关系=
但是
案例1:查询没有奖金的员工名和奖金率
查询代码
SELECT
last_name,commission_pct
FROM
employees
WHERE
commission_pct <=> NULL;
案例2:查询工资为12000的员工信息
查询代码
SELECT
*
FROM
employees
WHERE
salary <=> 12000;
查询结果
测试
1.查询员工号为176的员工的姓名和部门号和年薪
查询代码
SELECT
first_name,last_name,department_id,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
employees
查询结果
2.查询没有奖金,且工资小于18000的salary,last_name
查询代码
SELECT
last_name,salary
FROM
employees
WHERE
commission_pct IS NULL AND salary < 18000
查询结果
3.查询employees表中,job_id不为‘IT’ 或者工资为12000的员工信息
查询代码
SELECT
*
FROM
employees
WHERE
job_id <> 'IT' OR salary = 12000;
查询结果
经典面试题
试问:select *from employees; 和 select *from employees where commission_pct like ‘%%’ and last_name like ‘%%’; 结果是否一样?请说明理由
不一样,如果判断的字段有null 的值