数据库系统原理第三章作业

本文提供了一系列SQL练习题及其解答,涵盖选择题、填空题和编程题,涉及外连接、子查询、聚合函数等知识点。

第3章 SQL作业题

 

一. 选择题

1. 当关系R和S进行连接操作时,如果R中的元组不满足连接条件,在连接结果中也会将这些记录保留下来的操作是(A

A.左外连接                                                   B.右外连接

C.内连接                                                        D.自连接

 

2. 设在某SELECT语句的WHERE子句中,需要对Grade列的空值进行处理。下列关于空值的操作,错误的是(C

A.Grade IS NOT NULL                         B.Grade IS  NULL

C.Grade = NULL                                      D.NOT (Grade IS NULL)

 

3. 下列聚合函数中,不忽略空值的是(  D   )

A.SUM(列名)                                                B.MAX(列名)

C.AVG(列名)                                                 D.COUNT(*)

 

4.SELECT … INTO …FROM语句的功能是(    )

A.  将查询结果插入到一个新表中   

B. 将查询结果插入到一个已建好的表中

C. 合并查询的结果

D.  向已存在的表中添加数据

 

5.下列利用SC表的查询语句中,错误的是(     )

A. SELECT Sno, COUNT(*) FROM SC GROUP BY Sno

B. SELECT Sno FROM SC GROUP BY Sno WHERE COUNT(*) > 3

C. SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) > 3

D.  SELECT Sno FROM SC GROUP BY Sno

 

6.现要利用Student表查询年龄最小的学生姓名和年龄。下列实现此功能的查询语句中,正确的是(   D   )

A. SELECT Sname, MIN(Sage) FROM Student

B. SELECT Sname, Sage FROM Student WHERE Sage = MIN(Sage)

C. SELECT TOP 1 Sname, Sage FROM Student

D.  SELECT TOP 1 Sname, Sage FROM Student ORDER BY Sage

 

7.设SC表中记录成绩的列为:Grade,类型为int。若在查询成绩时,希望将成绩按‘优’、‘良’、‘中’、‘及格’和‘不及格’形式显示,正确的Case函数是( C   )

A.
Case Grade

When 90~100  THEN  '优'

When 80~89  THEN  '良'

When 70~79  THEN  '中'

When 60~69  THEN  '及格'

Else  '不及格'

End

 

B.
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

 

C.

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


D.
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学期开设课程的情况,只需列出学号、姓名、所在系和所选的课程号。该查询涉及到的表是(     )

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 = '计算机系'

 

二. 填空题

1. 在相关子查询中,子查询的执行次数是由      外层表的行数           决定的。

2. 对包含基于集合测试子查询的查询语句,是先执行     层查询,在执行层查询。

3. 对包含相关子查询的查询语句,是先执行    层查询,在执行       层查询。

4. 聚合函数COUNT(*)是按_________统计数据个数。

5. 设Grade列目前有三个值:90、80和NULL,则AVG(Grade)的值是___85______,MIN(Grade)的值是___80______。

6. 设有学生表(学号,姓名,所在系)和选课表(学号,课程号,成绩),现要建立统计每个系的选课人数。请补全下列语句:

SELECT 所在系, ____count(distinct 选课表.学号)_____ FROM 选课表

   JOIN 学生表 ON 选课表.学号 = 学生表.学号

     GROUP BY 所在系 

7. 设有选课表(学号,课程号,成绩),现要查询考试成绩最高的三个学生的学号、课程号和成绩,包括并列情况。请补全下列语句:

SELECT ___Top 3 with TIES     ______ 学号,课程号,成绩 FROM 选课表

   _____order by 成绩DESC  ____

8. UNION操作用于合并多个查询语句的结果,如果在合并结果时不希望去掉重复的数据,则在用UNION操作时应使用_____ALL____关键字。

9. 进行自连接操作的两个表在物理上为一张表。通过__起别名_______方法可将物理上的一张表在逻辑上成为两张表。

10.    FROM A LEFT JOIN B ON …语句表示在连接结果中不限制____A_____表数据必须满足连接条件。

11.    对分组后的统计结果再进行筛选使用的子句是__ having______。

12.    若SELECT语句中同时包含WHERE子句和GROUP子句,则先执行的是___where__子句。

 

 

三.编写程序或者上机题

 

 

848b2ad44b6f27ec8e0c11475cf65a32.png

9ab3fbadbc4c010bf8014a216834173d.png

9a2b9d7ba5ac4658ba27496d715af6ca.png

 

1.查询学生选课表中的全部数据。

 

 Select * from SC

 

2.查询计算机系年龄在18~20之间且性别为“男”的学生的姓名、年龄。

 

Select Sname,Sage

from Student

where Sdept=’计算机’  and  Sage between 18 and 20 and Ssex=’男’

 

3. 查询计算机系学生的最大年龄和最小年龄。

 

Select max(Ssage),min(Ssage)

From Student

Where Sdept=’计算机’

 

4. 统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。

答:

 

Select Cno, count(Distinct Sno),max(Grade)

From SC

Group by Cno

 

5.查询选课门数超过2门的学生的学号、平均成绩和选课门数。

答:

 

Select Sno, avg(Grade),count(distinct Cno)

From SC

Having count(cno)>2

 

6.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果。

 

Select Sname, SC.Cno, Grade

From Student, SC

Where Student.Sno=SC.Sno and Grade>80

Oeder by Grade desc

 

7.查询计算机系没有选课的学生,列出学生姓名。

 

Select Sname

From Student a left outer join SC b on a.Sno=b.Sno

Where Sdept=’计算机’ and b.Sno is null

 

8.查询有考试成绩的所有学生的姓名、修课名称及考试成绩,要求将查询结果放在一张新的永久表中,假设新表名为new_sc。

 

Select Sname,Cname,Grade into new_sc

From Student a,Course b, SC c

Where a.Sno=c.Sno and b.Cno=c.Cno

and grade is not null

 

9.分别查询信息管理系和计算机系的学生的姓名、性别、修课名称、修课成绩,并要求将这两个查询结果合并成一个结果集,并以系名、姓名、性别、修课名称、修课成绩的顺序显示各列。

 

Select Sname 姓名,Ssex 性别,Cname 修课名称, Grade 修课成绩

From Student a,Course b, SC c

Where a.Sno=c.Sno and b.Cno=c.Cno and Sdept=’信息管理系’

UNION

Select Sname ,Ssex ,Cname, Grade

From Student a,Course b, SC c

Where a.Sno=c.Sno and b.Cno=c.Cno and Sdept=’计算机系’

 

 

10.查询选了VB的学生学号、姓名、所在系和成绩,并对所在系进行如下处理:

    当所在系为“计算机系”时,显示“CS”;

    当所在系为“信息管理系”时,显示“IS”;

    当所在系为“通信工程系”时,显示“CO”;

对其他系,均显示“OTHER”。

答:

 

Select Sno 学生学号, Sname 姓名,

Case Sdept

When Sdept=’计算机系’ THEN  'CS'

When Sdept=’信息管理系’ THEN  'CS'

When Sdept=’通信工程系’ THEN  'CS'

Else 'OTHER'

END as 所在系 ,Grade成绩

Select Sname ,Ssex ,Cname, Grade

From Student a,Course b, SC c

Where a.Sno=c.Sno and b.Cno=c.Cno  and Cname='VB'

 

11.用子查询实现如下查询:

(1)查询通信工程系成绩80分以上的学生学号和姓名。

 

Select Sno,Sname

From Student

Where Sno in

(Select DISTINCE Student.Sno

From SC, Student

Where SC.Sno=Student.Sno and Sdept=’通信工程系’ and Grade>80)

 

(2)查询计算机系考试成绩最高的学生姓名。

 

Select Sname

From Student

Where Sdept=’计算机系’ and Sno IN

(Select Sno

From SC

Where Grade=(

Selece max(Grade)

From SC,Student

Where SC.Sno=Student.Sno and Sdept=’计算机系’

)

)

 

(3)查询“C001”课程的考试成绩高于“C001”课程的平均成绩的学生的学号和“C001”课程成绩。

 

Select Student.Sno, Grade

From Student, SC

Where Student.Sno=SC.Sno and Cno=’C001’ and Grade>(

Select AVG(grade)

From SC

Where Cno=’C001’

)

 

12.创建一个新表,表名为test_t,其结构为:(COL1, COL 2, COL 3),其中:

COL1:整型,允许空值。

COL2:字符型,长度为10 ,不允许空值。

COL3:字符型,长度为10 ,允许空值。

试写出按行插入如下数据的语句(空白处表示空值)。

COL1

COL2

COL3

 

B1

 

1

B2

C2

2

B3

 

 

Create table test_t(

COL1 int,

COL2 char(10) NOT NULL,

COL3 char(10)

)

Insert into test_t values(NULL, 'B1',NULL)

Insert into test_t values(1,'B2', 'C2')

Insert into test_t values(2, 'B3',NULL)

 

13.将计算机系所有选修了“计算机文化学”课程的学生成绩加10分,分别用子查询和多表连接形式实现。

答:(1)子查询

 

Uodate SC set Grade=Grade+10

Where Sno in(

Select Sno

From Student

Where Sdept=’计算机系’

)

And  Cno in(

Select Cno

From course

Where Cname=’计算机文化学’

)

 

(2)多表连接

 

Update SC set Grade=Grade+10

From Student a,Course b, SC c

Where a.Sno=c.Sno and b.Cno=c.Cno

and Sdept=’计算机系’ and Cname’计算机文化学’

 

14.删除信息管理系考试成绩小于50分的学生的该门课程的修课纪录,分别用子查询和多表连接形式实现。

答:(1) 用连接查询实现

 

Delete

From Student a, SC b

Where a.Sno=c.Sno and Grade<50 and Sdept=’信息管理系’

 

   (2)用子查询实现

 

Delete

From SC

Where Sno in(

Select Sno

Where Sdept=’信息管理系’

and Grade<50

)

 

### 数据库原理第二章作业题目及答案 以下是关于数据库原理第二章(关数据库知识)的一些典型作业题目及相关解答: #### 一、选择题 1. **下列哪一项不是关模型的基本术语?** A. 属性 B. 元组 C. 表单 D. 域 正确答案是C。表单并非关模型中的基本术语,而属性、元组和域均属于关模型的核心概念[^1]。 2. **在关数据库中,“候选键”的定义是什么?** A. 能唯一标识一条记录的一个或多个字段组合 B. 可以为空值的字段 C. 关模式中任意选取的一列 D. 外部引用的关键字 正确答案是A。“候选键”是指能够唯一标识一条记录的一个或多个字段组合,这些字段不允许有重复值或空值。 --- #### 二、填空题 1. 在关数据库中,______ 是指由若干个具有相同特性的元组构成的数据集合。 答案:关 2. 如果一个关满足第一范式,则该关中的每一个分量都必须是一个不可分割的 ______ 。 答案:原子项 --- #### 三、简答题 1. **什么是关代数中的投影操作?举例说明其作用。** 投影操作是从关中选出某些特定的列形成一个新的关。例如,在学生表`Student(Sno, Sname, Sage)`中,如果只需要获取学生的姓名列表,则可以执行如下SQL语句来实现投影操作: ```sql SELECT Sname FROM Student; ``` 这里只选择了`Sname`这一列作为新的结果集的一部分[^4]。 2. **解释规范化的作用以及它如何帮助减少数据冗余。** 规范化是一种通过分解关的方式来消除冗余的过程。它的主要目标是将数据库设计成一组相互独立的关,从而降低存储空间的需求并提高数据一致性。例如,当存在大量重复的信息时,可以通过将其拆分为不同的表格并通过外键关联起来的方式解决这个问题。 --- #### 四、编程题 1. **假设有一个名为 `Course` 的课程表,其中包含以下字段:`Cid`(课程编号), `Cname`(课程名称),编写 SQL 查询语句找出所有课程名称中含有“计算机”三个字的课程信息。** 解决方案如下所示: ```sql SELECT * FROM Course WHERE Cname LIKE '%计算机%'; ``` 2. **给定两个表:`Student(Sno,Sname,Sage)` 和 `SC(Sno,Cid,Grade)` ,请写出查询选修了课程号为 K002 的学生的学号姓名的四种方法(连接查询、普通子查询、相关子查询、使用 exists 关键字的相关子查询)。** 方法一:连接查询 ```sql SELECT DISTINCT S.Sno, S.Sname FROM Student AS S INNER JOIN SC ON S.Sno = SC.Sno WHERE SC.Cid = 'K002'; ``` 方法二:普通子查询 ```sql SELECT Sno, Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cid = 'K002'); ``` 方法三:相关子查询 ```sql SELECT Sno, Sname FROM Student AS S WHERE EXISTS ( SELECT * FROM SC WHERE SC.Sno = S.Sno AND SC.Cid = 'K002' ); ``` 方法四:使用 exists 关键字的相关子查询 ```sql SELECT Sno, Sname FROM Student AS S WHERE EXISTS ( SELECT * FROM SC WHERE SC.Sno = S.Sno AND SC.Cid = 'K002' ); ``` --- #### 五、综合分析题 1. **试述关数据库的设计原则,并结合实际案例讨论如何避免异常情况的发生。** 设计良好的关数据库应遵循一定的原则,比如实体完整性约束、参照完整性约束等。具体来说,为了防止更新异常、插入异常和删除异常等问题,通常会采用逐步规范化的方法对初始设计方案进行改进。例如,在处理员工工资管理统时,若直接在一个大表中保存每位员工的所有信息可能会引发上述问题;因此可考虑把部门信息单独提取出来作为一个新表并与原表建立联,这样既简化了结构又增强了统的灵活性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值