sql中查询选过课的学生学号且选修表没有学生学号的代码
时间: 2024-03-19 09:44:02 浏览: 88
可以使用如下的 SQL 语句查询选过课的学生学号且选修表没有学生学号的代码:
```
SELECT DISTINCT cs.student_id
FROM course_selection cs
WHERE NOT EXISTS (
SELECT 1 FROM course_registration cr WHERE cr.student_id = cs.student_id
);
```
其中,`course_selection` 是选课记录表,`course_registration` 是选修表,`student_id` 是学生学号字段。
上述 SQL 语句中,通过子查询 `NOT EXISTS` 来判断某个学生是否在选修表中出现。如果不存在,则说明该学生选过课但是没有在选修表中注册,符合查询条件。最终查询结果中每个学生只出现一次,可以使用 `DISTINCT` 关键字去重。
相关问题
sql语言写出:学生表(Student)中存放学生的记录,学生选修表 (SC) 中存放学生的修课及成绩情况。创建一个触发器ScDel_Cascade,当删除Student中的数据时,数据表SC中有关刚刚删除学生的修课成绩信息也能被级联删除掉。
可以使用如下的 SQL 语句来创建名为 ScDel_Cascade 的触发器:
```sql
CREATE TRIGGER ScDel_Cascade
AFTER DELETE ON Student
FOR EACH ROW
BEGIN
DELETE FROM SC WHERE Sno = OLD.Sno;
END;
```
其中,OLD.Sno 表示被删除的学生的学号,这个学号将会被用来删除 SC 表中与该学生相关的修课成绩信息。这个触发器将会在每次从 Student 表中删除一条记录时被触发,从而确保 SC 表中与该学生相关的数据也会被级联删除。
选修表的学号与学生表的学号一致(外键),课程号与课程表的课程号一致(外键),成绩如果是考试课则为0-100,如果是考查课则是“优、良、中、及格、不及格”SQL
创建选修表(Elective):
```sql
CREATE TABLE Elective (
id INT PRIMARY KEY,
student_id INT,
course_id INT,
score VARCHAR(10),
FOREIGN KEY (student_id) REFERENCES Student(id),
FOREIGN KEY (course_id) REFERENCES Course(id)
);
```
创建学生表(Student):
```sql
CREATE TABLE Student (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
gender VARCHAR(10)
);
```
创建课程表(Course):
```sql
CREATE TABLE Course (
id INT PRIMARY KEY,
name VARCHAR(50),
teacher VARCHAR(50)
);
```
插入数据:
```sql
INSERT INTO Student (id, name, age, gender)
VALUES (1, '张三', 18, '男'),
(2, '李四', 19, '女'),
(3, '王五', 20, '男');
INSERT INTO Course (id, name, teacher)
VALUES (1, '数学', '张老师'),
(2, '语文', '李老师'),
(3, '英语', '王老师');
INSERT INTO Elective (id, student_id, course_id, score)
VALUES (1, 1, 1, '87'),
(2, 1, 2, '优'),
(3, 2, 1, '92'),
(4, 2, 3, '良'),
(5, 3, 2, '中'),
(6, 3, 3, '及格');
```
查询选修表(Elective):
```sql
SELECT * FROM Elective;
```
结果:
| id | student_id | course_id | score |
|----|------------|-----------|-------|
| 1 | 1 | 1 | 87 |
| 2 | 1 | 2 | 优 |
| 3 | 2 | 1 | 92 |
| 4 | 2 | 3 | 良 |
| 5 | 3 | 2 | 中 |
| 6 | 3 | 3 | 及格 |
查询学生表(Student):
```sql
SELECT * FROM Student;
```
结果:
| id | name | age | gender |
|----|------|-----|--------|
| 1 | 张三 | 18 | 男 |
| 2 | 李四 | 19 | 女 |
| 3 | 王五 | 20 | 男 |
查询课程表(Course):
```sql
SELECT * FROM Course;
```
结果:
| id | name | teacher |
|----|------|----------|
| 1 | 数学 | 张老师 |
| 2 | 语文 | 李老师 |
| 3 | 英语 | 王老师 |
阅读全文