你真的會玩SQL嗎?內連線、外連線

歡醉發表於2015-10-29

大多數人一般寫多表查詢會這樣寫select * from tbA ,tbB  沒有用到JOIN關鍵字,太Low了,官網標準建議是用JOIN明確表間的關係,下面具體來講。

連線型別:
  1. 交叉聯接 得到所連線表的所有組合 (笛卡兒集)cross join
  2. 內聯接得到連線表的滿足條件的記錄組合inner join  on
  3. 外聯接(左、右)得到一個表的所有行,及其餘表滿 足連線條件的行 full | left | right  outer join  on

交叉聯接

在這類聯接的結果集內,兩個表中每兩個可能成對的行佔一行。

但是如果在交叉聯接中加入where 子句就相當與是內聯接

例:

這就相當於我們一最開始的寫法:SELECT title, pub_name  FROM titles , publishers Where titles.pub_id = publishers.pub_id

執行過程:

內聯接

僅顯示兩個聯接表中的匹配行的聯接。(這是查詢設計器中的預設聯接型別。)

例:

執行過程:

左向外聯接

包括第一個命名錶(”左”表,出現在 JOIN 子句的最左邊)中的所有行。不包括右表中的不匹配行。

例:

右向外聯接

包括第二個命名錶(”右”表,出現在 JOIN 子句的最右邊)中的所有行。不包括左表中的不匹配行。

例:

執行過程:

完整外部聯接

包括所有聯接表中的所有行,不論它們是否匹配。

例:

練習:

此後用到的用例資料庫是SQL2008裡面的

用例資料庫檔案:連結:http://pan.baidu.com/s/1qW1QxA0 密碼:dqxx

參考SQL:

參考SQL:

 

相關文章