oracle 中的連接類型分為內連接和外連接。內連接僅返回匹配行的結果,而外連接返回匹配行和僅出現在一個表中的行。外連接有三種類型:左外連接(返回左側表所有行)、右外連接(返回右側表所有行)、全外連接(返回兩側表所有行)。內連接的特點是匹配行,左外連接用 null 填充右側表空值,右外連接用 null 填充左側表空值,全外連接用 null 填充兩側表空值。
Oracle 中內連接和外連接的區別
定義:
內連接 (INNER JOIN):僅返回兩個或更多表中所有匹配行的數據。
外連接:返回兩個或更多表中所有匹配行的數據,以及來自僅存在于一個表中的行。
類型:
外連接有三種類型:
左外連接 (LEFT OUTER JOIN):返回左表中的所有行,以及與之匹配的右側表中的行。
右外連接 (RIGHT OUTER JOIN):返回右表中的所有行,以及與之匹配的左側表中的行。
全外連接 (FULL OUTER JOIN):返回來自兩個表的行,即使行之間沒有匹配。
區別:
特征 | 內連接 | 左外連接 | 右外連接 | 全外連接 |
---|---|---|---|---|
匹配原則 | 僅匹配行 | 左側表匹配 | 右側表匹配 | 兩側表匹配 |
返回行 | 匹配行 | 左側表所有行 | 右側表所有行 | 兩側表所有行 |
空值處理 | 僅顯示匹配行 | 用 NULL 填充右側表空值 | 用 NULL 填充左側表空值 | 用 NULL 填充兩側表空值 |
舉例:
假設我們有兩個表:
表 A:id
, name
表 B:id
, address
內連接:
<code>SELECT * FROM A INNER JOIN B ON A.id = B.id;</code>
登錄后復制
返回:僅具有匹配 id
的行。
左外連接:
<code>SELECT * FROM A LEFT OUTER JOIN B ON A.id = B.id;</code>
登錄后復制
返回:所有來自表 A 的行,以及具有匹配 id
的來自表 B 的行(如果有)。非匹配的行用 NULL 填充。
示例查詢:
以下查詢使用左外連接將兩個表中的數據連接起來,并顯示所有客戶及其地址:
<code>SELECT customers.name, orders.order_date, products.product_name FROM customers LEFT OUTER JOIN orders ON customers.id = orders.customer_id LEFT OUTER JOIN products ON orders.product_id = products.id;</code>
登錄后復制
通過理解內連接和外連接之間的區別,開發人員可以有效地使用這些連接來提取來自不同表的數據,并滿足特定的數據查詢要求。