数据库内连接和外连接的区别举例(sql面试必会6题经典)


本章节向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。

前提如下供后面学习所用:

查看学生表的全部记录SELECT * FROM STUDENT;

蜗牛哥:MySQL表连接使用详解,内连接,外连接,交叉连接

查看地址表的全部记录:SELECT * FROM ADDRESS;

蜗牛哥:MySQL表连接使用详解,内连接,外连接,交叉连接

表连接按照功能大致分为如下三类:

内连接(INNER JOIN)也称等值连接

  • 它基于两个表之间的相等连接,获取两个表中字段匹配关系的记录。

SELECT * FROM STUDENT A INNER JOIN ADDRESS B ON A.ID=B.A_ID;

蜗牛哥:MySQL表连接使用详解,内连接,外连接,交叉连接

外连接(OUTER JOIN):

外连接不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。

外连接分三类:

1、左外连接(LEFT OUTER JOIN):LEFT JOIN是LEFT OUTER JOIN的简写

左(外)连接,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

SELECT * FROM STUDENT A LEFT OUTER JOIN ADDRESS B ON A.ID=B.A_ID

蜗牛哥:MySQL表连接使用详解,内连接,外连接,交叉连接

2、右外连接(RIGHT JOIN):right join是right outer join的简写

与左(外)连接相反,右(外)连接,左表只会显示符合搜索条件的记录,而右表的记录将会全部表示出来。左表记录不足的地方均为NULL。

SELECT * FROM STUDENT A RIGHT OUTER JOIN ADDRESS B ON A.ID=B.A_ID

蜗牛哥:MySQL表连接使用详解,内连接,外连接,交叉连接

3、全外连接(FULL OUTER JOIN)

MySQL 已经没有全连接了,有的教程上还写着 full join 但是实现不了,不过可以换一种方式来查询。

SELECT * FROM STUDENT A LEFT JOIN ADDRESS B ON A.ID=B.A_ID

UNION

SELECT * FROM STUDENT A RIGHT JOIN ADDRESS B ON A.ID=B.A_ID;

蜗牛哥:MySQL表连接使用详解,内连接,外连接,交叉连接

三者的共同点:都返回符合连接条件和查询条件(即:内连接)的数据行。

三者的不同点如下:


1、左外连接还返回左表中不符合连接条件单符合查询条件的数据行。


2、右外连接还返回右表中不符合连接条件单符合查询条件的数据行。


3、全外连接还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合 连接条件单符合查询条件的数据行。

全外连接实际上是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外 UNION 右外”。


注意:左表就是在“(LEFT OUTER JOIN)”关键字左边的表。右表就是右边的了。在三种类型的外连接中,OUTER 关键字是可以省略的。

交叉连接 : 也称作笛卡尔积。

它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每行都一一匹配。

SELECT * FROM STUDENT A CROSS JOIN ADDRESS B

等价于:

SELECT * FROM STUDENT A , ADDRESS B

蜗牛哥:MySQL表连接使用详解,内连接,外连接,交叉连接

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论