数据库SQL语法多种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:连接条件,用于指定连接方式。
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;
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;
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;
4种Join语法的用法示例
介绍完join的4种类型之后,如何使用好它们就是我们接下去关注的重点了。下图介绍了7种使用方法,通过对4种类型的JOIN相关联的条件进行限制,呈现出了不同的效果:
参考链接
- 点赞
- 收藏
- 关注作者
评论(0)