文档库 最新最全的文档下载
当前位置:文档库 › SQL练习题

SQL练习题

SQL练习题
SQL练习题

测试表格

--1.学生表

Student(S#,Sname,Sage,Ssex)

--S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

--2.课程表

Course(C#,Cname,T#)

--C# --课程编号,Cname 课程名称,T# 教师编号

--3.教师表

Teacher(T#,Tname)

--T# 教师编号,Tname 教师姓名

--4.成绩表

SC(S#,C#,score)

--S# 学生编号,C# 课程编号,score 分数

创建测试数据

学生表 Student

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'男')

insert 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'女')

科目表Course

create table Course(C# varchar(10),Cname nvarchar(10),T# varchar(10)) insert into Course values('01' , N'语文' , '02')

insert into Course values('02' , N'数学' , '01')

insert into Course values('03' , N'英语' , '03')

教师表Teacher

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'王五')

成绩表SC

create table SC(S# varchar(10),C# varchar(10),score decimal(18,1)) insert into SC 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)

insert into SC values('04' , '02' , 30)

insert into SC values('04' , '03' , 20)

insert into SC values('05' , '01' , 76)

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)

1. 查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数

1.1 查询同时存在" 01 "课程和" 02 "课程的情况

1.2 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为null )

1.3 查询不存在" 01 "课程但存在" 02 "课程的情况

2. 查询平均成绩大于等于60 分的同学的学生编号和学生姓名和平均成绩

3. 查询在SC 表存在成绩的学生信息

4. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为null )

4.1 查有成绩的学生信息

5. 查询「李」姓老师的数量

6. 查询学过「张三」老师授课的同学的信息

7. 查询没有学全所有课程的同学的信息

8. 查询至少有一门课与学号为" 01 "的同学所学相同的同学的信息

9. 查询和" 01 "号的同学学习的课程完全相同的其他同学的信息

10. 查询没学过"张三"老师讲授的任一门课程的学生姓名

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

12. 检索" 01 "课程分数小于60,按分数降序排列的学生信息

13. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

14. 查询各科成绩最高分、最低分和平均分:

以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率

及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90

要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

15. 按各科成绩进行排序,并显示排名,Score 重复时保留名次空缺

15.1 按各科成绩进行排序,并显示排名,Score 重复时合并名次

16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺

16.1 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺

17. 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分比

18. 查询各科成绩前三名的记录

19. 查询每门课程被选修的学生数

20. 查询出只选修两门课程的学生学号和姓名

21. 查询男生、女生人数

22. 查询名字中含有「风」字的学生信息

23. 查询同名同性学生名单,并统计同名人数

24. 查询1990 年出生的学生名单

25. 查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列

26. 查询平均成绩大于等于85 的所有学生的学号、姓名和平均成绩

27. 查询课程名称为「数学」,且分数低于60 的学生姓名和分数

28. 查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)

29. 查询任何一门课程成绩在70 分以上的姓名、课程名称和分数

30. 查询不及格的课程

31. 查询课程编号为01 且课程成绩在80 分以上的学生的学号和姓名

32. 求每门课程的学生人数

33. 成绩不重复,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩

34. 成绩有重复的情况下,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩

35. 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

36. 查询每门功成绩最好的前两名

37. 统计每门课程的学生选修人数(超过5 人的课程才统计)。

38. 检索至少选修两门课程的学生学号

39. 查询选修了全部课程的学生信息

40. 查询各学生的年龄,只按年份来算

41. 按照出生日期来算,当前月日< 出生年月的月日则,年龄减一

42. 查询本周过生日的学生

43. 查询下周过生日的学生

44. 查询本月过生日的学生

45. 查询下月过生日的学生

答案参考,亲测,如有更优解答,有劳各位献上,供大家学习参考

[sql]view plain copy

1.select A.*,B.C#,B.score from (select * from SC where C#='01')A

2.left join(select * from SC where C#='02')B

3.on A.S#=B.S#

4.where A.score>B.score

5.--1 查询“ 01 ”课程比" 02 "课程成绩高的学生的信息及课程分数

6.

7.select * from (select * from SC where C#='01')A

8.left join (select * from SC where C#='02')B on A.S#=B.S#

9.where B.S# is not null

10.--1.1 查询同时存在" 01 "课程和" 02 "课程的情况

11.

12.select * from (select * from SC where C#='01')A

13.left join (select * from SC where C#='02')B on A.S#=B.S#

14.--1.2 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为null)

15.

16.select * from SC where C#='02'and S# not in(select S# from SC where C#='01

')

17.--1.3 查询不存在" 01 "课程但存在" 02 "课程的情况

18.

19.select A.S#,B.Sname,A.dc from(select S#,AVG(score)dc from SC group by S#)A

20.left join Student B on A.S#=B.S# where A.dc>=60

21.--2. 查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩

22.

23.select * from Student where S# in (select distinct S# from SC)

24.--3. 查询在 SC 表存在成绩的学生信息

25.

26.select B.S#,B.Sname,A.选课总数,A.总成绩from

27.(select S#,COUNT(C#)选课总数,sum(score)总成绩from SC group by S#)A

28.right join Student B on A.S#=B.S#

29.--4. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为null)

30.

31.select A.S#,B.Sname,A.选课总数,A.总成绩from

32.(select S#,COUNT(C#)选课总数,sum(score)总成绩from SC group by S#)A

33.left join Student B on A.S#=B.S#

34.--4.1 查有成绩的学生信息

35.

36.select COUNT(*)李姓老师数量from Teacher where Tname like '李%'

37.--5.查询「李」姓老师的数量

38.

39.select * from Student

40.where S# in(select distinct S# from SC

41.where C#=(select C# from Course

42.where T#=(select T# from Teacher where Tname='张三')))

43.--6.查询学过「张三」老师授课的同学的信息

44.

45.select * from Student where S# in(select S# from SC group by S# having COUNT

(C#)<3)

46.--7.查询没有学全所有课程的同学的信息

47.

48.select * from Student

49.where S# in(select distinct S# from SC where C# in(select C# from SC where S#

='01')

50.)

51.--8. 查询至少有一门课与学号为" 01 "的同学所学相同的同学的信息

52.

53.select * from Student

54.where S# in(select S# from SC where C# in(select distinct C# from SC where S#

='01') and S#<>'01'

55.group by S#

56.having COUNT(C#)>=3)

57.--9. 查询和" 01 "号的同学学习的课程完全相同的其他同学的信息

58.

59.select Sname from Student

60.where S# not in(select S# from SC

61.where C# in(select C# from Course where T# in(select T# from Teacher where Tn

ame='张三')

62.)

63.)--10. 查询没学过「张三」老师讲授的任一门课程的学生姓名

64.

65.select A.S#,A.Sname,B.平均成绩from Student A right join

66.(select S#,AVG(score)平均成绩from SC where score<60 group by S# having COUNT

(score)>=2)B

67.on A.S#=B.S#--11.查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

68.

69.select S#,score from SC where C#='01' and score<60 order by score desc

70.--12.检索" 01 "课程分数小于 60 ,按分数降序排列的学生信息

71.

72.select S#,max(case C# when'01'then score else 0 end)'01',

73.max(case C# when'02'then score else 0 end)'02',

74.MAX(case C# when'03'then score else 0 end)'03',AVG(score)平均分from SC

75.group by S# order by平均分desc

76.--13. (静态写法)按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

77.

78.select distinct A.C#,Cname,最高分,最低分,平均分,及格率,中等率,优良率,优秀率fro

m SC A

79.left join Course on A.C#=Course.C#

80.left join (select C#,MAX(score)最高分,MIN(score)最低分,AVG(score)平均分from S

C group by C#)B on A.C#=B.C#

81.left join (select C#,(convert(decimal(5,2),(sum(case when score>=60 then 1 el

se 0 end)*1.00)/COUNT(*))*100)及格率from SC group by C#)C on A.C#=C.C#

82.left join (select C#,(convert(decimal(5,2),(sum(case when score >=70 and scor

e<80 then 1 else 0 end)*1.00)/COUNT(*))*100)中等率from SC group by C#)D on A.

C#=D.C#

83.left join (select C#,(convert(decimal(5,2),(sum(case when score >=80 and scor

e<90 then 1 else 0 end)*1.00)/COUNT(*))*100)优良率from SC group by C#)E on A.

C#=E.C#

84.left join (select C#,(convert(decimal(5,2),(sum(case when score >=90 then 1 e

lse 0 end)*1.00)/COUNT(*))*100)优秀率

85.from SC group by C#)F on A.C#=F.C#

86.--14.查询各科成绩最高分、最低分和平均分:

87.--以如下形式显示:课程 ID ,课程 name ,最高分,最低分,平均分,及格率,中等率,

优良率,优秀率

88.--及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90

89.

90.select *,RANK()over(order by score desc)排名from SC

91.--15. 按各科成绩进行排序,并显示排名,Score 重复时保留名次空缺

92.

93.select *,DENSE_RANK()over(order by score desc)排名from SC

94.--15.1 按各科成绩进行排序,并显示排名,Score 重复时合并名次

95.

96.select *,RANK()over(order by总成绩desc)排名from(

97.select S#,SUM(score)总成绩from SC group by S#)A

98.--16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺

99.

100.select *,dense_rank()over(order by总成绩desc)排名from(

101.select S#,SUM(score)总成绩from SC group by S#)A

102.--16.1 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺

103.

104.select distinct A.C#,https://www.wendangku.net/doc/1918918933.html,ame,C.[100-85],C.所占百分比,D.[85-70],D.所占百分比,E.

[70-60],E.所占百分比,F.[60-0],F.所占百分比

105.from SC A

106.left join Course B ON A.C#=B.C#

107.left join (select C#,sum(case when score>85 and score<=100 then 1 else nul l end)[100-85],

108.convert(decimal(5,2),(sum(case when score>85 and score<100 then 1 else nul l end))*1.00/COUNT(*))*100 所占百分比from SC group by C#)C on A.C#=C.C# 109.left join (select C#,sum(case when score>70 and score<=85 then 1 else null e nd)[85-70],

110.convert(decimal(5,2),(sum(case when score>70 and score<=85 then 1 else nul l end))*1.00/COUNT(*))*100 所占百分比from SC group by C#)D on A.C#=D.C# 111.left join (select C#,sum(case when score>60 and score<=70 then 1 else null e nd)[70-60],

112.convert(decimal(5,2),(sum(case when score>60 and score<=70 then 1 else nul l end))*1.00/COUNT(*))*100 所占百分比from SC group by C#)E on A.C#=E.C# 113.left join (select C#,sum(case when score>0 and score<=60 then 1 else null en

d)[60-0],

114.convert(decimal(5,2),(sum(case when score>0 and score<=60 then 1 else null e nd))*1.00/COUNT(*))*100 所占百分比from SC group by C#)F on A.C#=F.C#

115.--17. 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[6 0-0] 及所占百分比

116.

117.select * from(select *,rank()over (partition by C# order by score desc)A fro m SC)B where B.A<=3

118.--18. 查询各科成绩前三名的记录(方法 1)

119.

120.select a.S#,a.C#,a.score from SC a

121.left join SC b on a.C#=b.C# and a.score

122.group by a.S#,a.C#,a.score

123.having COUNT(b.S#)<3

124.order by a.C#,a.score desc

125.--18. 查询各科成绩前三名的记录(取 a 的最高分与本表比较)(方法 2)

126.

127.select * from SC a where (select COUNT(*)from SC where C#=a.C# and score>a.s core)<3

128.order by a.C#,a.score desc

129.--18. 查询各科成绩前三名的记录(取 a)(方法 3)

130.

131.select C#,COUNT(S#)学生数from SC group by C#

132.--19. 查询每门课程被选修的学生数

133.

134.select S#,Sname from Student

135.where S# in(select S# from(select S#,COUNT(C#)课程数from SC group by S#)A wh ere A.课程数=2)

136.--20. 查询出只选修两门课程的学生学号和姓名

137.

138.select Ssex,COUNT(Ssex)人数from Student group by Ssex

139.--21. 查询男生、女生人数

140.

141.select * from Student where Sname like '%风%'

142.--22. 查询名字中含有「风」字的学生信息

143.

144.select A.*,B.同名人数from Student A

145.left join (select Sname,Ssex,COUNT(*)同名人数from Student group by Sname,Sse x)B

146.on A.Sname=B.Sname and A.Ssex=B.Ssex

147.where B.同名人数>1

148.--23. 查询同名同性学生名单,并统计同名人数

149.

150.select * from Student where YEAR(Sage)=1990

151.--24.查询 1990 年出生的学生名单

152.

153.select C#,AVG(score)平均成绩from SC group by C# order by平均成绩desc,C# 154.--25. 查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列

155.

156.select A.S#,A.Sname,B.平均成绩from Student A

157.left join (select S#,AVG(score)平均成绩from SC group by S#)B on A.S#=B.S# 158.where B.平均成绩>85

159.--26. 查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩

160.

161.select B.Sname,A.score from(select * from SC where score<60 and C#=(select C # from Course where Cname='数学'))A

162.left join Student B on A.S#=B.S#

163.-- 27. 查询课程名称为「数学」,且分数低于 60 的学生姓名和分数

164.

165.select A.S#,B.C#,B.score from Student A left join SC B on A.S#=B.S#

166.-- 28. 查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)

167.

168.select A.Sname,https://www.wendangku.net/doc/1918918933.html,ame,D.score from

169.(select B.*,https://www.wendangku.net/doc/1918918933.html,ame from(select * from SC where score>70)B left join Cours

e C on B.C#=C.C#)D

170.left join Student A on D.S#=A.S#

171.-- 29. 查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数

172.

173.select * from SC where score<60

174.-- 30. 查询不及格的课程

175.

176.select A.S#,B.Sname from (select * from SC where score>80 and C#=01)A 177.left join Student B on A.S#=B.S#

178.--31. 查询课程编号为01且课程成绩在80分以上的学生的学号和姓名

179.

180.select C#,COUNT(*)学生人数from SC group by C#

181.--32. 求每门课程的学生人数

182.

183.select top 1* from SC

184.where C#=(select C# from Course where T#=(select T# from Teacher where Tname ='张三'))

185.order by score desc

186.--33. 成绩不重复,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩187.

188.select *from(select *,DENSE_RANK()over (order by score desc)A

189.from SC

190.where C#=(select C# from Course where T#=(select T# from Teacher where Tname ='张三')))B

191.where B.A=1

192.--34. 成绩有重复的情况下,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩

193.

194.select C.S#,max(C.C#)C#,max(C.score)score from SC C

195.left join(select S#,avg(score)A from SC group by S#)B

196.on C.S#=B.S#

197.where C.score=B.A

198.group by C.S#

199.having COUNT(0)=(select COUNT(0)from SC where S#=C.S#)

200.--35. 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

201.

202.select * from

203.(select *,ROW_NUMBER()over(partition by C# order by score desc)A from SC)B 204.where B.A<3

205.--36. 查询每门功成绩最好的前两名

206.

207.select C#,COUNT(S#)选修人数from SC

208.group by C#

209.having COUNT(S#)>5

210.order by选修人数desc,C#

211.--37.统计每门课程的学生选修人数(超过5人的课程才统计)。

212.--要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列213.

214.select S# from SC

215.group by S#

216.having COUNT(C#)>=2

217.--38. 检索至少选修两门课程的学生学号

218.

219.select S# from SC

220.group by S#

221.having count(C#)=(select distinct COUNT(0)a from Course)

222.--39. 查询选修了全部课程的学生信息

223.

224.select S#,datediff(yy,Sage,GETDATE())年龄from Student

225.--40. 查询各学生的年龄,只按年份来算

226.

227.select *,(case when convert(int,'1'+substring(CONVERT(varchar(10),Sage,112), 5,8))

228.

229.then datediff(yy,Sage,GETDATE())

230.else datediff(yy,Sage,GETDATE())-1

231.end)age

232.from Student

233.--41. 按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一

234.--方法是把时间转化成 Int 格式来做条件比较大小,判断是否超期,

235.

236.select *,(case when datename(wk,convert(datetime,(convert(varchar(10),year(G ETDATE()))+substring(convert(varchar(10),Sage,112),5,8))))=DATENAME(WK,GETDAT E())

237.then 1 else 0 end)生日提醒

238.from Student

239.--42. 查询本周过生日的学生

240.--方法:采取将生日转化为当年日期,再转化为本年中的第几个星期进行判断搜出结果241.

242.select *,(case when datename(wk,convert(datetime,(convert(varchar(10),year(G ETDATE()))+

243.substring(convert(varchar(10),Sage,112),5,8))))=DATENAME(WK,GETDATE())+1 244.then 1 else 0 end)生日提醒

245.from Student

246.--43. 查询下周过生日的学生

247.

248.select *,(case when month(convert(datetime,(convert(varchar(10),year(GETDATE ()))+substring(convert(varchar(10),Sage,112),5,8))))=month(GETDATE())

249.then 1 else 0 end)生日提醒

250.from Student

251.--44. 查询本月过生日的学生

252.

253.select *,(case when month(convert(datetime,(convert(varchar(10),year(GETDATE ()))+substring(convert(varchar(10),Sage,112),5,8))))=month(GETDATE())+1 254.then 1 else 0 end)生日提醒

255.from Student

256.--45. 查询下月过生日的学生

1-数据库基础知识练习-答案

一、数据库系统认知 1.数据库(DB)、数据库系统(DBS)和数据库管理系统(DBMS)之间的关系是(A )。 A.DBS包括DB和DBMS B.DBMS包括DB和DBS C.DB包括DBS和DBMS D.DBS就是DB,也就是DBMS 2.下面列出的数据库管理技术发展的3个阶段中,没有专门的软件对数据进行管理的阶段是(D)。 I.人工管理阶段II.文件系统阶段III.数据库阶段 A.Ⅰ和ⅡB.只有ⅡC.Ⅱ和ⅢD.只有Ⅰ 3.描述数据库整体数据的全局逻辑结构和特性的是数据库的(A )。 A.模式B.内模式C.外模式 4.在修改数据结构时,为保证数据库的数据独立性,只需要修改的是(C)。 A.模式与外模式B.模式与内模式C.三级模式之间的两层映射D.三级模式 5.下列4项中,不属于数据库系统特点的是( C )。 A.数据共享B.提高数据完整性 C.数据冗余度高D.提高数据独立性 6.数据模型的三个要素是(B )。 A.实体完整性、参照完整性、域完整性 B.数据结构、数据操作、数据完整性 C.数据增加、数据修改、数据查询 D.外模式、模式、内模式 7.数据管理技术发展阶段中,文件系统阶段与数据库系统阶段的主要区别之一是数据库系统(B)。

A.有专门的软件对数据进行管理 B.采用一定的数据模型组织数据 C.数据可长期保存 D.数据可共享 8.下列选项中(A)不是数据库系统的特点。 A.数据加工B.数据共享C.关系模型D.减少数据冗余 9.数据库系统的数据独立性体现在(B)。 A.不会因为数据的变化而影响到应用程序 B.不会因为数据存储结构与数据逻辑结构的变化而影响应用程序 C.不会因为存储策略的变化而影响存储结构 D.不会因为某些存储结构的变化而影响其他的存储结构 10.用户或应用程序看到的那部分局部逻辑结构和特征的描述是(C)模式。 A.模式 B.物理模式 C.外(子)模式 D.内模式 11.下述(D)不是DBA数据库管理员的职责。 A.负责整个数据库系统的建立 B.负责整个数据库系统的管理 C.负责整个数据库系统的维护和监控 D.数据库管理系统设计 二、需求分析与数据库概念设计 12.在进行管理系统需求分析时,数据字典的含义是(D)。 A.数据库中所涉及的属性和文件的名称集合 B.数据库中所有数据的集合 C.数据库中所涉及的字母、字符及汉字的集合

SQL中的case-when,if-else实例

create database EXAM go create table student (stuName varchar(10)not null, stuNO int primary key not null, stuSex char(2)check(stuSex='男'or stuSex='女'), stuAge int, stuSeat int, stuAddress varchar(40) ) GO insert into student values('张秋丽','25301','女','21','1','北京海淀'), ('李文才','25302','男','25','2','天津'), ('张三','25303','男','22','3','北京海淀'), ('红尘','25304','女','21','4','湖南长沙'), ('段林希','25305','女','20','5','江西赣州'), ('魏晨','25306','男','23','6','河北石家庄'), ('郑爽','25307','女','20','7',''), ('张杰','25308','男','21','8',''), ('王洁','25309','女','23','9','湖南怀化'), ('刘欣','253010','女','21','10','北京') create table exam (ExamNO int primary key, stuNO int not null, WrittenExam int, LabExam int ) GO insert into exam values(01,250301,86,89), (02,250302,67,78), (03,250303,76,80), (04,250304,79,56), (05,250305,56,63), (06,250306,67,60), (07,250307,90,83), (08,250308,80,79), (09,250309,92,90), (10,250310,55,58)

sql练习题+答案

(一)新建以下几个表 student(学生表): 其中约束如下: (1)学号不能存在相同的 (2)名字为非空 (3)性别的值只能是’男’或’女’ (4)系包括这几个:信息系,计算机科学系,数学系,管理系,中文系,外语系,法学系 (5)出生日期为日期格式 (6)年龄为数值型,且在0~100之间

cs(成绩表): 其中约束如下: (1)sno和cno分别参照student和course表中的sno,cno的字段(2)cj(成绩)只能在0~100之间,可以不输入值 course(课程表)

其约束如下: (1)课程号(cno)不能有重复的 (2)课程名(cname)非空 (三)针对学生课程数据库查询 (1)查询全体学生的学号与姓名。 (2)查询全体学生的姓名、学号、所在系,并用别名显示出结果。 (3)查询全体学生的详细记录。 (4)查全体学生的姓名及其出生年份。 (5)查询学校中有哪些系。

(6)查询选修了课程的学生学号。 (7)查询所有年龄在20岁以下的学生姓名及其年龄。 (8)查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。 (9)查询年龄不在20~23岁之间的学生姓名、系别和年龄。 (10)查询信息系、数学系和计算机科学系生的姓名和性别。 (11)查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。 (12)查询所有姓刘学生的姓名、学号和性别。

(13)查询学号为2009011的学生的详细情况。(具体的学号值根据表中数据确定) (14)查询姓“欧阳”且全名为三个汉字的学生姓名 (15)查询名字中第2个字为“晨”字的学生的姓名和学号 (16)查询所有不姓刘的学生姓名。 (17)查询sql课程的课程号和学分。 (18)查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况。 (19)查询缺少成绩的学生的学号和相应的课程号。

sql习题及答案

题 1、查询Student表中得所有记录得Sname、Ssex与Class列。 2、查询教师所有得单位即不重复得Depart列。 3、查询Student表得所有记录。 4、查询Score表中成绩在60到80之间得所有记录。 5、查询Score表中成绩为85,86或88得记录。 6、查询Student表中“95031”班或性别为“女”得同学记录。 7、以Class降序查询Student表得所有记录。 8、以Cno升序、Degree降序查询Score表得所有记录。 9、查询“95031”班得学生人数。 10、查询Score表中得最高分得学生学号与课程号。 11、查询‘3-105’号课程得平均分。 12、查询Score表中至少有5名学生选修得并以3开头得课程得平均分数。 13、查询最低分大于70,最高分小于90得Sno列。 14、查询所有学生得Sname、Cno与Degree列。 15、查询所有学生得Sno、Cname与Degree列。 16、查询所有学生得Sname、Cname与Degree列。 17、查询“95033”班所选课程得平均分。

18、假设使用如下命令建立了一个grade表: create table grade(low numeric(3,0),upp numeric(3),rank char(1)); insert into grade values(90,100,'A'); insert into grade values(80,89,'B'); insert into grade values(70,79,'C'); insert into grade values(60,69,'D'); insert into grade values(0,59,'E'); 现查询所有同学得Sno、Cno与rank列。 19、查询选修“3-105”课程得成绩高于“109”号同学成绩得所有同学得记录。 20、查询score中选学一门以上课程得同学中分数为非最高分成绩得记录。 21、查询成绩高于学号为“109”、课程号为“3-105”得成绩得所有记录。 22、查询与学号为108得同学同年出生得所有学生得Sno、Sname与Sbirthday列。 23、查询“张旭“教师任课得学生成绩。 24、查询选修某课程得同学人数多于5人得教师姓名。 25、查询95033班与95031班全体学生得记录。 26、查询存在有85分以上成绩得课程Cno、 27、查询出“计算机系“教师所教课程得成绩表。 28、查询“计算机系”与“电子工程系“不同职称得教师得Tname与Prof。

SQL查询练习题

--练习题01:查找出已修学分低于20分的学生的姓名、性别和班主任。 select 姓名,性别,班主任 from 学生,班级 where 学生.班级编号=班级.班级编号 and 已修学分<20 --练习题02:查找出学生“王林”的班主任。 select 班主任 from 班级 where 班级编号 in(select 班级编号 from 学生 where 姓名='王林') --练习题03:查找出班主任“刘成河”班的全部男生的信息。 select 学生.* from 学生,班级 where 性别='男' and 班主任='刘成河' and 学生.班级编号=班级.班级编号 --练习题04:查找出课程“中国历史”考试及格的全部学生的学号、姓名、班级名称和分数。Select 学生.学号,姓名,班级名称,分数 from 学生,成绩,课程,班级 where 课程名称='中国历史' and 课程.课程编号=成绩.课程编号 and 学生.学号=成绩.学号 and 学生.班级编号=班级.班级编号 and 分数>=60 --练习题05:查找出全部同学的所有考试的姓名、课程名称、分数,查找结果的格式如下:Select 姓名,课程名称,分数 from 学生,课程,成绩 where 课程.课程编号=成绩.课程编号and 学生.学号=成绩.学号 --练习题01:查找出班主任“刘成河”班的全部男生的信息。 Select*from 学生 where 性别='男' and 班级编号 in(select 班级编号 from 班级 where 班主任='刘成河') --练习题02:查找出考试全及格的课程名称。 Select 课程名称 from 课程 where 课程编号 not in (select 课程编号 from 成绩 where 分数<60) select 课程名称 from 课程 where not exists (select * from 成绩 where 成绩.课程编号=课程.课程编号 and 分数<60) --练习题03:查找出所有学生的考试都及格的班级,并排除那些没有学生的班级。 select 班级名称 from 班级 where 总人数>0 and 班级编号 not in (select 班级编号 from 学生 where 学号 in (select 学号 from 成绩 where 分数<60))

项目开发中常用到的SQL语句

项目开发中常用到的SQL语句1、循环示例 循环示例代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 DECLARE @i int DECLARE @name varchar(10) DECLARE @password varchar(10) Set @i = 1000 WHILE @i < 1200 BEGIN Set @i =@i +1 SET @name = RIGHT('0000' + CAST(@i AS varchar(10)),4) set @password = @name select @name insert into dbo.LocomotiveTeminalBase (li_ID,t_ID,lt_IDNumber,lt_MiM,lt_FuWQIP,lt_FuWQDKH,lt_CreatedBy) values('d82575c0-2d21-4c47-a406-7771d7d2c80a','fb5d9a7b-9cd6-4a55-9e90-881706eaf @name,@password,'192.168.1.187','2000','9015c234-e185-4e15-96c6-f53426dd6690') END 2、数据库缓存依赖中用到的SQL语句代码示例: ? 1 2 3 4 5 6 7 8 --查看状态 Select DATABASEpRoPERTYEX('soft_LocomotiveRM_DB','IsBrokerEnabled') --启用broker ALTER DATABASE soft_LocomotiveRM_DB SET NEW_BROKER WITH ROLLBACK IMMEDIATE ALTER DATABASE soft_LocomotiveRM_DB SET ENABLE_BROKER --添加用户

sql查询练习题含答案

--(1)查询20号部门的所有员工信息。 select * from emp e where e.deptno=20; --(2)查询奖金(COMM)高于工资(SAL)的员工信息。 select * from emp where comm>sal; --(3)查询奖金高于工资的20%的员工信息。 select * from emp where comm>sal*0.2; --(4)查询10号部门中工种为MANAGER和20号部门中工种为CLERK的员工的信息。select * from emp e where (e.deptno=10 and e.job='MANAGER') or (e.deptno=20 and e.job='CLERK') --(5)查询所有工种不是MANAGER和CLERK, --且工资大于或等于2000的员工的详细信息。 select * from emp where job not in('MANAGER','CLERK') and sal>=2000; --(6)查询有奖金的员工的不同工种。 select * from emp where comm is not null; --(7)查询所有员工工资和奖金的和。 select (e.sal+nvl(https://www.wendangku.net/doc/1918918933.html,m,0)) from emp e; --(8)查询没有奖金或奖金低于100的员工信息。 select * from emp where comm is null or comm<100; --(9)查询员工工龄大于或等于10年的员工信息。 select * from emp where (sysdate-hiredate)/365>=10; --(10)查询员工信息,要求以首字母大写的方式显示所有员工的姓名。 select initcap(ename) from emp; select upper(substr(ename,1,1))||lower(substr(ename,2)) from emp; --(11)显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序, --若月份相同则按入职的年份排序。 select ename,to_char(hiredate,'yyyy') year,to_char(hiredate,'MM') month from emp order by month,year; --(12)查询在2月份入职的所有员工信息。 select * from emp where to_char(hiredate,'MM')='02' --(13)查询所有员工入职以来的工作期限,用“**年**月**日”的形式表示。 select e.ename,floor((sysdate-e.hiredate)/365)||'年' ||floor(mod((sysdate-e.hiredate),365)/30)||'月' ||floor(mod(mod((sysdate-e.hiredate),365),30))||'日' from emp e; --(14)查询从事同一种工作但不属于同一部门的员工信息。

sql语句练习题及答案

一在数据库 school 中建立student , sc, course 表。 学生表、课程表、选课表属于数据库School ,其各自的数据结构如下:学生Student (Sno,Sname,Ssex,Sage,Sdept) 课程表course(Cno,Cname,Cpno,Ccredit) 学生选课SC(Sno,Cno,Grade) 二设定主码 1 Student表的主码:sno 2 Course表的主码:cno 3 Sc表的主码:sno,cno 1写出使用 Create Table 语句创建表 student , sc, course 的SQL语句2 3 删除student表中的元组 4在数据库school中删除关系student 5在student表添加属性sbirthdate 类型datetime

Delete 1 删除所有JSJ 系的男生delete from Student where Sdept=’JSJ’ and Ssex=’男’; 2 删除“数据库原理”的课的选课纪录 delete from SC where Cno in (select Cno fromCourse where Cname=’数据库原理’); Update 1 修改0001 学生的系科为: JSJ 2 把陈小明的年龄加1岁,性别改为女。 2 修改李文庆的1001课程的成绩为9 3 分 3 把“数据库原理”课的成绩减去1分 Select 查询语句 一单表 1查询年龄在19至21岁之间的女生的学号,姓名,年龄,按年龄从大到小排列。 2查询姓名中第2个字为“明”字的学生学号、性别。 3查询 1001课程没有成绩的学生学号、课程号 4查询JSJ 、SX、WL 系的年龄大于25岁的学生学号,姓名,结果按系排列 5按10分制查询学生的sno,cno,10分制成绩 (1-10分为1 ,11-20分为2 ,30-39分为3,。。。90-100为10) 6查询 student 表中的学生共分布在那几个系中。(distinct) 7查询0001号学生1001,1002课程的成绩。 二统计 1查询姓名中有“明”字的学生人数。 2计算‘JSJ’系的平均年龄及最大年龄。 3查询学生中姓名为张明、赵英的人数 4计算每一门课的总分、平均分,最高分、最低分,按平均分由高到低排列 5 计算 1001,1002 课程的平均分。 6 查询平均分大于80分的学生学号及平均分 7 统计选修课程超过 2 门的学生学号 8 统计有10位成绩大于85分以上的课程号。 9 统计平均分不及格的学生学号 10 统计有大于两门课不及格的学生学号 三连接 1查询 JSJ 系的学生选修的课程号 2查询选修1002 课程的学生的学生姓名 (不用嵌套及嵌套2种方法) 3查询数据库原理不及格的学生学号及成绩 4查询选修“数据库原理”课且成绩 80 以上的学生姓名(不用嵌套及嵌套2种方法) 5查询平均分不及格的学生的学号,姓名,平均分。 6查询女学生平均分高于75分的学生姓名。 7查询男学生学号、姓名、课程号、成绩。(一门课程也没有选修的男学生也要列出,不能

SQL server 查询语句 练习题

SQL server 查询语句练习题 用SQL语句创建四个表: create database tongji go use tongji go create table student ( Sno varchar(20) not null primary key ,--学号 Sname varchar(20) not null,--学生姓名 Ssex varchar(20) not null, --学生性别 Sbirthday datetime,--学生出生年月 Class varchar(20)--学生所在班级 ) go create table teacher--老师 ( Tno varchar(20) not null primary key ,--教工编号(主码) Tname varchar(20) not null,--教工姓名 Tsex varchar(20) not null, --教工性别 Tbirthday datetime,--教工出生年月 Prof varchar(20),--职称 Depart varchar(20) not null--教工所在部门 ) go create table Course--课程 ( Cno varchar(20) not null primary key ,--课程号 Cname varchar(20) not null,--课程名称 Tno varchar(20) not null references teacher(Tno), --教工编号(外码)) go create table Score--分数 ( Sno varchar(20) not null references student(Sno), --学号(外码)Cno varchar(20) not null references Course(Cno), --课程号(外码)primary key(Sno,Cno), Degree Decimal(4,1),--成绩 ) 表中数据如下: 表(一)Student

DB2常用SQL语句集

DB2常用SQL语句集 1、查看表结构: describe table tablename describe select * from tablename 2、列出系统数据库目录的内容: list database directory 3、查看数据库配置文件的内容: get database configuration for DBNAME 4、启动数据库: restart database DBNAME 5、关闭表的日志 alter table TBLNAME active not logged inially 6、重命名表 rename TBLNAME1 to TBLNAME2 7、取当前时间 select current time stamp from sysibm.sysdummy1 8、创建别名 create alias ALIASNAME for PRONAME(table、view、alias、nickname) 9、查询前几条记录 select * from TBLNAME fetch first N rows 10、联接数据库 db2 connect to DB user db2 using PWD 11、绑定存储过程命令 db2 bind BND.bnd 12、整理优化表 db2 reorgchk on table TBLNAME db2 reorg table TBLNAME db2 runstats on table TBNAME with distribution and indexes all 13、导出表 db2 export to TBL.txt of del select * from TBLNAME db2 export to TBL.ixf of ixf select * from TBLNAME 以指定分隔符‘|’下载数据: db2 "export to cmmcode.txt of del modified by coldel| select * from cmmcode”14、导入表 db2 import from TBL.txt of del insert into TBLNAME db2 import from TBL.txt of del commitcount 5000 insert into TBLNAME db2 import from TBL.ixf of ixf commitcount 5000 insert into TBLNAME db2 import from TBL.ixf of ixf commitcount 5000 insert_update into TBLNAME db2 import from TBL.ixf of ixf commitcount 5000 replace into TBLNAME db2 import from TBL.ixf of ixf commitcount 5000 create into TBLNAME (仅IXF) db2 import from TBL.ixf of ixf commitcount 5000 replace_create into TBLNAME (仅 IXF) 以指定分隔符“|”加载:

SQL SERVER练习题及答案学习资料

S Q L S E R V E R练习题 及答案

题目1: 问题描述: 为管理岗位业务培训信息,建立3个表: S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄 C (C#,CN ) C#,CN 分别代表课程编号、课程名称 SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩 1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名--实现代码: SELECT SN,SD FROM S WHERE [S#] IN( SELECT [S#] FROM C,SC WHERE C.[C#]=SC.[C#] AND CN=N\'税收基础\') 2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位 --实现代码: SELECT S.SN,S.SD FROM S,SC WHERE S.[S#]=SC.[S#] AND SC.[C#]=\'C2\' 3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位--实现代码: SELECT SN,SD FROM S WHERE [S#] NOT IN( SELECT [S#] FROM SC WHERE [C#]=\'C5\') 4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位 --实现代码: SELECT SN,SD FROM S

WHERE [S#] IN( SELECT [S#] FROM SC RIGHT JOIN C ON SC.[C#]=C.[C#] GROUP BY [S#] HAVING COUNT(*)=COUNT([S#])) 5. 查询选修了课程的学员人数 --实现代码: SELECT 学员人数=COUNT(DISTINCT [S#]) FROM SC 6. 查询选修课程超过5门的学员学号和所属单位 --实现代码: SELECT SN,SD FROM S WHERE [S#] IN( SELECT [S#] FROM SC GROUP BY [S#] HAVING COUNT(DISTINCT [C#])>5) 题目2 问题描述: 本题用到下面三个关系表: CARD 借书卡。 CNO 卡号,NAME 姓名,CLASS 班级 BOOKS 图书。 BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数 BORROW 借书记录。 CNO 借书卡号,BNO 书号,RDATE 还书日期 备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。 要求实现如下15个处理: 1.写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束。

sql循环语句的写法

sql循环语句的写法 SQL循环语句 declare @i int set @i=1 while @i<30 begin insert into test (userid) values(@i) set @i=@i+1 end --------------- while 条件 begin 执行操作 set @i=@i+1 end WHILE 设置重复执行SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用BREAK 和CONTINUE 关键字在循环内部控制WHILE 循环中语句的执行。语法WHILE Boolean_expression { sql_statement | statement_block } [ BREAK ] { sql_statement | statement_block } [ CONTINUE ] 参数

Boolean_expression 返回TRUE 或FALSE 的表达式。如果布尔表达式中含有SELECT 语句,必须用圆括号将SELECT 语句括起来。{sql_statement | statement_block} Transact-SQL 语句或用语句块定义的语句分组。若要定义语句块,请使用控制流关键字BEGIN 和END。BREAK 导致从最内层的WHILE 循环中退出。将执行出现在END 关键字后面的任何语句,END 关键字为循环结束标记。CONTINUE 使WHILE 循环重新开始执行,忽略CONTINUE 关键字后的任何语句。注释 如果嵌套了两个或多个WHILE 循环,内层的BREAK 将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。示例 A. 在嵌套的IF...ELSE 和WHILE 中使用BREAK 和CONTINUE 在下例中,如果平均价格少于$30,WHILE 循环就将价格加倍,然后选择最高价。如果最高价少于或等于$50,WHILE 循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过$50,然后退出WHILE 循环并打印一条消息。USE pubs GO WHILE (SELECT A VG(price) FROM titles) < $30 BEGIN

sql语句练习50题

sql语句练习50题 Student(Sid,Sname,Sage,Ssex) 学生表 Course(Cid,Cname,Tid) 课程表 SC(Sid,Cid,score) 成绩表 Teacher(Tid,Tname) 教师表 练习内容: 1.查询“某1”课程比“某2”课程成绩高的所有学生的学号; SELECT a.sid FROM (SELECT sid,score FROM SC WHERE cid=1) a,(SELECT sid,score FROM SC WHERE cid=3) b WHERE a.score>b.score AND a.sid=b.sid; 此题知识点,嵌套查询和给查出来的表起别名 2.查询平均成绩大于60分的同学的学号和平均成绩; SELECT sid,avg(score) FROM sc GROUP BY sid having avg(score) >60; 此题知识点,GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。group by后面不能接where,having代替了where 3.查询所有同学的学号、姓名、选课数、总成绩 SELECT Student.sid,Student.Sname,count(SC.cid),sum(score)FROM Student left Outer JOIN SC on Student.sid=SC.cid GROUP BY Student.sid,Sname 4.查询姓“李”的老师的个数; select count(teacher.tid)from teacher where teacher.tname like'李%' 5.查询没学过“叶平”老师课的同学的学号、姓名; SELECT Student.sid,Student.Sname FROM Student WHERE sid not in (SELECT distinct( SC.sid) FROM SC,Course,Teacher WHERE SC.cid=Course.cid AND Teacher.id=Course.tid AND Teacher.Tname='叶平'); 此题知识点,distinct是去重的作用 6.查询学过“```”并且也学过编号“```”课程的同学的学号、姓名; select a.SID,a.SNAME from (select student.SNAME,student.SID from student,course,sc where cname='c++'and sc.sid=student.sid and sc.cid=course.cid) a, (select student.SNAME,student.SID from student,course,sc where cname='english'and sc.sid=student.sid and sc.cid=course.cid) b where a.sid=b.sid; 标准答案(但是好像不好使)SELECT Student.S#,Student.Sname FROM Student,SC WHERE Student.S#=SC.S# AND SC.C#='001'and exists( SELECT * FROM SC as SC_2 WHERE SC_2.S#=SC.S# AND SC_2.C#='002'); 此题知识点,exists是在集合里找数据,as就是起别名 7.查询学过“叶平”老师所教的所有课的同学的学号、姓名; select a.sid,a.sname from (select student.sid,student.sname from student,teacher,course,sc where teacher.TNAME='杨巍巍' and teacher.tid=course.tid and course.cid=sc.cid and student.sid=sc.sid) a 标准答案:SELECT sid,Sname FROM Student WHERE sid in (SELECT sid FROM SC ,Course ,Teacher WHERE SC.cid=Course.cid AND Teacher.tid=Course.tid AND Teacher.Tname='杨巍巍' GROUP BY sid having count(SC.cid)=(SELECT count(cid) FROM Course,Teacher WHERE Teacher.tid=Course.tid AND Tname='杨巍巍')) 8.查询课程编号“”的成绩比课程编号“”课程低的所有同学的学号、姓名;

1-SQL Server-练习题

SQL基础练习题 1管理工具练习 1、启动SQL服务器 2、创建用户JSERP,以SQL身份验证 3、创建数据库,库名为DBTEST,数据文件和日志文件均存放在D:\SQLData下。 分别命名为DBTEST_Data.mdf,DBTEST_log.ldf。 4、将JSERP用户赋予访问DBTEST数据库的权限,同时具有所有者权限 5、打开SQL查询分析器,以JSERP用户登录,并执行如下语句 select * from sysobjects 检查是否正常执行。 6、备份DBTEST数据库到d:\SQLData\DBTEST。 7、删除数据库DBTEST 8、还原数据文件d:\SQLData\DBTEST到DBDEMO。 9、打开事件探查器,进行相关设置,在查询分析器中执行如下语句 select * from sysobjects 到事件探查器中查看是否已捕获此语句。 10、关闭SQL服务器 2SQL语句练习 2.1数据表 *为关键字段

2.2练习题 基于以上数据表结构与数据,完成以下练习: 1、写出创建以上数据表的脚本 2、写出插入以上数据的脚本 3、查出所有男学生的身高,列出姓名与身高 4、查出86年出生的学生及秋季所修课程号及成绩 select STUDENT.*,COURSE_CNAME,STUC_GRADE from STUDENT, STUC ,COURSE where STUDENT_SNO=STUC_SNO and COURSE_CNO=STUC_CNO and year(STUDENT_BDATE)=1986 and COURSE_SEMESTER='秋' 5、查出每门成绩的最高、最低、平均,如果没有成绩(null)的不统计 select STUC_CNO,max(STUC_GRADE) as MAXGRADE,min(STUC_GRADE) as MINGRADE, avg(STUC_GRADE) as AVGGRADE from STUC where STUC_GRADE is not null group by STUC_CNO 6、列出83年出生的学生并且选修计算机系(CS开头)课程的学生学号和姓名 select STUDENT_SNO,STUDENT_SNAME from STUDENT,STUC where STUDENT_SNO=STUC_SNO and STUC_CNO like 'C%' and year(STUDENT_BDATE)=1983 7、查出秋季学期有一门以上课程获90分以上成绩的学生,列出学号、姓名 select STUDENT_SNO,STUDENT_SNAME from STUDENT, STUC ,COURSE where STUDENT_SNO=STUC_SNO and COURSE_CNO=STUC_CNO and COURSE_SEMESTER='秋' and isnull(STUC_GRADE,0)>90 8、查出所有学生的总成绩排行,由高到低列出学号、姓名、总成绩 select STUDENT_SNO,STUDENT_SNAME,sum( isnull(STUC_GRADE,0)) as ALLGRADE from STUDENT left join STUC on STUC_SNO=STUDENT_SNO left join COURSE on COURSE_CNO=STUC_CNO group by STUDENT_SNO,STUDENT_SNAME order by ALLGRADE desc 9、对C003课程在原有基础上加10%,请对成绩进行处理 update STUC set STUC_GRADE=isnull(STUC_GRADE,0)*1.1 where STUC_CNO='C003' 10、删除84年前学生的选课信息

实验10 T-SQL语言编程基础

实验十 T-SQL语言编程基础 姓名:学号: 专业:网络工程班级: 同组人:无实验日期:2012-4-19【实验目的与要求】 1.熟练掌握变量的定义和赋值。 2.熟练掌握各种运算符。 3.熟练掌握流程控制语句,尤其是条件语句和循环语句。【实验内容与步骤】 10.1. 变量的定义与输出 1.变量的定义和赋值 1) 局部变量的声明: DECLARE @variable_name DataType 例如: declare @stuname varchar(20)--声明一个存放学员姓名的变量stuname. declare @stuseat int--声明一个存放学员座位号的变量stuseat 2) 局部变量的赋值: 局部变量的赋值有两种方法: a) 使用Set语句 Set @variable_name=value b) 使用Select语句 Select @variable_name=value 实验: 运行以下程序段,理解变量的使用。

--局部变量的赋值与使用 declare @customer_name varchar(20)--声明变量用来存放客户名称 set @ customer_name ='家电市场'--使用SET语句给变量赋值 select* from xss where客户名称=@customer_name --通过局部变理向sql语句传递数据 请给出运行结果: 练习: 创建一名为 Product_name的局部变量,并在SELECT语句中使用该变量查找“冰箱”的”价格”和”库存量”。 给出相应的语句 declare @Product_name varchar(20) set @Product_name ='冰箱' select价格,库存量 from CP where产品名称= @Product_name 请给出运行测试结果:

SQL语句练习及答案

sql语句练习题1 数据库有如下四个表格: student(sno,sname,sage,ssex,sdpt) 学生表 系表(dptno,dname) course(cno,cname, gradet, tno) 课程表 sc(sno,cno,score) 成绩表 teacher(tno,tname) 教师表 要求:完成以下操作 1.查询姓"欧阳"且全名为三个汉字的学生的姓名。 select sname from student where sname like “欧阳__?; 2.查询名字中第2个字为"阳"字的学生的姓名和学号。 select sname,sno from student where sname like '_阳%';3.查询所有不姓刘的学生姓名。 select sname,sno,ssex from student where sname not like “刘%”; 4.查询db_design课程的课程号和学分。 select cno,ccredit from course where cname like 'db_design' 5.查询以"db_"开头,且倒数第3个字符为i的课程的详细情况。 select * from course where cname like 'db%i_ _'; 6.某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查 询缺少成绩的学生的学号和相应的课程号。

select sno,cno from sc where grade is null; 7.查所有有成绩的学生学号和课程号。 select sno,cno from sc where grade is not null; 8.查询计算机系年龄在20岁以下的学生姓名。 select sname from student where sdept= 'cs' and sage<20; 9.查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 select sno, grade from sc where cno= ' 3 ' order by grade desc;10.查询学生总人数。 select count(*) from student; 11.查询选修了课程的学生人数。 select count(distinct sno) from sc; 12.计算1号课程的学生平均成绩。 select avg(grade) from sc where cno= ' 1 '; 13.查询选修1号课程的学生最高分数。 select max(grade) from sc where cno= ' 1 '; 14.查询学生200215012选修课程的总学分数。 select sum(grade) from sc,course where sno= ' 200215012 ' and https://www.wendangku.net/doc/1918918933.html,o=https://www.wendangku.net/doc/1918918933.html,o;

相关文档