查询Cno,Cname,总学分(50)与课程学分差,显示课程号,课程名,分差
时间: 2024-06-06 15:07:27 浏览: 60
这个查询需要使用课程表和成绩表,需要通过联表查询来实现。
SQL语句如下:
SELECT c.Cno, c.Cname, 50 - SUM(s.Credit) AS Credit_Difference
FROM Course c
JOIN Score s ON c.Cno = s.Cno
GROUP BY c.Cno, c.Cname
HAVING Credit_Difference <> 0;
解释:首先通过JOIN语句将课程表和成绩表联合起来,然后使用SUM函数计算每个课程的总学分,并用50减去该课程的总学分,得到分差。最后使用GROUP BY语句将结果按照课程号和课程名进行分组,并使用HAVING语句筛选出分差不为0的结果。
相关问题
使用mysql创建课程表Course(课程号Cno,课程名Cname,先行课Cpno,学分Ccredit)
在MySQL中,你可以使用CREATE TABLE语句来创建一个名为`Course`的课程表,用于存储课程信息。这个表通常包括四列:课程号(course number)、课程名(course name)、先行课(prerequisite course number)和学分(credit)。以下是创建该表的SQL命令:
```sql
CREATE TABLE Course (
Cno INT PRIMARY KEY, -- 主键,代表课程号,一般设置为整数类型
Cname VARCHAR(100) NOT NULL, -- 课程名,字符串类型,这里假设最长为100字符
Cpno INT, -- 先行课编号,可以是NULL表示没有前置课程
Ccredit DECIMAL(4,1) -- 学分,保留一位小数的十进制类型
);
```
在这个表结构中:
- `Cno`是主键,每个课程都有唯一的课程号。
- `Cname`是一个非空的VARCHAR字段,用于存储课程名称。
- `Cpno`是一个INT类型的字段,如果某个课程没有先行课,则可以设置为NULL。
- `Ccredit`是一个DECIMAL类型,用于存储学分值,其中4表示总位数,1表示小数位。
"学生表 Student(Sno 学号、Sname 姓名、Ssex 性别、Sage 年龄、Sdept所在系); 课程表 Course(Cno 课程号、Cname 课程名 Cpno 选修课号、Ccredit 学分); 成绩表 SG(Sno学号、Cno 课程号、 Grade 成绩); 问题:查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列"
可以使用如下 SQL 语句进行查询:
```
SELECT SG.Sno, SG.Grade
FROM SG
WHERE SG.Cno = '3'
ORDER BY SG.Grade DESC;
```
这个查询语句会在成绩表 SG 中查找选了课程号为 3 的学生的学号和成绩,并按照成绩的降序排列输出结果。
阅读全文