select S 学号,Sname 姓名 from student where S in(select S 学号,count(C) 选课数 from sc group by S having 选课数>=2);
时间: 2024-03-30 13:35:05 浏览: 66
这是一个 SQL 查询语句,作用是查询选了两门及以上课程的学生的学号和姓名。具体解释如下:
1. 外层查询语句:select S 学号, Sname 姓名 from student where S in (...)
这个语句的作用是查询学生表中学号和姓名,其中学号必须在括号内的子查询结果集合中出现。
2. 内层查询语句:select S 学号, count(C) 选课数 from sc group by S having 选课数>=2
这个语句的作用是查询选课表 sc 中每个学生选课的数量,并按照学号进行分组。having 语句后面的条件限制了只查询选课数大于等于2的学生。
综上所述,这个 SQL 查询语句的作用是查询选了两门及以上课程的学生的学号和姓名。
相关问题
数据库StudentCourse 有表SC含Sno作学号,Cno作课程号,Grade作成绩。表Student含Sno作学号,Sname作姓名,Ssex作性别,Sbirthday作出生日期,Sdept作所在系,Memo作备注。表Course含Cno作先行课课程号,Cname作姓名,PreCourse作先行课,PreCno作选修课程号,Credit作学分,Semester作开课学期。查找计算机系的学生选修课程数大于2的学生的姓名、平均成绩和选课门数,并按平均成绩降序排列
可以使用以下 SQL 语句来实现:
```sql
SELECT S.Sname, AVG(SC.Grade) AS AvgGrade, COUNT(*) AS CourseCount
FROM Student AS S
JOIN SC ON S.Sno = SC.Sno
JOIN Course AS C ON SC.Cno = C.Cno
WHERE S.Sdept = '计算机系'
GROUP BY S.Sno, S.Sname
HAVING COUNT(*) > 2
ORDER BY AvgGrade DESC;
```
解释一下 SQL 语句:
- 首先从 `Student` 表、`SC` 表和 `Course` 表中联结出需要的数据;
- 然后筛选出 `Sdept` 为计算机系的学生;
- 使用 `GROUP BY` 将结果按学生分组,同时计算出每个学生的平均成绩和选课门数;
- 使用 `HAVING` 过滤出选修课程数大于 2 的学生;
- 最后按平均成绩降序排列。
有3个表 Student 学生表(学号,姓名,性别,年龄,组织部门) Course 课程表(编号,课程名称) Sc 选课表(学号,课程编号,成绩) 表结构如下: Student表 sno varchar[20] pk sname varchar[20] ssex char[1] sage int sdept varchar[20] sc表 sno varchar[20] fk1 cno varchar[20] fk2 grade double(4,1) course表 cno varchar[20] pk cname varchar[20] (1)、分别写出三个表的创建语句 (2)、写一个SQL语句,查询选修了’计算机原理’的学生学号和姓名: (3)、写一个SQL语句,查询'周星驰’同学选修了的课程名字: (4) 、写一个SQL语句,查询选修了5门课程的学生学号和姓名;
(1)、创建三个表的SQL语句如下:
-- 学生表
CREATE TABLE Student (
sno VARCHAR(20) PRIMARY KEY,
sname VARCHAR(20),
ssex CHAR(1),
sage INT,
sdept VARCHAR(20)
);
-- 课程表
CREATE TABLE Course (
cno VARCHAR(20) PRIMARY KEY,
cname VARCHAR(20)
);
-- 选课表
CREATE TABLE Sc (
sno VARCHAR(20),
cno VARCHAR(20),
grade DOUBLE(4, 1),
PRIMARY KEY (sno, cno),
FOREIGN KEY (sno) REFERENCES Student(sno),
FOREIGN KEY (cno) REFERENCES Course(cno)
);
(2)、查询选修了’计算机原理’的学生学号和姓名的SQL语句如下:
SELECT Student.sno, Student.sname
FROM Student
INNER JOIN Sc ON Student.sno = Sc.sno
INNER JOIN Course ON Sc.cno = Course.cno
WHERE Course.cname = '计算机原理';
(3)、查询'周星驰’同学选修了的课程名字的SQL语句如下:
SELECT Course.cname
FROM Course
INNER JOIN Sc ON Course.cno = Sc.cno
INNER JOIN Student ON Sc.sno = Student.sno
WHERE Student.sname = '周星驰';
(4)、查询选修了5门课程的学生学号和姓名的SQL语句如下:
SELECT Student.sno, Student.sname
FROM Student
INNER JOIN Sc ON Student.sno = Sc.sno
GROUP BY Student.sno, Student.sname
HAVING COUNT(*) = 5;
阅读全文
相关推荐










