数据库常见的面试题

1.查询"01"课程比"02"课程成绩高的学生的信息及课程分数:

SELECT s.student_id, s.student_name, sc1.course_score AS score1, sc2.course_score AS score2
FROM student s
JOIN score sc1 ON s.student_id = sc1.student_id AND sc1.course_id = '01'
JOIN score sc2 ON s.student_id = sc2.student_id AND sc2.course_id = '02'
WHERE sc1.course_score > sc2.course_score;

2.查询同时存在"01"课程和"02"课程的情况:

SELECT DISTINCT s.student_id, s.student_name
FROM student s
JOIN score sc1 ON s.student_id = sc1.student_id AND sc1.course_id = '01'
JOIN score sc2 ON s.student_id = sc2.student_id AND sc2.course_id = '02';

3.查询存在"01"课程但可能不存在"02"课程的情况(不存在时显示为 null ) 

SELECT s.student_id, s.student_name, COALESCE(sc2.course_score, NULL) AS score2
FROM student s
LEFT JOIN score sc2 ON s.student_id = sc2.student_id AND sc2.course_id = '02';

4.查询不存在"01"课程但存在"02"课程的情况:

SELECT s.student_id, s.student_name
FROM student s
LEFT JOIN score sc1 ON s.student_id = sc1.student_id AND sc1.course_id = '01'
WHERE sc1.course_score IS NULL;

5.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩:

SELECT student_id, student_name, AVG(course_score) AS average_score
FROM student s
JOIN score sc ON s.student_id = sc.student_id
GROUP BY student_id, student_name
HAVING average_score >= 60;

6.查询在t_mysql_score表存在成绩的学生信息:

SELECT DISTINCT s.student_id, s.student_name
FROM student s
JOIN score sc ON s.student_id = sc.student_id;

7.查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null ):

SELECT s.student_id, s.student_name, COUNT(DISTINCT sc.course_id) AS course_count, SUM(COALESCE(sc.course_score, 0)) AS total_score
FROM student s
LEFT JOIN score sc ON s.student_id = sc.student_id
GROUP BY s.student_id, s.student_name;

8.查询「李」姓老师的数量:

SELECT COUNT(*) AS count
FROM teacher t
WHERE t.teacher_name LIKE '李%';

 9.查询学过「张三」老师授课的同学的信息:

SELECT DISTINCT s.student_id, s.student_name
FROM student s
JOIN score sc ON s.student_id = sc.student_id
JOIN course c ON sc.course_id = c.course_id
JOIN teacher t ON c.teacher_id = t.teacher_id
WHERE t.teacher_name = '张三';

 10.查询没有学全所有课程的同学的信息

SELECT s.student_id, s.student_name
FROM student s
WHERE NOT EXISTS (
    SELECT * FROM course c
    WHERE NOT EXISTS (
        SELECT * FROM score sc WHERE sc.student_id = s.student_id AND sc.course_id = c.course_id
    )
);

11.查询没学过"张三"老师讲授的任一门课程的学生姓名:

SELECT s.student_name
FROM student s
WHERE NOT EXISTS (
    SELECT * FROM course c
    JOIN score sc ON c.course_id = sc.course_id
    JOIN teacher t ON c.teacher_id = t.teacher_id
    WHERE t.teacher_name = '张三' AND sc.student_id = s.student_id
);

12.查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩:

SELECT s.student_id, s.student_name, AVG(sc.course_score) AS average_score
FROM student s
JOIN score sc ON s.student_id = sc.student_id
WHERE sc.course_score < 60
GROUP BY s.student_id, s.student_name
HAVING COUNT(sc.course_id) >= 2;

13.检索"01"课程分数小于 60,按分数降序排列的学生信息:

SELECT s.student_id, s.student_name, sc.course_score
FROM student s
JOIN score sc ON s.student_id = sc.student_id AND sc.course_id = '01'
WHERE sc.course_score < 60
ORDER BY sc.course_score DESC;

14.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩:

SELECT s.student_id, s.student_name, sc.course_id, sc.course_score, (SELECT AVG(course_score) FROM score WHERE student_id = s.student_id) AS average_score
FROM student s
JOIN score sc ON s.student_id = sc.student_id
ORDER BY average_score DESC;

15.查询各科成绩最高分、最低分和平均分:

SELECT course_id, MAX(course_score) AS highest_score, MIN(course_score) AS lowest_score, AVG(course_score) AS average_score,
       SUM(CASE WHEN course_score >= 60 THEN 1 ELSE 0 END) / COUNT(*) AS pass_rate,
       SUM(CASE WHEN course_score >= 70 AND course_score < 80 THEN 1 ELSE 0 END) / COUNT(*) AS medium_rate,
       SUM(CASE WHEN course_score >= 80 AND course_score < 90 THEN 1 ELSE 0 END) / COUNT(*) AS good_rate,
       SUM(CASE WHEN course_score >= 90 THEN 1 ELSE 0 END) / COUNT(*) AS excellent_rate
FROM score
GROUP BY course_id;

相关推荐

  1. 数据库常见面试

    2024-01-09 08:18:02       48 阅读
  2. MySQL[常见面试]

    2024-01-09 08:18:02       56 阅读
  3. 五个常见 jQuery 面试

    2024-01-09 08:18:02       46 阅读
  4. spring boot常见面试

    2024-01-09 08:18:02       39 阅读
  5. springMVC常见问题(面试)问答

    2024-01-09 08:18:02       45 阅读
  6. .NET常见20个面试

    2024-01-09 08:18:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-09 08:18:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-09 08:18:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-09 08:18:02       82 阅读
  4. Python语言-面向对象

    2024-01-09 08:18:02       91 阅读

热门阅读

  1. 什么是k8s和声明式编程?

    2024-01-09 08:18:02       56 阅读
  2. 【初识微服务Cloud-预习】

    2024-01-09 08:18:02       58 阅读
  3. RestTemplate发送https请求

    2024-01-09 08:18:02       54 阅读
  4. 安全防御之漏洞扫描技术

    2024-01-09 08:18:02       61 阅读
  5. Protobuf 反射技术简介

    2024-01-09 08:18:02       53 阅读
  6. ffmpeg api-band-test.c 讲解

    2024-01-09 08:18:02       52 阅读
  7. ros2 ubuntu 20.04 安装 foxy

    2024-01-09 08:18:02       61 阅读
  8. 解决递归问题的六种方法

    2024-01-09 08:18:02       67 阅读
  9. 2024.1.8

    2024-01-09 08:18:02       59 阅读
  10. 273. Integer to English Words

    2024-01-09 08:18:02       57 阅读
  11. 【Python机器学习】理论知识:决策树

    2024-01-09 08:18:02       52 阅读