在之前的学习中,我们都是在一张表中查询或是处理数据。但是实际上数据库都是将一类数据存储在一张表中的。比如:供应商信息表中只存储供应商的信息,而产品信息表则只存储产品信息。如下示意,两张表存储着不同的信息。

这样的好处是:信息不会重复,减少数据量。如果信息需要更新则只更新对应表中的单行记录即可。而两张表可以通过唯一的供应商ID进行关联。这也是关系型数据库这一称呼的来源。

那么如何查询存储在多个表中的数据呢?这个时候就需要使用联结了。
要创建联结很简单,只要指定联结的表及关联其方式即可,举例如下:输入如下语句,则可以输出对应的信息:SELECT
"供应商名称",
"产品",
"价格"
FROM
供应商信息,
产品信息
WHERE
供应商信息.供应商ID = 产品信息.供应商ID
输出为:

细心的小伙伴可能已经注意到了,供应商信息表里有供应商6但是输出的表里只有供应商5,这是因为我们使用了where语句,限定了其范围。我们去掉where语句看看:SELECT
"供应商名称",
"产品",
"价格"
FROM
供应商信息,
产品信息
此时的输出为:

我们发现供应商(6行),产品信息(12行)每一行都进行了匹配(输出72行)。我们把由没有联结条件的表关系返回的结果称之为笛卡尔积。实际上笛卡尔积并不是我们所希望的结果。由于其对于每一行都进行了匹配,所以出现了不正确的信息。因此在一定要记得有where语句。
前面所示意的带where语句的联结也称为等值联结,或内联结。实际上也可以使用以下语句输出相同的数据:SELECT
"供应商名称",
"产品",
"价格"
FROM
供应商信息
inner join 产品信息
on
供应商信息.供应商ID = 产品信息.供应商ID
两个表通过inner join指定关系,通过on子句给出联结条件,除了内联结,还有一种外联结。包含left outer join ,right outer join以及full outer join。输入以下语句可以输出所有的供应商的产品(包括前面所讲到的供应商5,即使它没有对应的产品信息)SELECT
"供应商名称",
"产品",
"价格"
FROM
供应商信息
left outer join 产品信息
on
供应商信息.供应商ID = 产品信息.供应商ID

下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法:
(图片来源:https://www.runoob.com/sql/sql-join.html)
截止目前,我们大多数时候用的比较多的是查询功能目前已经学习完了。后面将继续学习数据的新增、修改和删除。感谢你的关注,下次再见

。