程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL聯合查詢

MySQL聯合查詢

編輯:MySQL綜合教程

MySQL聯合查詢


下面具體講講簡單的JOIN的用法了。首先我們假設有2個表A和B,他們的表結構和字段分別為:

表A:

ID Name 1 Tim 2 Jimmy 3 John 4 Tom

 

 


表B:

ID Hobby 1 Football 2 Basketball 2 Tennis 4 Soccer

 

 

 

1. 內聯結:
Select A.Name, B.Hobby from A, B where A.id = B.id,這是隱式的內聯結,查詢的結果是:

Name Hobby Tim Football Jimmy Basketball Jimmy Tennis Tom Soccer

 

 


它的作用和 Select A.Name from A INNER JOIN B ON A.id = B.id是一樣的。這裡的INNER JOIN換成CROSS JOIN也是可以的。

 

2. 外左聯結
Select A.Name from A Left JOIN B ON A.id = B.id,典型的外左聯結,這樣查詢得到的結果將會是保留所有A表中聯結字段的記錄,若無與其相對應的B表中的字段記錄則留空,結果如下:

Name Hobby Tim Football Jimmy Basketball,Tennis John   Tom Soccer

 

 


所以從上面結果看出,因為A表中的John記錄的ID沒有在B表中有對應ID,因此為空,但Name欄仍有John記錄。
3. 外右聯結
如果把上面查詢改成外右聯結:Select A.Name from A Right JOIN B ON A.id = B.id,則結果將會是:

Name Hobby Tim Football Jimmy Basketball Jimmy Tennis Tom Soccer

 

 


這樣的結果都是我們可以從外左聯結的結果中猜到的了。
說到這裡大家是否對聯結查詢了解多了?這個原本看來高深的概念一下子就理解了,恍然大悟了吧(呵呵,開玩笑了)?最後給大家講講MySQL聯結查詢中的某些參數的作用:

 

1.USING (column_list):其作用是為了方便書寫聯結的多對應關系,大部分情況下USING語句可以用ON語句來代替,如下面例子:

a LEFT JOIN b USING (c1,c2,c3),其作用相當於下面語句
a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3

只是用ON來代替會書寫比較麻煩而已。

2.NATURAL [LEFT] JOIN:這個句子的作用相當於INNER JOIN,或者是在USING子句中包含了聯結的表中所有字段的Left JOIN(左聯結)。

3.STRAIGHT_JOIN:由於默認情況下MySQL在進行表的聯結的時候會先讀入左表,當使用了這個參數後MySQL將會先讀入右表,這是個MySQL的內置優化參數,大家應該在特定情況下使用,譬如已經確認右表中的記錄數量少,在篩選後能大大提高查詢速度。

最後要說的就是,在MySQL5.0以後,運算順序得到了重視,所以對多表的聯結查詢可能會錯誤以子聯結查詢的方式進行。譬如你需要進行多表聯結,因此你輸入了下面的聯結查詢:

SELECT t1.id,t2.id,t3.id
FROM t1,t2
LEFT JOIN t3 ON (t3.id=t1.id)
WHERE t1.id=t2.id;

但是MySQL並不是這樣執行的,其後台的真正執行方式是下面的語句:

SELECT t1.id,t2.id,t3.id
FROM t1,( t2 LEFT JOIN t3 ON (t3.id=t1.id) )
WHERE t1.id=t2.id;

這並不是我們想要的效果,所以我們需要這樣輸入:

SELECT t1.id,t2.id,t3.id
FROM (t1,t2)
LEFT JOIN t3 ON (t3.id=t1.id)
WHERE t1.id=t2.id;

在這裡括號是相當重要的,因此以後在寫這樣的查詢的時候我們不要忘記了多寫幾個括號,至少這樣能避免很多錯誤

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved