目录
前言
子查询还是比较重要的一个知识点,但是我原先只知道子查询是先基于原表查出一个表,再基于查出的表格继续查询,但很多时候这样套娃没法一次性找出想要的数据。其实还有横向字查询,关联子查询不同的用法,应该会让子查询变得更加灵活一点。
参考b站MySQL编程思想视频
提示:以下是本篇文章正文内容,下面案例可供参考
一、嵌套子查询
出现在某查询语句中的查询语句。
1.标量子查询:查询结果是单个的值(一行一列)
select *
from employee.e
where salary>(select avg(salary)
from employee)
2.行子查询:返回一条记录(一行多列)
select *
from employee.e
where (dept_id,job_id)=(select dept_id,job_id
from employee
....)
#以上用法不是很常用,但是正确
3.表子查询:返回一个临时表(多行多列)
二、in,all,any运算符
select *
from employee.e
where job_id=(select job_id
from employee
where dept_id=2)
#这里的子查询返回的是一列数据,但是=后面一般跟一个标量,所以以上代码错误
select *
from employee.e
where job_id in (select job_id
from employee
where dept_id=2)
#换做in就ok
select *
from employee.e
where salary >all (select salary
from employee
where dept_id=2)
#一对多的情况下,用比较运算符加上all也成立,表示比子查询里的的salary都大,相当于以下代码
select *
from employee.e
where salary > (select max(salary)
from employee
where dept_id=2)
select *
from employee.e
where salary >any (select sala