SQL中join操作後面的on與where的區別

2021-08-21 12:34:03 字數 1187 閱讀 3142

join關鍵字的作用是將多個表按一定的條件聯合起來,從而可以實現從多個表中獲取資料

在join後面可以接on條件和where條件,在這裡我主要就是說這兩者之間的差別

建立兩張簡單的用來測試的表並新增資料,如下所示,一張表名為id_name,另一張表名為id_age

首先看看不新增條件——t2.age ='22'時的結果

select * from id_name t1 left join id_age t2 on t1.id = t2.id
得到

1、在這裡以left join為例,首先執行where加條件——t2.age ='22'時

select * from id_name t1 left join id_age t2 on t1.id = t2.id where t2.age ='22'
得到結果如下

可以得到where條件是在left join操作完成後所進行的條件篩選

2、當執行on加條件——t2.age ='22'時

select * from id_name t1 left join id_age t2 on t1.id = t2.id and t2.age ='22'
得到結果如下

可得到on條件是在left join之前先進行條件篩選,而後才對兩個**join操作

在這裡是以left join為例,對於inner join來說由於其性質,這兩種條件得到的結果會是一樣,但中間內部過程還是有差異的

on比where起作用更早,,先根據on條件進行多表的連線操作,生成乙個臨時表再通過where來篩選

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中,查詢結果都是相同的 第一段指令碼 第二段指...

SQL中JOIN操作詳解

關於左連線和右連線總結性的一句話 左連線where只影響右表,右連線where只影響左表。join分類 left join right join inner join full join select from tbl1 left join tbl2 where tbl1.id tbl2.id 左連...

SQL 中如何去掉decimal欄位後面的0

當我們需要將 decimal 欄位的值轉為 varchar 型時,常常會遇到乙個問題 如果此字段有4位小數,那小數點後面都會自動被0補齊.例如 18.0000 或 12.0300.轉為 varchar 時後面的0仍然被保留.t sql如下 select top 3 a.el qty4 cast a....