PostgreSQL 中的 INNER JOIN、FULL OUTER JOIN、LEFT JOIN 和 RIGHT JOIN?
為了理解這些概念並結合示例,我們將考慮兩個表,分別為 *marks* 和 *student_info*,定義如下:
marks 表:
| 姓名 (name) | 學號 (roll_no) | 百分比分數 (perc_marks) |
|---|---|---|
| Siddhi | 45 | 65 |
| Yash | 26 | 42 |
| Isha | 56 | 87 |
student_info 表:
| 姓名 (name) | 學號 (roll_no) | 年齡 (age) | 性別 (gender) |
|---|---|---|---|
| Aniket | 12 | 26 | 男 (M) |
| Isha | 56 | 25 | 女 (F) |
| Yash | 26 | 25 | 男 (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) |
|---|---|---|
| Yash | 26 | 25 |
| Isha | 56 | 25 |
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) |
|---|---|---|
| Yash | 26 | 25 |
| Siddhi | 45 | [null] |
| Isha | 56 | 25 |
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 |
| Yash | 26 | 25 |
| Isha | 56 | 25 |
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 |
| Yash | 26 | 25 |
| Siddhi | 45 | [null] |
| Isha | 56 | 25 |
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP