SQL连接查询
等值连接
查询每个学生及其选修课程的情况
SELECT student.*, sc.*
FROM student, sc
WHERE student.`Sno`=sc.`Sno`;
对上例进行自然连接,消除重复Sno列
SELECT student.*, sc.`Cno`, sc.`Grade`
FROM student, sc
WHERE student.`Sno`=sc.`Sno`;
自身连接
需要给表起别名以示区别
查询每一门课的间接先修课(即先修课的先修课)
SELECT first.`Cname`, second.`Cname` CproName
FROM course FIRST, course SECOND
WHERE first.`Cpno`=second.`Cno`;
外连接
外连接操作以指定表为连接主体,将主体表中不满足连接条件的 元组一并输出
使用外连接查询每个学生及其选修课程的情况
SELECT student.*, sc.`Cno`, sc.`Grade`
FROM student LEFT OUTER JOIN sc ON student.`Sno`=sc.`Sno`;
复合条件连接
WHERE 子句中含多个连接条件
查询选修 2 号课程且成绩在 90 分以上的所有学生的学号和姓名
SELECT student.`Sno`, student.`Sname`
FROM student, sc
WHERE student.`Sno`=sc.`Sno` AND sc.`Cno`='2' AND sc.`Grade`>=90;
查询每个学生的学号、姓名、选修的课程名及成 绩
SELECT student.`Sno`, student.`Sname`, course.`Cname`, sc.`Grade`
FROM student, course, sc
WHERE student.`Sno`=sc.`Sno` AND sc.`Cno`=course.`Cno`;