数据库实验:SQL查询操作与数据处理

需积分: 31 7 下载量 116 浏览量 更新于2024-09-11 收藏 1.07MB DOC 举报
"数据库上机实验题一" 本实验主要关注于数据库的查询操作,包括在已有数据库上执行建立查询、修改等任务。实验目的是让学生掌握SQL语言中的各种查询技术,例如单表查询、多表连接查询、嵌套查询,以及如何进行数据查询中的分组、统计、计算和组合操作。实验内容基于一个教学数据库,包含学生表(Student)、课程表(Course)和学生选课表(SC)三个表。 1. 查询SC表中所有选修了课程的学生学号,去除重复行: 使用`DISTINCT`关键字来消除重复的Sno,确保返回每个学生唯一一次。 SQL语句: ```sql SELECT DISTINCT Sno FROM SC; ``` 2. 查询非信息系、数学系和计算机科学系的学生姓名和性别: `NOT IN`操作符用于排除指定的值。在这个例子中,它用来筛选出不属于'CS'、'MA'或'IS'这三个系的学生。 SQL语句: ```sql SELECT Sname, Ssex FROM Student WHERE Sdept NOT IN ('CS', 'MA', 'IS'); ``` 3. 按照系号升序、年龄降序查询所有学生信息: `ORDER BY`语句用于排序结果。首先按照系号(Sdept)升序排列,然后在同一系内按照年龄(Sage)降序排列。 SQL语句: ```sql SELECT * FROM Student ORDER BY Sdept ASC, Sage DESC; ``` 4. 查询选修了3号课程的学生学号及其成绩,结果按分数降序排列: 在这个查询中,`WHERE`子句用于筛选Cno为'3'的记录,`ORDER BY`语句则按Grade降序排序。 SQL语句: ```sql SELECT Sno, Grade FROM SC WHERE Cno = '3' ORDER BY Grade DESC; ``` 5. 检索至少选修了课程号为C2和C4的学生学号: 使用嵌套的`IN`查询,找出同时选修C2和C4课程的学生。 SQL语句: ```sql SELECT Sno FROM Student WHERE Sno IN ( SELECT Sno FROM SC WHERE Cno = '2' ) AND Sno IN ( SELECT Sno FROM SC WHERE Cno = '4' ); ``` 6. 查询每个学生的学号、姓名、选修的课程名及成绩: 这个查询通过`JOIN`操作将Student、SC和Course三张表关联起来,获取所需信息。 SQL语句: ```sql SELECT Student.Sno, Sname, Cname, Grade FROM Student JOIN SC ON Student.Sno = SC.Sno JOIN Course ON SC.Cno = Course.Cno; ``` 7. 查询总学分超过6分的同学: 未提供具体的SQL语句,但可以通过聚合函数`SUM`和`GROUP BY`来实现。首先需要计算每个学生的所有课程的学分总和,然后筛选出总学分大于6的学生。 SQL语句示例: ```sql SELECT Student.Sno, Sname, SUM(SC.Ccredit) AS TotalCredits FROM Student JOIN SC ON Student.Sno = SC.Sno GROUP BY Student.Sno, Sname HAVING TotalCredits > 6; ``` 这些实验题涵盖了数据库查询的基础和进阶技巧,对于理解和掌握SQL语言非常有帮助。通过这些练习,学生可以提高在实际场景中运用SQL解决数据处理问题的能力。