前言:
今天有时间、就记录一下这几个关键字的用法。
一、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;
结果如下:
可以看到 只会出现符合条件的数据。