(转)MySQL联表查询
資料源于網絡
一.內聯結、外聯結、左聯結、右聯結的含義及區別
在SQL標準中規劃的(Join)聯結大致分為下面四種:
1.內聯結:將兩個表中存在聯結關系的字段符合聯結關系的那些記錄形成記錄集的聯結。
2.外聯結:分為外左聯結和外右聯結。
左聯結A、B表的意思就是將表A中的全部記錄和表B中聯結的字段與表A的聯結字段符合聯結條件的那些記錄形成的記錄集的聯結,這里注意的是最后出來的記錄集會包括表A的全部記錄。
右聯結A、B表的結果和左聯結B、A的結果是一樣的,也就是說:
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左聯?結B則A中所有記錄都會保留在結果中,此時B中只有符合聯結條件的記錄,而右聯結相反。
二.例子
假設有如下兩張表:
| ID | Name |
| 1 | Tiim |
| 2 | Jimmy |
| 3 | John |
| 4 | Tom |
| ID | Hobby |
| 1 | Football |
| 2 | Basketball |
| 2 | Tennis |
| 4 | Soccer |
1內聯結:
1 | Select A.Name from A INNER JOIN B ON 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 | Basketball,Tennis |
| 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的內置優化參數,大家應該在特定情況下使用,譬如已經確認右表中的記錄數量少,在篩選后能大大提高查詢速度。
轉載于:https://www.cnblogs.com/itjiandan/p/3508254.html
總結
以上是生活随笔為你收集整理的(转)MySQL联表查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《相和歌辞·王昭君二首》第六句是什么
- 下一篇: 配置zendframework开始工作(