MySQL 七種 JOIN 寫(xiě)法,這次終于搞懂了!
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
JOIN的使用
JOIN 理論

MySQL 七種 JOIN 的 SQL 編寫(xiě)
環(huán)境搭建
# 創(chuàng)建部門(mén)表
CREATE TABLE tbl_dept (
id INT NOT NULL AUTO_INCREMENT,
deptName VARCHAR (30) DEFAULT NULL,
locAdd VARCHAR (40) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT chharset = utf8 ;
# 創(chuàng)建員工表
CREATE TABLE tbl_emp (
id INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR (20) DEFAULT NULL,
deptId INT (11) DEFAULT NULL,
PRIMARY KEY (id),
KEY fk_dept_id (deptId) CONSTRAINT fk_dept_id FORREIGN KEY (deptId) REFERENCES tbl_dept (id)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = uttf8 ;
# 插入部門(mén)信息
INSERT INTO tbl_dept(deptName,locAdd) VALUES('RD',11),('HR',12),('MK',13),('MIS',14),('FD',15);
# 插入員工信息
INSERT INTO tbl_emp(`name`,deptId) VALUES('z3',1),('z4',1),('z5',1),('w5',2),('w6',2),('s7',3),('s8',4),('s9',51);
1.內(nèi)連接(INNER JOIN)
語(yǔ)句
SELECT * FROM tbl_dept a INNER JOIN tbl_emp b ON a.id = b.deptId;
有圖有真相

理解
可以理解為兩個(gè)集合的交集
2.左(外)連接(LEFT JOIN)
語(yǔ)句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id = b.deptId;
有圖有真相

理解
LEFT JOIN返回左表的全部行和右表滿(mǎn)足ON條件的行,如果左表的行在右表中沒(méi)有匹配,那么這一行右表中對(duì)應(yīng)數(shù)據(jù)用NULL代替
3.右(外)連接(RIGHT JOIN)
語(yǔ)句
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id = b.deptId;
有圖有真相

理解
RIGHT JOIN返回右表的全部行和左表滿(mǎn)足ON條件的行,如果右表的行在左表中沒(méi)有匹配,那么這一行左表中對(duì)應(yīng)數(shù)據(jù)用NULL代替。
4.左表獨(dú)有
語(yǔ)句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id = b.deptId WHERE b.deptId IS NULL;
有圖有真相

理解
查詢(xún)左表獨(dú)有的數(shù)據(jù) (注意:左表獨(dú)有,右表 key 為空)
5.右表獨(dú)有
語(yǔ)句
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id = b.deptId WHERE a.id IS NULL;
有圖有真相

理解
查詢(xún)右表獨(dú)有的數(shù)據(jù) (注意:右表獨(dú)有,左表 key 為空)
6.全連接
語(yǔ)句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id = b.deptId
UNION
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id = b.deptId;
有圖有真相

理解
在
mysql中不支持FULL JOIN進(jìn)行全連接,可以用 一個(gè)左連接UNION一個(gè)右連接
7.左右表獨(dú)有
語(yǔ)句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id=b.deptId WHERE b.deptId IS NULL
UNION
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id=b.deptId WHERE a.id IS NULL;
有圖有真相

理解
左右表獨(dú)有 = 左表獨(dú)有 + 右表獨(dú)有
作者 | 這行代碼沒(méi)Bug
來(lái)源 | cnblogs.com/likeyou99315/p/15172229.html

評(píng)論
圖片
表情
