对于学生选课数据库的三个基本表: 学生表S(SNO,SNAME, SSEX ,SAGE,SDEPT),属性分别为学号,姓名,性别,年龄和所在系; 课程表C(CNO,CNAME,CPNO,CCREDIT),属性分别为课程号,课程名,先修课和学分。 选课表SC(SNO,CNO,GRADE),属性分别为学号,课程号和成绩; 请用SQL语言完成以下各项操作: 1. 查询SC表中的全部数据。(5分) 2. 查询成绩在70-80分的学生的学号、课程号和成绩。(5分) 3. 统计每个系的学生人数。(5分) 4. 查询选修C001课程号的学生姓名和所在系。(5分) 5. 在学生表S上按学号降序建立唯一索引IX_stu。 (5分) 6. 查询总成绩超过300分的学生,要求列出其学号和总成绩。(5分)
时间: 2025-03-31 15:11:33 浏览: 83
以下是针对各个SQL查询任务的具体解答:
---
### **1. 查询SC表中的全部数据**
```sql
SELECT * FROM SC;
```
**解释**: `SELECT *` 表示选择所有列,而`FROM SC`表示从选课表SC中获取数据。
---
### **2. 查询成绩在70-80分的学生的学号、课程号和成绩**
```sql
SELECT SNO, CNO, GRADE
FROM SC
WHERE GRADE BETWEEN 70 AND 80;
```
**解释**: 使用了`BETWEEN...AND`关键字限定范围条件,并选择了需要显示的字段(SNO, CNO, GRADE)。
---
### **3. 统计每个系的学生人数**
```sql
SELECT SDEPT, COUNT(*) AS StudentCount
FROM S
GROUP BY SDEPT;
```
**解释**: 这里通过`COUNT(*)`统计每个系的人数,并用`GROUP BY SDEPT`将结果按照院系分类汇总。
---
### **4. 查询选修C001课程号的学生姓名和所在系**
```sql
SELECT S.SNAME, S.SDEPT
FROM S
JOIN SC ON S.SNO = SC.SNO
WHERE SC.CNO = 'C001';
```
**解释**: 需要用到连接查询 (`JOIN`) 将学生表 (S) 和选课表 (SC) 关联起来。关联条件为学生的学号一致 (`S.SNO = SC.SNO`) 并过滤出选修'C001'这门课程的学生信息。
---
### **5. 在学生表S上按学号降序建立唯一索引IX_stu**
```sql
CREATE UNIQUE INDEX IX_stu
ON S(SNO DESC);
```
**解释**: 创建了一个名为`IX_stu` 的唯一索引,其中指定了排序规则(`DESC`, 即降序排列)。
---
### **6. 查询总成绩超过300分的学生,要求列出其学号和总成绩**
```sql
SELECT SNO, SUM(GRADE) AS TotalGrade
FROM SC
GROUP BY SNO
HAVING SUM(GRADE) > 300;
```
**解释**: 先对每一学生的选课记录进行分组并求和(`SUM(GRADE)`), 然后利用`HAVING`筛选条件找出那些总分数大于300的数据行。
---
###
阅读全文
相关推荐


















