问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SQL中的各种JOIN语法总结

创作时间:
作者:
@小白创作中心

SQL中的各种JOIN语法总结

引用
CSDN
1.
https://blog.csdn.net/2203_75907074/article/details/144619383

SQL JOIN语句是数据库查询中非常重要的一个部分,它允许我们根据一定的条件将多个表中的数据进行连接和组合。本文将详细讲解各种JOIN类型及其使用场景,帮助读者更好地理解和掌握SQL JOIN语句的使用方法。

SQL JOINs 总结

首先通过一张图总结各种 SQL JOINs:

接下来,我们将通过两个示例表A和B,详细讲解各种JOIN类型:

INNER JOIN

内连接,就是两个表的交集:

SELECT *
FROM A INNER JOIN B
ON A.course_id = B.course_id;

输出结果如下,可以看到这里的course_id是原来两个表共有的:

LEFT JOIN

左外连接,先左后外。也就是先把Table A整个copy来再说,再在Table B中找有没有匹配的部分,没有匹配的部分就用NULL代替:

SELECT *
FROM A LEFT JOIN B
ON A.course_id = B.course_id;

输出结果如下,可以看到结果中含有Table A的全部内容:

RIGHT JOIN

右外连接,先右后外。也就是先把Table B整个copy来再说,再在Table A中找有没有匹配的部分,没有匹配的部分就用NULL代替:

SELECT *
FROM A RIGHT JOIN B
ON A.course_id = B.course_id;

输出结果如下,可以看到结果中含有Table B的全部内容:

FULL OUTER JOIN

全外连接,就是将左边和右边嗯塞一起,空的部分就填上NULL:

SELECT *
FROM A FULL OUTER JOIN B
ON A.course_id = B.course_id;

输出结果如下,可以看到结果中含有Table A和Table B的全部内容:

其他情况的连接

这张图中还展示了一些其他的连接方式,其实已经没有新东西了,都是上述四种连接的结合:

以LEFT JOIN的情况为例:

SELECT *
FROM A LEFT JOIN B
ON A.course_id = B.course_id
WHERE B.course_id IS NULL;

输出结果如下,意为只在Table A中有,而Table B中没有的元组:

NATURAL JOIN

NATURAL JOIN并不是一种单独的连接方式,而是NATURAL关键字在起作用,它代表着自动查询两张表中所有相同的字段,然后再进行等值连接:

例如:

SELECT *
FROM A NATURAL JOIN B;

可以看出相较于ON,NATURAL将相同的course_id合并了:

USING关键字

除了NATURAL外,我们还可以使用USING指定需要以其为根据的相同字段:

例如:

SELECT *
FROM A JOIN B
USING(course_id);

也是同样的效果,并且显示结果上和NATURAL JOIN相同:

CROSS JOIN

使用该连接返回两表的笛卡尔积:

例如:

SELECT *
FROM A CROSS JOIN B;

都是两个表的笛卡尔积:

ON和WHERE

虽然等值条件既可以在ON中写,也可以在WHERE中写,不过因为ON只充当连接条件,而WHERE主要充当选择/过滤条件,因此还是建议将ON和WHERE区分开来。

MySQL中的JOIN

MySQL的JOIN语法与Oracle大致相同,但仍有微小的区别:

  • 在Oracle中,INNER JOIN必须跟上ON关键字,否则无法执行;但是在MySQL中INNER JOIN没有ON的话,则表示两个表的笛卡尔积。
  • MySQL不支持FULL OUTER JOIN,可以使用LEFT JOIN UNION RIGHT JOIN的方式替代:
SELECT *
FROM A LEFT JOIN B
ON A.course_id = B.course_id
UNION
SELECT *
FROM A RIGHT JOIN B
ON A.course_id = B.course_id;

查询结果如下:

数据库系统选择

在实际应用中,不同的数据库系统可能在语法细节上存在一些差异。例如,Oracle和MySQL在处理JOIN语句时就存在一些细微差别。因此,在编写SQL语句时,需要根据所使用的数据库系统进行相应的调整。建议在开发和测试阶段就确定好使用的数据库系统,避免在后期出现兼容性问题。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号