1. 程式人生 > 其它 >MySQL(3)——資料庫聯表查詢(易理解)

MySQL(3)——資料庫聯表查詢(易理解)

技術標籤:MySQLmysql資料庫

mysql的資料庫聯表查詢

該部分內容是資料庫的重點,儘量講得通俗易懂

目錄

mysql的資料庫聯表查詢

一、自聯結——表與自己聯結

二、表聯結——兩個不同表聯結

1.內部聯結

2.外部聯結

三、組合查詢UNION

1.UNION

2.UNION ALL


一、自聯結——表與自己聯結

首先來看個例子:

假如你發現某物品(其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;

結果: