注:Self Join 自连接的另一种做法是关联子查询。
题目一
查询学过编号为“01”的课程并且也学过编号为“02”的课程的学生的学号、姓名
SELECT st.s_id, st.s_name
FROM Student st
JOIN
(
SELECT sc1.*
FROM Score sc1
JOIN Score sc2
ON sc1.s_id = sc2.s_id
WHERE sc1.c_id = '01' # 这里不需要使用IN,也不需要纠结顺序问题,因为两张表都是Score
AND sc2.c_id = '02'
) m
ON st.s_id = m.s_id;
小结
这种题目的特点就是,同时使用了一列数据中的两个值,像这种情况就可以考虑使用自连接(还有一种可能是使用条件语句进行行转列)。
一般来说,最常见的连接的条件是两个值相等,再就是题目二中的”均包含“。
补:
注意自连接的具体形式,看下图,并不是简单的机械拼接,而是以条件查找的方式进行遍历循环!!!