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

第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

)

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值