2022年SQL实用查询练习题 .pdf
《2022年SQL实用查询练习题 .pdf》由会员分享,可在线阅读,更多相关《2022年SQL实用查询练习题 .pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实用经典练习题-创建测试数据create table Student(S#varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10)insert into Student values(01,N赵雷 ,1990-01-01,N男)insert into Student values(02,N钱电 ,1990-12-21,N男)insert into Student values(03,N孙风 ,1990-05-20,N男)insert into Student values(04,N李云 ,1990-08-06,N男)inser
2、t into Student values(05,N周梅 ,1991-12-01,N女)insert into Student values(06,N吴兰 ,1992-03-01,N女)insert into Student values(07,N郑竹 ,1989-07-01,N女)insert into Student values(08,N王菊 ,1990-01-20,N女)create table Course(C#varchar(10),Cname nvarchar(10),T#varchar(10)insert into Course values(01,N语文 ,02)insert
3、 into Course values(02,N数学 ,01)insert into Course values(03,N英语 ,03)create table Teacher(T#varchar(10),Tname nvarchar(10)insert into Teacher values(01,N张三)insert into Teacher values(02,N李四)insert into Teacher values(03,N王五)create table SC(S#varchar(10),C#varchar(10),score decimal(18,1)insert into SC
4、 values(01,01,80)insert into SC values(01,02,90)insert into SC values(01,03,99)insert into SC values(02,01,70)insert into SC values(02,02,60)insert into SC values(02,03,80)insert into SC values(03,01,80)insert into SC values(03,02,80)insert into SC values(03,03,80)insert into SC values(04,01,50)inse
5、rt into SC values(04,02,30)insert into SC values(04,03,20)insert into SC values(05,01,76)名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 20 页 -insert into SC values(05,02,87)insert into SC values(06,01,31)insert into SC values(06,03,34)insert into SC values(07,02,89)insert into SC values(07,03,98)go-1、查询 01课程比 02课程成
6、绩高的学生的信息及课程分数-1.1、查询同时存在 01课程和 02 课程的情况select a.*,b.score 课程 01的分数,c.score 课程 02的分数 from Student a,SC b,SC c where a.S#=b.S#and a.S#=c.S#and b.C#=01 and c.C#=02 and b.score c.score-1.2、查询同时存在 01课程和 02 课程的情况和存在01 课程但可能不存在02课程的情况(不存在时显示为null)(以下存在相同内容时不再解释)select a.*,b.score 课程01 的分数,c.score 课程 02 的分数
7、 from Student a left join SC b on a.S#=b.S#and b.C#=01 left join SC c on a.S#=c.S#and c.C#=02 where b.score isnull(c.score,0)-2、查询 01课程比 02课程成绩低的学生的信息及课程分数-2.1、查询同时存在 01课程和 02 课程的情况select a.*,b.score 课程 01的分数,c.score 课程 02的分数 from Student a,SC b,SC c where a.S#=b.S#and a.S#=c.S#and b.C#=01 and c.C#=
8、02 and b.score c.score-2.2、查询同时存在 01课程和 02 课程的情况和不存在01 课程但存在 02课程的情况select a.*,b.score 课程01 的分数,c.score 课程 02 的分数 from Student a left join SC b on a.S#=b.S#and b.C#=01 left join SC c on a.S#=c.S#and c.C#=02 where isnull(b.score,0)=60 order by a.S#名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 20 页 -4、查询平均成绩小于60 分的同
9、学的学生编号和学生姓名和平均成绩-4.1、查询在 sc 表存在成绩的学生信息的SQL 语句。select a.S#,a.Sname,cast(avg(b.score)as decimal(18,2)avg_score from Student a,sc b where a.S#=b.S#group by a.S#,a.Sname having cast(avg(b.score)as decimal(18,2)60 order by a.S#-4.2、查询在 sc 表中不存在成绩的学生信息的SQL 语句。select a.S#,a.Sname,isnull(cast(avg(b.score)as
10、 decimal(18,2),0)avg_score from Student a left join sc b on a.S#=b.S#group by a.S#,a.Sname having isnull(cast(avg(b.score)as decimal(18,2),0)60 order by a.S#-5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩-5.1、查询所有有成绩的SQL。select a.S#学生编号,a.Sname 学生姓名,count(b.C#)选课总数,sum(score)所有课程的总成绩 from Student a,SC b where a.S
11、#=b.S#group by a.S#,a.Sname order by a.S#-5.2、查询所有(包括有成绩和无成绩)的 SQL。select a.S#学生编号,a.Sname 学生姓名,count(b.C#)选课总数,sum(score)所有课程的总成绩 from Student a left join SC b on a.S#=b.S#group by a.S#,a.Sname order by a.S#-6、查询 李姓老师的数量-方法 1 select count(Tname)李姓老师的数量 from Teacher where Tname like N李%-方法 2 名师资料总结-
12、精品资料欢迎下载-名师精心整理-第 3 页,共 20 页 -select count(Tname)李姓老师的数量 from Teacher where left(Tname,1)=N李/*李姓老师的数量-1*/-7、查询学过 张三 老师授课的同学的信息select distinct Student.*from Student,SC,Course,Teacher where Student.S#=SC.S#and SC.C#=Course.C#and Course.T#=Teacher.T#and Teacher.Tname=N张三 order by Student.S#-8、查询没学过 张三
13、老师授课的同学的信息select m.*from Student m where S#not in(select distinct SC.S#from SC,Course,Teacher where SC.C#=Course.C#and Course.T#=Teacher.T#and Teacher.Tname=N张三)order by m.S#-9、查询学过编号为01并且也学过编号为02 的课程的同学的信息-方法 1 select Student.*from Student,SC where Student.S#=SC.S#and SC.C#=01 and exists(Select 1 f
14、rom SC SC_2 where SC_2.S#=SC.S#and SC_2.C#=02)order by Student.S#-方法 2 select Student.*from Student,SC where Student.S#=SC.S#and SC.C#=02 and exists(Select 1 from SC SC_2 where SC_2.S#=SC.S#and SC_2.C#=01)order by Student.S#-方法 3 select m.*from Student m where S#in(select S#from(select distinct S#fr
15、om SC where C#=01 union all select distinct S#from SC where C#=02)t group by S#having count(1)=2)order by m.S#-10、查询学过编号为01 但是没有学过编号为02 的课程的同学的信息名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 20 页 -方法 1 select Student.*from Student,SC where Student.S#=SC.S#and SC.C#=01 and not exists(Select 1 from SC SC_2 where SC_
16、2.S#=SC.S#and SC_2.C#=02)order by Student.S#-方法 2 select Student.*from Student,SC where Student.S#=SC.S#and SC.C#=01 and Student.S#not in(Select SC_2.S#from SC SC_2 where SC_2.S#=SC.S#and SC_2.C#=02)order by Student.S#-11、查询没有学全所有课程的同学的信息-11.1、select Student.*from Student,SC where Student.S#=SC.S#gr
17、oup by Student.S#,Student.Sname,Student.Sage,Student.Ssex having count(C#)(select count(C#)from Course)-11.2 select Student.*from Student left join SC on Student.S#=SC.S#group by Student.S#,Student.Sname,Student.Sage,Student.Ssex having count(C#)(select count(C#)from Course)11.3 select c.*from stude
18、nt c where exists(select*from course b where not exists(select*from sc a where a.c#=b.c#and c.s#=a.s#)-12、查询至少有一门课与学号为01 的同学所学相同的同学的信息select distinct Student.*from Student,SC where Student.S#=SC.S#and SC.C#in(select C#from SC where S#=01)and Student.S#01-13、查询和 01 号的同学学习的课程完全相同的其他同学的信息名师资料总结-精品资料欢迎下
19、载-名师精心整理-第 5 页,共 20 页 -select Student.*from Student where S#in(select distinct SC.S#from SC where S#01 and SC.C#in(select distinct C#from SC where S#=01)group by SC.S#having count(1)=(select count(1)from SC where S#=01)-14、查询没学过 张三 老师讲授的任一门课程的学生姓名select student.*from student where student.S#not in(s
20、elect distinct sc.S#from sc,course,teacher where sc.C#=course.C#and course.T#=teacher.T#and teacher.tname=N张三)order by student.S#-15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩select student.S#,student.sname,cast(avg(score)as decimal(18,2)avg_score from student,sc where student.S#=SC.S#and student.S#in(select S#fr
21、om SC where score=2)group by student.S#,student.sname-16、检索 01 课程分数小于60,按分数降序排列的学生信息select student.*,sc.C#,sc.score from student,sc where student.S#=SC.S#and sc.score=60,中等为:70-80,优良为:80-90,优秀为:=90-方法 1 select m.C#课程编号,m.Cname 课程名称,max(n.score)最高分,min(n.score)最低分,cast(avg(n.score)as decimal(18,2)平均分
22、,cast(select count(1)from SC where C#=m.C#and score=60)*100.0/(select count(1)from SC where C#=m.C#)as decimal(18,2)及格率(%),cast(select count(1)from SC where C#=m.C#and score=70 and score=80 and score=90)*100.0/(select count(1)from SC where C#=m.C#)as decimal(18,2)优秀率(%)from Course m,SC n where m.C#=
23、n.C#group by m.C#,m.Cname order by m.C#-方法 2 select m.C#课程编号,m.Cname 课程名称,(select max(score)from SC where C#=m.C#)最高分,(select min(score)from SC where C#=m.C#)最低分,(select cast(avg(score)as decimal(18,2)from SC where C#=m.C#)平均分,cast(select count(1)from SC where C#=m.C#and score=60)*100.0/(select coun
24、t(1)from SC where C#=m.C#)as decimal(18,2)及格率(%),cast(select count(1)from SC where C#=m.C#and score=70 and score=80 and score=90)*100.0/(select count(1)from SC where C#=m.C#)as decimal(18,2)优秀率(%)from Course m order by m.C#-19、按各科成绩进行排序,并显示排名-19.1 sql 2000用子查询完成-Score 重复时保留名次空缺select t.*,px=(select
25、count(1)from SC where C#=t.C#and score t.score)+1 from sc t order by t.c#,px-Score 重复时合并名次select t.*,px=(select count(distinct score)from SC where C#=t.C#and score=t.score)from sc t order by t.c#,px-19.2 sql 2005用 rank,DENSE_RANK完成-Score 重复时保留名次空缺(rank 完成)select t.*,px=rank()over(partition by c#orde
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年SQL实用查询练习题 2022 SQL 实用 查询 练习题
限制150内