简要描述内部连接和外部连接之间的区别_sqlserver的几种常见连接方法

感谢本文几种描述方法,让我解决了最近的一段时间的疑问,转载下来,以供后面查血使用。

本文链接:https://blog.csdn.net/huanghanqian/article/details/52847835

四种join的区别已老生常谈:

INNER JOIN(也可简写为JOIN): 如果表中有至少一个匹配,则返回行

LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

FULL JOIN: 只要其中一个表中存在匹配,就返回行

那么问题来了,还有一种常见的写法是将表用逗号隔开,那这个又是怎么连接的呢。

先看这两张表。

c11aa4c8ac38f856ffac37bd3b2418a6.png

使用逗号隔开的方法来连接表:

SELECT *

FROM employee,department

WHERE employee.DepartmentID = department.DepartmentID

输出结果:

a37cf7505c204954dcd61a28db755e62.png

可以很明显发现:这不就是inner join嘛!

没错,答案正是这样:sql用逗号连接多张表对应的是 inner join。

为了严谨性,我到处找sql的官方文档来证实这一点。然而搜不出来sql的文档(谁知道网址请务必发我),最后还是在维基百科上找到了可以当作论据的话。

SQL 定义了两种不同语法方式去表示"连接"。首先是"显式连接符号",它显式地使用关键字

JOIN

,其次是"隐式连接符号",它使用所谓的"隐式连接符号"。隐式连接符号把需要连接的表放到

SELECT

语句的

FROM

部分,并用逗号隔开。这样就构成了一个"交叉连接",

WHERE

语句可能放置一些过滤谓词(过滤条件)。那些过滤谓词在功能上等价于显式连接符号. SQL 89标准只支持内部连接与交叉连接,因此只有隐式连接这种表达方式;SQL 92标准增加了对外部连接的支持,这才有了

JOIN

表达式。

也就是说,

SELECT *

FROM employee

INNER JOIN department

ON employee.DepartmentID = department.DepartmentID

等价于:

SELECT *

FROM employee,department

WHERE employee.DepartmentID = department.DepartmentID

至于哪个效率高一点,其实两者是一回事,没有区别。只是内连接是由SQL 1999规则定的书写方式而已。

另外,在写sql语句测试4种join的时候,发现mysql对于full join返回的结果和inner join一模一样。经查阅资料,才发现原来mysql不支持full join啊。

见:How to do a FULL OUTER JOIN in MySQL?

————————————————

版权声明:本文为CSDN博主「huanghanqian」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/huanghanqian/article/details/52847835

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值