以下为《第三章 SQL语言作业 (1)》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
SQL作业题
注:将答案填写到下面的答题卡中。
选择题
当关系R和S进行连接操作时,如果R中的元组不满足连接条件,在连接结果中也会将这些记录保留下来的操作是( A )
A.左外连接 B.右外连接
C.内连接 D.自连接
设在某SELECT语句的WHERE子句中,需要对Grade列的空值进行处理。下列关于空值的操作,错误的是( C )
A.Grade IS NOT NULL B.Grade IS NULL
C.Grade = NULL D.NOT (Grade IS NULL)
下列聚合函数中,不忽略空值的是( D )
A.SUM(列名) B.MAX(列名)
C.AVG(列名) D.COUNT(*)
4.SELECT … INTO …FROM语句的功能是( A )
将查询结果插入到一个新表中
将查询结果插入到一个已建好的表中
合并查询的结果
向某某在的表中添加数据
5.下列利用SC表的查询语句中,错误的是( B )
SELECT Sno, COUNT(*) FROM SC GROUP BY Sno
SELECT Sno FROM SC GROUP BY Sno WHERE COUNT(*) > 3
SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) > 3
SELECT Sno FROM SC GROUP BY Sno
6.现要利用Student表查询年龄最小的学生姓名和年龄。下列实现此功能的查询语句中,正确的是( D )
SELECT Sname, MIN(Sage) FROM Student
SELECT Sname, Sage FROM Student WHERE Sage = MIN(Sage)
SELECT TOP 1 Sname, Sage FROM Student
SELECT TOP 1 Sname, Sage FROM Student ORDER BY Sage
7.设SC表中记录成绩的列为:Grade,类型为int。若在查询成绩时,希望将成绩按‘优’、‘良’、‘中’、‘及格’和‘不及格’形式显示,正确的Case函数是( A )
Case Grade
When 90~100 THEN '优'
When 80~89 THEN '良'
When 70~79 THEN '中'
When 60~69 THEN '及格'
Else '不及格'
End
Case
When Grade between 90 and 100 THEN Grade = '优'
When Grade between 80 and 89 THEN Grade = '良'
When Grade between 70 and 79 THEN Grade = '中'
When Grade between 60 and 69 THEN Grade = '及格'
Else Grade = '不及格'
End
Case
When Grade between 90 and 100 THEN '优'
When Grade between 80 and 89 THEN '良'
When Grade between 70 and 79 THEN '中'
When Grade between 60 and 69 THEN '及格'
Else '不及格'
End
Case Grade
When 90~100 THEN Grade = '优'
When 80~89 THEN Grade = '良'
When 70~79 THEN Grade = '中'
When 60~69 THEN Grade = '及格'
Else Grade = '不及格'
End
8.下述语句的功能是将两个查询结果合并为一个结果。其中正确的是( )
A.select sno,sname,sage from student where sdept = 'cs'
Order by sage
Union
select sno,sname,sage from student where sdept = 'is'
Order by sage
B.select sno,sname,sage from student where sdept = 'cs'
Union
select sno,sname,sage from student where sdept = 'is'
Order by sage
C.select sno,sname,sage from student where sdept = 'cs'
Union
select sno,sname from student where sdept = 'is'
Order by sage
D.select sno,sname,sage from student where sdept = 'cs'
Order by sage
Union
select sno,sname,sage from student where sdept = 'is'
9.下列SQL语句中,用于修改表数据的语句是( C )
A.ALTER B.SELECT
C.UPDATE D.INSERT
10.设有Teachers表,该表的定义如下:
CREATE TABLE Teachers(
Tno CHAR(8) PRIMARY KEY,
Tname VARCHAR(10) NOT NULL,
Age TINYINT CHECK(Age BETWEEN 25 AND 65) )
下列插入语句中,不能正确执行的是( D )
A.INSERT INTO Teachers VALUES('T100','张某某',NULL)
B.INSERT INTO Teachers(Tno,Tname,Age) VALUES('T100','张某某',30)
C.INSERT INTO Teachers(Tno,Tname) VALUES('T100','张某某')
D.INSERT INTO TeachersVALUES('T100','张某某')
11.设数据库中已有表4-1至4-3所示的Student、Course和SC表。现要查询学生选的第2学期开设课程的情况,只需列出学号、姓名、所在系和所选的课程号。该查询涉及到的表是( D )
A.仅Student表 B.仅Student和SC表
C.仅Student和Course表 D.Student、SC和Course表
12.删除计算机系学生(在student表中)的修课记录(在SC表中)的正确的语句是表是( B )
A.DELETE FROM SC JOIN Student b ON S.Sno = b.Sno
WHERE Sdept = '计算机系'
B.DELETE FROM SC FROM SC JOIN Student b ON SC.Sno = b.Sno
WHERE Sdept = '计算机系'
C.DELETE FROM Student WHERE Sdept = '计算机系'
D.DELETE FROM SC WHERE Sdept = '计算机系'
填空题
在相关子查询中,子查询的执行次数是由 外层表的行数 决定的。
对包含基于集合测试子查询的查询语句,是先执行 内 层查询,在执行 外 层查询。
对包含相关子查询的查询语句,是先执行 外 层查询,在执行 内 层查询。
聚合函数COUNT(*)是按_____行____统计数据个数。
设Grade列目前有三个值:90、80和NULL,则AVG(Grade)的值是___85______,MIN(Grade)的值是____80_____。
设有学生表(学号,姓名,所在系)和选课表(学号,课程号,成绩),现要建立统计每个系的选课人数。请补全下列语句:
SELECT 所在系, _count(DISTINCT选课表.学号)___ FROM 选课表
JOIN 学生表 ON 选课表.学号 = 学生表.学号
GROUP BY 所在系
设有选课表(学号,课程号,成绩),现要查询考试成绩最高的三个学生的学号、课程号和成绩,包括并列情况。请补全下列语句:
SELECT ___ * ____ 学号,课程号,成绩 FROM 选课表
_WHERE____ ____
UNION操作用于合并多个查询语句的结果,如果在合并结果时不希望去掉重复的数据,则在用UNION操作时应使用__ALL___关键字。
进行自连接操作的两个表在物理上为一张表。通过____起别名________方法可将物理上的一张表在逻辑上成为两张表。
FROM A LEFT JOIN B ON …语句表示在连接结果中不限制____A_____表数据必须满足连接条件。
对分组后的统计结果再进行筛选使用的子句是__group by having ______。
若SELECT语句中同时包含WHERE子句和GROUP子句,则先执行的是_WHERE_____子句。
三.编写程序或者上机题
/
/
/
查询学生选课表中的全部数据。
SELECT CNO AS ‘课程号’,Cname AS ’课程名’,Credit ‘学分’,Semester as ‘学期’
FROM course
查询计算机系年龄在18~20之间且性别为“男”的学生的姓名、年龄。
SELECT Sname ,Sage
FROM Student
WHERE Sdept=’计算机系’ AND Ssex=’男’ AND Sage bewteen 18 and 20;
查询计算机系学生的最大年龄和最小年龄。
Select min(Sage),max(Sage)
From Student
WHERE Sdept=’计算机系’;
统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。
SELECT SNO,COUNT(DISTINCT(CNO))选课门数,SUM(DRADE))总成绩
FROM SC GROUP BY SNO
ORDER BY COUNT(CNO);
查询选课门数超过2门的学生的学号、平均成绩和选课门数。
SELECT SNO,AVG(GRADE)平均分,COUNT(COURSE.CNO)
FROM SC,Course
WHERE SC.CNO=COURSE,CNO
GROUP BY SC.SNO
HAVING COUNT(COURSE.CNO)>2;
查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果。
SELECT SNAME,SC,CNO,GRADE
FROM SC jion STUDENT ON sc.sno=student.sno
WHERE GRADE>80
ORDER BY GRADE DESC;
查询计算机系没有选课的学生,列出学生姓名。
SELECT SNAME
FROM STUDENT LEFT JOIN SC ON STUDENT.SNO=SC.SNO
WHERE SDEPT=’计算机系’ AND SC.SNO IS NULL;
查询有考试成绩的所有学生的姓名、修课名称及考试成绩,要求将查询结果放在一张新的永久表中,假设新表名为new_sc。
FROM student,course,SCWHERE SC.Grade IS NOT NULL AND student.Sno=SC.Sno AND course.Cno=SC.Cno
SELECT SNO,CNO,GRADE INTO NEW_SC
FROM SC,COURSE
WHERE SC CNO=COURSE.CNO;
分别查询信息管理系和计算机系的学生的姓名、性别、修课名称、修课成绩,并要求将这两个查询结果合并成一个结果集,并以系名、姓名、性别、修课名称、修课成绩的顺序显示各列。
SELECT SNAME,SSEC,CNAME,GRADE
FROM SC,STUDENT,COURSE
WHERE SC,SNO=STUDENT.SNO AND COURSE.CNO=SC.CNO AND SDEPT=’信息管理器’
UNION
SELECT SNAME,SSEX,CNAME,GRADE
FROM SC,STUDENT,COURSE
WHERE SC,SNO=STUDENT.SNO AND COURSE.CNO=SC.CNO AND SDEPT=‘计算机系’;
查询选了VB的学生学号、姓名、所在系和成绩,并对所在系进行如下处理:
当所在系为“计算机系”时,显示“CS”;
当所在系为“信息管理系”时,显示“IS”;
当所在系为“通信工程系”时,显示“CO”;
对其他系,均显示“OTHER”。
答:
SELECT S.SNO 学号,SNAME 姓名,
case
WHEN SDEPT=’计算机系’then’CS’
WHEN SDEPT=’信息工程系’then’IS’
WHEN SDEPT=’通信工程系’tnen’CO’
Else as 所在系,GRADE 成绩
FROM STUDENT S JION SC ON S.SNO=SC.SNO
JION COURSE C ON C.CNO=SC.CNO
WHERE CNAME=’VB’
用子查询实现如下查询:
查询通信工程系成绩80分以上的学生学号和姓名。
SELECT SNO AS 学号,SNAME AS 姓名
FROM STUDENT
WHERE SNO IN
(SELECT SNO FROM SC
WHERE SDEPT=’通信工程系’AND GRADE>=80)
查询计算机系考试成绩最高的学生姓名。
SELECT SNAME FROM STUDENT S JION SC ON
SNO=SC.SNO WHERE SDEPT=’计算机系’
AND GRADE=(SELECT MAX(GRADE)FROM SC JION
STUDENT S ON S.SNO WHERE SDEPT=’计算机系’)
查询“C001”课程的考试成绩高于“C001”课程的平均成绩的学生的学号和“C001”课程成绩.
SELECT SNO,GRADE FROM
SC WHERE GRADE>(SELECT AVG(GRSDE)FROM SC
WHERE CNO=’C001’GROUP BY CNO)AND CNO=’C001’
创建一个新表,表名为test_t,其结构为:(COL1, COL 2, COL 3),其中:
COL1:整型,允许空值。
COL2:字符型,长度为10 ,不允许空值。
COL3:字符型,长度为10 ,允许空值。
试写出按行插入如下数据的语句(空白处表示空值)。
COL1
COL2
COL3
B1
1
B2
C2
2
B3
将计算机系所有选修了“计算机文化学”课程的学生成绩加10分,分别用子查询和多表连接形式实现。
答:(1)子查询
UPDATE SC SET GRADE=GRADE+10
WHERE SNO IN(
SELECT SNO FROM STUDENT WHERE SDEPT=计算机系)
AND ENO IN(
SELECT FROM COURSE WHERE CNAME=计算机文化学)
多表连接
UPDATE SC SET GRADE=GRADE+10
FROM SC JION STUDENT S ON SC.SNO=S.SN0
JION COURSE ON C.CNO=SC.CNO
WHERE SDEPT=计算机系,AND CNAME=’计算机文化学’
删除信息管理系考试成绩小于50分的学生的该门课程的修课纪录,分别用子查询和多表连接形式实现。
答:(1)用连接查询实现
DELETE FROM SC FROM SC JOIN STUDENT S ON S.SNO=SC.SNO
WHERE S DEPT=’信息管理系’AND GRADE2;
6、
SELECT SNAME,SC,CNO,GRADE
FROM SC jion STUDENT ON sc.sno=student.sno
WHERE GRADE>80
ORDER BY GRADE DESC;
7、
SELECT SNAME
FROM STUDENT LEFT JOIN SC ON STUDENT.SNO=SC.SNO
WHERE SDEPT=’计算机系’ AND SC.SNO IS NULL;
8、
FROM student,course,SCWHERE SC.Grade IS NOT NULL AND student.Sno=SC.Sno AND course.Cno=SC.Cno
9、
SELECT SNAME,SSEC,CNAME,GRADE
FROM SC,STUDENT,COURSE
WHERE S 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 ME AS 姓名
FROM STUDENT
WHERE SNO IN
(SELECT SNO FROM SC
WHERE SDEPT=’通信工程系’AND GRADE>=80)
12、
13、
答:(1)子查询
UPDATE SC SET GRADE=GRADE+10
WHERE SNO IN(
SELECT SNO FROM STUDENT WHERE SDEPT=计算机系)
AND ENO IN(
SELECT FROM COURSE WHERE CNAME=计算机文化学)
多表连接
UPDATE SC SET GRADE=GRADE+10
FROM SC JION STUDENT S ON SC.SNO=S.SN0
JION COURSE ON C.CNO=SC.CNO
WHERE SDEPT=计算机系,AND CNAME=’计算机文化学’
14、
答:(1)用连接查询实现
DELETE FROM SC FROM SC JOIN STUDENT S ON S.SNO=SC.SNO
WHERE S DEPT=’信息管理系’AND GRADE
以上为《第三章 SQL语言作业 (1)》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。