MySQL聯表查詢

.內聯結、外聯結、左聯結、右聯結的含義及區別
SQL標準中規劃的(Join)聯結大致分爲下面四種:
1.內聯結:將兩個表中存在聯結關係的字段符合聯結關係的那些記錄形成記錄集的聯結。
2.外聯結:分爲外左聯結和外右聯結。
左聯結AB表的意思就是將表A中的全部記錄和表B中聯結的字段與表A的聯結字段符合聯結條件的那些記錄形成的記錄集的聯結,這裏注意的是最後出來的記錄集會包括表A的全部記錄。
右聯結AB表的結果和左聯結BA的結果是一樣的,也就是說:

  1. Select A.name B.name From A Left Join B On A.id=B.id   

  1. Select A.name B.name From B Right Join A on B.id=A.id  
執行後的結果是一樣的。
3.全聯結:將兩個表中存在聯結關係的字段的所有記錄取出形成記錄集的聯結。
4.無聯結:沒有使用聯結功能,也有自聯結的說法。

內外聯結的區別是內聯結將去除所有不符合條件的記錄,而外聯結則保留其中部分。外左聯結與外右聯結的區別在於如果用A左聯 結BA中所有記錄都會保留在結果中,此時B中只有符合聯結條件的記錄,而右聯結相反

二.例子

假設有如下兩張表:

表A
ID Name
1 Tiim
2 Jimmy
3 John
4 Tom

表B
ID Hobby
1 Football
2 Basketball 
2 Tennis 
4 Soccer

1內聯結:
  1. Select A.Name B.Hobby from A, B where A.id = B.id  
這是隱式的內聯結,查詢的結果是: 
Name Hobby
Tim Football
Jimmy Basketball
Jimmy Tennis
Tom Soccer
它的作用和 
  1. Select A.Name from A INNER JOIN B ON A.id = B.id  
是一樣的。

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

Name Hobby
Tim Football
Jimmy BasketballTennis
John  
Tom Soccer
所以從上面結果看出,因爲A表中的John記錄的ID沒有在B表中有對應ID,因此爲空,但Name欄仍有John記錄。


3.外右聯結

  1. Select A.Name from A Right JOIN B ON A.id = B.id  
結果將會是:
Name Hobby
Tim Football
Jimmy Basketball
Jimmy Tennis
Tom Soccer

三.聯表查詢中用到的一些參數

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

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

發佈了22 篇原創文章 · 獲贊 19 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章