首页 > 数据库技术 > 详细

MySQL之join查询介绍

时间:2020-01-19 17:07:06      阅读:74      评论:0      收藏:0      [点我收藏+]

准备

  join主要根据两表或多表之间列的关系,从这些表中进行数据的查询。

  首先创建两张表:tb_emp(员工表)和tb_dept(部门表),并插入相关测试数据。

1.tb_emp表。
DROP TABLE IF EXISTS `tb_emp`;
CREATE TABLE `tb_emp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `deptid` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_tb_emp_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `tb_emp`(name,deptid) VALUES (jack, 1);
INSERT INTO `tb_emp`(name,deptid) VALUES (tom, 1);
INSERT INTO `tb_emp`(name,deptid) VALUES (tonny, 1);
INSERT INTO `tb_emp`(name,deptid) VALUES (mary, 2);
INSERT INTO `tb_emp`(name,deptid) VALUES (rose, 2);
INSERT INTO `tb_emp`(name,deptid) VALUES (luffy, 3);
INSERT INTO `tb_emp`(name,deptid) VALUES (outman, 14);

2.tb_dept表。
DROP TABLE IF EXISTS `tb_dept`;
CREATE TABLE `tb_dept` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `deptname` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `tb_dept`(deptname) VALUES (研发);
INSERT INTO `tb_dept`(deptname) VALUES (测试);
INSERT INTO `tb_dept`(deptname) VALUES (运维);
INSERT INTO `tb_dept`(deptname) VALUES (经理);

从上表插入的数据可知outman是没有对应部门的。

1. inner join

  注:A表示左表,B表示右表,下同。

  inner join:A、B共有,也就是交集

  技术分享图片

 

技术分享图片

 

2. left join

  left jion:A独有+AB共有(交集)

  技术分享图片技术分享图片

3.right join

  right join:B独有+AB共有(交集)

 

  技术分享图片技术分享图片

 

4.A独有

注:参照left join,A独有只是将AB交集部分去掉。

技术分享图片技术分享图片

 

5.B独有

注:参照right join,B独有只是将AB交集部分去掉。

技术分享图片技术分享图片

 

6.AB全有(并集)

 

技术分享图片

 

由于mysql中不支持full outer join,所以这里通过union进行转换。AB并集:AB交集+A独有+B独有

技术分享图片

 

7.A、B独有并集

A、B独有并集,相当于A、B全有去掉AB的共有(交集)。

技术分享图片

 

 技术分享图片

 

 

参考:https://www.cnblogs.com/developer_chan/p/9207687.html

MySQL之join查询介绍

原文:https://www.cnblogs.com/FondWang/p/12214489.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!