通俗易懂的 mysql 7种join

首先要建两张有外键关系的表

-- 学生表
CREATE TABLE IF NOT EXISTS `student`(
`id` INT (4) NOT NULL AUTO_INCREMENT COMMENT'学号',
`name` VARCHAR (10) COMMENT '姓名',
`sex` VARCHAR(2) NOT NULL DEFAULT'男' COMMENT'性别',
PRIMARY KEY (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8

-- 成绩表
CREATE TABLE IF NOT EXISTS `score`(
 `s_id` INT(4)  NOT NULL AUTO_INCREMENT  REFERENCES student(`id`) ,
 `s_name` VARCHAR (10) COMMENT'班级号',
 `sco` VARCHAR(4) NOT NULL DEFAULT'未录入' COMMENT'分数',
 PRIMARY KEY (`s_id`)
)ENGINE  = INNODB DEFAULT CHARSET = utf8

首先看一下我这两张表,有助于理解下面的查询
score表
在这里插入图片描述
student表
在这里插入图片描述
可以看到这两张表的数据量是不同的

对两张表进行7种方式的联表查询
第一种:INNER JOIN 内连接
光看这个单词也知道 (inner 中心的 )查的应该是两张表共有的
在这里插入图片描述
sql指令

SELECT *FROM student st INNER JOIN  score sc ON st.`id` = sc.`s_id`

查询结果
在这里插入图片描述
有些人可能看这张查询结果图不明白为什么 说 inner join查询 是两张表共有的,详细解释一下

ON st.`id` = sc.`s_id`

看sql指令 是在这两张表种查询 st.id = sc.s_id 的数据,只要是满足这个条件,也就是说两张表种都有这个数字编号的都会被查出来,不满足则不显示,而不是说 只能查出两张表共有的字段列

第二种: RIGHT JOIN 右外连接
在这里插入图片描述
sql指令

SELECT *FROM student st RIGHT JOIN  score sc ON st.`id` = sc.`s_id`

查询结果
在这里插入图片描述
通俗来讲 就是以右边的表为主(right join 后面跟的那张表)进行查询 ,左边没有的 就是显示为空

同样的 left join查询 也是如此
第三种:LEFT JOIN 左外连接
在这里插入图片描述
sql 指令

SELECT *FROM score sc LEFT JOIN  student st ON st.`id` = sc.`s_id`

这里我只是把两张表的前后顺序换了换,right join 换成left join
查询结果
在这里插入图片描述
第四种:左连接
在这里插入图片描述

SELECT *FROM score sc LEFT JOIN  student st ON st.`id` = sc.`s_id` WHERE st.`id` IS NULL

查询结果
在这里插入图片描述
表示score表独有的部分

第五种 右连接
在这里插入图片描述
sql指令

SELECT *FROM score sc RIGHT JOIN  student st ON st.`id` = sc.`s_id` WHERE sc.`s_id` IS NULL

查询结果
在这里插入图片描述
因为student 表只有7个数据,所以查询结果没有任何东西

第六种 :全连接
在这里插入图片描述
sql指令

SELECT *FROM score sc RIGHT JOIN  student st ON st.`id` = sc.`s_id`
UNION
SELECT *FROM score sc LEFT JOIN  student st ON st.`id` = sc.`s_id`

查询结果
在这里插入图片描述
这个也就 可以算是把两张表结合到一张表上

第七种 相当于把左外连接和右外连接结合
在这里插入图片描述sql指令

SELECT *FROM score sc RIGHT JOIN  student st ON st.`id` = sc.`s_id` WHERE  sc.`s_id` IS NULL
UNION
SELECT *FROM score sc LEFT JOIN  student st ON st.`id` = sc.`s_id` WHERE st.`id` IS NULL

查询结果
在这里插入图片描述
这种查询相当于两张表各自特有部分的并集了。

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

猜你喜欢

转载自blog.csdn.net/qq_40662239/article/details/105004273
今日推荐