oracle查询不选1号课程的学生学号与姓名
时间: 2023-11-16 20:14:24 浏览: 35
您可以使用以下 SQL 语句来查询不选 1 号课程的学生学号与姓名:
```
SELECT s.id, s.name
FROM students s
WHERE s.id NOT IN (
SELECT sc.student_id
FROM scores sc
WHERE sc.course_id = 1
)
```
其中,`students` 表存储了所有学生的信息,包括 `id` 和 `name` 字段;`scores` 表存储了所有学生的成绩信息,包括 `student_id` 和 `course_id` 字段。以上 SQL 语句使用了子查询来查找选了 1 号课程的学生,然后在外层查询中使用 `NOT IN` 语句来排除这些学生,从而得到不选 1 号课程的学生学号与姓名。
相关问题
oracle 查询和“s001”号的同学学习的课程完全相同的其他同学学号和姓名;
假设您的学生和选课信息存储在以下两张表中:
- 学生表:student,包含字段 student_id(学号)和 student_name(姓名)。
- 选课表:selection,包含字段 student_id(学号)和 course_id(课程号)。
为了查询和“s001”号的同学学习的课程完全相同的其他同学学号和姓名,您可以按照以下步骤进行操作:
1. 找到“s001”号同学所选的所有课程。
```
SELECT course_id
FROM selection
WHERE student_id = 's001';
```
2. 找到选了上述课程的其他同学。
```
SELECT DISTINCT student_id
FROM selection
WHERE course_id IN (
SELECT course_id
FROM selection
WHERE student_id = 's001'
)
AND student_id != 's001';
```
3. 将上述查询结果与学生表进行 JOIN,获取其他同学的学号和姓名。
```
SELECT s.student_id, s.student_name
FROM student s
JOIN (
SELECT DISTINCT student_id
FROM selection
WHERE course_id IN (
SELECT course_id
FROM selection
WHERE student_id = 's001'
)
AND student_id != 's001'
) t
ON s.student_id = t.student_id;
```
综合以上三个查询,您可以得到和“s001”号的同学学习的课程完全相同的其他同学的学号和姓名。
在学生课程数据库中完成: 编写一个存储过程,修改给定学号、课程号的学生成绩。
好的,以下是一个可能的练习题,希望能够帮助你巩固Oracle存储过程的知识。
题目要求:
在一个学生课程数据库中,有一个名为SC(学生-课程)的表格,其中每条记录包含三个字段:学生ID、课程ID和成绩。现在需要你编写一个存储过程,用于修改给定学号、课程号的学生成绩。
要求实现的存储过程应该满足以下条件:
1. 存储过程的名称为update_score,其中学生ID、课程ID和新的成绩作为输入参数。
2. 存储过程应该能够找到SC表格中指定学生、指定课程的记录,并将其成绩更新为新的成绩。
3. 存储过程应该返回成功更新的记录数目。
参考答案:
下面是一个可能的参考答案,仅供参考。请注意,实际的存储过程实现可能会因为具体的数据库结构和要求而有所不同。
```
CREATE OR REPLACE PROCEDURE update_score(p_student_id IN NUMBER, p_course_id IN NUMBER, p_new_score IN NUMBER, p_updated_count OUT NUMBER) AS
BEGIN
UPDATE SC SET score = p_new_score WHERE student_id = p_student_id AND course_id = p_course_id;
p_updated_count := SQL%ROWCOUNT;
END;
```
在这个存储过程中,我们首先使用UPDATE语句更新SC表格中指定学生、指定课程的记录,并将其成绩更新为新的成绩。然后,我们使用SQL%ROWCOUNT内置变量来获取成功更新的记录数目,并将其赋值给输出参数p_updated_count。
你可以使用以下代码来调用这个存储过程,并查看返回结果:
```
DECLARE
updated_count NUMBER;
BEGIN
update_score(1, 1, 85, updated_count);
DBMS_OUTPUT.PUT_LINE('Updated ' || updated_count || ' records.');
END;
```
在这个例子中,我们将学生ID设为1,课程ID设为1,新的成绩设为85,然后调用存储过程update_score,并将返回的记录数存储在变量updated_count中。最后,我们使用DBMS_OUTPUT.PUT_LINE函数将结果输出到控制台。