MySQL的7种join连接,分析+图解

7种join语句的分析:

首先创建两张表:

       People表用于存放学生信息(有:id,姓名,年龄,部门字段)

       Dept表存放部门信息(有:部门编号,部门名称,部门位置字段)

创建脚本如下:

DROP TABLE IF EXISTS `people`;
CREATE TABLE `people`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
  `deptno` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部门',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

INSERT INTO `people` VALUES (1, '张三', 20, '1');
INSERT INTO `people` VALUES (2, '李四', 23, '1');
INSERT INTO `people` VALUES (3, '王五', 25, '2');
INSERT INTO `people` VALUES (4, '赵柳', 20, '2');
INSERT INTO `people` VALUES (5, '张无忌', 21, '3');
INSERT INTO `people` VALUES (6, '赵敏', 18, '3');
INSERT INTO `people` VALUES (7, '唐三', 19, '3');
INSERT INTO `people` VALUES (8, '赵英俊', 50, '3');
INSERT INTO `people` VALUES (9, '无名', 72, '4');
INSERT INTO `people` VALUES (10, '小舞', 18, '3');
INSERT INTO `people` VALUES (11, '红毛', 17, '3');
INSERT INTO `people` VALUES (12, '叶凡', 20, NULL);

DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept`  (
  `deptno` int(10) NOT NULL AUTO_INCREMENT COMMENT '部门主键',
  `deptname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部门名称',
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`deptno`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

INSERT INTO `dept` VALUES (1, '社会部', '一楼大厅');
INSERT INTO `dept` VALUES (2, '小说部', '二楼会议室');
INSERT INTO `dept` VALUES (3, '动漫部', '三楼小广场');
INSERT INTO `dept` VALUES (4, '其他部', '楼顶办公室');
INSERT INTO `dept` VALUES (5, '市场部', '室外活动室');

创建两张表结果为:

一:内连接

 

SQL语句:

select * from people inner join dept on people.deptno = dept.deptno

得到的结果为:

 

二:左外连接

SQL语句:

select * from people left join dept on people.deptno = dept.deptno

得到的结果为:

 

三:右外连接

SQL语句:

select * from people right join dept on people.deptno = dept.deptno

得到的结果为:

 

四:左连接

SQL语句:

select * from people left join dept on people.deptno = dept.deptno where dept.deptno is null

得到的结果为:

 

五:右连接

SQL语句:

select * from people left join dept on people.deptno = dept.deptno where dept.deptno is null

得到的结果为:

六:全连接

SQL语句:

select * from people right join dept on people.deptno = dept.deptno
union
select * from people left join dept on people.deptno = dept.deptno

得到的结果为:

 

七:两张表都没有出现交集的数据集

SQL语句:

select * from people right join dept on people.deptno = dept.deptno where people.deptno is null
union
select * from people left join dept on people.deptno = dept.deptno where dept.deptno is null

得到的结果为:

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是王小贱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值