Menu
CoddyTech

基础连接(1)

本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 43 课,共 72 课。

到目前为止,我们解决的都是单表问题。现在,我们来看看如何处理多个表。

假设我们有以下几张表:

课程

course_idlecturer_id
11
21
32

讲师

lecturer_id姓名
1Jhonas
2Malidos

任务是显示每门课程及其对应讲师的姓名。

有两种方法可以实现这一点。对于每种方法,我们都会将一个表中的每一行与另一个表中的行进行匹配。我们会检查是否满足某个条件,如果满足,就将两行合并为一行。两种方法的预期结果:

course_idlecturer_name
1Jhonas
2Jhonas
3Malidos

选项 1:

SELECT courses.course_id, lecturers.name AS lecturer_name
FROM courses, lecturers
WHERE courses.lecturer_id = lecturers.lecturer_id

这里我们在 FROM 关键字中写入两个表,并在 WHERE 子句中要求两条记录的 lecturer_id 必须相同。现在,我们在 SELECT 子句中写入 table.column,这样数据库就知道该从哪里获取这一列。

选项 2:

SELECT courses.course_id, lecturers.name AS lecturer_name
FROM courses
JOIN lecturers ON courses.lecturer_id = lecturers.lecturer_id

我们使用 JOIN table ON condition,而不是 WHERE

这种连接也称为内连接。

challenge icon

挑战

简单

可用的表和列:

  • grades: course_id, student_id, grade
  • students: id, name

创建一个查询,在同一张表中获取 student_name、course_id、student_id 和 grade。按 grade 升序排列结果。

亲手试试

-- 列出题目要求的列,并使用指定的别名
SELECT ____
FROM students, grades
-- 只保留两个表中对应同一个人的行组合
WHERE ____
ORDER BY grade
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: SQL 在线编辑器