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;