基础连接(1)
本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 43 课,共 72 课。
到目前为止,我们解决的都是单表问题。现在,我们来看看如何处理多个表。
假设我们有以下几张表:
课程
| course_id | lecturer_id |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
讲师
| lecturer_id | 姓名 |
|---|---|
| 1 | Jhonas |
| 2 | Malidos |
任务是显示每门课程及其对应讲师的姓名。
有两种方法可以实现这一点。对于每种方法,我们都会将一个表中的每一行与另一个表中的行进行匹配。我们会检查是否满足某个条件,如果满足,就将两行合并为一行。两种方法的预期结果:
| course_id | lecturer_name |
|---|---|
| 1 | Jhonas |
| 2 | Jhonas |
| 3 | Malidos |
选项 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
这种连接也称为内连接。
挑战
简单可用的表和列:
grades:course_id,student_id,gradestudents:id,name
创建一个查询,在同一张表中获取 student_name、course_id、student_id 和 grade。按 grade 升序排列结果。
亲手试试
-- 列出题目要求的列,并使用指定的别名
SELECT ____
FROM students, grades
-- 只保留两个表中对应同一个人的行组合
WHERE ____
ORDER BY grade这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: SQL 在线编辑器