Oracle Inner Join子句(多表連線)

2022-09-18 14:24:15 字數 3346 閱讀 6429

在本教程中,您將學習oracleinner join子句以從表中檢索具有其他表的匹配行的行。

在關聯式資料庫中,資料分布在許多相關的表中。例如,在樣本資料庫中,銷售訂單資料主要儲存在ordersorder_items表中。參考以下er圖結構 -

orders表儲存訂單的標題資訊,order_items表儲存訂單購買貨物的明細。

訂單(orders)表通過order_id列鏈結到order_items表。這意味著對於orders表中的每一行,我們都可以在order_items表中,通過order_id列中找到具有相同值的乙個或多個行資料。

要從兩個或多個相關表中查詢資料,請使用inner join子句。 以下語句說明如何連線兩個表t1t2

select

*from

t1inner join t2 on join_predicate;

下面讓我們仔細地來看看上面的語句:

查詢通過基於連線謂詞組合表t1t2的列值來返回結果集。它將表t1的每一行與表t2的行進行比較,以查詢滿足連線謂詞的所有行記錄。只要通過匹配非null值來滿足連線謂詞,則t1t2表的每對匹配行的列值就會被合併到結果集中的一行中。

1. oracle inner join示例

以下查詢使用inner join子句從orders表和order_items表中檢索資料:

select

*from

orders

inner join order_items on

order_items.order_id = orders.order_id

order 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子句中列出的列(如c1c2)必須在t1t2表中都存在(可用)。

以下示例使用inner joinusing子句從orders表和order_items表中檢索資料:

select

*from

orders

inner join order_items using( order_id )

order by

order_date desc;

執行上面示例**,得到以下結果 -

3. inner join多表連線示例

內部聯接子句可以聯接兩個以上的表。 在實踐中,應該限制連線表的數量來提高效能。 以下語句顯示如何連線三個表:

以下語句顯示如何連線三個表:ordersorder_itemscustomers, 為了保證查詢語句的效率,超過三個表連線慎用。

select

name,

order_id,

order_date,

item_id,

product_id,

quantity,

unit_price

from

orders

inner join order_items

using(order_id)

inner join customers

using(customer_id)

order by

order_date desc,

order_id desc,

item_id asc;

執行上面查詢語句,得到以下結果 -

以下示例說明如何連線四個表:ordersorder_itemscustomersproducts。參考以下查詢語句 -

select

name as customer_name,

order_id,

order_date,

item_id,

product_name,

quantity,

unit_price

from

orders

inner 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內部聯接從表中檢索具有其他表的匹配行的資料記錄。

Mysql中使用UNION語句進行多表連線查詢

用php編寫了幾個網頁,直接使用內建函式鏈結mysql資料庫。在實用中遇到乙個需求 有幾個內容相類似的表 存放了新聞 公告類文章 想要以某些條件做出在幾個表上的共同查詢和排序模組。在標準sql中的union語句如下 select column name s from table name1 unio...

delete 多表刪除的使用(連表刪除)

delete刪除多表資料,怎樣才能同時刪除多個關聯表的資料呢?這裡做了深入的解釋 1 delete from t1 where 條件 2delete t1 from t1 where 條件 3delete t1 from t1,t2 where 條件 4delete t1,t2 from t1,t2...

Lambda表示式多表連線的左連

在網上有很多人都在查詢lambda的例子,但是完整的例子不多,況且還有相當一部分幾乎完全不能用,linq的左連倒是挺多的,但是linq的 相對比較少,一旦遇到重複資料的時候,不容易被過濾,lambda就可以輕鬆避免這個讓人頭疼的問題。廢話不多說,看下面的例子吧。var model main from...