一、多表查询
![在这里插入图片描述](https://img-blog.csdnimg.cn/d924489a707b4f91944e17327aa621f4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATWVhbmRlckNsb3Vk,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
二、在 MySQL 中创建 book 和 actor 两张表
1 创建 book 表及添加数据
CREATE TABLE `book` (
`id` INT PRIMARY KEY NOT NULL AUTO_INCREMEN,
`bookName` VARCHAR (60),
`author` VARCHAR (60)
);
INSERT INTO `book` (`id`, `bookName`, `author`) VALUES('1','水浒传','施耐庵');
INSERT INTO `book` (`id`, `bookName`, `author`) VALUES('2','三国演义','罗贯中');
INSERT INTO `book` (`id`, `bookName`, `author`) VALUES('3','西游记','吴承恩');
INSERT INTO `book` (`id`, `bookName`, `author`) VALUES('4','红楼梦','曹雪芹');
![在这里插入图片描述](https://img-blog.csdnimg.cn/50e4d43e3f9e45819b41605187160eba.png#pic_center)
2 创建 actor 表及添加数据
CREATE TABLE `actor` (
`id` INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
`actorName` VARCHAR (30),
`gender` VARCHAR (3),
`designation` VARCHAR (30),
`bookId` INT
);
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('1','唐僧','男','旃檀功德佛','3');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('2','孙悟空','男','斗战胜佛','3');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('3','猪八戒','男','净坛使者','3');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('4','沙僧','男','金身罗汉','3');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('5','刘备','男','字玄德','2');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('6','关羽','男','字云长','2');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('7','张飞','男','字翼德','2');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('8','宋江','男','及时雨','1');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('9','林冲','男','豹子头','1');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('10','武松','男','行者','1');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('11','李逵','男','黑旋风','1');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('12','鲁智深','男','花和尚','1');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('13','贾宝玉','男','宝玉','4');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('14','林黛玉','女','黛玉','4');
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('15','薛宝钗','女','宝钗','4');
![在这里插入图片描述](https://img-blog.csdnimg.cn/840691694c7748fd93a84f8e41f0418c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATWVhbmRlckNsb3Vk,size_17,color_FFFFFF,t_70,g_se,x_16#pic_center)
三、内连接
1 隐式内连接:没有JOIN
关键字,条件使用WHERE
指定
SELECT 字段 FROM 表1, 表2 WHERE 条件;
SELECT * FROM book b, actor a WHERE a.bookId = b.id AND a.bookId = 3;
![在这里插入图片描述](https://img-blog.csdnimg.cn/e7aaecb44b054274bb2e652a42105417.png#pic_center)
2 显式内连接:使用INNER JOIN ... ON
语句, 可以省略INNER
SELECT 字段 FROM 左表 INNER JOIN 右表 ON 表连接条件 WHERE 查询条件;
SELECT * FROM book b INNER JOIN actor a ON a.bookId = b.id WHERE a.bookId = 2;
![在这里插入图片描述](https://img-blog.csdnimg.cn/8f943b4e264249b1ba4838c99a74b5b4.png#pic_center)
四、左外连接
1 左外连接:使用LEFT OUTER JOIN ... ON
,OUTER
可以省略
SELECT 字段 FROM 左表 LEFT OUTER JOIN 右表 ON 表连接条件 WHERE 查询条件;
左外连接可以理解为:
将满足要求的数据显示,左表不满足要求的数据也显示(在内连接的基础上,保证左表的数据全部显示)
2 在 book 表中添加新的书籍
INSERT INTO `book` (`id`, `bookName`, `author`) VALUES('5','斗罗大陆','唐家三少');
![在这里插入图片描述](https://img-blog.csdnimg.cn/5ebf7ac86ec64fb7909b433e1ccbe032.png#pic_center)
3 使用内连接查询
SELECT * FROM book b INNER JOIN actor a ON a.bookId = b.id;
![在这里插入图片描述](https://img-blog.csdnimg.cn/570a2e82f4ff4bd698b1ce23f42c0890.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATWVhbmRlckNsb3Vk,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
4 使用左外连接查询
SELECT * FROM book b LEFT OUTER JOIN actor a ON a.bookId = b.id;
![在这里插入图片描述](https://img-blog.csdnimg.cn/92db0d8bd5a64b33adaf6af18afce0fc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATWVhbmRlckNsb3Vk,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
五、右外连接
1 右外连接:使用RIGHT OUTER JOIN ... ON
,OUTER
可以省略
SELECT 字段 FROM 左表 RIGHT OUTER JOIN 右表 ON 表连接条件 WHERE 查询条件;
右外连接可以理解为:
满足要求的数据显示,并且右表不满足要求的数据也显示(在内连接的基础上保证右边的数据全部显示)
2 在 actor 表中添加新的人物
INSERT INTO `actor` (`id`, `actorName`, `gender`, `designation`, `bookId`) VALUES('16','史湘云','女','湘云',NULL);
![在这里插入图片描述](https://img-blog.csdnimg.cn/994bf11e0aaf4b688c13b0f6472bd52a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATWVhbmRlckNsb3Vk,size_17,color_FFFFFF,t_70,g_se,x_16#pic_center)
3 使用内连接查询
SELECT * FROM book b INNER JOIN actor a ON a.bookId = b.id;
![在这里插入图片描述](https://img-blog.csdnimg.cn/570a2e82f4ff4bd698b1ce23f42c0890.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATWVhbmRlckNsb3Vk,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
4 使用右外连接查询
SELECT * FROM book b LEFT OUTER JOIN actor a ON a.bookId = b.id;
![在这里插入图片描述](https://img-blog.csdnimg.cn/5281ccc449ba432f9535056452616ddb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATWVhbmRlckNsb3Vk,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)