SQL中的各种join

SQL中的各种join

在实际的数据库应用中,我们经常需要从多个数据表中读取数据,这时我们就可以使用SQL语句中的连接(JOIN),在两个或多个数据表中查询数据。

inner join

inner join 被称为内连接,在使用的时候可以把inner 关键字省略,直接使用join。

它返回的是两张表中的共同的数据,舍弃不一致的数据

1
select [select list] from A join B on A.key = B.key where ...

inner join

left join

left join 被称为左连接,也可以写为left outter join。它会返回左表(表A)中的所有记录,以及右表中的关联数据。如果左表中的某些记录在右边中不存在值的话,就填充null。

1
SELECT [select list] FROM A LEFT JOIN B ON A.Key = B.Key where ...

left join

right join

right join被称为右连接,也可以写为right outter join,它会返回右表(表B)中的所有记录,以及左表中的关联数据。如果右表中的某些记录在左边不存在值的话,就填充null。

1
SELECT [select list] FROM A right JOIN B ON A.Key = B.Key where ...

right join

full outer join

FULL OUTER JOIN 一般被译作外连接、全连接,实际查询语句中可以写作 FULL OUTER JOINFULL JOIN。外连接查询能返回左右表里的所有记录,其中左右表里能关联起来的记录被连接后返回。

如果两表之间互相没有的数据会填充null。

1
SELECT [select_list] FROM A FULL OUTER JOIN B ON A.Key = B.Key where ...

full join

cross join

返回左表和右表之间符合条件的记录的笛卡尔积

1
SELECT [select list] FROM A CROSS JOIN B;

cross join

self join

返回表与自己连接后符合条件的记录,一般用在表里有一个字段是用主键作为外键的情况。

1
SELECT [select list] FROM table A, table B WHERE A.key = B.key;

left excluding join

返回左表(表A)有的数据,并且右表(表B)没有数据的数据集合。

1
SELECT [select list] FROM A left join WHERE B.key is null;

left excluding join

right excluding join

返回右表(表B)有的数据,并且右左表(表A)没有数据的数据集合。

1
SELECT [select list] FROM A right join WHERE A.key is null;

left excluding join

outer excluding join

返回左表(表A)和右表(表B)中没有互相关联的数据集。

1
SELECT [select list] FROM A full outter join WHERE A.key is null or B.key is null;

left excluding join

参考资料

Visual Representation of SQL Joins

图解 SQL 里的各种 JOIN

0%