您的当前位置:首页数据库基础及其应用第四章课后作业

数据库基础及其应用第四章课后作业

2021-11-21 来源:乌哈旅游
第四章 结构化查询语言—SQL一、填空题

1.数据库系统的外模式在SQL中称为(视图),它由(基本表)产生出来。 2.SQL是高度(非过程化)和面向(集合)操作的语言。

3.由create schema KUCUN authorization LIU命令建立的一个数据库为(KUCUN),所有者为(LIU)。 4.在SQL中,若一个完整性约束只涉及到一个列,则该完整性约束既可以作为(列级)完整性约束定义,也可以作为(表级)完整性约束定义,两者只选其一。 5.在列级和表级完整性约束中同时存在的约束分别为(主码)、(单值)、(外码)和(检查)等四种约束。

6.在SQL中,主码约束的关键字为(primary key),外码约束的关键字为(foreign key)。 7.在SQL中,create table、alter table和drop table命令分别为在数据库中(建立)、(修改)和(删除)基本表结构的命令。

8.向基本表中插入数据有两种命令格式,一种称为(单行)插入格式,另一种称为(多行)插入格式。

9.在SQL中,insert、update和delete分别为对基本表进行(插入)、(修改)和(删除)记录操作的命令。

10.在SQL中,每个视图中的列可以来自不同的(表),它是在原有表的基础上(建立)的逻辑意义上的新关系。

11.当建立一个视图后,通常只对它做(修改)和(查找)这两种操作。

12.在(基本表)中,通常不应包括由计算可以得到的属性,而在(视图)中,为了用户查询数据的方便,则需要包含它们。

13.当建立和删除一个视图时,对相应的基本表(没有影响),当修改一个视图时,则对相应的基本表(有影响)。

14.在SQL中,建立视图、修改视图内容和删除视图的命令分别为(create view)、(update)和(drop view)。

15.在SQL新版的查询语句中,select选项实现(投影)运算,from选项实现(连接)运算,where选项实现(选择)运算。

16.在SQL的查询语句中,(group by)选项实现分组统计功能,(order by)选项实现对结果表的排序功能。 17.在新版的SQL中,表之间的连接共有三种方式,对应的关键字分别为(inner join)、(left join)和(right join)。

18.在实际的数据库管理系统中,对数据库的操作方式有(命令交互)、(程序执行)和(窗口界面)三种。

19.在SQL中建立和删除数据库模式的命令分别为(create schema)和(dropschema)。 20.在SQL中完整性约束分为(列级)完整性约束和(表级)完整性约束两个方面。 21.在SQL中,列级完整性约束分为(6)各情况,表级完整性约束分为(4)种情况。 22.在列级和表级完整性约束中同时存在的约束分别为(主码)(单值)(外码)和(检查)四种约束。

23.在(列级)完整性约束中,每个约束只能涉及到一个属性;在(表级)完整性约束中,每个约束可以涉及多个属性。

24.在SQL中,单值约束的关键字为(Unique),检查约束的关键字为(check)。

25.向基本表插入数据时,可以在命令中例用关键字(Values)引出记录值,或者在命令中通过(Select)子句得到一个结果表。

1

26.在SQL中,对基本表进行插入、修改和删除记录的命令分别为(insert)、(update)和(delete)。

27.基本表属于全局模式的表,它是(实表),而视图则属于局部模式中的表,它是(虚表)。 28.在SQL中通过使用视图,能够使在关系规范化时被分解的关系(连接)起来,能够增强数据库的(安全)性。

29.在(基本表)中,通常不应包括由计算可以得到的属性;而在(视图)中为了用户查询数据的方便,则需要包含它们。

30.在SQL中,根据基本表建立一个视图时,包括建立了该视图的(结构)和(内容)两个方面。

31.在SQL中,create view、update和drop view命令分别为(建立)(修改)和(删除)视图的命令。

32.在SQL中,建立视图、修改视图内容和删除视图的命令分别为(create view)(update)和(drop view)。

33.在SQL的查询语句中,group by选项实现(分组统计)功能,order by选项实现对结果表的(排序)功能。 34.在新版的SQL中,查询所涉及的表及表之间的连接是在from选项中实现的,表之间的连接共有三种方式,分别称为(中间连接)(左连接)和(右连接)。 二、根据主教材第四章所给的商品库和教学库,按照下列所给的每条SQL查询语句写出相应的功能。

⑴在名称为商品库的数据库中包含有商品表1和商品表2,它们的定义分别为: 商品表1(商品代号 char(8),分类名 char(8),单价 float,数量 int) 商品表2(商品代号 char(8),产地 char(6),品牌 char(6),)

⑵在名称为教学库的数据库中包含有学生、课程和选课三个表,它们的定义分别为: 学生(学生号 char(7),姓名 char(6),性别 char(2),出生日期 datetime, 专业 char(10),年级 int)

课程(课程号 char(4),课程名 char(10),课程学分 int) 选课(学生号 char(7),课程号 char(4),成绩 int) 1.select x.商品代号,分类名,数量,品牌 from 商品表1 x,商品表2 y where x.商品代号=y.商品代号

从商品库中查询出每一种商品的商品代号、分类名、数量和品牌等信息。 2. select distinct 品牌 from 商品表2

从商品库中查询出所有商品的不同品牌。 3. select x.商品代号,分类名,产地,品牌 from 商品表1 x,商品表2 y

where x.商品代号=y.商品代号 and (品牌=’熊猫’ or 品牌=’春兰’)

从商品库中查询出品牌为熊猫或春兰的所有商品的商品代号、分类名、产地和品牌。 4. select 课程.课程号,课程.课程名,count(*) as 选课人数 from 课程,选课

where 课程.课程号=选课.课程号 group by 课程.课程号,课程.课程名

从教学库中查询出每门课程被选修的学生数。

2

5. select * from 学生

where 学生号 in (select 学生号 from 选课

group by 学生号 having count(*)=1

)

从教学库中查询出只选修了一门课程的全部学生。 6. select x.*

from 课程 x,选课 y

where x.课程号=y.课程号 and y.学生号=@s1 and y.课程号 not in (select 课程号 from 选课

where 选课.学生号=@s2 )

从教学库中查询出学生号为@s1的学生所选修、而学生号为@s2的学生没有选修的全部课程。 注:@s1和@s2分别是已保存相应学生号的字符型变量

7. select * from 课程

where exists (select * from 选课

where 课程.课程号=选课.课程号 )

从教学库中查询出所有已被学生选修的课程。 8. select * from 学生

where exists (select * from 选课

where 学生.学生号=选课.学生号

group by 选课.学生号 having count(*)=3 )

从教学库中查询出同时选修了3门课程的全部学生。 9. select 专业,count(*) as 专业人数 from 学生 group by 专业

order by 专业人数 desc

从教学库中查询出每个专业的学生人数,并按人数多少降序排列。 10. select x.*,课程名,课程学分,成绩 from 学生 x,课程 y,选课 z

where x.学生号=z.学生号 and y.课程号=z.课程号 order by x.学生号,z.成绩

从教学库中查询出每个学生选课的全部情况,并依次按学生号和成绩排序。

3

11. select distinct 产地 from 商品表2

从商品库中查询出所有商品的不同产地。

12. select count(distinct 产地)as 产地数 from 商品表2

从商品库中查询出所有商品的不同产地总数。 13.select 学生.学号,count(*)as 选课门数 from 学生,选课

where 学生.学生号=选课.学生号 group by 学生.学生号

从教学库中查询出每个学生选课的门数。 14. select distinct x.*

from 学生 x,选课 y,选课 z

where y.学生号=z.学生号 and y.课程号<>z.课程号and x.学生号=y.学生号 从教学库中查询出至少选修了两门课程的全部学生。 15. select x.学生号,y.学生号,y.课程号 from 选课 x,选课 y

where x.学生号=@s1 and y.学生号=@s2 and x.课程号=y.课程号

从教学库中查询出学生号为@s1的学生和学生号为@s2的学生所选修的共同课程的课程号。 16. select * from 课程 where not exists

(select * from 选课 where 课程.课程号=选课.课程号) 从教学库查询出所有未被学生选修的课程。 17.select * from 学生 where 学生号 in

(select 学生号 from 选课 group by 学生号 having count(*)<=2) or not exists(select * from 选课 where 学生.学生号=选课.学生号) 从教学库中查询出最多选了2门课程(含未选任何课程)的全部学生。 18. select * from 学生 where not exists

(select y.课程号 from 学生 x inner join 选课 y on x.学生号=y.学生号

where x.姓名=@a and not exists(select * from 选课 where 学生.学生号=选课.学生号 and y.课程号=选课.课程号))

从教学库中查询出选修了姓名为@a的学生的全部选课的所有学生。 三、根据教材第四章所给的商品库和教学库,按照下列所给的每种功能写出相应的查询语句。 ⑴在名称为商品库的数据库中包含有商品表1和商品表2,它们的定义分别为: 商品表1(商品代号 char(8),分类名 char(8),单价 float,数量 int) 商品表2(商品代号 char(8),产地 char(6),品牌 char(6),)

⑵在名称为教学库的数据库中包含有学生、课程和选课三个表,它们的定义分别为: 学生(学生号 char(7),姓名 char(6),性别 char(2),出生日期 datetime,

专业 char(10),年级 int)

课程(课程号 char(4),课程名 char(10),课程学分 int) 选课(学生号 char(7),课程号 char(4),成绩 int)

1.从商品库中查询出每种商品的商品代号、单价、数量和产地。 select 商品表1.商品代号,单价,数量,产地 from 商品表1,商品表2

where 商品表1.商品代号=商品表2.商品代号

4

2.从商品库中查询出数量在10和20之间的商品种数。 select * from 商品表1

where 数量 between 10 and 20

3.从商品库中查询出每类(即分类名相同)商品的平均数量。 select 分类名,avg(数量) as 平均数量 from 商品表1 group by 分类名

4.从商品库中查询出单价大于等于2000元、或者数量大于等于15的所有商品。 select * from 商品表1

where 单价>=2000 or 数量>=15

5.从商品库中查询出比所有商品单价的平均值要高的全部商品。 select * from 商品表1

where 单价>all(select avg(单价) from 商品表1 )

6.从商品库中查询出同一类商品多于一种的所有分类名。 select distinct 分类名 from 商品表1

group by 分类名 having count(*)>1

7.从商品库中查询出每种商品的总价值,并按降序排列出来。 select *,单价*数量 as 总价值 from 商品表1

order by 总价值 desc

8.从教学库中查询出至少选修了姓名为@m1学生所选课程中一门课的全部学生。 select distinct 学生.* from 学生,选课

where 学生.学生号=选课.学生号 and 课程号=any(select 课程号

from 学生,选课

where 学生.学生号=选课.学生号 and 姓名=@m1 )

7.从商品库中查询出数量大于10的商品种数。 select count(*) as 数量 from 商品表1 where 数量>10

8.从商品库中查询出每类(即分类名相同)商品的最高单价。 select 分类名,max(单价) as 最高单价 from 商品表1 group by 分类名

5

9.从商品库中查询出每类(即分类名相同)商品的总数量。 select 分类名,sum(数量) as 总数量 from 商品表1 group by 分类名

10.从商品库中查询出比所有电视机的单价都高的每种商品。

select *

from商品表1

where单价>all(select单价 from商品表1

where分类名=’电视机’ )

11.从商品库中查询出数量最多的一种商品。

select *

from商品表1

where数量=some(selectmax(数量) from商品表1 )

12.从商品库中查询出同一产地的商品只有一种的所有商品。 select 商品表1.*,产地 from 商品表1,商品表2

where 商品表1.商品代号=商品表2.商品代号and 产地 in (select 产地

from 商品表1 x,商品表2 y where x.商品代号=y.商品代号 group by 产地 having count(*)=1 )

13.从教学库中查询出每门课程被选修的学生人数,并按所选人数的升序排列出课程号、课程名和选课人数。

select 课程.课程号,课程名,count(课程.课程号) as 人数 from 课程,选课

where 课程.课程号=选课.课程号 group by 课程.课程号,课程名

6

因篇幅问题不能全部显示,请点此查看更多更全内容