1. 程式人生 > >MySQL 關聯查詢 Left Right

MySQL 關聯查詢 Left Right

存在兩張表,資料如下:

mysql> select * from a; +----+------+ | id | name | +----+------+ |  1 | aaa  | |  2 | bbb  | |  3 | ccc  | +----+------+

mysql> select * from b; +----+------+ | id | name | +----+------+ |  1 | aaa  | |  2 | bbb  | |  4 | ccc  | +----+------+

mysql> select * from a join b on a.id=b.id; +----+------+----+------+ | id | name | id | name | +----+------+----+------+ |  1 | aaa  |  1 | aaa  | |  2 | bbb  |  2 | bbb  | +----+------+----+------+

可見,join相當於我們平時用的where,就是把兩張表中同時滿足a.id=b.id的資料找出來;

mysql> select * from a left join b on a.id=b.id; +----+------+------+------+ | id | name | id   | name | +----+------+------+------+ |  1 | aaa  |    1 | aaa  | |  2 | bbb  |    2 | bbb  | |  3 | ccc  | NULL | NULL | +----+------+------+------+

可見,left join是以左表(a)為參考物件,相當於做一個for迴圈,把a表的資料一條一條的讀取出來,然後根據a.id=b.id的條件到b表中查詢資料,在b表中找不到資料的,就填充NULL;

mysql> select * from a right join b on a.id=b.id; +------+------+----+------+ | id   | name | id | name | +------+------+----+------+ |    1 | aaa  |  1 | aaa  | |    2 | bbb  |  2 | bbb  | | NULL | NULL |  4 | ccc  | +------+------+----+------+

可見,right join跟left join剛好相反,是以右表(b)為參考物件,相當於做一個for迴圈,把b表的資料一條一條的讀取出來,然後根據a.id=b.id的條件到a表中查詢資料,在a表中找不到資料的,就填充NULL;用right join 還不如換個順序用left join:select * from b left join a on b.id=a.id;