SQL(Structured Query Language)是具有数据操作和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的遍历,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。SQL语言不仅能独立应用于终端,开可以作为子语言为其它程序设计提供有效助力,该程序应用中,SQL可与其它程序语言一起优化程序功能,进而为用户提供更多更全面的信息。

一、SQL基础表

学生表:

sid sname sage
s01 王1 18
s02 王2 19
s03 王3 18
s04 王4 17
s05 王5 19
s06 王6 18

老师表:

tid tname
t01 老1
t02 老2
t03 老3
t04 老4
t05 老5
t06 老6

课程表:

cid cname cteacher
c01 高等数学 老1
c02 英语 老2
c03 计算机基础 老3
c04 汇编语言 老4
c05 垫子方案 老5

成绩表:

sid cid cscore
s01 c01 58
s01 c02 59
s01 c03 55
s02 c02 83
s02 c05 79
s02 c04 77
s03 c01 55
s03 c03 81
s03 c04 73
s04 c01 67
s04 c02 78
s04 c03 82
s04 c05 80
s05 c01 61
s04 c04 78

二、SQL查询语法

1、查询名字中含有“王1”字的学生信息

 2、查询并统计同龄学生人数

 3、查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程降序排序

4、按平均成绩从高到低 显示所有学生的平均成绩

5、查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分

 6、按各科平均成绩从低到高顺序排序

 7、查询学生的总成绩并进行排名

8、 检索至少选修两门课程的学生学号

9、 查询每门课程被选修的学生数

 

10、 查询不及格的课程,并按课程号从大到小排序

11、 查询出只选修了一门课程的全部学生的学号和姓名

12、查询课程编号为“01”且课程成绩在60分以上的学生的学号和姓名

 

13、查询“01”课程比“02”课程成绩高的所有学生的学号

14、 查询平均成绩大于60分的同学的学号和平均成绩

15、 查询姓名“老3”的老师的个数

 

16、查询没有学过“老1”老师课的同学的学号、姓名 

17、 查询学过编号“01”并且也学过编号“02”课程的同学的学号、姓名

18、 查询没学过“老2”老师讲授的任何一门课程的学生姓名

 19、查询所有同学的学号、姓名、选课数、总成绩

 20、查询学过‘老4’老师所教的课的同学的学号、姓名

21、 查询课程编号“01”的成绩比课程编号“02”课程低的所有同学的学号、姓名

select sid,sname from 学生 where sid in(select sc1.sid from 成绩 sc1,成绩 sc2 
where 
sc1.sid=sc2.sid and sc1.cid='c01' and sc2.cid='c02' and sc1.cscore < sc2.cscore)

22、查询所有课程成绩小于60分的同学的学号、姓名

 

select sid,sname from 学生 where sid not in(select distinct(sid)from 成绩 where cscore>=60) and sid in(select sid from 成绩 group by sid having count(sid)!=0)


select sid,sname from 学生 where sid not in(select s.sid from 学生 s left join 成绩 sc on s.sid=sc.sid where cscore>60 or cscore is null)

或 
select sid,sname from 学生 where  in(select sc.sid from 成绩 sc group by sid having max(sc.cscore)<60)

23、查询没有学全所有课的同学的学号、姓名

select s.sid,s.sname from 学生 s left join 成绩 sc on s.sid=sc.sid group by s.sid having count(s.sid)!=(select count(1) from 课程)

 24、查询至少有一门课与学号为“01”的同学所学相同的同学的学号和姓名

select sid,sname from 学生 where sid in(select distinct(sid)from 成绩where cid in(select cid from 成绩 where sid='s01')and sid!='s01')

select distinct(s.sid),sname from 学生 s
left join 成绩 sc on s.sid=sc.sid where sc.cid in(select cid from 成绩 where sid='s01')and s.sid!='s01'

25、查询和“01”号的同学学习的课程完全相同的其他同学的学号和姓名

 

26、 把“成绩”表中“老1”老师教的课的成绩都更改为此课程的平均成绩

27、查询两门及其以上不及格课程的同学的学号、姓名及其平均成绩

 select s.sid,s.sname,avg(sc.cscore)from 学生 s
left join 成绩 sc on s.sid=sc.sid where s.sid in (select sid form 成绩 sc where cscore<60 group by sid having count(sid)>2

28、检索“01”课程分数小于60,按分数降序排列的学生信息

select * from 学生 s left join 成绩sc on s.sid=sc.sid where sc.cscore<60 and sc.cid='c01' order by sc.cscore desc

29、查询不同老师所教不同课程平均分从高到低显示

select c.cteacher,c.cname,avg(sc.cscore)from 成绩sc
left join 课程 c on sc.cid=c.cid
group by sc.cid 
order by avg(sc.cscore)desc

30、查询选修“老5”老师所授课程的学生中,成绩最高的学生姓名及其成绩

select s.sname,max(sc.cscore)from 学生s
left join 成绩 sc on s.sid=sc.sid where sc.cid in(select cid from 课程 where cteacher ='老5')

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐