sql 中 inner join、left join 和 right join的區別


最近項目中要寫個SQL,查詢A表和B表都存在的情況下,很顯然,用 inner join。

半天沒寫出來,請別人幫忙之后,問了個很菜鳥的問題,為啥要用inner join 哈哈

所以在這簡單總結下:

有如下數據

mysql> select a.stuid,a.stuname,b.stuname from testa a,testb b where a.stuid=b.stuid;
+-------+---------+---------+
| stuid | stuname | stuname |
+-------+---------+---------+
|     1 | yoyo    | koko    |
|     2 | sasa    | tom     |
|     3 | tom     | jerry   |
|     4 | jerry   | yoyo    |
+-------+---------+---------+
4 rows in set (0.00 sec)

①inner join:內連接

  兩個表都存在的記錄(紅色部分)。

  

mysql> select * from testa a inner join testb b on a.stuname = b.stuname;
+-------+---------+-------+---------+
| stuid | stuname | stuid | stuname |
+-------+---------+-------+---------+
|     3 | tom     |     2 | tom     |
|     4 | jerry   |     3 | jerry   |
|     1 | yoyo    |     4 | yoyo    |
+-------+---------+-------+---------+
3 rows in set (0.00 sec)

②left join:左連接

  取得左表全部記錄 和 右表匹配的記錄,如果沒有匹配的顯示為null(紅色部分)。

  

mysql> select * from testa a left join testb b on a.stuname = b.stuname;
+-------+---------+-------+---------+
| stuid | stuname | stuid | stuname |
+-------+---------+-------+---------+
|     1 | yoyo    |     4 | yoyo    |
|     2 | sasa    |  NULL | NULL    |
|     3 | tom     |     2 | tom     |
|     4 | jerry   |     3 | jerry   |
+-------+---------+-------+---------+
4 rows in set (0.00 sec)

③right join:右連接

  取得右邊全部記錄 和 左表匹配的記錄,如果沒有匹配的顯示為null(紅色部分)。

  

mysql> select * from testa a right join testb b on a.stuname = b.stuname;
+-------+---------+-------+---------+
| stuid | stuname | stuid | stuname |
+-------+---------+-------+---------+
|  NULL | NULL    |     1 | koko    |
|     3 | tom     |     2 | tom     |
|     4 | jerry   |     3 | jerry   |
|     1 | yoyo    |     4 | yoyo    |
+-------+---------+-------+---------+
4 rows in set (0.00 sec)

以上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM