Mysql的七种join
2017-02-06 21:35
113 查看
对于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;
查询结果
相关文章推荐
- MYSQL的七种join(重要)(四)
- 菜鸟程序员之mysql的七种join连接
- MySQL逻辑架构、SQL加载执行顺序、七种JOIN模式图解
- MySQL 的七种 join
- 关键字: mysql的 连接/联结(join)语法
- MySQL中的各种JOIN(CROSS JOIN, INNER JOIN, LEFT [OUTER] JOIN)
- MySQL 中 Join 的基本实现原理
- 超详细mysql left join,right join,inner join用法分析
- MySQL Left Join,Right Join
- mysql left join right join inner join
- MYSQl left join联合查询效率分析
- mysql两种查询方式对比--子查询与join查询
- MySQL的联结(Join)语法
- MySQL JOIN之完全用法
- How to simulate FULL OUTER JOIN in MySQL
- MySQL JOIN之完全用法
- mysql的连接(join)语法
- MySQL - LEFT JOIN and RIGHT JOIN, INNER JOIN and OUTER JOIN
- MySQL的联结(Join)语法
- MySQL下limit和join的优化建议