最近項目中要寫個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)
以上。
