Mysql数据库基本操作(七)多表查询-子查询,表自身关联查询

多表查询还有前面的两块内容——内连接查询,外连接查询,希望看到这篇博客的朋友先去看看我的"Mysql数据库"专栏中Mysql数据库基本操作(六)多表查询-内连接,外连接这一章博客,看完再来看这一章的内容,相信即使你已经理解内连接,外连接查询,看博客的时候也会有新的收获。除此之外,接下类要讲的子查询,表自身关联查询所用到的数据也在上一篇博客中。
Mysql数据库基本操作(六)多表查询-内连接,外连接

子查询

前一篇博客中有两张表,部门表dept和员工表emp,如果让我们第一感觉随便想出一个sql语句,我相信大多数人想出的都是select* from emp where dept_id='1001';这样一个简单的sql,其实仔细观察这个sql,我们应该这样理解这句话:select是选择的意思,*代表全部字段的意思,from后面的emp代表从哪张表中查询,emp可以替换成其他的表;where后面的是条件子句。dept_id=‘1001’,其中’1001‘也可以替换成其他值。
而我们又知道,其实我们所有的sql语句的查询结果返回也是一张表,或者具体来说可能是一个列,一个行,甚至是一个值。我们可不可以将这些返回的查询结果放在普通的sql语句中可以替换的地方做一个嵌套查询?答案的确如此。因此接下来我们分别介绍子查询如果分别是一整张表,一个列,一个行,一个值的时候分别怎么做嵌套循环。

1,子查询结果为一整张表或者一个行。

查询研发部23岁以下的员工信息

select *from (select * from dept3 where name = '研发部') t1, (select *from emp3 where age <23) t2 where t1.deptno=t2.dept_id;

解释这条SQL语句,这里先从部门表里查询到了研发部得到了一行记录select * from dept3 where name = '研发部';
在这里插入图片描述

又从员工表emp3中查询到了年龄小于23岁的员工,得到了一张表。
在这里插入图片描述

然后将这两个表利用他们之间天然的联系t1.deptno=t2.dept_id内连接起来,就得到了我们想要的结果。
在这里插入图片描述
而且仔细思考其实就能发现,t1,t2的笛卡尔集其实就是我们想要的结果,因为第一个子查询只返回了一行记录,不需要通过t1,t2表的内在联系t1.deptno=t2.dept_id过滤。所以sql语句其实可以不加后面的过滤条件:

select *from (select * from dept3 where name = '研发部') t1, (select *from emp3 where age <23) t2 ;

总结:子查询的结果为一个表或者一个行时,

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值