自连接
本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 46 课,共 72 课。
自连接是不同类型的连接。到目前为止,我们讨论了多表连接,而自连接是同一张表与自身进行连接。一个经典示例是员工表。
| employee_id | employee_name | manager_id |
| 1 | Minke | 2 |
| 2 | Temur | 3 |
| 3 | Tatjana | 4 |
| 4 | Marinela |
每位员工都有一位经理,最高级别的经理除外,而且每位经理也都是员工。
问题:我们想知道每位员工的经理姓名。
SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_id我们在同一张表之间进行连接,只是第一次将它称为 e1,第二次将它称为 e2。连接使用的字段是 employee_id 和 manager_id。
结果:
| employee_id | employee_name | manager_name |
|---|---|---|
| 1 | Minke | Temur |
| 2 | Temur | Tatjana |
| 3 | Tatjana | Marinela |
挑战
中等可用的表和列:
friends:id,name,friend_id
找出彼此互为朋友的好友对(当 A 的 friend_id 指向 B,且 B 的 friend_id 指向 A 时,两人就是互为好友)。在同一行中显示两位朋友的姓名。将列命名为 friend1 和 friend2。
注意:在 WHERE 子句中加入条件 friend1.id < friend2.id,这样就不会包含重复的好友对
亲手试试
-- 将表与自身连接,让一行显示两个不同的人
SELECT ____ AS friend1, ____ AS friend2
FROM friends f1
JOIN friends f2 ON ____
-- 只保留互相指向对方的配对
WHERE ____ AND f1.id < f2.id;这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: SQL 在线编辑器