《深入浅出SQL》问答录(九)

时间:2022-07-23
本文章向大家介绍《深入浅出SQL》问答录(九),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

花絮

左外联接

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联合。

UNION根据我们在SELECT中指定的列,把两张表或更多张表的查询结果合并至一个表中。

SELECT title FROM job_current
UNION
SELECT title FROM job_desired
UNION
SELECT title FROM job_listings;

UNION的使用限制

示例

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;

结果集:

联合规则说:选取的列必须可以互相转换。

联接VS子查询


问答录

Q:有使用左外连接取代右外联接的理由吗?

A:一般来说,固定使用一种联接的习惯会让事情更简单,这样不容易搞混。