MySQL 聯表查詢
阿新 • • 發佈:2019-05-13
關係型資料庫,免不了表之間存在各種引用與關聯。這些關聯是通過主鍵與外來鍵搭配來形成的。所以,取資料時,很大情況下單張表無法滿足需求,額外的資料則需要將其他表加入到查詢中來,這便是
多表聯合查詢時,可省略 JOIN 關鍵字,以逗號分隔多張表,此時預設會當作 INNER JOIN 來處理。比如, SELECT table1.*, table2.* FROM table1, table2; 等效於: SELECT table1.*, table2.* FROM table1 INNER JOIN table2;
需要注意的是,當逗號形式與其他聯表關鍵詞結合時,在指定了聯表條件,比如通過
SELECT left_tbl.* FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id WHERE right_tbl.id IS NULL; 通過此方法可方便地過濾出右邊表中不符合條件的記錄。
SELECT t1.name, t2.salary FROM employee AS t1 INNER JOIN info AS t2 ON t1.name = t2.name; SELECT t1.name, t2.salary FROM employee t1 INNER JOIN info t2 ON t1.name = t2.name; 一條查詢語句中的子查詢必需取一個別名,這樣才能在其他表示式中引用。 SELECT * FROM (SELECT 1, 2, 3) AS t1;
a LEFT JOIN b USING (c1, c2, c3)
一些 SELECT * FROM table1, table2; SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id; SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id; SELECT * FROM table1 LEFT JOIN table2 USING (id); SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id LEFT JOIN table3 ON table2.id = table3.id;
考察下面的示例: CREATE TABLE t1 (i INT, j INT); CREATE TABLE t2 (k INT, j INT); INSERT INTO t1 VALUES(1, 1); INSERT INTO t2 VALUES(1, 1); SELECT * FROM t1 NATURAL JOIN t2; SELECT * FROM t1 JOIN t2 USING (j); 查詢結果: +------+------+------+ | j | i | k | +------+------+------+ | 1 | 1 | 1 | +------+------+------+ +------+------+------+ | j | i | k | +------+------+------+ | 1 | 1 | 1 | +------+------+------+ 結果中同名的列只出現一次,且都是值相同的那些記錄。 通過向兩表中插入一條新記錄,令它們的 mysql> INSERT INTO t1 VALUES(2, 2); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO t2 VALUES(2, 3); Query OK, 1 row affected (0.00 sec) mysql> select * from t1 natural join t2; +------+------+------+ | j | i | k | +------+------+------+ | 2 | 2 | 1 | +------+------+------+ 1 row in set (0.00 sec)
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
COALESCE(a.c1, b.c1), COALESCE(a.c2, b.c2), COALESCE(a.c3, b.c3)
a.c1, a.c2, a.c3, b.c1, b.c2, b.c3
CREATE TABLE t1 (i1 INT); CREATE TABLE t2 (i2 INT); CREATE TABLE t3 (i3 INT); 針對上面的表,以下查詢會報錯: mysql> SELECT * FROM t1 JOIN t2 ON (i1 = i3) JOIN t3; ERROR 1054 (42S22): Unknown column 'i3' in 'on clause' 而以下查詢則可以: mysql> SELECT * FROM t1 JOIN t2 JOIN t3 ON (i1 = i3); Empty set (0.00 sec) 因為此時 相關資源
|