MySQLでの結合と結合の使用

テーブル作成ステートメント:

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;

2つのテーブルの初期データは次のとおりです。

ここに画像の説明を挿入ここに画像の説明を挿入

一、内部結合

内部結合

select * 
from student a
inner 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

クエリ結果は次のとおりです。

ここに画像の説明を挿入

ここに画像の説明を挿入

select * 
from student a
left join class b
on a.class_id = b.class_id
where b.class_id is null

クエリ結果は次のとおりです。

ここに画像の説明を挿入

三、右参加

ここに画像の説明を挿入

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

クエリ結果は次のとおりです。
ここに画像の説明を挿入

4、組合

mysqlは完全外部結合をサポートしていないため、予想される結果を達成するために共用体が使用されます

ここに画像の説明を挿入

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

クエリ結果は次のとおりです。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_44042316/article/details/108023738