select record1.fname, record2.fname, record3.fname
from record1, record2, record3
where record1.country= record2.country
or record1.country=record3.country
如果您將使用內部連接和左側連接,上述代碼的等效查詢是什麼?我還沒有那麼熟悉join,但是如果只有兩個表,我知道如何使用join。用三個表查詢
select record1.fname, record2.fname, record3.fname
from record1, record2, record3
where record1.country= record2.country
or record1.country=record3.country
如果您將使用內部連接和左側連接,上述代碼的等效查詢是什麼?我還沒有那麼熟悉join,但是如果只有兩個表,我知道如何使用join。用三個表查詢
你應該開始使用官方的ANSI SQL連接語法 - 與內部連接這樣的:
select
record1.fname, record2.fname, record3.fname
from
record1
inner join
record2 on record1.country= record2.country
inner join
record3 on record1.country=record3.country
採用這種方法,這是很容易切換到外部聯接在需要的地方:
select
record1.fname, record2.fname, record3.fname
from
record1
left outer join
record2 on record1.country= record2.country
left outer join
record3 on record1.country=record3.country
因此,開始使用顯式JOIN語法 - 不要只列出一堆表並在WHERE子句中定義連接條件 - 這已被棄用,並且在您閱讀時不太清楚。
傑夫阿特伍德(這個網站背後的人之一)也有一個偉大的博客文章visualizing the join types - 強烈推薦和非常容易理解和「得到」什麼類型,以及他們如何工作。
我把它作爲一個內部連接查詢而不是左連接的查詢。左聯接版本將是相同的,只是LEFT
SELECT r1.fname,
r2.fname,
r3.fname
FROM record1 r1
INNER
JOIN record2 r2
ON r1.country = r2.country
INNER
JOIN record3 r3
ON r2.country = r3.country
我也用的r1
,r2
和r3
表的別名,至少對我來說,它使查詢更容易閱讀/更少更換INNER
「忙」比使用表的全名作爲別名。
-- INNER
SELECT r1.fname, r2.fname, r3.fname
FROM record1 r1
INNER JOIN record2 r2 ON r2.country = r1.country
INNER JOIN record3 r3 ON r3.country = r2.country
-- LEFT OUTER
SELECT r1.fname, r2.fname, r3.fname
FROM record1 r1
LEFT OUTER JOIN record2 r2 ON r2.country = r1.country
LEFT OUTER JOIN record3 r3 ON r3.country = r2.country