MySQL_子查询_where后面的标量子查询使用
一 where 或 having 后面
1 标量子查询(单行子查询)
2 列子查询(多行子查询)
3 行子查询(多列多行)
特点
① 子查询放在小括号里
② 子查询一般放在条件的右侧
③ 标量子查询,一般搭配着 单行操作符 使用
列子查询,一般搭配着 多行操作符 使用
IN、ANY / SOME、ALL
1 标量子查询(单行子查询)
案例
1 #谁的工资比张三高 2 3 #第一步:查询张三的工资 4 SELECT salary 5 FROM employees 6 WHERE name = '张三' 7 8 #查询员工信息,满足 工资大于张三的 结果 9 SELECT * 10 FROM employees 11 WHERE salary > ( 12 SELECT salary 13 FROM employees 14 WHERE name = '张三' 15 );
非法使用标量子查询 – 不是一行一列
SELECT MIN(salary),department_id FROM employees GROUP BY department_id HAVING MIN(salary) > ( SELECT salary FROM employees WHERE department_id = 100 );
2 列子查询(多行子查询)
· 返回多行
· 使用多行比较操作符
| 操作符 | 含义 |
| IN / NOT IN | 等于列表中的任意一个 |
| ANY / SOM | 和子查询返回的某一个值比较 |
| ALL | 和子查询返回的所有值比较 |
IN:=
ANY / SOME:如a>any() 相当于 大于最小的即可
ALL:a>all() 相当于 大于最大的
案例
#IN #返回location_id是00000或者12345的部门中的所有员工姓名 #第一步:查询location_id是00000或者12345的部门编号 SELECT DISTINCT department_id FROM departments WHERE location_id IN(00000,12345) #第二步:查询员工姓名,要求部门号是第一步列表中的某一个 SELECT name FROM employees WHERE department_id IN( SELECT DISTINCT department_id FROM departments WHERE location_id IN(00000,12345) );
3 行子查询(结果集:一行多列 或 多列多行)
案例
#查询员工编号最小并且工资最高的员工信息 #第一步; SELECT MIN(employee_id) FROM employees #第二步: SELECT MAX(salary) FROM employees #第三步: SELECT * FROM employees WHERE employee_id = ( SELECT MIN(employee_id) FROM employees )AND salary = ( SELECT MAX(salary) FROM employees ); #或者 SELECT * FROM employees WHERE (employee_id,salary) = ( SELECT MIN(employee_id),MAX(salary) FROM employees )

浙公网安备 33010602011771号