数据库20:内连接查询(头歌云课)


(1)任务描述

本关任务:使用自然连接多表查询方法,检索数据表中的指定内容。

(2)相关知识

为了完成本关任务,你需要掌握:

  1. 如何使用等值查询的方法查询多表数据;
  2. 如何使用自然查询的方法查询多表数据。

我们之前学到的 WHERE 连接也称为等同连接,这种类型的连接我们一般称它为内连接(Inner Joins),包含关系如下图所示:

事实上,我们可以使用另一种专门的语法,来表示这种类型的连接。以后你将会学到其他类似的语法,来表示其他类型的连接。

(3)等值连接

等值连接使用 = 来进行比较运算。

举个例子 还记得上一关我们用到的例子吗?在上一关中,为了查询每个学生所对应的班级,我们用 WHERE 语句将表 student 和表 class 关联了起来。

代码如下:

SELECT *
FROM student, class
WHERE student.class_id = class.class_id

现在,我们用内连接查询语法进行查询,你将看见,它返回的结果与上一关一模一样。

输入:

SELECT *
FROM student inner join class
ON student.class_id = class.class_id

在该语法中,我们将两张需要关联的表放在了 join 的两端,并用 ON 代替之前的 WHERE 关键字。

输出:

检索过程:

结论: 若要连接表 t1 和表 t2 ,比较条件为 t1.a = t2.a,那么数据库会用 t1 中 a 列的所有元素逐个和 t2 中的 a 列进行比较,如果相等,则输出该行。

(4)不等值连接

在内连接中,如果不使用 = 作为比较运算符,我们就叫它不等值连接。

举个例子 在查询每个学生所对应班级的这个例子中,若使用不等值连接,将会返回: student 表和 class 表中, class_id 字段不相等的所有组合。

输入:

SELECT *
FROM student inner join class
ON student.class_id <> class.class_id

输出:

检索过程:

结论: 若要连接表 t1 和 t2 ,比较条件为 t1.a <> t2.a,那么数据库会用 t1 中 a 列的所有元素逐个和 t2 中的 a 列进行比较,如果不相等,则输出该行。

(5)自然连接

自然连接是一种特殊的等值连接,但与等值连接及其类似。大家可能已经注意到,我们之前的连接查询结果,都会出现两列重复的 class_id ,但在自然连接查询结果中,我们将只能看见一列 class_id。

怎么做到的呢?自然连接,相当于在等值连接的基础上,加了显示的限定条件,从而实现了列去重。

它还和等值查询有一个明显的区别: 自然连接要求比较的两个列属性必须相同,等值连接则不需要。

举个例子 查询每个学生所对应的班级:

输入:

SELECT student.*, class.class_name
FROM student inner join class
ON student.class_id = class.class_id

输出:

检索过程:


编程要求

我们已经为你建好了数据库与数据表,并添加了相应的数据内容。你只需在右侧 Begin-End 区域内补充代码,用自然连接关联表 Products 和表 Vendors 。

表 Products 和表 Vendors 的内容如下图所示:

测试说明

  • 本关涉及到的测试文件是 step2_test.sh ,平台将运行用户补全的 step2.sql 文件,得到数据;

  • 将得到的数据与答案比较,判断代码是否正确。

如果操作正确,你将得到如下的结果:

--- 开始你的任务吧,祝你成功!
实验代码

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值