SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(七)

LEFT JOIN

LEFT JOIN 同样用于关联两个表,ON 关键字后指定两个表共有的字段作为匹配条件,与 INNER JOIN 不同的地方在于匹配不上的数据行INNER JOIN 对两表匹配不上的数据行不返回结果 ,而 LEFT JOIN 只对右表(table2)匹配不上的数据行不返回结果,但是对左表(table1)匹配不上的数据行依然返回结果

语法:

sql 复制代码
SELECT columns
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

columns:要显示的列名。
table1:左表的名称。
table2:右表的名称。
column_name:表中用于连接的列名。
table1.column_name:表示table1表的column_name字段。

举例说明:

依然使用之前的score学生成绩表和subject课程数据表,对subject表进行一些修改,删除语文科目的数据行:

此时依然使用 INNER JOIN 关联两表,查询学生各科成绩:

sql 复制代码
SELECT id,score.subject_id,subject_name,score
FROM score
INNER JOIN subject
ON score.subject_id = subject.subject_id;

从结果中看到每个学生本应有六科成绩,但是此时只能查询出五科的成绩,因为缺失语文科目的数据行,两张表匹配不上的行都没有返回结果。

如果使用 LEFTJOIN 的关联方式呢?

sql 复制代码
SELECT id,score.subject_id,subject_name,score
FROM score
LEFT JOIN subject
ON score.subject_id = subject.subject_id;

我们注意到,LEFT JOIN 关联后,左表(score表)的部分数据行没有匹配成功,但是依然返回了结果。也就是说,左表的数据行不管能否匹配成功,都会在结果中显示出来,不会造成左表数据的遗漏,一般用于左表存储了重要的,不可遗落的数据的情况。

RIGHT JOIN

既然有 LEFT JOIN ,那自然也有 RIGHT JOIN 。RIGHT JOIN 与 LEFT JOIN 正好相反右表的数据行不管能否匹配成功,都会在结果中显示出来,不会造成右表数据的遗漏。

语法:

sql 复制代码
SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;

columns:要显示的列名。
table1:左表的名称。
table2:右表的名称。
column_name:表中用于连接的列名。
table1.column_name:表示table1表的column_name字段。

举例说明:

先把 subject 表的数据修改一下,增加一条新数据"1000000 体育",这条数据在score表中没有匹配项。

新subject表如下:

将score表与subject表进行 RIGHT JOIN 关联,查询学生各科成绩:

sql 复制代码
SELECT id,score.subject_id,subject_name,score
FROM score
RIGHT JOIN subject
ON score.subject_id = subject.subject_id;

RIGHT JOIN 关键字从右表(subject表)返回所有的行,即使表中有匹配不到的数据行。

本专栏将持续更新,对数据库SQL感兴趣的同学可以关注一下,谢谢!

相关推荐
木木木一2 分钟前
Rust学习记录--C5 Rust struct
开发语言·学习·rust
BoBoZz194 分钟前
Tutorial_Step6 vtkBoxWidget的交互与控制
python·vtk·图形渲染·图形处理
0和1的舞者6 分钟前
《GUI 自动化详解(二):控件、鼠标键盘与菜单列表操作全指南》
开发语言·自动化测试·python·测试开发·自动化·测试
夫唯不争,故无尤也7 分钟前
在 PyTorch 里,torch.nn 和 torch.nn.functional 到底什么关系?
人工智能·pytorch·python
Cephas、8 分钟前
Autosar —— Rte 层
笔记
无名小猴11 分钟前
TryHackMe——迎2025入门教程(二)
学习
Heorine12 分钟前
数学建模 绘图 图表 可视化(4)
python·数学建模·信息可视化
额呃呃13 分钟前
construct对象构造接口
数据库·算法
一顿操作猛如虎,啥也不是!17 分钟前
redis注册成windows服务,开机启动
数据库·redis·缓存
苏小瀚17 分钟前
[JavaEE] SpringBoot 配置文件
数据库·spring boot·java-ee