SQL關聯查詢中on與where

2022-08-24 07:12:09 字數 1276 閱讀 1653

前段時間,做乙個查詢,打算用left join查詢存在於a表但不存在於b表記錄,但怎麼查都不對,原因是把所有filter全部放在了where語句中,因此回頭看了資料,記錄一下。

on 條件是在join之前生效,因此無論後面是什麼條件都會返回左表所有記錄。

where 條件是在完成join後再生效。

下面進行測試:

表t1描述學生姓名和年齡:

表t2描述學生姓名和分數:

****************************sql1*******************************

select t1.*,'*******' as "華麗分割",t2.*

from sherry.t1 t1

left join sherry.t2 t2 on t1.st_name = t2.st_name and t1.st_name = 'emma';

****************************sql2*******************************

select t1.*,'*******' as "華麗分割",t2.*

from sherry.t1 t1

left join sherry.t2 t2 on t1.st_name = t2.st_name and t2.st_name = 'sharon';

****************************sql3*******************************

select t1.*,'*******' as "華麗分割",t2.*

from sherry.t1 t1

left join sherry.t2 t2 on t1.st_name = t2.st_name

where t1.st_name = 'emma';

****************************sql4*******************************

select t1.*,'*******' as "華麗分割",t2.*

from sherry.t1 t1

left join sherry.t2 t2 on t1.st_name = t2.st_name 

where t2.st_name = 'sharon';

總結:不管on上的條件是否為真都會返回left或right表中的記錄,full則具有left和right的特性的並集。 而inner jion沒這個特殊性,則條件放在on中和where中,返回的結果集是相同的。但是建議無論是哪種關聯方式,都安裝嚴格的格式來寫。

sql中關聯查詢

中 except intersect用法 except 返回兩個結果集的差 即從左查詢中返回右查詢沒有找到的所有非重複值 intersect 返回 兩個結果集的交集 即兩個查詢都返回的所有非重複值 返回兩個結果集的並集。union,except,intersect關鍵字用於對集合的查詢,它們的作用分...

SQL關聯查詢

一 關聯基礎 連線查詢 查詢兩個或兩個以上資料表或檢視的查詢,通常建立在存在相互關係的父子表之間。關聯查詢 查詢的結果集中的字段可能來自多張表。要從多張表中獲取資料時,就要找到這幾張表記錄的對應關係,然後建立聯絡後分別獲取。所以連線條件 指明表之間記錄的對應關係 在關聯查詢中十分關鍵。n 張表關聯查...

sql關聯查詢

1.內連線 是最普遍的一種連線方式,選出相連的兩張表都互相滿足連線條件的資料。寫法 select ainner joinb on a.id b.aid 其中inner可忽略 舉例 a表 查詢語句 select from a inner join b on a.id b.id。將a表的每一條資料拿出來...