連線查詢中的ON 子句和 WHERE 子句

2021-09-19 08:34:29 字數 910 閱讀 5438

先看兩張表結構

produc表

問題是下面兩個查詢結果有什麼不同

1.select * from product left join product_details

on (product.id = product_details.id)

and product_details.id=2;

2.select * from product left join product_details

on (product.id = product_details.id)

where product_details.id=2;

結果是1.第一條查詢結果為

2第二條查詢結果為

分析

第一條查詢使用 on 條件決定了從 left join的 product_details表中檢索符合的所有資料行。

第二條查詢做了簡單的left join,然後使用 where 子句從 left join的資料中過濾掉不符合條件的資料行。

SQL中join連線後面的on與where的區別

兩張測試表,資料如下 語文 select from t class a inner join t student b on a.id b.class id where a.name 語文 內連線下,不管a.name 語文 這個條件是在on還是在where中,查詢結果都是相同的 第一段指令碼 第二段指...

當心外部連線中的ON子句

在sql tuning中,不良寫法導致sql執行效率比比皆是。最近的sql tuning中乙個外部連線寫法不當導致過sql執行時間超過15分鐘左右此即 為一例。通過修正該sql的寫法之後,過高的邏輯讀呈數量級下降以及sql語句執行時間也大幅下降。下面給出乙個列子來演示該情形。一 建立演示環境 二 總...

當心外部連線中的ON子句

在sql tuning中,不良寫法導致sql執行效率比比皆是。最近的sql tuning中乙個外部連線寫法不當導致過sql執行時間超過15分鐘左右此即 為一例。通過修正該sql的寫法之後,過高的邏輯讀呈數量級下降以及sql語句執行時間也大幅下降。下面給出乙個列子來演示該情形。一 建立演示環境 二 總...