数据库SQL语法多种Join类型介绍

举报
gentle_zhou 发表于 2023/12/11 00:54:57 2023/12/11
【摘要】 SQL join语句的目的是基于两个或多个表之间的共同字段。把这些表中的字段通过某种方式结合起来;因此基于这个目的,我们可以将Join语句分为4种类型:Inner Join、Left Join、Right Join、Full Join 。

SQL ,全称Structured Query Language,即结构化查询语言,是用于管理关系数据库管理系统(RDBMS)的语言。 SQL的使用范围包括增删改查数据,创建和修改数据库模式,以及控制数据访问。

而SQL语法中的join相关的语句则是用于把来自两个或多个表的字段结合起来,该操作支持从两个或多个表中查询数据,并可以根据表之间的关联字段或条件来组合表中的数据。

本文用于介绍Join语法的4种类型。

Join的4种类型

因为SQL join语句的目的是基于两个或多个表之间的共同字段。把这些表中的字段通过某种方式结合起来;因此基于这个目的,我们可以将Join语句分为4种类型:Inner Join、Left Join、Right Join、Full Join 。

注:Left Join、Right Join、Full Join 其实是Outer Join的三种具体表现形式;如果只是单纯的将join分为inner 和 outer,那其实区分意义并不大,因此本文分为了4种类型。

Inner Join

Inner Join,字面意思就是内在的连接,它关注的是两个或多个表中关联字段相匹配的字段,返回的是两个或多个表的交集部分。它的优势在于可以有效地过滤掉不相关的数据,从多个表中返回满足 JOIN 条件的所有行,提高查询效率;但随之而来的缺点就也很明显,这会导致单独某个表内一些数据的丢失。

语法

SELECT column1, column2, ...
FROM table1
JOIN table2 ON condition;

注:INNER JOIN 与 JOIN 代表的含义是一样的,所以在语法中,用JOIN和INNER JOIN效果是一样的。

参数说明:

  • column1, column2, …:这是要选择的n个字段的名称。如果不指定字段名称,则会选择所有字段。
  • table1:要连接的第一个表。
  • table2:要连接的第二个表。
  • condition:连接条件,用于指定连接方式。

image.png

Left Join

Left Join,全称是Left Outer Join,字面意思就是外在左侧的连接,它关注的是两个或多个表中,左表中所有的字段,以及与右表中字段的匹配情况(如果右表中没有匹配的记录,则用NULL填充)。举个例子,A left join B,取A全部字段,并且B没有对应的值设为null。它的优势在于可以避免丢失左表中的数据,支持在原始表中没有所需数据的情况下,通过引入其他表的数据来条件化查询结果;而它的缺点就是左表如果字段过大,执行速度会慢,而且它可能因为左表中有多个与右表中的记录匹配的记录,产生重复的记录(这时需要使用DISTINCT或GROUP BY来去除重复)。

语法

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

或则

SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

image.png

Right Join

Right Join,全称是Right Outer Join,字面意思就是外在右侧的连接,它关注的是两个或多个表中,右表中所有的字段,以及与左表中字段的匹配情况(如果左表中没有匹配的记录,则用NULL填充)。举个例子,A right join B,取B全部字段,并且A没有对应的值设为null。它的优势在于可以避免丢失右表中的数据,支持在原始表中没有所需数据的情况下,通过引入其他表的数据来条件化查询结果;而它的缺点就是右表如果字段过大,执行速度会慢,而且它可能因为右表中有多个与左表中的记录匹配的记录,产生重复的记录(这时需要使用DISTINCT或GROUP BY来去除重复)。

语法

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;

或则

SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;

image.png

Full Join

Full Join,全称是Full Outer Join,字面意思就是外在全部的连接,它关注的是两个或多个表中所有的字段(如果其中一个表中没有匹配的记录,则用NULL填充),返回的是两个或多个表的并集部分,彼此没有对应的值为null。它的优势在于可以合并两个表中所有数据,不会丢失任何一方的信息,同时还可以用来查找两个表中的差异(即哪些记录只存在于一个表中,而不在另一个表中);与此同时,它的限制也很明显,它可能会返回很多不需要的记录(特别是当两个表中的匹配记录很少时,这会导致查询结果过大,影响性能和可读性)。

在这里,额外补充解释下Outer Join,字面意思就是外在的连接,它关注的是是某张表和外部另外表的匹配情况。

语法

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;

image.png

4种Join语法的用法示例

介绍完join的4种类型之后,如何使用好它们就是我们接下去关注的重点了。下图介绍了7种使用方法,通过对4种类型的JOIN相关联的条件进行限制,呈现出了不同的效果:
image.png

参考链接

  1. https://www.runoob.com/sql/sql-join.html
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。