SQL查询更新语句 课堂练习和习题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL查询语句课堂练习和习题

一、试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:

S(sno,sname,SAGE,SSEX) 各字段表示学号,姓名,年龄,性别

Sc(sno,cno,grade) 各字段表示学号,课程号,成绩

C(cno,cname, TEACHER) 各字段表示课程号,课程名和教师名

其中SAGE,grade是数值型,其他均为字符型。

要求用SQL查询语句实现如下处理:

1.统计有学生选修的课程门数。

2.求选修C4课程的学生的平均年龄。

3.求LIU老师所授课程的每门课程的学生平均成绩。

4.统计每门课程的学生选修人数(超过2人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

5.检索学号比WANG同学大,而年龄比他小的学生姓名。

6.检索姓名以WANG打头的所有学生的姓名和年龄。

7.在SC中检索成绩为空值的学生学号和课程号。

8.求年龄大于女同学平均年龄的男学生姓名和年龄。

9.求年龄大于所有女同学年龄的男学生姓名和年龄。

其中涉及单表题:1.4.6.7

参考答案:

1.统计有学生选修的课程门数。

SELECT COUNT(DISTINCT Cno) FROM SC

2.求选修C4课程的学生的平均年龄。

SELECT AVG(SAGE )

FROM S

WHERE Sno

IN(SELECT Sno FROM SC WHERE Cno='4')

或者,

SELECT AVG(SAGE )

FROM S,SC WHERE S.Sno=SC.Sno AND Cno='4'

3.求LIU老师所授课程的每门课程的学生平均成绩。

SELECT AVG(GRADE)

FROM SC join C on o=o

WHERE TEACHER='liu'

GROUP BY o

另:

SELECT CNAME,AVG(GRADE) FROM SC ,C

WHERE o=o AND TEACHER='liu'

GROUP BY o,cname

4.统计每门课程的学生选修人数(超过2人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

SELECT DISTINCT Cno,COUNT(Sno)

FROM SC

GROUP BY Cno

HAVING COUNT(Sno)>2

ORDER BY 2 DESC, Cno ASC

或:

SELECT DISTINCT Cno,COUNT(Sno) as 人数

FROM SC

GROUP BY Cno

HAVING COUNT(Sno)>2

ORDER BY 人数DESC, Cno ASC

5.检索学号比WANG同学大,而年龄比他小的学生姓名。

SELECT X.SNAME

FROM S AS X, S AS Y

WHERE Y.SNAME='WANG' AND X.Sno>Y.Sno AND X.SAGE

或:

SELECT SNAME

from s

where sno>(select sno from s where SNAME='WANG')

and SAGE<(select sAGE from s where SNAME='WANG')

6.检索姓名以WANG打头的所有学生的姓名和年龄。

SELECT SNAME,SAGE

FROM S

WHERE SNAME LIKE 'WANG%'

7.在SC中检索成绩为空值的学生学号和课程号。

SELECT Sno,Cno FROM SC WHERE GRADE IS NULL

8.求年龄大于女同学平均年龄的男学生姓名和年龄。

SELECT SNAME,SAGE

FROM S

WHERE SSEX='男'

AND SAGE>(SELECT AVG(SAGE) FROM S WHERE SSEX='女')

9.求年龄大于所有女同学年龄的男学生姓名和年龄。

SELECT SNAME,SAGE

FROM S AS X

WHERE X.SSEX='男' AND X.SAGE >ALL (SELECT SAGE FROM S AS Y WHERE Y.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语句实现)。

参考答案:

1.往基本表S中插入一个学生元组(‘S9’,‘WU’,18)。

INSERT INTO S(Sno,SNAME,SAGE) VALUES('59','WU',18)

2.在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把检索到的值送往另一个已存在的基本表S1(Sno,SANME,SSEX)。

select Sno,SNAME,SSEX into s1 from student

delete from s1

INSERT INTO S1(Sno,SNAME,SSEX)

SELECT Sno,SNAME,SSEX

FROM S WHERE NOT EXISTS(SELECT * FROM SC WHERE

GRADE<80 AND S.Sno=SC.Sno)

select * from s1

考虑:以上会有什么问题?

INSERT INTO S1(Sno,SNAME,SSEX)

SELECT Sno,SNAME,SSEX

FROM S WHERE NOT EXISTS(SELECT * FROM SC WHERE

GRADE<80 AND S.Sno=SC.Sno or S.Sno=SC.Sno and grade is null)

and sno in (select sno from sc)

相关文档
最新文档