PostgreSQL 中的 INNER JOIN、FULL OUTER JOIN、LEFT JOIN 和 RIGHT JOIN?


為了理解這些概念並結合示例,我們將考慮兩個表,分別為 *marks* 和 *student_info*,定義如下:

marks 表:

姓名 (name)學號 (roll_no)百分比分數 (perc_marks)
Siddhi4565
Yash2642
Isha5687

student_info 表:

姓名 (name)學號 (roll_no)年齡 (age)性別 (gender)
Aniket1226男 (M)
Isha5625女 (F)
Yash2625男 (M)

正如你所看到的,marks 表中沒有 Aniket 的條目,而 student_info 表中沒有 Siddhi 的條目。換句話說,marks 表中沒有學號為 12 的條目,而 student_info 表中沒有學號為 45 的條目。現在,讓我們逐一瞭解不同的 JOIN。

INNER JOIN

它只返回兩個表中都存在條目的那些行。

SELECT marks.name, marks.roll_no, student_info.age
FROM marks
INNER JOIN student_info on marks.roll_no = student_info.roll_no

輸出結果為:

姓名 (name)學號 (roll_no)年齡 (age)
Yash2625
Isha5625

LEFT JOIN

這將包含左側表的全部條目,無論右側表中是否存在相應的條目。在下面的查詢中,marks 表是左側表。

SELECT marks.name, marks.roll_no, student_info.age
FROM marks
LEFT JOIN student_info on marks.roll_no = student_info.roll_no

因此,輸出將包含 Siddhi 的一行,但不包含 Aniket 的一行,如下所示。由於 Siddhi 的年齡不存在,其值將為 null。

姓名 (name)學號 (roll_no)年齡 (age)
Yash2625
Siddhi45[null]
Isha5625

RIGHT JOIN

這將包含右側表的全部條目,無論左側表中是否存在相應的條目。在下面的查詢中,student_info 表是左側表。

SELECT marks.name, marks.roll_no, student_info.age
FROM marks
RIGHT JOIN student_info on marks.roll_no = student_info.roll_no

因此,輸出將包含 Aniket 的一行,但不包含 Siddhi 的一行。此查詢的輸出很有趣。由於我們查詢的是 marks 表中的姓名和學號,因此 Aniket 的這些值將不會顯示。只有從 student_info 查詢的年齡被查詢,因此,只有該欄位將顯示在 Aniket 的行中。輸出如下所示:

姓名 (name)學號 (roll_no)年齡 (age)
[null][null]26
Yash2625
Isha5625

FULL OUTER JOIN

你可以將 full outer join 視為 LEFT JOIN 和 RIGHT JOIN 的並集。此查詢將返回右側表或左側表中存在的每個唯一條目的行。

SELECT marks.name, marks.roll_no, student_info.age
FROM marks
FULL OUTER JOIN student_info on marks.roll_no = student_info.roll_no

正如預期的那樣,輸出包含 Siddhi 和 Aniket 的行。

姓名 (name)學號 (roll_no)年齡 (age)
[null][null]26
Yash2625
Siddhi45[null]
Isha5625



更新於:2021年2月2日

733 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.