设选课数据库有:学生表 S(sno , sname , sgender, sage),分别表示学号、姓名、性别、年龄;课程表 C(cno , cname , ccredit ),分别表示课程号、课程名、学分;选课表 SC(sno , cno , score ),分别表示学号、课程号、分数;加下划线为主码;SC 中分数介于 0-100,S 中性别只能取男或者女,年龄大于 15 小于 40。请完成: 6、(4 分)用 SQL 将学号为 200103305 同学所有选修课程的分数加 10 分。此语句能否执行成功?若能,给出执行后结果;不能的话,说明理由。 7、(4 分)用 SQL 将 SC 表插入权限授予用户 Jack,并收回。(用户 Jack 已经存在) 8、(2 分)用 SQL 插入一个学生:学号 200102310,姓名张三,年龄 18,性别男。
时间: 2024-02-12 07:06:53 浏览: 116
6、可以执行成功,SQL 语句如下:
```
UPDATE SC
SET score = score + 10
WHERE sno = '200103305';
```
执行后,学号为 200103305 的同学所有选修课程的分数都加了 10 分。
7、授权 SQL 语句如下:
```
GRANT INSERT ON SC TO Jack;
```
收回权限的 SQL 语句如下:
```
REVOKE INSERT ON SC FROM Jack;
```
8、插入学生的 SQL 语句如下:
```
INSERT INTO S (sno, sname, sgender, sage)
VALUES ('200102310', '张三', '男', 18);
```
相关问题
在oracle数据库中有三个表: S(Sno,Sname,Sgender,Sage,Sdept) 学生(学号,姓名,性别,年龄,系) SC(Sno,Cno,Grade) 选课(学号,课程号,成绩) C(Cno,Cname,Cpno,Ccredit) 课程(课程号,课程名,先行课,学分) 如何找出课程平均分第二的学生的SC表的信息;
可以使用以下 SQL 语句来找出课程平均分第二的学生的 SC 表的信息:
```
SELECT SC.Sno, AVG(SC.Grade) AS avg_grade
FROM SC
GROUP BY SC.Sno
HAVING AVG(SC.Grade) < (
SELECT MAX(avg_grade)
FROM (
SELECT AVG(SC.Grade) AS avg_grade
FROM SC
GROUP BY SC.Cno
ORDER BY AVG(SC.Grade) DESC
OFFSET 1 ROW FETCH NEXT 1 ROW ONLY
) t
)
ORDER BY AVG(SC.Grade) DESC
FETCH FIRST 1 ROW ONLY;
```
这里的思路是首先找出每个学生的平均分,然后找到平均分排名第二的课程平均分,再找到平均分小于该值的学生,按平均分降序排列,最后选取第一行即为所求。
Oracle数据库三个表如下: S(Sno,Sname,Sgender,Sage,Sdept) 学生(学号,姓名,性别,年龄,系) SC(Sno,Cno,Grade) 选课(学号,课程号,成绩) C(Cno,Cname,Cpno,Ccredit) 课程(课程号,课程名,先行课,学分) 给定学生学号,查询其选修成绩最高的那门课的课程名(要求创建函数实现)。
可以创建如下的函数来实现查询:
```sql
CREATE OR REPLACE FUNCTION get_max_grade_course (input_sno IN S.Sno%TYPE)
RETURN C.Cname%TYPE
IS
max_grade SC.Grade%TYPE;
max_grade_course C.Cname%TYPE;
BEGIN
SELECT MAX(Grade) INTO max_grade
FROM SC
WHERE Sno = input_sno;
SELECT Cname INTO max_grade_course
FROM C
WHERE Cno = (
SELECT Cno
FROM SC
WHERE Sno = input_sno AND Grade = max_grade
);
RETURN max_grade_course;
END;
```
函数的输入为学生的学号,输出为该学生选修成绩最高的课程名。首先在 SC 表中找到该学生的最高成绩,然后再在 C 表中找到对应的课程名。注意,在函数中需要使用 INTO 子句将查询结果赋值给变量。
阅读全文