MySQL(3)——資料庫聯表查詢(易理解)
阿新 • • 發佈:2021-02-10
mysql的資料庫聯表查詢
該部分內容是資料庫的重點,儘量講得通俗易懂
目錄
一、自聯結——表與自己聯結
首先來看個例子:
假如你發現某物品(其ID為1)存在問題,因此想知道⽣產該物品的供應商⽣產的其他物品 是否也存在這些問題。此查詢要求⾸先找到⽣產ID為1的物品的供應商,然後找出這個供應 商⽣產的其他物品。
使用子查詢 select prod_id,prod_name from products where vend_id = (select vend_id from products where prod_id = 1);
使用聯結查詢:
select p1.prod_id,p1.prod_name
from products as p1,products as p2
where p1.vend_id = p2.vend_id and p2.prod_id = 1;
看似使用子查詢很清晰,容易理解,為什麼還要進行聯表查詢?因為子查詢的的效能比聯表查詢的效能低。資料庫追求的是越快越好,能最求高效能,絕不用低效能。後面還有專門講資料庫的索引,它也是為了提高資料庫的查詢速度而成為重點。
二、表聯結——兩個不同表聯結
下面通過一個簡單的例子講解以下內容:
建立表t1 CREATE TABLE t1( sid VARCHAR(20), sname VARCHAR(20) ); 插入t1資料 INSERT INTO t1 VALUES (1,'張三'), (2,'李四'); 建立表t2 CREATE TABLE t2( sid VARCHAR(20), class VARCHAR(20) ); 插入t2資料 INSERT INTO t2 VALUES (2,'2班'), (3,'3班');
1.內部聯結
SELECT * FROM t1 JOIN t2 ON t1.sid = t2.sid;
等同於
select * from t1, t2 where t1.sid = t2.sid;
結果:
查詢出來的結果是左表和右表都有的資料結果;
為什麼要用聯結,理由同自聯結闡述。
2.外部聯結
2.1左聯結
SELECT * FROM t1 LEFT JOIN t2 ON t1.sid = t2.sid;
結果:以左邊的表查詢出來行的結果為基準,右邊表的結果如果有則顯示,沒有則為null;
2.2右聯結
SELECT * FROM t1 RIGHT JOIN t2 ON t1.sid = t2.sid;
結果:以右邊的表查詢出來行的結果為基準,左邊表的結果如果有則顯示,沒有則為null;
三、組合查詢UNION
條件:union查詢兩個sql語句的列數要相等,且同一列的資料型別要相似。
1.UNION
union的結果會自動去重:
SELECT * FROM t1 LEFT JOIN t2 ON t1.sid = t2.sid
UNION
SELECT * FROM t1 RIGHT JOIN t2 ON t1.sid = t2.sid;
結果:
2.UNION ALL
union all的結果不去重:
SELECT * FROM t1 LEFT JOIN t2 ON t1.sid = t2.sid
UNION ALL
SELECT * FROM t1 RIGHT JOIN t2 ON t1.sid = t2.sid;
結果: