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

查询结果

mysql 先按条件查询在左连接 mysql条件查找_逻辑表达式

案例2:查询部门编号不等于90的员工名和部门编号

查询代码

SELECT 
		first_name,last_name,department_id
FROM 
		employees 
WHERE 
		department_id <> 90

查询结果

mysql 先按条件查询在左连接 mysql条件查找_条件查询_02

按逻辑表达式筛选

本质上就是连接条件表达式
&&和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

查询结果

mysql 先按条件查询在左连接 mysql条件查找_IT_03

案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息

查询代码

SELECT
			*
FROM
			employees
WHERE
			salary>15000 OR !(department_id>90 AND department_id<110);

查询结果

mysql 先按条件查询在左连接 mysql条件查找_逻辑表达式_04

模糊查询 like, between and ,in ,is null

模糊,顾名思义就是不清晰,这里指的是给出的条件是不清晰的比如包含字样

特点
一般和通配符搭配使用
% 任意多个字符,包含0个字符
_ 任意单个字符

like关键字

案例1:查询员工名中包含字符a的员工信息

查询代码

SELECT
			*
FROM
			employees
WHERE
			last_name LIKE '%a%';

查询结果

mysql 先按条件查询在左连接 mysql条件查找_条件查询_05

案例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 '*';

查询结果

mysql 先按条件查询在左连接 mysql条件查找_mysql 先按条件查询在左连接_06

between and 关键字

注意点:
1.使用 between and 可以提高语句的简洁度
2.包含临界值

案例1:查询员工编号在100到120之间的员工信息

查询代码

SELECT
			*
FROM
			employees
WHERE
			employee_id BETWEEN 100 AND 120;

查询结果

mysql 先按条件查询在左连接 mysql条件查找_mysql 先按条件查询在左连接_07

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';

查询结果

mysql 先按条件查询在左连接 mysql条件查找_mysql_08

is null 关键字

注意:= 或 <> 不能用于判断null值
is null 或者 is not null 可以判断null值

案例1:查询没有奖金的员工和奖金率

查询代码

SELECT
			last_name,commission_pct
FROM
			employees
WHERE
			commission_pct IS NULL;

查询结果

mysql 先按条件查询在左连接 mysql条件查找_条件查询_09

补充 安全等于 <=>

注意: 等于的情况下,可以用来判断null 或者数据的等价关系=
但是

案例1:查询没有奖金的员工名和奖金率

查询代码

SELECT
			last_name,commission_pct
FROM
			employees
WHERE
			commission_pct <=> NULL;

案例2:查询工资为12000的员工信息

查询代码

SELECT
			*
FROM
			employees
WHERE
			salary <=> 12000;

查询结果

mysql 先按条件查询在左连接 mysql条件查找_条件查询_10

测试

1.查询员工号为176的员工的姓名和部门号和年薪

查询代码

SELECT
			first_name,last_name,department_id,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
			employees

查询结果

mysql 先按条件查询在左连接 mysql条件查找_条件查询_11

2.查询没有奖金,且工资小于18000的salary,last_name

查询代码

SELECT 
			last_name,salary
FROM
			employees
WHERE
			commission_pct IS NULL AND salary < 18000

查询结果

mysql 先按条件查询在左连接 mysql条件查找_条件查询_12

3.查询employees表中,job_id不为‘IT’ 或者工资为12000的员工信息

查询代码

SELECT
			*
FROM
			employees
WHERE
			job_id <> 'IT' OR salary = 12000;

查询结果

mysql 先按条件查询在左连接 mysql条件查找_IT_13

经典面试题

试问:select *from employees; 和 select *from employees where commission_pct like ‘%%’ and last_name like ‘%%’; 结果是否一样?请说明理由
不一样,如果判断的字段有null 的值