MySQL之表连接

本文介绍了SQL中的表连接和子查询技术,包括内连接、外连接(左连接和右连接)、子查询及记录联合等,并通过实例展示了如何利用这些技术进行高效的数据查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表连接

当需要同时显示多个表的字段时,就可以用表连接来实现这样的功能。从大类上分,表连接可分为内连接和外连接,它们之间的最主要区别是,内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。

这里写图片描述
查找出雇员的名字和所在的部门,雇员名称和部门分别存在表emp和dept中,因此需要使用表连接进行查询:
这里写图片描述

外连接可分为左连接和右连接

  1. 左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
  2. 右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录
    这里写图片描述

子查询

在某些条件下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候就要用到子查询,用于子查询的关键字主要包括 in,not in,= ,!=,exists,not exists等

查出emp表跟dept表相对应部门的人
这里写图片描述

如果子查询记录数为一行,还可以用=代替In
这里写图片描述
在某些情况下,子查询可以转换成表连接,例如

这里写图片描述

记录联合
将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来,这个时候,就需要用union和union all关键字来实现这样的功能,语法如下:

SELECT * FROM t1
UNION\UNION ALL
SELECT * FROM t2
...
UNION\UNION ALL
SELECT * FROM tn;

UNION和UNION ALL的主要区别是UNION ALL是把结果集直接合并在一起,而UNION是将UNION ALL后的结果进行一次DISTINCT,去除重复记录后的结果。
将emp和dept表中的部门编号集合显示出来:

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值