創建兩個表:
CREATE TABLE a_student(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主鍵',
sno VARCHAR(20) NOT NULL COMMENT '學號',
sname VARCHAR(20) NOT NULL COMMENT '性名',
sex TINYINT NOT NULL COMMENT '性別 1:男,2:女',
sage int COMMENT '年齡',
CREATE_time datetime DEFAULT NULL COMMENT '創建時間',
test_time datetime COMMENT '測試時間',
UPDATE_time datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間'
);
CREATE TABLE b_student(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主鍵',
sno VARCHAR(20) NOT NULL COMMENT '學號',
sname VARCHAR(20) NOT NULL COMMENT '性名',
sex TINYINT NOT NULL COMMENT '性別 1:男,2:女'
);
添加數據:
a_student:

b_student:

查詢並集UNION ALL
例1:兩表字段相同
SELECT sno,sname FROM a_student
UNION ALL
SELECT sno,sname FROM b_student

例2:兩表字段不同
SELECT sno,sname FROM a_student
UNION ALL
SELECT sno,sex FROM b_student

例3:兩表字段數量不一樣
SELECT * FROM a_student UNION ALL
SELECT sno,sname FROM b_student

例4:兩表字段數量不一樣
SELECT sno,sname FROM a_stunt
UNION ALL
SELECT sno FROM b_student

查詢並集UNION
例1:兩表字段不同
SELECT sno,sname FROM a_student
UNION
SELECT sno,sex FROM b_student

結果不明顯,新增數據:
a_student:

例2:兩表字段相同,且有重復數據(UNION ALL)
SELECT sno,sname FROM a_student
UNION ALL
SELECT sno,sname FROM b_student

例3:兩表字段相同,且有重復數據(UNION)
SELECT sno,sname FROM a_student
UNION
SELECT sno,sex FROM b_student

總結:去重去的是完全相同的數據,指查詢的兩個字段值都相同
交集INNER JOIN
-- INNER JOIN (等值連接) 只返回兩個表中聯結字段相等的行
-- inner join並不以誰為基礎,它只顯示符合條件的記錄.
例1:以a表為主表
SELECT a.*
FROM a_student a
INNER JOIN b_student b
ON a.id=b.id AND a.sname=b.sname;

例2:以b表為主表
-- USING(id,name) 等價於 on后面的條件
SELECT b.* FROM a_student a
INNER JOIN b_student b USING(id,sname)

差集:
例1:a-b
SELECT a.*
FROM
a_student a
LEFT JOIN b_student b
ON a.id=b.id AND a.sname=b.sname
WHERE b.id IS NULL

例2:b-a
SELECT b.*
FROM
a_student a
RIGHT JOIN b_student b
ON a.id=b.id AND a.sname=b.sname
WHERE a.id IS NULL

補充:
單純的外連接:
例1:右外連接

SELECT *
FROM
a_student a
RIGHT JOIN b_student b
ON a.id=b.id AND a.sname=b.sname

例2:左外連接

SELECT *
FROM
a_student a
LEFT JOIN b_student b
ON a.id=b.id AND a.sname=b.sname

