• 求选修了老师 “王刚” 开课课程且成绩在 90 分以上的学生姓名、课程名称和成绩;(姓名,课程名,成绩)
SELECT 学生.姓名, 课程.课程名, 学习.成绩
FROM 学生
         JOIN 学习 ON 学生.学号 = 学习.学号
         JOIN 授课 ON 学习.课程号 = 授课.课程号 AND 学习.教师号 = 授课.教师号
         JOIN 教师 ON 授课.教师号 = 教师.教师号
         JOIN 课程 ON 授课.课程号 = 课程.课程号
WHERE 教师.教师名 = '王刚'
  AND 学习.成绩 > 90;
  • 求选修了 “王刚” 老师所授全部课程的学生姓名和学院名称;(姓名,学院名称)
SELECT 学生.姓名, 学院.学院名称
FROM 学生
         JOIN 学院 ON 学生.学院代码 = 学院.学院代码
WHERE NOT EXISTS (SELECT *
                  FROM 授课
                           JOIN 教师 ON 授课.教师号 = 教师.教师号
                  WHERE 教师.教师名 = '王刚'
                    AND NOT EXISTS (SELECT *
                                    FROM 学习
                                    WHERE 学习.学号 = 学生.学号
                                      AND 学习.课程号 = 授课.课程号));
  • 求没有选修课程 “软件工程” 的学生学号和姓名;(学生学号,姓名)
SELECT 学生.学号, 学生.姓名
FROM 学生
WHERE NOT EXISTS (SELECT *
                  FROM 学习
                           JOIN 课程 ON 学习.课程号 = 课程.课程号
                  WHERE 学生.学号 = 学习.学号
                    AND 课程.课程名 = '软件工程');
  • 求至少选修了两门课程的学生学号;(学号)
SELECT 学号
FROM 学习
GROUP BY 学号
HAVING COUNT(课程号) >= 2;
  • 求课程 “经济学” 不及格学生姓名和考试成绩;(姓名,成绩)
SELECT 学生.姓名, 学习.成绩
FROM 学生
         JOIN 学习 ON 学生.学号 = 学习.学号
         JOIN 课程 ON 学习.课程号 = 课程.课程号
WHERE 课程.课程名 = '经济学'
  AND 学习.成绩 < 60;
  • 求至少选修了与学号 “T06” 同学选修的课程相同的学生学号;(学号)
SELECT DISTINCT 学习.学号
FROM 学习
WHERE 学号 != 'T06'
  AND NOT EXISTS (SELECT *
                  FROM 学习 AS T06课程
                  WHERE T06课程.学号 = 'T06'
                    AND NOT EXISTS (SELECT *
                                    FROM 学习 学生课程
                                    WHERE 学生课程.学号 = 学习.学号
                                      AND 学生课程.课程号 = T06课程.课程号));
  • 求至少选修了 “C3,C4” 两门课程的学生姓名和学院名称;(姓名,学院名称)
SELECT DISTINCT 学生.姓名, 学院.学院名称
FROM 学生
         JOIN 学院 ON 学生.学院代码 = 学院.学院代码
WHERE EXISTS (SELECT *
              FROM 学习 AS 学习C3
              WHERE 学习C3.学号 = 学生.学号
                AND 学习C3.课程号 = 'C3')
  AND EXISTS (SELECT *
              FROM 学习 AS 学习C4
              WHERE 学习C4.学号 = 学生.学号
                AND 学习C4.课程号 = 'C4');
  • 查询 “王石” 同学没有选修的课程号和课程名; (课程号,课程名)
SELECT 课程.课程号, 课程.课程名
FROM 课程
WHERE NOT EXISTS (SELECT *
                  FROM 学习
                           JOIN 学生 on 学习.学号 = 学生.学号
                  WHERE 学生.姓名 = '王石'
                    AND 学习.课程号 = 课程.课程号);
  • 查询没有被任何学生选修的课程的课程号;(课程号)
SELECT 课程.课程号
FROM 课程
WHERE NOT EXISTS (SELECT *
                  FROM 学习
                  WHERE 学习.课程号 = 课程.课程号);
  • 求选修了全部课程的学生姓名;(姓名)
SELECT 学生.姓名
FROM 学生
WHERE NOT EXISTS (SELECT *
                  FROM 课程
                  WHERE NOT EXISTS (SELECT *
                                    FROM 学习
                                    WHERE 学习.学号 = 学生.学号
                                      AND 学习.课程号 = 课程.课程号));
  • 查询各学院课程 “经济学” 的平均分,并按照成绩从高到低的顺序排列;(学院名称,平均分)
SELECT 学院.学院名称, AVG(学习.成绩) AS 平均分
FROM 学生
         JOIN 学院 ON 学生.学院代码 = 学院.学院代码
         JOIN 学习 ON 学生.学号 = 学习.学号
         JOIN 课程 ON 学习.课程号 = 课程.课程号
WHERE 课程.课程名 = '经济学'
GROUP BY 学院.学院名称
ORDER BY 平均分 DESC;
  • 查询选修课程 “经济学” 的学生姓名和所在院系,结果按各院系排列,同时成绩从高到低排列;(姓名,学院名称,成绩)
SELECT 学生.姓名, 学院.学院名称, 学习.成绩
FROM 学生
         JOIN 学院 ON 学生.学院代码 = 学院.学院代码
         JOIN 学习 ON 学生.学号 = 学习.学号
         JOIN 课程 ON 学习.课程号 = 课程.课程号
WHERE 课程.课程名 = '经济学'
ORDER BY 学院.学院名称, 学习.成绩 DESC;
  • 求学时在 30-45 之间(含 30 和 45)的课程的课程号和课程名称及授课教师;(课程号,课程名,教师姓名)
SELECT 课程.课程号, 课程.课程名, 教师.教师名
FROM 课程
         JOIN 授课 ON 课程.课程号 = 授课.课程号
         JOIN 教师 ON 授课.教师号 = 教师.教师号
WHERE 课程.学时 BETWEEN 30 AND 45;
  • 检索选修课程 “经济学” 的最高分学生的姓名;(姓名)
SELECT 学生.姓名
FROM 学生
         JOIN 学习 ON 学生.学号 = 学习.学号
         JOIN 课程 ON 学习.课程号 = 课程.课程号
WHERE 课程.课程名 = '经济学'
ORDER BY 学习.成绩 DESC
LIMIT 1;
  • 查询选课人数超过 5 人的课程的课程号及课程名;(课程号,课程名)
SELECT 课程.课程号, 课程.课程名
FROM 课程
NATURAL JOIN 学习
GROUP BY 课程.课程号, 课程.课程名
HAVING COUNT(学习.学号) > 5;
此文章已被阅读次数:正在加载...更新于