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