MySQL之多表查询—表子查询

一、引言

上一篇博客学习了行子查询。(看弹幕:同一张表用or,不同张表用union)


下面接着学习子查询当中的最后一种——表子查询。

  • 表子查询

1、概念

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

2、常用的操作符

IN

3、注意

这个表子查询经常出现在 FROM 之后,

把表子查询返回的结果作为一张临时表,再和其它表进行联查操作。

接下来通过两个需求演示一下基本的用法。

二、操作

打开图形可视化工具 DataGrip 进行操作。

(0)员工表 emp 、部门表 dept

emp表

dept 表

(1)查询与员工 “ 必胜客 ”," 宋远桥 ”的职位和薪资相同的员工信息
1、分析(拆解需求)

先得去查询必胜客和宋远桥这两个员工的职位和薪资,再查询符合需求的员工信息

第一步

SELECT job,salary FROM emp WHERE name IN('必胜客','宋远桥'); /*这里用 OR 也行*/

第二步

2、实操

解决方法:我们使用 IN 

意思就是:

用 IN 就是在返回的这个多行多列表格当中选某一行,只要查询 SELECT 满足其中一行就查询出来

SELECT * FROM emp WHERE (job,salary) IN (SELECT job,salary FROM emp WHERE name IN('必胜客','宋远桥') );

(2)查询入职日期是 “ 2006-01-01 ” 之后的员工信息,及其部门信息
1、分析(拆解需求)

先查询出在指定入职时间之后的员工信息,再去查询这部分员工其对应的部门信息

第一步

SELECT * FROM emp WHERE entrydate > '2006-01-01';

2、实操

我们要把第一张查到的表作为一张 "临时表",去这里面查询对应的部门信息。

所以才有前面的:表子查询通常在 FROM 之后 

注意:这里还要用到左连接查询(因为防止有些字段为 NULL ,也要给他查询出来)

/* ON 后面接连接的条件 */
SELECT e.*,d.* FROM (SELECT * FROM emp WHERE entrydate > '2006-01-01') AS e LEFT JOIN dept AS d ON e.dept_id = d.id;

这上面的案例就用到了表子查询,它会把返回的表("临时表")作为一张表去联合其它表做一个联查操作表子查询返回的结果是多行多列的数据


这篇博客的内容就结束了。

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁岁岁平安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值