建表语句:
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`student_id` int(11) NOT NULL AUTO_INCREMENT,
`student_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`class_id` int(11) NOT NULL,
PRIMARY KEY (`student_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '皇后娘娘', 2);
INSERT INTO `student` VALUES (2, '智慧包', 2);
INSERT INTO `student` VALUES (3, '铁根', 2);
INSERT INTO `student` VALUES (4, '下巴', 2);
INSERT INTO `student` VALUES (5, '虞姬', 1);
INSERT INTO `student` VALUES (6, '安其拉', 3);
INSERT INTO `student` VALUES (7, '鲁班', 4);
INSERT INTO `student` VALUES (8, '芈月', 5);
INSERT INTO `student` VALUES (9, '多余同学', 6);
SET FOREIGN_KEY_CHECKS = 1;
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
`class_id` int(11) NOT NULL AUTO_INCREMENT,
`class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`class_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of class
-- ----------------------------
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, '五班');
INSERT INTO `class` VALUES (7, '多余班级');
SET FOREIGN_KEY_CHECKS = 1;
两表初始数据如下:
一、inner join
select *
from student a
inner join class b
on a.class_id = b.class_id
查询结果如下:
二、left join
select *
from student a
left join class b
on a.class_id = b.class_id
查询结果如下:
select *
from student a
left join class b
on a.class_id = b.class_id
where b.class_id is null
查询结果如下:
三、right join
select *
from student a
right join class b
on a.class_id = b.class_id
查询结果如下:
select *
from student a
right join class b
on a.class_id = b.class_id
where a.class_id is null
查询结果如下:
四、union
由于mysql不支持 full outer join,所以使用union来达到预期的结果
select *
from student a
left join class b
on a.class_id = b.class_id
union
select *
from student a
right join class b
on a.class_id = b.class_id
查询结果如下:
select *
from student a
left join class b
on a.class_id = b.class_id
where b.class_id is null
union
select *
from student a
right join class b
on a.class_id = b.class_id
where a.class_id is null
查询结果如下: