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

本文介绍了SQL的选择题、填空题和简答题,涵盖了连接操作、WHERE子句的空值处理、聚合函数的使用、数据插入、更新、查询与删除等知识点,以及如何创建和修改表结构。

第3章 数据操作语言  SQL

一、选择题

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

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

C.内连接                                               D.自连接

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

A.Grade IS NOT NULL                      B.Grade IS  NULL

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

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

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

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

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

  1. 将查询结果插入到一个新表中   
  2. 将查询结果插入到一个已建好的表中
  3. 合并查询的结果
  4. 向已存在的表中添加数据

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

  1. SELECT Sno, COUNT(*) FROM SC GROUP BY Sno
  2. SELECT Sno FROM SC GROUP BY Sno WHERE COUNT(*) > 3
  3. SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) > 3
  4. SELECT Sno FROM SC GROUP BY Sno

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

  1. SELECT Sname, MIN(Sage) FROM Student
  2. SELECT Sname, Sage FROM Student WHERE Sage = MIN(Sage)
  3. SELECT TOP 1 Sname, Sage FROM Student
  4. SELECT TOP 1 Sname, Sage FROM Student ORDER BY Sage

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

    1. Case Grade

When 90~100  THEN  '优'

When 80~89  THEN  '良'

When 70~79  THEN  '中'

When 60~69  THEN  '及格'

Else  '不及格'

End

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

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

    1. 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.下述语句的功能是将两个查询结果合并为一个结果。其中正确的是     B

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 INNER JOIN Student b ON S.Sno = b.Sno

     WHERE Sdept = '计算机系'

B.DELETE FROM SC FROM SC INNER 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 所在系 

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

SELECT ____TOP 3 WITH TIES *_____ 学号,课程号,成绩 FROM 选课表

   ___ORDER BY 成绩______

  1. UNION操作用于合并多个查询语句的结果,如果在合并结果时不希望去掉重复的数据,则在用UNION操作时应使用_____UNION ALL____关键字。
  2. 进行自连接操作的两个表在物理上为一张表。通过__别名_______方法可将物理上的一张表在逻辑上成为两张表。
  3. FROM A LEFT JOIN B ON …语句表示在连接结果中不限制____A_____表数据必须满足连接条件。      
  4. 对分组后的统计结果再进行筛选使用的子句是___HAVING______。
  5. 若SELECT语句中同时包含WHERE子句和GROUP子句,则先执行的是____WHERE_____子句。

三、简答题

  1. 在聚合函数中,哪个函数在统计时不考虑NULL

答: COUNT(*)

  1. LIKE运算符中“%”的作用是什么?

答: 用作通配符,在匹配中表示0个,1个或多个字符

  1. WHERE Sdept NOT IN (‘CS’,’IS’,’MA’),查找的数据是什么?

答: Sdep中除了`CS`,`IS`,`MA`以外的所有数据

  1. 自连接与普通内连接的主要区别是什么?

答:  自连接是表和自己连接,普通内连接是两个不同的表连接。

  1. 外连接与内连接的主要区别是什么?

答: 外连接会返回至少一个表中的所有行,内连接只返回两个表中的匹配行。

  1. 在使用UNION合并多个查询语句的结果时,对各个查询语句的要求是什么?

答:  每个查询必须包含相同的列、表达式或聚集函数。列的数据类型必须兼容,类型不必完全相同,但是必须是DBMS可以隐含的转换类型。

  1. 相关子查询与嵌套子查询在执行方面的主要区别是什么?

答: 执行顺序、性能、依赖性、执行次数

  1. 执行SELECT … INOT 表名 FROM …语句时,对表名的要求是什么?

答:表名必须存在且正确,不能是系统表

  1. 对统计结果的筛选应该使用哪个子句完成?

答: HAVING

  1. 在排序子句中,排序依据列的前后顺序是否重要?ORDER BY C1,C2子句对数据的排序顺序是什么?

答:  重要,系统会按列的前后顺序进行排序。先按c1列进行排序,c1列值相同时再按c2列进行排序。

 

四、写出下列各操作的SQL语句

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(Sage)AS 最大年龄,MIN(age) As 最小年龄 FROM Student WHERE Sdept=`计算机系`;

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

SELECT Student.Sno,Student.Sname,COUNT(SC.Cno) AS 选课门数,SUM(SC.Grade) AS 考试总成绩 FROM Student LEFT JOIN SC ON Student.Sno=SC.Sno GROUP BY Student.Sno,Student.Sname ORDER BY 选课门数ASC;

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

SELECT Sno AVG(Grade) AS 平时成绩,COUNT(Cno) AS 选课门数

FROM SC HAVING COUNT (Cno>2)

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

SELECT Student.Sname,SC.Cno,SC.Grade FROM STUDENT LEFT JOIN SC ON Student.Sno=SC.Sno WHERE SC.Grade>=80 ORDER BY SC.Grade DESC;

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

SELECT Student.Sname FROM Student LEFT JOIN SC ON Student.Sno=SC.Sno WHERE SC.Cno IS NULL AND Student.Sdept=`计算机系`;

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

CREATE TABLE new_sc AS SELECT Student.Sname,Course.Cname,SC.Grade FROM Student JOIN SC ON Student.Sno=SC.Sno JOIN Course ON SC.Cno=Course.Cno;

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

SELECT `信息管理系` AS Student.Sdept,Student.Sname,Student.Ssex,Course.Cname,

SC.Grade FROM Student JOIN SC ON Student.Sno=SC.Sno JOIN Course ON SC.Cno=Course.Cno

WHERE Student.Sdept=`信息管理系`

UNION ALL

SELECT `计算机系` AS Student.Sdept,Student.Sname,Student.Ssex,Course.Cname,

SC.Grade FROM Student JOIN SC ON Student.Sno=SC.Sno JOIN Course ON SC.Cno=Course.Cno

WHERE Student.Sdept=`计算机系`

ORDER BY Sdept,Sname,Ssex,Cname,Grade;

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

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

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

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

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

SELECT Student.Sno,Student.Sname,

    CASE

        WHEN Student.Sdept=`计算机系`THEN`CS`

        WHEN Student.Sdept=`信息管理系`THEN`IS`

        WHEN Student.Sdept=`通信工程系`THEN`CO`

        ELSE`OTHER`

    END AS Student.Sdept,SC.Grade

FROM Student JOIN SC ON Student.Sno=SC.Sno JOIN Course ON SC.Cno=Course.Cno;

10、用子查询实现如下查询:

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

SELECT Sno,Sname

FROM Student

WHERE Sno IN(

SELECT Sno

FROM Grade

WHERE Sdept=`通信工程` AND Grade>=80

);

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

SELECT Sname

FROM Student

WHERE Sno = (

    SELECT Sno

    FROM SC

    WHERE Grade=(

    SELECT Grade

    FROM SC

    ORDER BY Grade DESC

    LIMIT 1

);

    WHERE 专业 = `计算机`

    ORDER BY Grade DESC

    LIMIT 1

);

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

SELECT Student.Sno, SC.Grade

FROM Student,SC

WHERE Student.Sno=SC.Sno AND Cno = 'C001' AND Grade > (

    SELECT AVG(Grade)

    FROM SC

    WHERE 课程 = 'C001'

);

11、创建一个新表,表名为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 NULL,

COL2 CHAR(10) NOT NULL,

COL3 CHAR(10) NULL

);

INSERT INTO test_t VALUES(NULL,`B1`,NULL),(1,`B2`,`C2`),(2,`B3`,NULL);

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

(1)子查询


UPDATE 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

JOIN SC ON Student.Sno=SC.Sno

JOIN Course ON SC.Cno=Course.Cno

WHERE Course.Cname=`计算机文化学`

    AND Student.Sdept=`计算机系`;

   

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

(1) 用连接查询实现

       

DELETE

FROM Student a,SC b

WHERE a.Sno=b.Sno and Grade<50 and Sdept=`信息管理系`;

   (2)用子查询实现

     

DELETE

FROM SC

WHERE Sno IN(

SELECT Sno

Where Sdept=`信息管理系`

AND Grade<50

);

14、删除VB考试成绩最低的学生的VB修课记录。

DELETE

FROM SC

WHERE Sno=(

SELECT Sno

FROM SC

JOIN Course ON SC.Cno=Course.Cno

WHERE Course.Cname=`VB`

ORDER BY SC.Grade ASC

LIMIT 1

);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值