create table student( sno varchar(50) primary key, --学号 sname varchar(50), sage int check(sage between 12 and 40), ssex varchar(50), sdept varchar(50) --系名 ) create table course( cno varchar(50) primary key, --课号 cname varchar(50), credit int check(credit between 1 and 6), ctime int --学时 ) create table sc( sno varchar(50), cno varchar(50), grade decimal(5,2) check(grade between 0 and 100) --成绩 ) 根据上面基本表的信息完成下列查询。 1 查询选修了数据库原理的学生的人数和平均成绩。 2 查询选修3门课 以上的学生姓名。 3列出人数超过1000人的系名。 4 查询所有课程都及格的学生姓名。用sql语句完成查询
时间: 2023-11-27 14:54:03 浏览: 105
1. 查询选修了数据库原理的学生的人数和平均成绩。
```
SELECT COUNT(DISTINCT sno) AS '选修数据库原理的学生人数', AVG(grade) AS '平均成绩'
FROM sc
WHERE cno = '001';
```
2. 查询选修3门课以上的学生姓名。
```
SELECT s.sname AS '学生姓名'
FROM student s
INNER JOIN (
SELECT sno, COUNT(*) AS '选修课程数'
FROM sc
GROUP BY sno
HAVING COUNT(*) >= 3
) t ON s.sno = t.sno;
```
3. 列出人数超过1000人的系名。
```
SELECT sdept AS '系名', COUNT(*) AS '学生人数'
FROM student
GROUP BY sdept
HAVING COUNT(*) > 1000;
```
4. 查询所有课程都及格的学生姓名。
```
SELECT s.sname AS '学生姓名'
FROM student s
WHERE NOT EXISTS (
SELECT cno
FROM course
WHERE NOT EXISTS (
SELECT *
FROM sc
WHERE sc.cno = course.cno AND sc.sno = s.sno AND sc.grade >= 60
)
);
```