sql中的三種表聯結型別

2021-07-10 04:40:37 字數 2026 閱讀 4014

以下內容是我在網上學習之後整理出來的,有不對的地方歡迎指正,共同學習。

三種表聯結型別分別是inner join,left join,right join

1、名詞解釋:

(1)inner join :內聯結 根據on關鍵字後面的匹配條件進行過濾,僅返回完全滿足條件的記錄;

(2)left join:左聯結 以左表為基礎,根據on來匹配右表,不僅返回完全匹配的記錄,左表中不匹配的記錄一併返回,只不過此時右表的字段會返回null;

(3)right join:右聯結 以右表為基礎 和左聯結的執行過程類似。

2、舉例

sql如下:

3、查詢條件(這個很重要,使用的比較多)

三種聯結都支援用where關鍵字來過濾,但有區別

inner join on可以代替where,也就是說左表的查詢條件和右表的查詢條件可以直接放在on後面;

left/right join單錶(左表或右表)的查詢條件必須用where,放在on後面無效;並且,left join中使用where時,where後面不能加右表的查詢條件;right join同理;

舉例如下:

(1)查詢base表中status是ok並且credit表中flag是1的使用者

select base.nip from base inner join credit on base.nip = credit.nip and base.status='ok' and credit.flag = '1'//and 是base表和credit表單獨的查詢條件,生效

(2)如果用left join會返回什麼呢?

select base.nip from base left join credit on base.nip = credit.nip and base.status='ok' and credit.flag = '1'

返回結果與(2.2)的結果一致,因為and後面的查詢條件不會生效

(3)能不能直接把上面sql中的on直接換成where?會返回什麼?

先看一下直接換成where會返回什麼

select base.nip from base left join credit on base.nip = credit.nip where base.status='ok' and credit.flag = '1'

返回結果與(3.1)一致,但是上面這條sql不應該存在,因為在左聯結中加了右表的查詢條件,左聯結變得沒有意義。

正確的sql:select base.nip from base left join credit on base.nip = credit.nip where base.status='ok' 

返回結果如下:ts3被where後的查詢條件過濾

sql多表聯結 三張表聯結 查詢

今天看了一道sql的題,這個查詢需要聯結三張表,具體的 內容參考 參考鏈結 很自然的想到了內聯結,但是之前做的大部分都是兩張表的內連線,這次是三張表,在網上搜也都是講兩張表的內連線,這裡總結一下 selecta.sname,b cname,c degree from student ainner j...

三種事實表型別比較

根據 kimball 的資料倉儲理論,事實錶可分為三種型別 交易事實表 週期快照事實表和累積快照事實表。以下是這幾種事實表之間的區別。特點 交易事實 週期快照事實 累積快照事實 時間 時期 時間 時期時間跨度較短的多個時點 粒度 每行代表乙個交易事件 每行代表乙個時間週期 每行代表乙個業務週期 事實...

mysql的三種儲存引擎即三種型別的表

mysql 的環境變數 server bin下 引擎 engine 是電子平台上開發程式或系統的核心元件。利用引擎,開發者可迅速建立 鋪設程式所需的功能,或利用其輔助程式的運轉。一般而言,引擎是乙個程式或一套系統的支援部分。常見的程式引擎有遊戲引擎,搜尋引擎,防毒引擎等。儲存引擎就是指表的型別以及表...