標籤:tables null lin upload inner 分享圖片 說明 alt AC
在本教程中,您將學習Oracle INNER JOIN
子句以從表中檢索具有其他表的匹配行的行。
Oracle INNER JOIN文法簡介
在關聯式資料庫中,資料分布在許多相關的表中。例如,在樣本資料庫中,銷售訂單資料主要儲存在orders
和order_items
表中。參考以下ER圖結構 -
orders
表格儲存體訂單的標題資訊,order_items
表格儲存體訂單購買貨物的明細。
訂單(orders
)表通過order_id
列連結到order_items
表。這意味著對於orders
表中的每一行,我們都可以在order_items
表中,通過order_id
列中找到具有相同值的一個或多個行資料。
要從兩個或多個相關表中查詢資料,請使用INNER JOIN
子句。 以下語句說明如何串連兩個表T1
和T2
。
SELECT *FROM T1INNER JOIN T2 ON join_predicate;
下面讓我們仔細地來看看上面的語句:
- 首先,在這種情況下,在
FROM
子句之後的T1
是指定的主表。
- 其次,在
INNER JOIN
子句中指定條件join_predicate
。上面語句中的串連表是T2
。
- 第三,串連謂詞指定了串連表的條件。只有滿足串連謂詞的行記錄才會包含在結果集中。
查詢通過基於串連謂片語合表T1
和T2
的列值來返回結果集。它將表T1
的每一行與表T2
的行進行比較,以尋找滿足串連謂詞的所有行記錄。只要通過匹配非NULL
值來滿足串連謂詞,則T1
和T2
表的每對匹配行的列值就會被合并到結果集中的一行中。
1. Oracle INNER JOIN樣本
以下查詢使用INNER JOIN
子句從orders
表和order_items
表中檢索資料:
SELECT *FROM ordersINNER JOIN order_items ON order_items.order_id = orders.order_idORDER BY order_date DESC;
在這個例子中,串連謂詞(條件)是 -
order_items.order_id = orders.order_id
查詢將orders
表中的每一行與order_items
表中的行進行比較。當兩個表中的行在order_id
列中具有相同的值時,查詢將兩個表的行中的列值合并到結果行中,並將其包含在結果集中。
所以,執行上面查詢語句,得到以下結果 -
2. 使用USING子句的Oracle INNER JOIN樣本
除ON
子句外,還可以使用USING
子句指定在串連表時要測試哪些列的相等性。
下面用USING
子句說明INNER JOIN
的文法。
SELECT *FROM T1INNER JOIN T2 ON( c1, c2, ... );
請注意,USING
子句中列出的列(如c1
和c2
)必須在T1
和T2
表中都存在(可用)。
以下樣本使用INNER JOIN
和USING
子句從orders
表和order_items
表中檢索資料:
SELECT *FROM ordersINNER JOIN order_items USING( order_id )ORDER BY order_date DESC;
執行上面範例程式碼,得到以下結果 -
3. INNER JOIN多表串連樣本
內部聯結子句可以聯結兩個以上的表。 在實踐中,應該限制串連表的數量來提高效能。 以下語句顯示如何串連三個表:
以下語句顯示如何串連三個表:orders
,order_items
和customers
, 為了保證查詢語句的效率,超過三個表串連慎用。
SELECT name, order_id, order_date, item_id, product_id, quantity, unit_priceFROM ordersINNER JOIN order_items USING(order_id)INNER JOIN customers USING(customer_id)ORDER BY order_date DESC, order_id DESC, item_id ASC;
執行上面查詢語句,得到以下結果 -
以下樣本說明如何串連四個表:orders
,order_items
,customers
和products
。參考以下查詢語句 -
SELECT name AS customer_name, order_id, order_date, item_id, product_name, quantity, unit_priceFROM ordersINNER JOIN order_items USING(order_id)INNER JOIN customers USING(customer_id)INNER JOIN products USING(product_id)ORDER BY order_date DESC, order_id DESC, item_id ASC;
執行上面樣本查詢語句,得到以下結果 -
在本教程中,您已學習如何使用Oracle內部聯結從表中檢索具有其他表的匹配行的資料記錄。
Oracle Inner Join子句(多表串連)