首页 > 学院 > 开发设计 > 正文

Mysql的七种join

2019-11-09 18:28:21
字体:
来源:转载
供稿:网友

对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams解释了SQL的Join。

建表

在这里呢我们先来建立两张有外键关联的张表。

CREATE DATABASE db0206;USE db0206;CREATE TABLE `db0206`.`tbl_dept`( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30), `locAdd` VARCHAR(40), PRIMARY KEY (`id`)) ENGINE=INNODB CHARSET=utf8;CREATE TABLE `db0206`.`tbl_emp`( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(20), `deptId` INT(11), PRIMARY KEY (`id`), FOREIGN KEY (`deptId`) REFERENCES `db0206`.`tb_dept`(`id`)) ENGINE=INNODB CHARSET=utf8;/*插入数据*/INSERT INTO tbl_dept(deptName,locAdd) VALUES('RD',11);INSERT INTO tbl_dept(deptName,locAdd) VALUES('HR',12);INSERT INTO tbl_dept(deptName,locAdd) VALUES('MK',13);INSERT INTO tbl_dept(deptName,locAdd) VALUES('MIS',14);INSERT INTO tbl_dept(deptName,locAdd) VALUES('FD',15);INSERT INTO tbl_emp(NAME,deptId) VALUES('z3',1);INSERT INTO tbl_emp(NAME,deptId) VALUES('z4',1);INSERT INTO tbl_emp(NAME,deptId) VALUES('z5',1);INSERT INTO tbl_emp(NAME,deptId) VALUES('w5',2);INSERT INTO tbl_emp(NAME,deptId) VALUES('w6',2);INSERT INTO tbl_emp(NAME,deptId) VALUES('s7',3);INSERT INTO tbl_emp(NAME,deptId) VALUES('s8',4);

文氏图与SQL语句的编写以及查询结果

内连接

内连接文氏图

表的内连接

执行的sql语句以及执行的查询结果

执行的sql语句select * from tbl_dept a inner join tbl_emp b on a.id=b.deptId;查询结果 这里写图片描述

左外连接

左外连接文氏图

左连接

执行的sql语句以及执行的查询结果

执行的sql语句select * from tbl_dept a left join tbl_emp b on a.id=b.deptId;查询结果 左外连接

右外连接

右外连接文氏图

这里写图片描述

执行的sql语句以及执行的查询结果

执行的sql语句select * from tbl_dept a right join tbl_emp b on a.id=b.deptId;查询结果 这里写图片描述

左连接

左连接文氏图

这里写图片描述

执行的sql语句以及执行的查询结果

执行的sql语句elect * from tbl_dept a left join tbl_emp b on a.id=b.deptId where b.deptId is null;查询结果

这里写图片描述

右连接

右连接文氏图

右连接

执行的sql语句以及执行的查询结果

执行的sql语句select * from tbl_dept a right join tbl_emp b on a.id=b.deptId where a.id is null;查询结果

右连接

全连接

全连接文氏图

这里写图片描述

执行的sql语句以及执行的查询结果

执行的sql语句select * from tbl_dept a right join tbl_emp b on a.id=b.deptId union select * from tbl_dept a left join tbl_emp b on a.id=b.deptId;查询结果 全连接

两张表中都没有出现的数据集

文氏图

执行的sql语句以及执行的查询结果

执行的sql语句select * from tbl_dept a right join tbl_emp b on a.id=b.deptId where a.id is null union select * from tbl_dept a left join tbl_emp b on a.id=b.deptId where b.deptId is null;查询结果

这里写图片描述


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表