MYSQL中连接查询中左连接left join、右连接 right join、内连接 inner join的区别

前言:

今天有时间、就记录一下这几个关键字的用法。

一、left join 左连接。连接查询时候 保持左表完整

//A表的记录完整 也就是说除了符合连接条件的数据外 A表的其他数据也会出现在结果集当中

A left join B  on  A.xxx = B.xxx 

二、right join 左连接。连接查询时候 保持右表完整

//B表的记录完整 也就是说除了符合连接条件的数据外 B表的其他数据也会出现在结果集当中


A right join B  on  A.xxx = B.xxx 

三、inner join 内连接查询 ,只有符合条件的数据 会出现在结果集

// 只会出现符合条件的 数据


A innerjoin B  on  A.xxx = B.xxx 

进行测试

创建两张表student class ,并插入数据

## 学生表
CREATE TABLE `student` (
  `sid` int(11) NOT NULL,
  `sname` varchar(255) NOT NULL,
  `cid` int(11) DEFAULT NULL,
  PRIMARY KEY (`sid`),
  KEY `cid` (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `student` VALUES ('1', 'dd', '2');
INSERT INTO `student` VALUES ('2', 'cc', '1');
INSERT INTO `student` VALUES ('3', 'bb', '2');
INSERT INTO `student` VALUES ('4', 'aa', null);

## 班级表
CREATE TABLE `class` (
  `classid` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`classid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `class` VALUES ('1', '一班');
INSERT INTO `class` VALUES ('2', '二班');
INSERT INTO `class` VALUES ('3', '三班');
INSERT INTO `class` VALUES ('4', '四班');
INSERT INTO `class` VALUES ('5', '五班');

1.左连接 left join

SELECT * FROM class left join student ON classid  = cid;

结果如下:
在这里插入图片描述
结果集显示 class 这个表的数据保持完整 ,不满足连接条件 classid = cid的数据也被查询出来了。

2.右连接 right join

SELECT * FROM class right join student ON classid  = cid;

结果如下:
在这里插入图片描述
可以看到 右表数据保持完整 不满足连接条件 classid = cid的右表数据被查出来了

3.内连接 inner join

SELECT * FROM class inner join student ON classid  = cid;

结果如下:
在这里插入图片描述
可以看到 只会出现符合条件的数据。

发布了98 篇原创文章 · 获赞 44 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43732955/article/details/103907687