SQL查询案例

先创建三个表,分别为student,course,SC(即学生表,课程表,选课表)
建表语句:

create table student(
  Sno int,
  Sname varchar(255),
  Sage int,
  Sex varchar(10),
  Sdept varchar(100),
  primary key(Sno)
  );
create table course(
  Cno varchar(10),
  Cname varchar(255),
  hours int,
  primary key(Cno)
);
create table sc(
  Sno int,
  Cno varchar(10),
  Grade int
);

insert into student values
(9512101,'李勇',19,'男','计算机系'),
(9512102,'刘晨',20,'男','计算机系'),
(9512103,'王敏',20,'女','计算机系'),
(9521101,'张立',22,'男','信息系'),
(9521102,'吴斌',21,'女','信息系'),
(9521103,'张海',20,'男','信息系'),
(9531101,'钱小利',18,'女','数学系'),
(9531102,'王大利',19,'男','数学系');

insert into course values
('C01','计算机文化学',70),
('C02','VB',90),
('C03','计算机网络',80),
('C04','数据库基础',108),
('C05','高等数学',180),
('C06','数据结构',72);

insert into sc values
(9512101,'C01',90),
(9512101,'C02',86),
(9512101,'C06',null),
(9512102,'C02',78),
(9512102,'C04',66),
(9512102,'C01',82),
(9521102,'C02',75),
(9521102,'C04',92),
(9521102,'C05',50),
(9521103,'C02',68),
(9521103,'C06',null),
(9531101,'C01',80),
(9531101,'C05',90),
(9531102,'C05',85);

建表情况如下:
这里写图片描述
这里写图片描述
这里写图片描述
1.分别查询学生表和学生修课表中的全部数据。

select * from student;
select * from course;

2.查询成绩在70到80分之间的学生的学号、课程号和成绩。

select Sno,Cno,Grade from sc where Grade between 70 and 80

3.查询C01号课程成绩最高的分数

select max(Grade) from sc where Cno='C01'
select Grade from sc where Cno='C01' order by Grade desc limit 1

4.查询学生都选修了哪些课程,要求列出课程号。

select Cname,Cno from course where Cno in (select Cno from sc) 

5.查询修了C02号课程的所有学生的平均成绩、最高成绩和最低成绩。

select avg(Grade),max(Grade),min(Grade) from sc where Cno='C02'

6.统计每门课程的修课人数和考试最高分。

select Cname,count(*),max(Grade) from course,sc where sc.Cno=course.Cno group by sc.Cno;

7.统计每个学生的选课门数,并按选课门数的递增顺序显示结果。

select Sname,count(*) as '选课门数' from student,sc where student.Sno=sc.Sno group by sc.Sno order by count(*)

8.统计选修课的学生总数和考试的平均成绩。

select count(distinct Sno),avg(Grade) from sc

9.查询选课门数超过2门的学生的平均成绩和选课门数。

select Sname,avg(Grade),count(*) from student,sc where sc.Sno=student.Sno group by sc.Sno having count(*)>2

10.列出总成绩超过200分的学生,要求列出学号、总成绩。

select Sno,sum(Grade) from sc group by Sno having  sum(Grade)>200

11.查询选修了c02号课程的学生的姓名和所在系。

select Sname,Sdept from student where Sno in (select Sno from sc where Cno='C02')
select Sname,Sdept from student,sc where student.Sno=sc.Sno and Cno='C02'

12.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果。

select Sname,Cno,Grade from student,sc where student.Sno=sc.Sno and Grade>80 order by Grade desc

13.查询计算机系男生修了”数据库基础”的学生的姓名、性别、成绩。

select Sname,Sex,Grade from student,course,sc where student.Sno=sc.Sno and course.Cno=sc.Cno and Sdept='计算机系' and Cname='数据库基础'

14.查询哪些学生的年龄相同,要求列出年龄相同的学生的姓名和年龄。

select s1.Sname,s1.Sage from student s1 inner join student s2 on s1.Sage in (select Sage from student where s1.Sage=s2.Sage and s1.Sname !=s2.Sname) group by s1.Sname,s1.Sage order  by s1.Sage

15.查询哪些课程没有人选,要求列出课程号和课程名。

select Cno,Cname from course where Cno not in (select Cno from sc)

16.查询有考试成绩的所有学生的姓名、修课名称及考试成绩

select Sname,Cname,Grade from student,course,sc where student.Sno=sc.Sno and course.Cno=sc.Cno and sc.Grade is not null

17.分别查询信息系和计算机系的学生的姓名、性别、修课名称、修课成绩,

select Sname,Sex,Cname,Grade from student,sc,course where student.Sno=sc.Sno and course.Cno=sc.Cno and student.Sdept='计算机系'
select Sname,Sex,Cname,Grade from student,sc,course where student.Sno=sc.Sno and course.Cno=sc.Cno and student.Sdept='信息系'

18.用子查询实现如下查询:
(1) 查询选修了C01号课程的学生的姓名和所在系。

select Sname,Sdept from student where Sno in (select Sno from sc where Cno='C01')

(2) 查询数学系成绩80分以上的学生的学号、姓名。

select Sno,Sname from student where Sno in (select Sno from sc where Grade>80) and Sdept='数学系'

(3) 查询计算机系学生所选的课程名.

select Cname from course where Cno in (select Cno from sc where Sno in ( select Sno from student where Sdept='计算机系'))

猜你喜欢

转载自blog.csdn.net/weixin_42839144/article/details/81396008