基于教学数据库jxsk完成下面的问题:对学生选课表SC,先按课号CNO升序排列,再按成绩SCORE降序排列。
时间: 2023-06-20 09:10:25 浏览: 139
可以使用如下的SQL语句实现:
```
SELECT * FROM SC ORDER BY CNO ASC, SCORE DESC;
```
其中,`ORDER BY`关键字用于指定排序方式。在这里,我们先按照`CNO`升序排列,再按照`SCORE`降序排列。`ASC`表示升序,`DESC`表示降序。最终结果将返回整个选课表SC,按照所述方式排序后的结果。
相关问题
基于教学数据库jxsk,创建下面触发器,并给出正反实例。要求使用sql server的语法,为数据库表SC创建一个触发器,将成绩按下列对应关系由分数转换成等级:小于60分,不及格;60-70分,及格;70-80分,中;80-90分,良;90分以上,优。
触发器可以使用 SQL Server Management Studio 创建,也可以使用 T-SQL 语句创建。以下是使用 T-SQL 创建触发器的示例:
```sql
USE jxsk;
GO
CREATE TRIGGER trg_SC
ON SC
AFTER INSERT, UPDATE
AS
BEGIN
UPDATE SC SET grade =
CASE
WHEN score < 60 THEN '不及格'
WHEN score >= 60 AND score < 70 THEN '及格'
WHEN score >= 70 AND score < 80 THEN '中'
WHEN score >= 80 AND score < 90 THEN '良'
WHEN score >= 90 THEN '优'
END
FROM inserted i
WHERE SC.sid = i.sid AND SC.cno = i.cno;
END;
```
这个触发器会在 SC 表的插入和更新操作之后触发。它会将分数转换成对应的等级,并将结果存储到表中的 grade 列中。
以下是一个正例:假设 SC 表中已经有一条记录,其中 sid = '001',cno = '001',score = 85,grade = NULL。现在我们向 SC 表中插入一条新记录,sid = '001',cno = '002',score = 78。触发器会自动将这条记录的 grade 列更新为 '中'。
以下是一个反例:假设我们向 SC 表中插入一条记录,其中 sid = '002',cno = '001',score = 50。触发器会将这条记录的 grade 列更新为 '不及格'。如果我们再向 SC 表中更新分数,将 score 更新为 70,触发器会将这条记录的 grade 列更新为 '中'。
USE jxsk SELECT prof , TN AS 姓名,SEX , AGE , SAL + COMM AS 工资 FROM T ORDER BY PROF COMPUTE MAX ( SAL + COMM ) BY PROF COMPUTE MIN ( SAL + COMM ) BY PROF COMPUTE AVG ( SAL + COMM ) BY PROF GO把这其中的compute语句换成高版本sql server适用的语句
在高版本SQL Server中,可以使用以下语句替换原始语句中的COMPUTE语句:
```
USE jxsk
SELECT prof, TN AS 姓名, SEX, AGE, SAL + COMM AS 工资,
MAX(SAL + COMM) OVER(PARTITION BY prof) AS 'MAX ( SAL + COMM ) BY PROF',
MIN(SAL + COMM) OVER(PARTITION BY prof) AS 'MIN ( SAL + COMM ) BY PROF',
AVG(SAL + COMM) OVER(PARTITION BY prof) AS 'AVG ( SAL + COMM ) BY PROF'
FROM T
ORDER BY prof
```
这个新的SQL语句中,使用了OVER子句来替代了原来的COMPUTE语句。通过在OVER子句中使用PARTITION BY子句,我们可以计算每个职业中SAL+COMM的最大值、最小值和平均值。同时,我们仍然可以按照职业对结果进行排序。
阅读全文