CodeGym /课程 /SQL SELF /数据合并入门:JOIN

数据合并入门:JOIN

SQL SELF
第 11 级 , 课程 0
可用

今天我们要聊聊关系型数据库里最有意思的主题之一——用 JOIN 把多个表的数据合起来。这玩意儿超强大,能让你搞定各种复杂的关联和分析。

想象一下,你的数据库就像一本超大的漫画书,每个分开的表就是一格画面。要拼成完整的故事,你得把这些画面连起来。JOIN 就是帮你干这事儿的。数据合并其实就是让查询能从多个表里拿到信息,并且按照你设定的条件把它们关联起来。

关系型数据库的核心就是表之间的关联概念。每个表都存着某个实体的信息,但想看全貌,咱们经常得把不同表的数据连起来。比如:

  • students 表存学生名单。
  • courses 表存课程列表。
  • enrollments 表显示谁上了哪些课。

想知道哪个学生上了哪门课,就得把这些表连起来。在面试时,会用 JOIN 的开发者看起来就很专业,因为这可是数据领域最吃香的技能之一。

主要的 JOIN 类型

在 PostgreSQL 里有几种 JOIN,每种都有自己的用处。我们先来大致过一遍,别一上来就被复杂例子搞晕:

JOIN 类型 说明
INNER JOIN 只返回两个表里都能匹配上的行。
LEFT JOIN 返回左边表的所有行,右边表只返回能匹配上的。
RIGHT JOIN 返回右边表的所有行,左边表只返回能匹配上的。
FULL OUTER JOIN 返回两个表的所有行,没匹配的地方用 NULL 补上。

选哪种 JOIN,得看你要干啥:

  • 只要两个表都能对上的数据,用 INNER JOIN
  • 想保留一个表的所有数据,另一个只要能对上的,用 LEFT JOINRIGHT JOIN
  • 两个表的所有数据都要,不管能不能对上,用 FULL OUTER JOIN

咱们直接上手练练这些 JOIN 吧。

例题——“谁上了哪门课?”

假设我们有三个表:

students

id name
1 Otto
2 Anna
3 Peter

courses

id title
101 数学
102 英语

enrollments

student_id course_id
1 101
2 102

这些表的关系如下:

  • students 里的 id 字段是学生的唯一标识。
  • courses 里的 id 字段是课程的唯一标识。
  • enrollments 里的 student_idcourse_id 字段把学生和课程连起来。

假如我们要解决这样一个问题:哪个学生报了哪门课?

JOIN 就能搞定。我们要根据它们的关联把表连起来:

  • studentsenrollmentsid = student_id 连起来。
  • enrollmentscoursescourse_id = id 连起来。

SQL 查询长这样:

SELECT students.name, courses.title
FROM enrollments
JOIN students ON enrollments.student_id = students.id
JOIN courses ON enrollments.course_id = courses.id;

这个查询干了啥:

  • FROM enrollments —— 先从把学生和课程连起来的表开始。
  • JOIN students ON enrollments.student_id = students.id —— 加上学生表,拿到名字。
  • JOIN courses ON enrollments.course_id = courses.id —— 加上课程表,拿到课程名。

结果会是这样:

name title
Otto 数学
Anna 英语

注意:如果某个学生一门课都没报,他不会出现在结果里——因为 JOIN 默认是严格的(INNER JOIN)。后面我们会讲怎么用 LEFT JOIN 把这些学生也查出来。

如果你对这个查询还有点懵,别急!慢慢来,后面的课都会帮你搞明白!

现实生活中有啥用?

现在你知道怎么连表了,咱们聊聊现实世界。你有没有想过网店是怎么运作的?比如你挑手机时能看到别人的评价。

  1. products 表存商品信息。
  2. reviews 表存买家的评价。
  3. customers 表存买家自己的信息。

要在网站上显示评价,就得把 productsreviewscustomers 这几个表合起来。这就是 JOIN 的实际应用。

要注意啥?

在我们下节课深入 JOIN 之前,有几点你得记住:

  1. JOIN 的顺序很重要。 比如 LEFT JOIN 会返回左边表的所有行,顺序一换结果就变了。
  2. 先用小表练手。 一开始别查几百万行。记住,哪怕最简单的查询也要让人一看就懂。
  3. 习惯去想表之间的关系。 当你能把表当成一个大结构的部分来看,JOIN 就会变得很自然。

从今天开始,我们就要变身 SQL 专家啦。下节课你会学会怎么用 INNER JOIN 从两个表里查数据。这会是你学 PostgreSQL 的一个大进步!

2
任务
SQL SELF, 第 11 级, 课程 0
已锁定
使用 COALESCE 处理字符串中的 NULL
使用 COALESCE 处理字符串中的 NULL
2
任务
SQL SELF, 第 11 级, 课程 0
已锁定
带条件和NULL处理的平均价格计算
带条件和NULL处理的平均价格计算
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION