SQL中的各种join
在实际的数据库应用中,我们经常需要从多个数据表中读取数据,这时我们就可以使用SQL语句中的连接(JOIN),在两个或多个数据表中查询数据。
inner join
inner join 被称为内连接,在使用的时候可以把inner 关键字省略,直接使用join。
它返回的是两张表中的共同的数据,舍弃不一致的数据
1 | select [select list] from A join B on A.key = B.key where ... |
left join
left join 被称为左连接,也可以写为left outter join。它会返回左表(表A)中的所有记录,以及右表中的关联数据。如果左表中的某些记录在右边中不存在值的话,就填充null。
1 | SELECT [select list] FROM A LEFT JOIN B ON A.Key = B.Key where ... |
right join
right join被称为右连接,也可以写为right outter join,它会返回右表(表B)中的所有记录,以及左表中的关联数据。如果右表中的某些记录在左边不存在值的话,就填充null。
1 | SELECT [select list] FROM A right JOIN B ON A.Key = B.Key where ... |
full outer join
FULL OUTER JOIN 一般被译作外连接、全连接,实际查询语句中可以写作 FULL OUTER JOIN
或 FULL JOIN
。外连接查询能返回左右表里的所有记录,其中左右表里能关联起来的记录被连接后返回。
如果两表之间互相没有的数据会填充null。
1 | SELECT [select_list] FROM A FULL OUTER JOIN B ON A.Key = B.Key where ... |
cross join
返回左表和右表之间符合条件的记录的笛卡尔积
1 | SELECT [select list] FROM A CROSS JOIN B; |
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; |
right excluding join
返回右表(表B)有的数据,并且右左表(表A)没有数据的数据集合。
1 | SELECT [select list] FROM A right join WHERE A.key is null; |
outer excluding join
返回左表(表A)和右表(表B)中没有互相关联的数据集。
1 | SELECT [select list] FROM A full outter join WHERE A.key is null or B.key is null; |