CH4答案

1.在SQL语言中,删除表S的语句是_DROP TABLE  S__。

2.SQL语言使用 CREATE VIEW 语句建立视图。

3.在SQL中,用   MAX( )   函数求最大值;可以利用 COUNT( )  函数计算记录的个数;用  AVG( )  函数求平均值。

4.在SQL语言的关系定义语句中,外键子句实现___参照_____完整性约束;主键实现____实体____完整性约束。

5.SQL语言支持关系数据库三级模式结构,其中外模式对应于   视图  ,模式对应于 基本表  ,内模式对应于存储文件。

二、选择题

1.如果要修改表的结构,应该使用的SQL语句是_D____。

A.UPDATE TABLE               B.MODIFY TABLE         

C.CHANGE TABLE            D.ALTER TABLE

2.在数据库系统的三级模式结构中,定义视图的组织方式属于__B____。

A.概念模式       B.外模式           C.逻辑模式      D.内模式

3.在数据库系统中,视图可以提供数据的_____C____。

A.完整性          B.并发性          C.安全性        D.可恢复性

4.可以在SQL查询时去掉重复数据的是     D   

A.ORDER BY      B.DESC        C.GROUP BY        D.DISTINCT

5.下列SQL语句中,用来创建关系表的是__B_____。

A.ALTER       B.CREATE        C.UPDATE           D.INSERT

6.数据库管理系统能实现创建表,删除表等操作的数据库语言称为____A_____。

A.数据定义语言(DDL)         B.数据管理语言  

C.数据操纵语言(DML)         D.数据控制语言

7.在SQL中,可以用谓词EXISTS来测试一个集合中是否___D____。

A.有相同元组存在                    B.为空集合

C.有相同分量存在                    D.为非空集合

8.下列哪项不是视图机制的优点____D___。

A.数据安全性    B.逻辑独立性     C.操作简便性     D.数据完整性

9.SQL的SELECT语句中,“HAVING条件表达式”用来筛选满足条件的____D____。

A.列             B.行                  C.关系               D.分组

10.在SQL语言中,属于DML的操作命令是_   C____。

A.CREATE       B.GRANT         C.UPDATE        D.DROP

11.SQL语言的一次查询的结果是一个__D_______。

A.数据项         B.记录                C.元组         D.表

12.如果想找出在关系R的A属性上不为空的那些元组,则选择子句应该为____C____。

A.WHERE A!=NULL                 B.WHERE A <>NULL

C.WHERE A IS NOT NULL            D.WHERE A NOT IS NULL

13.使用SQL语句在学生成绩表(学号,课程号,成绩)中,查询平均成绩大于60分的学生时,不必使用的子句是____C_____。

A.SELECT      B.GROUP BY      C.WHERE      D.HAVING

14.下列哪组SQL命令全部属于数据定义语句的命令?___A______

A.CREATE,DROP,ALTER          B.CREATE,DROP,SELECT

C.CREATE,DROP,GRANT          D.CREATE,DROP,UPDATE

15.已知有关系模式R(SNO, sname, age),其中SNO表示学生的学号,类型为Char(8),前4位表示入学年份。查询所有2003年入学的学生姓名(sname),SQL语句是____B_____。

A.SELECT sname FROM R WHERE SNO =‘2003%’

B.SELECT sname FROM R WHERE SNO LIKE ‘2003%’

C.SELECT sname FROM R WHERE SNO =‘2003_’

D.SELECT sname FROM R WHERE SNO LIKE ‘2003_’

三、简答题

1.什么是连接查询?什么是嵌套查询?什么是相关子查询?

答:多个表之间存在某种联系,如果一个查询要在两个以上的表中进行,我们称这种查询为连接查询。

在子查询语句中再嵌入其他子查询,这就是嵌套查询。

子查询结果依赖父查询的当前元祖的属性值,这种查询就是相关子查询。

2.试阐述SQL的特点。

答:1).支持关系数据库系统的三级模式结构。

2).语言功能强大。

3).用户性能好。

4).提供两种用户使用方式。

5).高度非过程化。

3.试介绍一个你所熟悉的DBMS产品的完整性功能。

4.什么是基本表?什么是视图?两者的区别和联系是什么?

答:视图是从一个或几个基本表导出的虚表,视图为用户提供数据逻辑独立性等作用。对视图的操作由系统自动转换成等价的对基本表的操作。

5.在SQL中有哪些方法可以作表间连接,请说明之,并各举一例。

答:多表连接、嵌套连接、集合操作等。

6.视图有哪些优点?

答:1)视图提供了一个简化用户操作的快捷方式。

2)视图支持多用户同时以不同的方式对相同的数据进行查询。

3)视图对于隐藏的数据自动提供安全保护。

4)视图可以为用户和应用程序提供逻辑上的数据独立性。

7.所有的视图是否都可以更新?为什么?

答:不是所有的视图都是可更新的,有些对视图的更新操作不能唯一地有意义地转换成对相应基本表的更新,就不能进行更新。

8.试解释触发器和完整性约束之间的关系。

答:触发器能实现完整性约束,同时能够进行比完整性约束更为复杂的检查和操

9. 已知R和S两个关系如图所示:

 

 

执行如下SQL语句,给出执行结果。

(1)CREATE  VIEW  H(A,B,C,D,E)

        AS   SELECT  A,B,R.C,D,E

              FROM   R,S

      WHERE   R.C=S.C;

(2)SELECT  B,D,E

        FROM   H

        WHERE  C=‘c2’;

(1)

A

B

C

D

E

a1

b1

c1

d1

e1

a2

b2

c2

d2

e2

a3

b3

c3

d3

e3

(2)

B

D

E

b2

d2

e2

10.已知某公司数据库包含如下四个基本表,

Department(Dept_No,Dept_Name,Location)

Employee(Emp_No,Emp_Name,Dept_no)

ProJect(Pro_No,Pro_ Name,Budget)

Works(Emp_No,Pro_No,Job)

(1)使用DDL语句定义上述四个表,并说明主键和外键。

(2)将基本表Works中Job=‘经理’的员工号及参加的项目号,定义为一个视图V_MANAGER( Emp_No,Pro_No)。

(3)将“P2”项目的所有员工号、员工名和所在部门名称,定义为一个视图V_P2(Emp_No,Emp_Name,Dept_Name,)。

解答:

(1)CREAT TABLE Deparment

(Dep_NO CHAR(10),

Dep_NAME CHAR(20),

Location CHAR(30),

PRIMARY KEY(Dep_NO));

CREAT TABLE Employee

(Emp_NO CHAR(10)  PRIMARY KEY,

Emp_NAME CHAR(8),

Dep_NO CHAR(10),

FOREIGN KEY (Dep_NO) REFERENCES Department(Dept_NO));

CREATE TABLE ProJect

(Pro_NO CHAR(10)  PRIMARY KEY,

Pro_NAME CHAR(20),

Budget INT)

CREATE TABLE Works

(Emp_NO CHAR(10),

Pro_NO CHAR(10),

Job CHAR(20),

PRIMARY KEY(Emp_NO,Pro_NO),

FOREIGN KEY(Emp.NO) REFERENCES  Employee(Emp_NO),

FOREIGN KEY(Pro_NO) REFERENCES  ProJect(Pro_NO));

(2)CREAT VIEW V_MANAGER (Emp_NO,Pro-NO)

     AS SELECT EMP_NO,Pro-NO

            FROM(WORKS)

           WHERE JoB=‘经理’;

(3)CREATE VIEW V_P2(Emp_NO,Emp_NAME,Dept_NAME)

AS SELECT Employee.Emp_NO,

                   Employee.Emp_NAME,

                   Department.Dept_NAME

     FROM  Department,Employee, works

     WHERE  WORKS..Pro_no =’P2’ AND

                 Employee.Emp_NO= works.Emp_NO AND

Department. Dep_NO= Employee. Dep_NO;

四、查询实现题

1.针对第3章课后习题查询实现部分的第2小题所给出的SPJ数据库,试用SQL语句完成如下操作:

(1)求供应工程J1零部件的供应商号码SNO;

(2)求供应工程J1零部件P1的供应商名称;

(3)求供应工程J1红色零部件的供应商号码SNO;

(4)求没有使用天津供应商供应的红色零部件的工程号JNO;

(5)求至少用了供应商S1所供应的全部零部件的工程号JNO。

(6)找出使用供应商S1所供应零部件的工程号码;

(7)找到工程项目J2使用的各种零部件的名称及其数量;

(8)找出上海厂商供应的所有零部件的号码;

(9)找出使用上海厂商供应的零部件的工程名称;

(10)求供应商S2供应给各个工程的零部件总数量,结果中要有所对应的工程名称。

(11)把全部红色零部件的颜色改成蓝色。

(12)为工程项目名称为“一汽”的工程建立一个供应情况的视图,包括供应商代码SNO、零部件代码Pno、供应数量Qty 。

解答:

(1)求供应工程J1零部件的供应商号码SNO;

Select SNO

   From SPJ

    Where JNO='J1';

2求供应工程J1零部件P1的供应商名称;

Select SNAME

   From  SPJS

    Where SPJ.JNO='J1' AND SPJ.Pno='P1' AND S.SNO= SPJ.Sno;

(3)求供应工程J1红色零部件的供应商号码SNO;

Select SNO

  Form  SPJ,P

    Where SPJ.Pno=P.Pno and

          JNO='J1’' and

            Color=''

(4)求没有使用天津供应商供应的红色零部件的工程号JNO

Select JNO

  Form J

    Where JNO not IN

       (select JNO

                From S,SPJ,P

              Where SPJ.Pno=P.Pno and

                 SPJ.SNO=S.SNO and

                              City='天津' and

                              Color='');

(5)求至少用了供应商S1所供应的全部零部件的工程号JNO。

Select JNO

     From J

       Where not exists

              ( select *

                 Form SPJ as SPJ1

                     Where SNO='s1' and not exists

                      ( select *

                            From SPJ as SPJ2

                             Where SPJ2.SNO='s1' and

                                      SPJ2.Pno=SPJ1.Pno and

                                      SPJ2.JNO=J.JNO) );

注:条件SPJ2.SNO='s1'也可不要。

(6)找出使用供应商S1所供应零部件的工程号码;

Select JNO

  From SPJ

        Where SNO='S1';

(7)找到工程项目J2使用的各种零部件的名称及其数量;

   Select Pname,Qty

       From SPJ,P

         Where  SPJ.Pno=P.Pno and    JNO='J2';

(8)找出上海厂商供应的所有零部件的号码;

Select Pno

  Form SPJ,S

    Where  SPJ.SNO=S.SNO and S.city='上海';

(9)找出使用上海厂商供应的零部件的工程名称;

Select  Jname

   From  SPJ,J,S

     Where SPJ.SNO=s.SNO and

                 SPJ.JNO=J.JNO and

                 S.city='上海';

10求供应商S2供应给各个工程的零部件总数量,结果中要有所对应的工程名称。

Select  Jname,      Sum(Qty)

   From SPJ,J

    Where SNO='S2' and  SPJ.JNO=J.JNO

         Group by  J. JNO, Jname;

(11)把全部红色零部件的颜色改成蓝色。

Update P

 Set color=''

         Where  color='';

(12)为工程项目名称为“一汽”的工程建立一个供应情况的视图,包括供应商代码SNO、零部件代码Pno、供应数量Qty 。

Create view 供应情况(SNO,Pno,Qty)

AS select SNO,  Pno,  Qty

         From J,SPJ

          Where J.JNO=SPJ.JNO AND Jname='一汽'

2.设有学生选课数据库,包括S、C和SC三个关系模式:

S(SNO,SN,SD,SB,SEX)

C(CNO,CN,PC,TN)

SC(SNO,CNO,GRADE)

试用SQL语句实现下列操作:

(1)用连接,嵌套和EXISTS查询来查询学习课程号为“C01”的学生学号和姓名;

(2)查询至少选修课程号为“C03”和“C04”的学生姓名;

(3)查询不学“C02”课程的学生姓名和性别;

(4)查询学习全部课程的学生姓名;

(5)查询所学课程包含学生“李珊”所学课程的学生的学号。

(6)在关系C中插入一个元组(‘C08’,‘VB’,‘C02’,‘黄萍’);

(7)查询平均成绩大于80分的课程任课老师的姓名,并将查询到的值送入另一个已经存在的表LEVEL_80(TNAME)中;

(8)删除SC中还没有成绩的元组;

(9)删除选修“李”老师课程的所有女生选课元组;

(10)把数学成绩小于60,但大于55分的同学的成绩全改为60分;

(11)在表SC中,当某个成绩低于某一门课程的平均成绩时,提高5%。

(12)建立视图V_SSC(SNO,SN,CNO,CN,G),并按CNO升序排列;

(13)从视图V_SSC上查询平均成绩在90分以上的学生的SN,CN,G。

(14)授权用户张山对表S,C的查询权限;

(15)授权用户李斯对表SC的插入和删除权限;

(16)授权用户王武对表SC具有查询权限,对成绩属性具有更新权限;然后再撤销其对成绩属性所具有的更新权限;

(17)授权用户赵亮对所有表具有所有权限,并具有给其他用户授权的权限;

(18)创建一个视图,包含每门课程的课程号,课程的最高成绩、最低成绩、平均成绩;再创建一个具有查询该视图权限的角色,并将角色权限授权给用户周力。

解答:

(1)用连接,嵌套和EXISTS查询来查询学习课程号为“C01”的学生学号和姓名;

连接:

SELECT  S.SNO,S.SN

       FROM  S,SC

                  WHERE  S.SNO=SC.SNO AND SC.CNO='C01';

嵌套:

SELECT SNO, SN

  FROM  S

     WHERE  SNO  IN  ( SELECT  SNO   FROM  SC                                                            WHERE  CNO='C01');

EXISTS查询:

SELECT   SNO, SN

   FROM   S

      WHERE EXISTS  ( SELECT *   FROM SC

                        WHERE S.SNO=SC.SNO AND  SC.CNO='C01') ;

(2)查询至少选修课程号为“C03”和“C04”的学生姓名;

       SELECT SN

              FROM S

                     WHERE SNO IN

                            (SELECT SC1.SNO

                                   FROM SC SC1,SC SC2

                                          WHERE SC1.CNO='C03' AND

                                                        SC2.CNO='C04'AND

                                                        SC1.SNO=SC2.SNO);

(3)查询不学“C02”课程的学生姓名和性别;

       SELECT  SN,SEX

        WHERE SNO NOT IN

              (SELECT SNO

                     FROM SC

                            WHERE CNO='C02');

(4)查询学习全部课程的学生姓名;

方法一:

SELECT SN

       FROM S

          WHERE  not  EXISTS

(SELECT *

FROM C

WHERE  CNO  not  IN

(SELECT CNO

    FROM SC

       WHERE SC.SNO=S.SNO AND  SC.CNO=C.CNO));

方法二:

SELECT SN

FROM  S

WHERE  not  EXISTS

       (SELECT *

        FROM C

        WHERE not EXISTS

               (SELECT *

                FROM SC

                WHERE  SC.SNO=S.SNO  AND  SC.CNO=C.CNO))  ;

方法三:

SELECT  SN

   FROM S

   WHERE SNO IN

           (SELECT SNO

            FROM SC

            GROUP BY SNO

               HAVING COUNT(*)=(SELECT  COUNT(*)  FROM  C ));

(5)查询所学课程包含学生“李珊”所学课程的学生的学号。

方法一:

SELECT  DISTINCT  SNO

FROM  SC  X

WHERE  NOT EXISTS

         (SELECT *

          FROM  SC  Y, S

          WHERE   S.SN='李珊' AND

 S.SNO=Y.SNO   AND

Y.CNO  NOT  IN

                         (SELECT  CNO

                          FROM  SC   Z

                          WHERE X.SNO=Z.SNO)) ;

方法一:

SELECT  DISTINCT  SNO

FROM SC  X

WHERE NOT EXISTS

        (SELECT * 

        FROM SC   Y, S

        WHERE  Y.SNO=S.SNO   AND

                  S.SN='李珊'  AND  NOT EXISTS

                     (SELECT *

                      FROM SC    Z

                      WHERE  Z.SNO=X.SNO  AND  Z.CNO=Y.CNO)) ;

(6)在关系C中插入一个元组(‘C08’,‘VB’,‘C02’,‘黄萍’);

INSERT

       INTO C

       VALUES  ('C08''VB''C02''黄萍');

(7)查询平均成绩大于80分的课程任课老师的姓名,并将查询到的值送入另一个已经存在的表LEVEL_80(TNAME)中;

INSERT

INTO LEVEL_80(TNAME)

SELECT TN

FROM C

WHERE  CNO  IN 

(SELECT  CNO 

FROM  SC

GROUP BY  CNO

HAVING  AVG(GRADE)>80);

INSERT

INTO LEVEL_80(TNAME)

SELECT  TN

FROM  SC,C

WHERE  C.CNO=SC.CNO

GROUP BY   TNSC.CNO

HAVING  AVG(GRADE)>80;

(8)删除SC中还没有成绩的元组;

DELETE

FROM SC

WHERE GRADE IS NULL;

(9)删除选修“李”老师课程的所有女生选课元组;

DELECT

      FROM SC

         WHERE  SNO IN

                 (SELECT SNO

                    FROM S

                       WHERE SEX=’女‘)

                 AND   CNO  IN

                 (SELECT CNO

                     FROM C

                        WHERE  TN  like  ‘李%’);

(10)把数学成绩小于60,但大于55分的同学的成绩全改为60分;

UPDATE SC

SET GRADE=60

WHERE SNO IN

(SELECT  SNO

      FROM SC.C

      WHERE SC.CNO=C.CNO AND CN=’数学’ AND GRADE<60 AND GRADE>55);

(11)在表SC中,当某个成绩低于某一门课程的平均成绩时,提高5%。

UPDATE  SC

SET GRADE=GEADE*(1+5%)

WHERE  GRADE< ANY (SELECT  AVG(GRADE) 

                         FROM SC

                         GROUP BY CNO);

(12)建立视图V_SSC(SNO,SN,CNO,CN,G),并按CNO升序排列;

CREAT VIEW V_SSC(SNOSNCNOCNG)

AS SELECT  TOP 100 PERCENT  S.SNOS.SNC.CNOC.CNSC.GRADE

FROM S,C,SC

WHERE S.SNO=SC.SNO AND

                      SC.CNO=C.CNO

           ORDOR BY CNO ASC

注:在SQL SERVER中要加上TOP 100 PERCENT才能使用ORDOR BY。

(13)从视图V_SSC上查询平均成绩在90分以上的学生的SN,CN,G。

SELECT  SN, CN, G

   FROM  V_SSC

   WHERE  SNO IN (SELECT SNO

                     FROM  V_SSC

                     GROUP BY  SNO

                     HAVING  AVG(G)> 90);             

(14)授权用户张山对表S,C的查询权限;

GRANT SELECT

 ON S,C

 TO 张山;

(15)授权用户李斯对表SC的插入和删除权限;

GRANT INSERT ,DELECT

 ON SC

TO 李斯;

(16)授权用户王武对表SC具有查询权限,对成绩属性具有更新权限;然后再撤销其对成绩属性所具有的更新权限;

GRANT  SELECT,UPDATE(GRADE)

ON SC

       TO 王五

REVOKE  UPDATE(GRADE)

 ON SC

       FROM 王五

(17)授权用户赵亮对所有表具有所有权限,并具有给其他用户授权的权限;

GRANT ALL PRIVILEGES  ON  ALL TABLES

       TO 赵亮

       WITH GRANT OPITION;

(18)创建一个视图,包含每门课程的课程号,课程的最高成绩、最低成绩、平均成绩;再创建一个具有查询该视图权限的角色,并将角色权限授权给用户周力。

CREATE VIEW COURSE(CNO,MAX,MIN,AVG)

AS SELECT  CNO,     MAX(GRADE), MIN(GRADE),  AVG(GRADE)

    FROM  SC

      GROUP BY CNO;

CREATE  ROLE R1;

GRANT  SELECT  ON  COURSE   TO  R1;

sp_addrolemember R1,周力;

3.设有车辆管理数据库的数据模式如下:

车辆(车号,车牌名,车颜色,生产厂名)

工厂(厂名,厂长姓名,所在城市名)

城市(城市名,人口,市长姓名)

请用SQL语句实现如下查询:

(1)查询所有车牌名为“红旗”的轿车的车号。

(2)查询“红旗”牌轿车的生产厂家及厂长姓名。

(3)查询“跃进”牌轿车的生产厂家及所在城市的市长姓名。

(4)查询第一汽车制造厂所生产车辆的颜色。

(5)查询武汉生产哪些品牌的车。

解答:

(1)查询所有车牌名为“红旗”的轿车的车号。

SELECT 车号

FROM 车辆

WHERE 车牌名=‘红旗’;

(2)查询“红旗”牌轿车的生产厂家及厂长姓名。

SELECT 生产厂名,厂长姓名

FROM   车辆,工厂

WHERE 生产厂名=厂名 AND 车牌名=‘红旗’;

(3)查询“跃进”牌轿车的生产厂家及所在城市的市长姓名。

SELECT 生产厂名,市长姓名

FROM 车辆,工厂,城市

WHERE 生产厂名=厂名    AND

所在城市名=城市名      AND

车牌名=‘跃进’;

(4)查询第一汽车制造厂所生产车辆的颜色。

SELECT  DISTINCT 车颜色

FROM 车辆

WHERE 生产厂名=‘第一汽车制造厂’;

(5)查询武汉生产哪些品牌的车。

SELECT DISTINCT 车牌名

FROM 车辆,工厂

WHERE 生产厂名=厂名 AND

               所在城市名=‘武汉’;

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值