MySQL学习笔记Day8(多表查询中的子查询)

子查询(嵌套查询)

定义很简单,在SQL语句中使用了select嵌套语句就称为子查询。

1.标量子查询

标量子查询的查询结果为一个单一值。

举个例子,查询销售部所有员工的信息。

我们可以把这个要求分成两步,第一步先查询出销售部的部门id,然后再根据部门id去寻找员工的信息。注意这里是两张表格,不要和单表查询搞混了。

查询销售部门id:

select id from dept where name = '销售部'

运行结果为一行一列,也就是标量查询。

根据部门id查找员工信息:

select * from emp where dept_id = 4

通过观察不难发现,其实第一句的结果不就是第二句的“4”嘛!,那么直接把第一句语句替换掉4不就行了?

于是:

select * from emp where dept_id = (select id from dept where name = '销售部')

记得加括号!不然会报错的。

2.列子查询

查询结果为一列的子查询叫做列子查询。

列子查询的操作符比较不一样,主要有以下几种:

 举个例子:查询销售部和市场部的所有员工信息。

和标量子查询一样的步骤,首先是查询两个部门的id,再通过id查询员工信息:

select id from dept where name = '销售部' or name = '市场部'

select * from emp where dept_id in(2,4)

那么这里的in还是可以被替换成上面的语句。由于上面的语句输出的是一列数据,所以叫做列子查询。

select * from emp where dept_id in (select id from dept where name = '销售部' or name = '市场部')

3.行子查询

返回结果是一行的子查询。

举例:查询和“张无忌”的薪资和直属领导相同的员工信息。

拆解:先查询“张无忌”的薪资和直属领导,然后再查询相同的员工信息。

select emp.salary, emp.managerid from emp where name = '张无忌'

查询结果:

这里输出的形式是一行,所以叫做行子查询。

接着查询相同的员工信息:

select * from emp where (salary, managerid) = (12500, 1)

 那么通过替换,就可以实现行子查询了。

select * from emp where (salary, managerid) = (select emp.salary, emp.managerid from emp where name = '张无忌')

4.表子查询

返回的结果是多行多列,就称为表子查询。

举例:查询与“鹿杖客”,“宋远桥”职位和薪资的相同员工信息。

拆解:查询“鹿杖客”,“宋远桥”职位和薪资,然后查询相同员工信息。

select emp.job, emp.salary from emp where name = '鹿杖客' or name = '宋远桥'

查询结果:

因为输出的是多行多列,所以是表子查询。

select * from emp where (job, salary) in (select emp.job, emp.salary from emp where name = '鹿杖客' or name = '宋远桥')

 通过in关键字,就可以查询出多行多列下所有的员工信息了。

因此关键字为in。

至此所有的多表查询操作就介绍完毕了。阶段性成果++!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值