sql练习题Word文件下载.docx

上传人:b****3 文档编号:17231607 上传时间:2022-11-29 格式:DOCX 页数:45 大小:67.85KB
下载 相关 举报
sql练习题Word文件下载.docx_第1页
第1页 / 共45页
sql练习题Word文件下载.docx_第2页
第2页 / 共45页
sql练习题Word文件下载.docx_第3页
第3页 / 共45页
sql练习题Word文件下载.docx_第4页
第4页 / 共45页
sql练习题Word文件下载.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

sql练习题Word文件下载.docx

《sql练习题Word文件下载.docx》由会员分享,可在线阅读,更多相关《sql练习题Word文件下载.docx(45页珍藏版)》请在冰豆网上搜索。

sql练习题Word文件下载.docx

不存在这样的课程y,学生2选修了y,而学生x没有选。

SELECTDISTINCTSno

FROMSCasSCX

WHERENOTEXISTS

(SELECT*

FROMSCasSCY

WHERESCY.Sno=‘2’ANDNOTEXISTS

(SELECT*

FROMSCSCZ

WHERESCZ.Sno=SCX.SnoANDSCZ.Cno=SCY.Cno))

5、求各门课程去掉一个最高分和最低分后的平均分

第一步,求所有成绩的平均分(去掉一个最高分和最低分)

select 

avg(GRADE) 

from 

SC 

 

 

where 

GRADE 

not 

in(select 

top 

SCorder 

by 

GRADE) 

and 

desc) 

第二步,将所有成绩按各门课程的课程号CNO分组

SELECTCNOavg(GRADE) 

desc)groupbyCNO

1、查询7号课程没有考试成绩的学生学号。

Selectsnofromscwherecno='

7'

andgradeisnull

2、查询7号课程成绩在90分以上或60分以下的学生学号。

Selectsnofromscwherecno='

andgradenotbetween60and90

3、查询课程名以“数据”两个字开头的所有课程的课程号和课程名。

Selectcno,cnamefromcwherecnamelike'

数据%'

4、查询每个学生所有课程的平均成绩,输出学生学号和平均成绩。

Selectsno,avg(grade)fromscgroupbysno

5、查询每门课程的选修人数,输出课程号和选修人数。

Selectcno,count(*)fromscgroupbycno

6、查询选修7号课程的学生的学号、姓名、性别。

Selects.sno,sname,ssexfroms,scwheres.sno=sc.snoandcno='

或:

Selectsno,sname,ssexfromswheresnoin

(Selectsnofromscwherecno='

7、查询选修7号课程的学生的平均年龄。

Selectavg(sage)froms,scwheres.sno=sc.snoandcno='

Selectavg(sage)fromswheresnoin

8、查询有30名以上学生选修的课程号。

Selectcnofromscgroupbycnohavingcount(*)>

30

9、查询至今没有考试不及格的学生学号。

Selectdistinctsnofromscwheresnonotin

(Selectsnofromscwheregrade<

60)

Selectsnofromscgroupbysnohavingmin(grade)>

10、查询所有考试成绩的平均分相同的学生学号分组

二、

1、找出选修课程号为C2的学生学号与成绩。

Selectsno,gradefromscwherecno='

C2'

2、找出选修课程号为C4的学生学号与姓名。

Selects.sno,snamefroms,scwheres.sno=sc.snoandcno='

C4'

注意本题也可以用嵌套做

思考本题改为“找出选修课程号为C4的学生学号、姓名与成绩”后还能用嵌套做吗?

3、找出选修课程名为Maths的学生学号与姓名。

Selects.sno,snamefroms,sc,c

wheres.sno=sc.snoando=oandcname='

Maths'

注意本题也可以用嵌套做

4、找出选修课程号为C2或C4的学生学号。

Selectdistinctsnofromscwherecnoin('

'

或:

Selectdistinctsnofromscwherecno='

orcno='

5、找出选修课程号为C2和C4的学生学号。

andsnoin

注意本题也可以用连接做

思考:

Selectdistinctsnofromscwherecno='

andcno='

正确吗?

6、找出不学C2课程的学生姓名和年龄。

Selectsname,sagefromswheresnonotin

Selectsname,sagefromswherenotexists

(Select*fromscwheresno=s.snoandcno='

7、找出选修了数据库课程的所有学生姓名。

(同3)

Selectsnamefroms,sc,c

wheres.sno=sc.snoando=oandcname='

数据库'

8、找出数据库课程不及格的女生姓名。

连接:

Selectsnamefroms,sc,c

andgrade<

60andssex='

女'

嵌套:

Selectsnamefromswheressex='

andsnoin

60andcnoin

(Selectcnofromcwherecname='

9、找出各门课程的平均成绩,输出课程名和平均成绩。

Selectcname,avg(grade)fromsc,c

whereo=ogroupbyo,cname

思考本题也可以用嵌套做吗?

10、找出各个学生的平均成绩,输出学生姓名和平均成绩。

Selectsname,avg(grade)froms,sc

wheres.sno=sc.snogroupbys.sno,sname

11、找出至少有30个学生选修的课程名。

Selectcnamefromcwherecnoin

(Selectcnofromscgroupbycnohavingcount(*)>

=30)

注意本题也可以用连接做

12、找出选修了不少于3门课程的学生姓名。

Selectsnamefromswheresnoin

(Selectsnofromscgroupbysnohavingcount(*)>

=3)

13、找出各门课程的成绩均不低于90分的学生姓名。

Selectsnamefroms,scwheres.sno=sc.sno

groupbys.sno,snamehavingmin(grade)>

=90

方法二:

Selectsnamefromswheresnonotin

90)

只要有一门不小于90分就会输出该学生学号

14、找出数据库课程成绩不低于该门课程平均分的学生姓名。

Selectsnamefroms,sc,c

andgrade>

(Selectavg(grade)fromsc,c

whereo=oandcname='

15、找出各个系科男女学生的平均年龄和人数。

Selectsdept,ssex,avg(sage),count(*)fromsgroupbysdept,ssex

16、找出计算机系(JSJ)课程平均分最高的学生学号和姓名。

Selects.sno,snamefroms,scwheres.sno=sc.snoandsdept='

JSJ'

groupbys.sno,sname

havingavg(grade)>

=ALL

(Selectavg(grade)froms,sc

wheres.sno=sc.snoandsdept='

groupbys.sno

17、(补充)查询每门课程的及格率。

本题可以分三步做:

第1步:

得到每门课的选修人数

createviewv_all(cno,cnt)

asselectcno,count(*)fromscgroupbycno

第2步:

得到每门课及格人数

createviewv_pass(cno,cnt_pass)

asselectcno,count(*)fromscwheregrade>

=60groupbycno

第3步:

每门课的及格人数/每门课选修人数

selectv_o,cnt_pass*100/cntfromv_all,v_pass

wherev_o=v_o

18、查询平均分不及格的学生的学号,姓名,平均分。

Selectsc.sno,sname,avg(grade)fromstudent,sc

wherestudent.sno=sc.sno

groupbysc.sno,sname

havingavg(grade)<

19、查询平均分不及格的学生人数。

Selectcount(*)fromstudent

wheresnoin

(selectsnofromscgroupbysnohavingavg(grade)<

下面是一个典型的错误

Selectcount(*)fromscgroupbysnohavingavg(grade)<

这是每个学生有几门不及格的数目

三、

1、查询工资在1000到3000元之间的男性业务员的姓名和办公室编号。

SelectYname,OnofromYWY

whereSalarybetween1000and3000andYsex='

男'

2、查询各个办公室的业务员人数,输出办公室编号和对应的人数。

SelectOno,count(*)fromYWYgroupbyOno

3、查询每个客户在2002年5月购买的总金额,输出客户号和相应的总金额。

SelectKno,sum(Fmoney)fromFP

whereFdatebetween'

2002.5.1'

and'

2002.5.31'

groupbyKno

4、查询2002年5月购买次数超过5次的所有客户号,且按客户号升序排序。

SelectKnofromFP

havingcount(*)>

5

orderbyKnoASC

5、查询各办公室男性和女性业务员的平均工资。

SelectOno,Ysex,avg(Salary)fromYWYgroupbyOno,Ysex

6、查询2002年5月曾经在王海亮业务员手中购买过商品的客户号、

客户姓名和联系电话。

SelectKno,Kname,PhonefromKHwhereKnoin

(SelectKnofromFP

andYnoin

(SelectYnofromYWYwhereYname='

王海亮'

7、查询所有工资比1538号业务员高的业务员的编号、姓名和工资。

SelectYno,Yname,SalaryfromYWYwhereSalary>

(SelectSalaryfromYWYwhereYno='

1538'

8、查询所有与1538号业务员在同一个办公室的其他业务员的编号和姓名。

SelectYno,YnamefromYWYwhereYno!

='

andOnoin

(SelectOnofromYWYwhereYno='

9、查询销售总金额最高的业务员的编号。

SelectYnofromFPgroupbyYnohavingsum(Fmoney)>

=ALL

(Selectsum(Fmoney)fromFPgroupbyYno)

10、查询所有业务员的编号、姓名、工资以及工资比他高的其他业务员的平均工资。

利用自连接

SelectY1.Yno,Y1.Yname,Y1.Salary,avg(Y2.Salary)

fromYWYY1,YWYY2

whereY1.Salary<

Y2.Salary

groupbyY1.Yno

四、

1、找出每个班级的班级代码、学生人数、平均成绩。

SelectBJDM,count(*),avg(CJ)fromSCgroupbyBJDM

2、找出每个学生的班级代码、学生姓名、考试科目数、总成绩。

SelectBJDM,XSXM,count(*),sum(CJ)fromSC

groupbyBJDM,BNXH,XSXM

3、输出一张表格,每位学生对应一条记录,包括字段:

班级代码、学生姓名、语文成绩、数学成绩、外语成绩。

SelectSC1.BJDM,SC1.XSXM,SC1.CJ,SC2.CJ,SC3.CJ

fromSCSC1,SCSC2,SCSC3

whereSC1.BJDM=SC2.BJDMandSC1.BNXH=SC2.BNXHand

SC2.BJDM=SC3.BJDMandSC2.BNXH=SC3.BNXHand

SC1.KM='

语文'

andSC2.KM='

数学'

andSC3.KM='

外语'

4、输出一张表格,有成绩低于60分的每位学生对应一条记录,包括字段:

班级代码、学生姓名、最低成绩。

SelectBJDM,XSXM,min(CJ)fromSC

whereCJ<

60groupbyBJDM,BNXH,XSXM

havingmin(CJ)<

5、输出一张表格,有成绩低于60分的每位学生对应一条记录,包括字段:

班级代码、学生姓名、最高成绩、平均成绩。

SelectBJDM,XSXM,max(CJ)fromSC

请思考下列做法是否正确:

SelectBJDM,XSXM,max(CJ),avg(CJ)fromSC

60groupbyBJDM,BNXH,XSXM

6、输出一张表格,所有成绩都不低于60分的每位学生对应一条记录,包括字段:

班级代码、学生姓名、平均成绩。

SelectBJDM,XSXM,avg(CJ)fromSC

havingmin(CJ)>

7、输出一张表格,每一位学生对应一条记录,包括字段:

班级代码、学生姓名、去掉一个最低分后的平均成绩。

SelectBJDM,XSXM,(sum(CJ)-min(CJ))/(count(*)-1)fromSC

8、输出一张表格,每门科目对应一条记录,包括字段:

科目、去掉一个最低分后的平均成绩。

SelectKM,(sum(CJ)-min(CJ))/(count(*)-1)fromSC

groupbyKM

实验指导中“八SQL查询语句”的答案

1、查询年龄在19至21岁之间的女生的学号,姓名,年龄,按年龄从大到小排列。

Selectsno,sname,sagefromstudent

wheresagebetween19and21andssex='

orderbysagedesc

2、查询姓名中有“明”字的学生人数。

Selectcount(*)fromstudent

wheresnamelike"

%明%"

3、查询1001课程没有成绩的学生的学号。

1001'

andgradeisnull

4、查询JSJ、SX、WL系的学生学号,姓名,结果按系及学号排列。

Selectsno,sname,sdeptfromstudent

wheresdeptin('

'

SX'

WL'

orderbysdept,sno

5、计算每一门课的总分、平均分,最高分、最低分。

Selectcno,sum(grade),avg(grade),max(grade),min(grade)

fromsc

groupbycno

6、查询平均分大于90分的男学生学号及平均分。

selectsc.sno,avg(grade)fromstudent,sc

wherestudent.sno=sc.snoandssex=’男’

groupbysc.sno

havingavg(grade)>

90

selectsno,avg(grade)fromsc

wheresnoin(selectsnofromstudentwheressex='

groupbysno

7、查询选修课程超过2门的学生姓名。

selectsnamefromstudent,sc

wherestudent.sno=sc.sno

groupbysc.sno,sname

2

本题也可以用嵌套做

8、查询JSJ系的学生选修的课程号。

Selectdistinctcnofromstudent,sc

wherestudent.sno=sc.snoandsdept='

9、查询选修1002课程的学生的学生姓名(用连接和嵌套2种方法)

Selectsnamefromstudent,sc

wherestudent.sno=sc.snoandcno='

1002'

Selectsnamefromstudentwheresnoin

(selectsnofromscwherecno='

10、查询学生姓名以及他选修课程的课程号及成绩。

Selectsname,cno,gradefromstudent,sc

思考本题也可以用嵌套做吗?

11、查询选修“数据库原理”课且成绩80以上的学生姓名(用连接和嵌套2种方法)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1