SQL查询更新语句课堂练习和习题Word文档格式.docx
《SQL查询更新语句课堂练习和习题Word文档格式.docx》由会员分享,可在线阅读,更多相关《SQL查询更新语句课堂练习和习题Word文档格式.docx(12页珍藏版)》请在冰点文库上搜索。
![SQL查询更新语句课堂练习和习题Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/59c1ec0e-3ff4-4aa4-a246-1f0dbe52a0f7/59c1ec0e-3ff4-4aa4-a246-1f0dbe52a0f71.gif)
ANDX.Sno>
Y.SnoANDX.SAGE<
Y.SAGE
SELECTSNAME
froms
wheresno>
(selectsnofromswhereSNAME='
)
andSAGE<
(selectsAGEfromswhereSNAME='
6.检索姓名以WANG打头的所有学生的姓名和年龄。
SELECTSNAME,SAGE
FROMS
WHERESNAMELIKE'
WANG%'
7.在SC中检索成绩为空值的学生学号和课程号。
SELECTSno,CnoFROMSCWHEREGRADEISNULL
8.求年龄大于女同学平均年龄的男学生姓名和年龄。
SELECTSNAME,SAGE
FROMS
WHERESSEX='
男'
ANDSAGE>
(SELECTAVG(SAGE)FROMSWHERESSEX='
女'
9.求年龄大于所有女同学年龄的男学生姓名和年龄。
SELECTSNAME,SAGE
FROMSASX
WHEREX.SSEX='
ANDX.SAGE>
ALL(SELECTSAGEFROMSASYWHEREY.SSEX='
二、试用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更新操作:
要求用SQL更新语句实现如下处理:
1.往基本表S中插入一个学生元组(‘S9’,‘WU’,18)。
2.在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把
检索到的值送往另一个已存在的基本表S1(Sno,SNAME,SSEX)。
3.在基本表SC中删除尚无成绩的选课元组。
4.把WANG同学的学习选课和成绩全部删去。
5.把选修数据库原理课不及格的成绩全改为空值。
6.把低于总平均成绩的女同学成绩提高5%。
7.在基本表SC中修改4号课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现)。
参考答案:
INSERTINTOS(Sno,SNAME,SAGE)VALUES('
59'
'
WU'
18)
2.在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把检索到的值送往另一个已存在的基本表S1(Sno,SANME,SSEX)。
selectSno,SNAME,SSEXintos1fromstudent
deletefroms1
INSERTINTOS1(Sno,SNAME,SSEX)
SELECTSno,SNAME,SSEX
FROMSWHERENOTEXISTS(SELECT*FROMSCWHERE
GRADE<
80ANDS.Sno=SC.Sno)
select*froms1
考虑:
以上会有什么问题?
80ANDS.Sno=SC.SnoorS.Sno=SC.Snoandgradeisnull)
andsnoin(selectsnofromsc)
DELETEFROMSCWHEREGRADEISNULL
DELETEFROMSCWHERESnoIN(SELECTSno
WHERESNAME='
)
UPDATESCSETGRADE=NULL
WHEREGRADE<
60ANDCno
IN(SELECTCnoFROMC
WHERECNAME='
数据库原理'
UPDATESC
SETGRADE=GRADE*1.05
(SELECTAVG(GRADE)FROMSC)
ANDSnoIN(SELECTSnoFROMSWHERESSEX='
WHERECno='
4'
ANDGRADE<
=75
UPDATESC
SETGRADE=GRADE*1.04
ANDGRADE>
75
三、问题描述:
为管理岗位业务培训信息,建立3个表:
S
(Sno,SN,SD,SA)
Sno,SN,SD,SA
分别代表学号、学员姓名、所属单位、学员年龄
C
(Cno,CN
)
Cno,CN
分别代表课程编号、课程名称
SC
(
Sno,Cno,G
分别代表学号、所选修的课程编号、学习成绩
要求实现如下5个处理:
1.
使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名
2.
使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位
3.
使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位
4.
使用标准SQL嵌套语句查询只选修了一门课程的学员姓名和所属单位
5.
查询选修了课程的学员人数
6.
查询选修课程超过5门的学员学号和所属单位
1.使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名
SELECT
SN,SD
FROM
S
WHERE
[Sno]
IN(
C,SC
C.[Cno]=SC.[Cno]
AND
CN=N'
税收基础'
2.使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位
S.SN,S.SD
S,SC
S.[Sno]=SC.[Sno]
SC.[Cno]='
C2'
3.使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位
NOT
[Cno]='
C5'
4.使用标准SQL嵌套语句查询只选修了一门课程的学员姓名和所属单位
SELECTSN,SDFROMS
WHERE[Sno]IN(
SELECT[Sno]FROMSCinnerJOINCONSC.[Cno]=C.[Cno]
GROUPBY[Sno]
HAVINGCOUNT(*)=1)
5.查询选修了课程的学员人数
学员人数=COUNT(DISTINCT
[Sno])
SC
6.查询选修课程超过5门的学员学号和所属单位
GROUP
BY
[Sno]
HAVING
COUNT(DISTINCT
[Cno])>
5)
四、问题描述:
已知关系模式:
(SNO,SNAME)
学生关系。
SNO
为学号,SNAME
为姓名
(CNO,CNAME,TEACHER)
课程关系。
CNO
为课程号,CNAME
为课程名,TEACHER
为任课教师
SC(SNO,CNO,GRADE)
选课关系。
GRADE
为成绩
1.
找出没有选修过“李明”老师讲授课程的所有学生姓名
2.
列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
3.
列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
4.
列出“1”号课成绩比“04010002”号同学该门课成绩高的所有学生的学号
5.
列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
1.找出没有选修过“李明”老师讲授课程的所有学生姓名
selectsnamefromswherenotexists(select*fromc,scwhereo=oANDc.teacher=N'
李明'
ANDs.sno=sc.sno)
参考:
selectsno,snamefroms
wheresnonotin
(selectsnofromsc,cwhereo=o
ANDc.teacher=N'
liu'
2.列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
SELECTS.SNO,SNAME,AVG_GRADE=AVG(SC.GRADE)
FROMS,SC
WHEREGRADE<
60ands.sno=sc.sno
GROUPBYs.SNO,s.sname
HAVINGCOUNT(DISTINCTCNO)>
=2
或
SELECTS.SNO,S.SNAME,AVG_GRADE=AVG(SC.GRADE)
FROMS,SC,(
SELECTSNO
FROMSC
60
GROUPBYSNO
)AWHERES.SNO=A.SNOANDSC.SNO=A.SNO
GROUPBYS.SNO,S.SNAME
3.列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
SELECTS.SNO,S.SNAME
FROMS,sc
whereS.SNO=SC.SNOandcno='
1'
ands.snoin
(selectS.snofromS,sc
2'
FROMS,(
SELECTSC.SNO
FROMSC,C
WHERESC.CNO=C.CNO
ANDC.cnoIN('
GROUPBYSNO
HAVINGCOUNT(DISTINCTc.CNO)=2
)SCWHERES.SNO=SC.SNO
4。
FROMS,SC
WHERESC.CNO='
andSC.sNO=S.sNO
ANDgrade>
(selectgradefroms,sc
wheres.SNO='
04010002'
andSC.CNO='
andSC.sNO=S.sNO)
5。
SELECTSC1.SNO,[1号课成绩]=SC1.GRADE,[2号课成绩]=SC2.GRADE
FROMSCSC1,SCSC2
WHERESC1.CNO='
ANDSC2.CNO='
ANDSC1.SNO=SC2.SNO
ANDSC1.GRADE>
SC2.GRADE
四、通配符理解题(请说出下列通配符的含义)
1.LIKE'
Mc%'
将搜索以字母Mc开头的所有字符串(如McBadden)。
2.LIKE'
%inger'
将搜索以字母inger结尾的所有字符串(如Ringer、Stringer)。
3.LIKE'
%en%'
将搜索在任何位置包含字母en的所有字符串(如Bennet、Green、McBadden)。
4.LIKE'
_heryl'
将搜索以字母heryl结尾的所有六个字母的名称(如Cheryl、Sheryl)。
5.LIKE'
[M-Z]inger'
将搜索以字符串inger结尾、以从M到Z的任何单个字母开头的所有名称(如Ringer)。
6.LIKE'
M[^c]%'
将搜索以字母M开头,并且第二个字母不是c的所有名称(如MacFeather)。
7.LIKE'
5[%]'
--5%
8.LIKE'
5%'
--5后跟0个或更多字符的字符串
9.LIKE'
[_]n'
--_n
10.LIKE'
_n'
--an,in,on(andsoon)
11.LIKE'
[a-cdf]'
--a,b,c,d,orf
12.LIKE'
[-acdf]'
---,a,c,d,orf
13.LIKE'
[[]'
--[
14.LIKE'
]'
--]