有一个[学生课程]数据库Stu_Cou,该数据库中包含三个表: 学生表: Student(Sno,Sname,Ssex,Sbirth,Spre,Sclass,Sdept) ,Sno 为关键字。 表示由学号(Sno)、姓名(Sname)、性别(Ssex)、出生日期(Sbirth)、已修学分(Spre)、班级(Sclass)、所在系(Sdept)七个属性,其中Sno为主码。 课程表Course由课程号(Cno)、课程名(Cname)、课程类型(Ctype)、先修课号(Cpno)、学分(Ccredit)五个个属性组成,记为:Course(Cno,Cname,Ctype,Cpno,Ccredit) ,Cno为主码。 学生选课表SC由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,记为: SC(Sno,Cno,Grade) (Sno, Cno)为主码。 要求用SQL语句完成:查询选修全部课程的学生姓名和学号。
时间: 2024-03-24 19:38:47 浏览: 58
可以使用以下 SQL 语句查询选修全部课程的学生姓名和学号:
```
SELECT Student.Sno, Student.Sname
FROM Student
WHERE NOT EXISTS (
SELECT *
FROM Course
WHERE NOT EXISTS (
SELECT *
FROM SC
WHERE SC.Sno = Student.Sno AND SC.Cno = Course.Cno
)
);
```
这条语句中,首先在 `Student` 表中选择出所有学生的学号和姓名,然后使用子查询判断该学生是否选修了全部课程。如果该学生存在一门课程未选修,那么这个子查询返回值不为空,那么该学生就不符合要求。最后返回符合要求的学生的学号和姓名。
相关问题
用MySQL写一篇关于 2、现有学生,课程,成绩三张表。 student(学生表):stu_id:学生id,stu_name:学生姓名,birthday:学生出生日期,stu_sex:学生性别。 course(课程表):cou_id:课程id,cou_name:课程名字。 grades(成绩表):stu_id:学生id,cou_id:课程id;score:成绩。 学生表student 课程表course 成绩表grades (1)查询名字中含有“云”字的学生信息。要求:写出查询的字段名。 (2)查询每门课的最高成绩、最低成绩、平均成绩。要求:查询结果列表名分别为课程、最高成绩、最低成绩、平均成绩。
好的,您的问题我已经接收到了。以下是您所需要的MySQL代码:
(1) 查询名字中含有“云”字的学生信息,字段名为:学生id、学生姓名、学生出生日期、学生性别。
```sql
SELECT stu_id, stu_name, birthday, stu_sex
FROM student
WHERE stu_name LIKE '%云%';
```
(2) 查询每门课的最高成绩、最低成绩、平均成绩,查询结果列表名分别为:课程、最高成绩、最低成绩、平均成绩。
```sql
SELECT cou_name AS 课程, MAX(score) AS 最高成绩, MIN(score) AS 最低成绩, AVG(score) AS 平均成绩
FROM course
INNER JOIN grades ON course.cou_id = grades.cou_id
GROUP BY cou_name;
```
希望以上MySQL代码能够解决您的问题,如有疑问请随时追问。
8、用Create命令创建一个表名为Stu_Aver数据表,包含:学号:Sno char(9),姓名:Sname Varchar(10),平均成绩:Aver_score Numeric(5,1)三个字段,学号为主键。使用Insert命令把Student表中的所有学号和姓名添加到Stu_Aver表中。10、使用Update命令更新Stu_Aver表中的平均成绩。
好的,我明白了你的问题。以下是你需要执行的 SQL 语句:
1. 创建表 Stu_Aver
```
CREATE TABLE Stu_Aver (
Sno char(9) PRIMARY KEY,
Sname varchar(10),
Aver_score numeric(5,1)
);
```
2. 将 Student 表中的学号和姓名插入到 Stu_Aver 表中:
```
INSERT INTO Stu_Aver (Sno, Sname)
SELECT Sno, Sname FROM Student;
```
3. 使用 Update 命令更新 Stu_Aver 表中的平均成绩:
```
UPDATE Stu_Aver SET Aver_score = (
SELECT AVG(score) FROM Grade WHERE Grade.Sno = Stu_Aver.Sno
);
```
以上 SQL 语句可以实现你的要求。请注意,在执行这些语句之前,请确保你已经正确连接到了数据库,并且有足够的权限执行这些操作。
阅读全文