2301_80140255 2024-11-11 22:33 采纳率: 83.3%
浏览 8
已结题

以数据库student,数据表stu、course、sc及表数据为基础,请使用sQL语句实现以下查询操作,并验证查询结果。

(二)嵌套查询
1.查询与“王强”专业相同的学生的基本信息
2.查询所选课程的平均成绩小于“张丽”的平均成绩的学生学号、姓名及平均成绩
3.查询只选修了一门课程的学生的学号、姓名、所在院系及成绩: 4. 查询选修了“数据库”和“数据结构”课程的学生,结果中显示学生的学号、 姓名、专业
5.查询只选修了“数据库”和“数据结构”两门课程的学生,结果中显示学生的学号、姓名、专业
6. 查询选修的课程中至少有一门和“张丽”选修课程一样的学生,结果中显示学生的学号、姓名及选修的课程号:
7.查询选修了“赵敏”选修的全部课程的学生,结果中显示学生的学号、姓名
和专业:
8.查询和“张丽”选修的课程完全一样的学生,结果中显示学生的学号、姓名和专业
9. 查询选修了“数据结构”课程的学生的学号和姓名
10.查询其它专业中比“计算机”专业所有学生年龄都小的学生,结果中显示学生的学号、姓名、年龄和专业

  • 写回答

1条回答 默认 最新

  • 越重天 新星创作者: Java技术领域 2024-11-12 15:52
    关注

    本答案参考 多次询问 ChatGPT-3.5 后选择的最佳回答,若是满意,还请采纳,谢谢

    以下是基于你提供的需求,使用MySQL实现的查询语句:

    1. 查询与“王强”专业相同的学生的基本信息
    -- 假设stu表中有字段name(姓名)和major(专业)
    SELECT * 
    FROM stu
    WHERE major = (SELECT major FROM stu WHERE name = '王强');
    
    1. 查询所选课程的平均成绩小于“张丽”的平均成绩的学生学号、姓名及平均成绩
    -- 假设sc表中有字段sno(学号)和score(成绩),stu表中有字段sno和name
    SELECT stu.sno, stu.name, AVG(sc.score) AS avg_score
    FROM stu
    JOIN sc ON stu.sno = sc.sno
    GROUP BY stu.sno, stu.name
    HAVING AVG(sc.score) < (
        SELECT AVG(score)
        FROM sc
        WHERE sno = (SELECT sno FROM stu WHERE name = '张丽')
    );
    
    1. 查询只选修了一门课程的学生的学号、姓名、所在院系及成绩
    -- 假设stu表中有字段sno(学号)、name(姓名)、department(院系),sc表中有字段sno和score
    SELECT stu.sno, stu.name, stu.department, sc.score
    FROM stu
    JOIN sc ON stu.sno = sc.sno
    WHERE stu.sno IN (
        SELECT sno
        FROM (
            SELECT sno, COUNT(*) AS course_count
            FROM sc
            GROUP BY sno
            HAVING course_count = 1
        ) AS single_course_students
    );
    
    1. 查询选修了“数据库”和“数据结构”课程的学生,结果中显示学生的学号、姓名、专业
    -- 假设stu表中有字段sno(学号)、name(姓名)、major(专业),course表中有字段cno(课程号)和cname(课程名),sc表用于关联学生和课程
    SELECT stu.sno, stu.name, stu.major
    FROM stu
    JOIN sc ON stu.sno = sc.sno
    JOIN course ON sc.cno = course.cno
    WHERE course.cname IN ('数据库', '数据结构')
    GROUP BY stu.sno, stu.name, stu.major
    HAVING COUNT(DISTINCT course.cname) = 2;
    
    1. 查询只选修了“数据库”和“数据结构”两门课程的学生,结果中显示学生的学号、姓名、专业
    -- 假设stu表中有字段sno(学号)、name(姓名)、major(专业),course表中有字段cno(课程号)和cname(课程名),sc表用于关联学生和课程
    SELECT stu.sno, stu.name, stu.major
    FROM stu
    JOIN sc ON stu.sno = sc.sno
    JOIN course ON sc.cno = course.cno
    GROUP BY stu.sno, stu.name, stu.major
    HAVING COUNT(DISTINCT course.cname) = 2
        AND SUM(course.cname NOT IN ('数据库', '数据结构')) = 0;
    
    1. 查询选修的课程中至少有一门和“张丽”选修课程一样的学生,结果中显示学生的学号、姓名及选修的课程号
    -- 假设stu表中有字段sno(学号)、name(姓名),sc表中有字段sno和cno(课程号)
    SELECT stu.sno, stu.name, sc.cno
    FROM stu
    JOIN sc ON stu.sno = sc.sno
    WHERE sc.cno IN (
        SELECT cno
        FROM sc
        WHERE sno = (SELECT sno FROM stu WHERE name = '张丽')
    );
    
    1. 查询选修了“赵敏”选修的全部课程的学生,结果中显示学生的学号、姓名和专业
    -- 假设stu表中有字段sno(学号)、name(姓名)、major(专业),sc表中有字段sno和cno(课程号)
    SELECT stu.sno, stu.name, stu.major
    FROM stu
    WHERE NOT EXISTS (
        SELECT cno
        FROM sc
        WHERE sno = (SELECT sno FROM stu WHERE name = '赵敏')
        AND NOT EXISTS (
            SELECT *
            FROM sc AS sub_sc
            WHERE sub_sc.sno = stu.sno AND sub_sc.cno = sc.cno
        )
    );
    
    1. 查询和“张丽”选修的课程完全一样的学生,结果中显示学生的学号、姓名和专业
    -- 假设stu表中有字段sno(学号)、name(姓名)、major(专业),sc表中有字段sno和cno(课程号)
    SELECT stu.sno, stu.name, stu.major
    FROM stu
    WHERE sno <> (SELECT sno FROM stu WHERE name = '张丽')
    AND NOT EXISTS (
        (SELECT cno FROM sc WHERE sno = (SELECT sno FROM stu WHERE name = '张丽'))
        EXCEPT
        (SELECT cno FROM sc WHERE sno = stu.sno)
    )
    AND NOT EXISTS (
        (SELECT cno FROM sc WHERE sno = stu.sno)
        EXCEPT
        (SELECT cno FROM sc WHERE sno = (SELECT sno FROM stu WHERE name = '张丽'))
    );
    
    1. 查询选修了“数据结构”课程的学生的学号和姓名
    -- 假设stu表中有字段sno(学号)、name(姓名),course表中有字段cno(课程号)和cname(课程名),sc表用于关联学生和课程
    SELECT stu.sno, stu.name
    FROM stu
    JOIN sc ON stu.sno = sc.sno
    JOIN course ON sc.cno = course.cno
    WHERE course.cname = '数据结构';
    
    1. 查询其它专业中比“计算机”专业所有学生年龄都小的学生,结果中显示学生的学号、姓名、年龄和专业
    -- 假设stu表中有字段sno(学号)、name(姓名)、age(年龄)、major(专业)
    SELECT sno, name, age, major
    FROM stu
    WHERE major <> '计算机'
      AND age < ALL (SELECT age FROM stu WHERE major = '计算机');
    

    要验证查询结果,可以在MySQL数据库管理工具(如MySQL Workbench)中执行这些查询语句,查看返回的结果是否符合预期。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月24日
  • 已采纳回答 11月16日
  • 创建了问题 11月11日