成绩表t_score——学生编号(stu_id),课程编号(lesson_id),学生成绩(score)
学生表t_student——学生编号(stu_id),学生姓名(stu_name),性别(gender),年龄(age),班级编号(class_id)
课程表t_lesson——课程编号(lesson_id),课程名称(lesson_name)
以下为数据库demand
中的三张表,其结构和内容(部分)如下:
1. 查询学生没有参加考试的课程。(显示形式:学生、姓名、班级、课程)
知识点:
NOT EXISTS关键字
、内部联结
思路:理想情况下,所有学生参加了所有考试(笛卡尔积
);现实情况是,部分学生参加了部分考试。使用NOT EXISTS关键字
求差集。
mysql> SELECT stu_id, stu_name, class_id, lesson_name
-> FROM (
-> SELECT stu_id, stu_name, class_id, lesson_id, lesson_name
-> FROM t_stu_profile, t_lesson) a
-> WHERE NOT EXISTS (
-> SELECT *
-> FROM t_score b
-> WHERE a.stu_id = b.stu_id AND a.lesson_id = b.lesson_id);
+--------+----------+----------+-------------+
| stu_id | stu_name | class_id | lesson_name |
+--------+----------+----------+-------------+
| 001 | 郭东 | 0611 | 英语 |
| 001 | 郭东 | 0611 | 物理 |
| 001 | 郭东 | 0611 | 化学 |
| 002 | 李西 | 0612 | 数据 |
| 002 | 李西 | 0612 | 英语 |
| 002 | 李西 | 0612 | 化学