暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL入门 | 如何跨表查询?

跟着小白学Python 2021-11-14
5116

点击上方蓝字关注我们




前言


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

这样的好处是:信息不会重复,减少数据量。如果信息需要更新则只更新对应表中的单行记录即可。而两张表可以通过唯一的供应商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)

截止目前,我们大多数时候用的比较多的是查询功能目前已经学习完了。后面将继续学习数据的新增、修改和删除。感谢你的关注,下次再见



扫描二维码获取

更多精彩


点个在看你最好看


文章转载自跟着小白学Python,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论