LEFT OUTER JOIN 会匹配左表中的每一行及右表中符合条件的行。 当左表与右表具有一对多关系时,左外联接特别有用。
理解外联接的最大秘密在于知道表在左边还是右边,在LEFT OUTER JOIN中,出现在FROM后,联接前的表称为左表,而出现在联接后的表称为右表。
SELECT g.girl,t.toy
FROM girls g --g是左表
LEFT OUTER JOIN toys t --t是右表
ON g.toy_id = t.toy_id;
内外联接有什么差别?外联接一定会提供数据行,无论该行能否在另一个表中找出相匹配的行。 左外联接的结果为NULL表示右表没有找到与左表相符的记录。
具体流程概览(图有点小瑕疵):
有外联接与左外联接一样,除了它是用右表与左表比对。
同一个表可以同时作为外联接的左右表。虽然听起来很奇怪,不过却很好用。
来一题看看;
SELECT c1.name,c2.name AS boss
FROM clown_info1 c1
INNER JOIN clown_info2 c2
ON c1.bossid = c2.id
;
自联接能够把一张表当成两张完全相同的表来进行查询。
还有一种取得多张表的查询结果的方式:UNION联合。
UNION根据我们在SELECT中指定的列,把两张表或更多张表的查询结果合并至一个表中。
SELECT title FROM job_current
UNION
SELECT title FROM job_desired
UNION
SELECT title FROM job_listings;
SELECT title FROM job_current
UNION
SELECT title FROM job_desired
UNION
SELECT title FROM job_listings
ORDER BY title;
结果集:
SELECT title FROM job_current
UNION ALL
SELECT title FROM job_desired
UNION ALL
SELECT title FROM job_listings
ORDER BY title;
结果集:
联合规则说:选取的列必须可以互相转换。
Q:有使用左外连接取代右外联接的理由吗?
A:一般来说,固定使用一种联接的习惯会让事情更简单,这样不容易搞混。