大多數人一般寫多表查詢會這樣寫select * from tbA ,tbB 沒有用到JOIN關鍵字,太Low了,官網标準建議是用JOIN明确表間的關系,下面具體來講。
連接配接類型:
交叉聯接 得到所連接配接表的所有組合 (笛卡兒集)cross join
内聯接得到連接配接表的滿足條件的記錄組合inner join on
外聯接(左、右)得到一個表的所有行,及其餘表滿 足連接配接條件的行 full | left | right outer join on
交叉聯接
在這類聯接的結果集内,兩個表中每兩個可能成對的行占一行。
但是如果在交叉聯接中加入where 子句就相當與是内聯接
例:
這就相當于我們一最開始的寫法:SELECT title, pub_name FROM titles , publishers Where titles.pub_id = publishers.pub_id
執行過程:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcugDNwQzMjlDN2QTZxgjNxUDZkdjNmNmM2YWO2ETO3kjNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
内聯接
僅顯示兩個聯接表中的比對行的聯接。(這是查詢設計器中的預設聯接類型。)
例:
執行過程:
左向外聯接
包括第一個命名表("左"表,出現在 JOIN 子句的最左邊)中的所有行。不包括右表中的不比對行。
右向外聯接
包括第二個命名表("右"表,出現在 JOIN 子句的最右邊)中的所有行。不包括左表中的不比對行。
執行過程:
完整外部聯接
包括所有聯接表中的所有行,不論它們是否比對。
練習:
此後用到的用例資料庫是SQL2008裡面的
參考SQL:
View Code