SQL数据库期末考试复习题

更新时间:2024-06-24 09:01:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

考试题型

一、选择题(本大题共20个小题,每个小题1分,共20分) 二、填空题(本大题共10个小题,每小题2分,共20分)

三、请使用SQL命令完成以下操作(本大题共5小题,每小题4分,共20分)

四、简答题(本大题共4小题,每小题5分,共20分) 五、设计题(本大题共2小题,每小题10分,共20分)

数据库原理与应用复习题

一、选择题

1、SQLserver数据库文件有三类,其中主数据文件的后缀为(C):

A、.ndf B、.ldf C、.mdf D、.idf 2、下面标志符不合法的是:(C)。

A、[mydelete] B、_mybase C、$money D、trigger1 3、下面字符串能与通配符表达式[ABC]%a进行匹配的是:(C)。

A、BCDEF B、A_BCD C、ABC_a D、A%a 4、下列说法正确的是___B____。

A、视图是观察数据的一种方法,只能基于基本表建立。 B、视图是虚表,观察到的数据是实际基本表中的数据。 C、索引查找法一定比表扫描法查询速度快。 D、索引的创建只和数据的存储有关系。

5、下列途径哪个不是实现值域完整性____B___。

A、rule(规则)B、primarykeyC、notnullD、default

6、SQL Server 2008是一个(C)的数据库系统。

(A)网状型(B)层次型(C)关系型(D)以上都不是 7、SQL Server 2008采用的身份验证模式有(D)。

(A)仅Windows身份验证模式 (B)仅SQL Server身份验证模式 (C)仅混合模式 (D)Windows身份验证模式和混合模式

8、在SQL Server 2008中,当数据表被修改时,系统自动执行的数据库对象是(B)。 (A)存储过程(B)触发器(C)视图(D)其他数据库对象 9、SQL Server的字符型系统数据类型主要包括(B)。 A.Int、money、char B.char、varchar、text C.datetime、binary、int D.char、varchar、int

1

10、在SQL Server 2000中,索引的顺序和数据表的物理顺序相同的索引是(A)。 (A)聚集索引(B)非聚集索引(C)主键索引(D)唯一索引

11、要查询book表中所有书名中包含“计算机”的书籍情况,可用(B)语句。 (A)SELECT * FROM book WHERE book_name LIKE ‘计算机*’ (B)SELECT * FROM book WHERE book_name LIKE ‘计算机%’ (C)SELECT * FROM book WHERE book_name=‘计算机*’ (D)SELECT * FROM book WHERE book_name=‘计算机%’ 12、SELECT语句中与HAVING子句通常同时使用的是(C)子句。 A.ORDERBY B.WHERE C.GROUP BY D.无需配合

13、要删除mytable表中的myindex索引,可以使用(D)语句。 (A)DROP myindex (B)DROP mytable.myindex

(C)DROP INDEX myindex(D)DROP INDEX mytable.myindex

14、下列选项都是系统提供的存储过程,其中可以进行视图信息的查询是(A)。 (A)sp_helptext(B)sp_helpindex(C)sp_bindrule(D)sp_rename 15、SQLServer提供的单行注释语句是使用(A)开始的一行内容。 A.“/*” B.“--” C.“{” D.“/” 16、以下运算符中优先级最低的是(D)。

(A)+(加) (B)=(等于) (C)like (D)=(赋值)

17、根据关系数据基于的数据模型——关系模型的特征判断下列正确的一项:(B) A、只存在一对多的实体关系,以图形方式来表示。

B、以二维表格结构来保存数据,在关系表中不允许有重复行存在。 C、能体现一对多、多对多的关系,但不能体现一对一的关系。 D、关系模型数据库是数据库发展的最初阶段。

18.SQL语言按照用途可以分为三类,下面选项中哪一种不是:(C) (A)DML (B)DCL (C)DQL (D)DDL

19.在SELECT语句的WHERE子句的条件表达式中,可以匹配0个到多个字符的通配符是(B) (A)* (B)% (C)- (D)?

20.以下那种类型不能作为变量的数据类型(C)。 (A)text (B)ntext (C)table (D)image 21.下面不属于数据定义功能的SQL语句是:(C)

A.CREATE TABLE B.CREATE CURSOR C.UPDATE D.ALTER TABLE 22.在SQL SERVER中局部变量前面的字符为:(D) (A)* (B)# (C)@@ (D)@ 23.对视图的描述错误的是:(C)

(A)是一张虚拟的表 (B)在存储视图时存储的是视图的定义

(C)在存储视图时存储的是视图中的数据 (D)可以像查询表一样来查询视图 24.在T-SQL语言中,若要修改某张表的结构,应该使用的修改关键字是(A)。 (A)ALTER (B)UPDATE (C)UPDAET (D)ALLTER

25、有如下代码,当代码中_[关键字]_分别为break、continue、return时,最后的print@n输出的值为什么?A declare@nint

2

set@n=3 while@n〉0 begin

set@n=@n-1

if@n=1_[关键字]_ end

print @n(2分)

A:1,0,不输出 B:1,1,1 C:0,0,0 D:0,1,2 26、数据库系统由数据库、硬件和什么等组成?(D)

A:操作系统 B:文件系统 C:编译系统 D:数据库管理系统 27、所谓概念模型,指的是什么?(D)

A:客观存在的事物及其相互联系 B:将信息世界中的信息数据化

C:实体模型在计算机中的数据化表示 D:现实世界到机器世界的一个中间层次,即信息世界

28、数据库系统不仅包括数据库本身,还要包括相应的硬件,软件和什么?(D)

A:数据库管理系统 B:数据库应用系统 C:相关的计算机系统 D:各类相关人员 29、数据库系统软件包括DBMS和什么?(D)

A:数据库 B:高级语言 C:OS D:数据库应用系统和开发工具 30、下列四项中,不正确的提法是什么?(C) A:SQL语言是关系数据库的国际标准语言

B:SQL语言具有数据定义,查询,操纵和控制功能 C:SQL语言可以自动实现关系数据库的规范化 D:SQL语言称为结构查询语言

31、以下关于外码和相应的主码之间的关系,正确的是哪个?(A)

A:外码并不一定要与相应的主码同名 B:外码一定要与相应的主码同名

C:外码一定要与相应的主码同名而且唯一 D:外码一定要与相应的主码同名,但并不一定唯一

32、公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,从职员到部门的联系类型是什么?(C)

A:多对多 B:一对一 C:多对一 D:一对多

33、数据库是在计算机系统中按照一定的数据模型组织、结构化的什么?(B) A:文件的集合 B:数据的集合 C:命令的集合 D:程序的集合 34、数据库设计的几个步骤是什么?(A)

A:需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,数据库运行和维护 B:需求分析,逻辑结构设计,物理结构设计.概念结构设计,数据库实施,数据库运行和维护 C:需求分析,逻辑结构设计,概念结构设计.物理结构设计,数据库实施,数据库运行和维护 D:需求分析,概念结构设计,物理结构设计,逻辑结构设计,数据库实施,数据库运行和维护 35、数据库系统是在什么的基础上发展起来的?(B)

A:操作系统 B:文件系统 C:编译系统 D:数据库管理系统 36、SQL语言是什么语言?(C)

A:层次数据库 B:网络数据库 C:关系数据库 D:非数据库

3

37、SQL中,聚合函数COUNT(列名)用于?(C)

A:计算元组个数 B:计算属性的个数 C:对一列中的非空值计算个数 D:对一列中的非空值和空值计算个数

38、什么是长期存储在计算机内的有组织,可共享的数据集合?(C) A:数据库管理系统 B:数据库系统 C:数据库 D:文件组织 39、在关系数据模型中,通常可以把什么称为关系模式?(B)

A:记录 B:记录类型 C:元组 D:元组集

40、设计数据库时,首先应该设计:A.数据库应用系统结构 B.DBMS结构 *C.数据库的概念结构 D.数据库的控制结构 41、SQL语言称为(C)。A、结构化定义语言B、结构化控制语言C、结构化查询语言D、结构化操纵语言。

42.下列聚合函数中不忽略空值(null)的是[ ]A.SUM(列名) B.MAX(列名) *C.COUNT(*) D.AVG(列名) 43.在数据库设计中,将ER图转换成关系数据模型的过程属于[ ].A.需求分析阶段 *B.逻辑设计阶段 C.概念设计阶段 D.物理设计阶段

44.SQL中,下列涉及空值的操作,不正确的是[ ]A.AGE IS NULL B.AGE IS NOT NULL *C.AGE=NULL D.NOT(AGE IS NULL)

45、SQL语言中,条件“年龄BETWEEN 20 AND 30”表示年龄在20至30之间,且: *A.包括20岁和30岁 B.不包括20岁和30岁C.包括20岁但不包括30岁 D.包括30岁但不包括20岁

46、为了使索引键的值在基本表中唯一,在建立索引的语句中应使用保留字:*A.UNIQUE B.COUNT C.DISTINCT D.UNION

47、把ER模型转换成关系模型的过程,属于数据库的:A.需求分析 B.概念设计 *C.逻辑设计 D.物理设计 48.在数据库系统中,保证数据及语义正确和有效的功能是:A.并发控制 B.存取控制 C.安全控制 *D.完整性控制

49.在SQL语言中,属于DML的操作命令是:A.CREATE B.GRANT *C.UPDATE D.DROP

50.一辆汽车由多个零部件组成,且相同的零部件可适用于不同型号的汽车,则汽车实体集与零部件实体集之间的联系是:A.1:1 B.1:M C.M:1 *D.M:N

51.概念设计的主要目标是产生数据库概念结构,该结构主要反映:A.DBA管理信息的需求 B.数据库的维护需求 C.应用程序开发的需求 *D.企业的信息需求 52.用下面的SQL语句建立一个基本表:CREATE TABLE Student(Sno CHAR(4) NOT NULL,Sname CHAR(8) NOT NULL,Sex CHAR(2),Age smallint),可以插入到表中的元组是:A.'5021','刘样',男,21 B.NULL,'刘祥',NULL,21 C.'5021',NUlL,男,21 *D.'5021','刘祥',NULL,NULL

4

53.下列四项中说法不正确的是( C )

A.数据库减少了数据冗余 B.数据库中的数据可以共享 C.数据库避免了一切数据的重复 D.数据库具有较高的数据独立性

54.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,从职员到部门的联系类型是( C )

A.多对多 B.一对一 C.多对一 D.一对多

55.在视图上不能完成的操作是( C )

A.更新视图 B.查询 C.在视图上定义新的基本表 D.在视图上定义新视图

56.有关数据和信息的概念,下列叙述正确的是:*A.数据是信息的载体B.数据是信息的内涵C.数据和信息互为载体D.数据和信息相互独立

57.实体只用于表示:A.实际存在的事物B.概念性的事物C.事物与事物之间的联系 *D.选项A、B、C都不对

58.从“实体一联系“模型到数据模型实际上经历了三个领域的演变过程,即:A.信息世界一现实世界一数据世界B.数据世界一信息世界一现实世界 C.现实世界一数据世界一信息世界*D.现实世界一信息世界一数据世界·

59.一个班级有多个学生,每个学生只能属于一个班级,班级与学生之间是[]A.一对一的联系*B.一对多的联系C.多对一的联系D.多对多的联系

60.每个教师可以教授多门课程,每门课程至少有两名教师任课,从课程到教师之间的联系类型是 *A.多对多 B.一对一 C.多对一 D.一对多

61.英文缩写DBA代表 *A. 数据库管理员 B.数据库管理系统 C.数据定义语言 D.数据操纵语言

62.若在实体R的诸属性中,属性A不是R的主键,却是另一个实体S的主键,则称A为R的 A.候选键 *B.外部键 C.非主属性 D.主属性

63.在下述局部E-R图中,标出*号的图形元素是A.实体 B.实体的属性 C.联系 *D 联系的属性

5

Varchar(20) 姓名 Char(2) 性别 Smalldatetime 出生日期 Create table student (学号 char(10) primary key, 姓名 varchar(20) not null ,

否 否 可 默认为“男”,取值只能为“男”或“女” 性别 char(2) not null default '男' check ( 性别 in ('男','女')), 出生日期 smalldatetime )

(3)为32题建立的student表的“姓名”属性创建非惟一的非聚集索引name_index。

create index name_index on student (姓名) (4) 为(3)题建立的student表输入以下数据。

insert [into] student values('0401332901','李勇','男','1995-5-19')

(5)将(3)题建立的student表中李勇的出生日期更改为1995-6-19。

update student set 出生日期='1995-6-19' where 姓名='李勇' (6)由(3)题建立的student表创建所有女生信息的视图。

create view female_stu as select * from student where 性别='女'

(7)删除(3)题建立的student表中学号为“0401332901”学生的数据。 Delete [from] student where 学号='040133290' 22、请使用SQL命令完成以下检索操作

已知有图书表、作者表和出版社表,各表字段定义如下: 图书(图书编号,书名,价格,出版社编号,种类) 作者(作者编号,姓名,性别,电话,城市,地址) 出版社(出版社编号,出版社名称,出版社地址) (1).检索出所有图书的种类(不能含有相同种类)。

Select distinct 种类 from图书 (2).检索出价格不在20至50元之间的图书的书名和价格。

Select书名,价格 from图书 where价格 not between 20 and 50 或 Select书名,价格 from图书 where价格< 20 or 价格>50

(3).检索出各类图书的最高价格。

Select max(价格) from 图书 group by 种类 (4).检索出图书编号以“C”开头,中间第3位为数字0-5的图书信息。 Select * from图书 where 图书编号 like ?C_[0-5]%? (5).检索出“北京”市或“上海”市男性作者的编号、姓名和地址。

Select 作者编号, 姓名, 地址 from 作者 where城市in (?北京? ,?上海?) and性别=? 男? (6).检索出“计算机”类图书的平均价格和种类,并以“平均价格”表示。

Select 种类,avg(价格) [as] ‘平均价格’from 图书 group by 种类 having 种类=?计算机? (7). 请按城市降序排列输出作者信息。

16

Select * from作者 order by城市 desc (8).检索出价格在50元以上图书的书名、价格及出版社名称。

Select书名, 价格, 出版社名称 from 图书 t , 出版社 p

Where t. 出版社编号=p. 出版社编号 and价格>50

(9).查询出版“音乐”类图书的出版社名称和地址。

Select出版社名称, 出版社地址 from 出版社 where出版社编号 in (select 出版社编号 from图书 where种类=?音乐? )

或:Select出版社名称, 出版社地址 from 出版社 p,图书 t Where t. 出版社编号=p. 出版社编号 and 种类=?音乐?

24、编程题(共4题)

有一个“学生-课程”数据库,数据库中包括三个表: (1) “学生”表Student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成,可记为: Student(Sno,Sname,Ssex,Sage,Sdept) Sno 为关键字。

(2) “课程”表Course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)四个属性组成,可记为: Course(Cno,Cname,Cpno,Ccredit) Cno为关键字。

(3) “学生选课”表SC由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,可记为: SC(Sno,Cno,Grade) (SNO, CNO) 为关键字。完成下列操作:

(1)请把其中建立 “学生”表Student的语句写下来,表Student是由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成,其中学号属性不能为空,并且其值是唯一的。

CREATETABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20), Ssex CHAR(1), Sage INT, Sdept CHAR(15)); (2)在student表中查询Sdept是‘计算机’的学生的所有信息,并按Sno降序排列。 select * from student where Sdept=’计算机’ order by Sno desc

(3)在以上三个表中查询Ccredit为5并且Grade大于60的学生的学号、姓名和性别。 方法1:

select student.Sno,Sname,Ssex from student, course, sc

where (student.Sno=sc.Sno) and (course.Cno=sc.Cno)

and (course.Ccredit=5) and (sc.Grade>60)

(1分)

方法2:

select student.Sno,Sname,Ssex

On student.Sno=sc.Sno

from student Inner Join (sc Inner Join course On course.Cno=sc.Cno) where (course.Ccredit=5) and (sc.Grade>60)

17

(4)为Course表创建一个名称为my_trig的触发器,当用户成功删除该表中的一条或多条记录时,触发器自动删除SC表中与之有关的记录。

(注:在创建触发器之前要判断是否有同名的触发器存在,若存在则删除之。) If exists(Select name From sysobjects

Where name=’my_trig’and type=’tr’)

Drop trigger my_trig Go

Create trigger my_trig On Course For Delete As

Delete From sc

Where Sno in (Select Sno From Deleted)

Go

四、填空题

1、在三大传统的数据模型中,具有严格的数学理论基础的是_____关系模型___。 2、实现概念模型最常用的表示方法是_____E-R模型_____。

3.用树型结构表示实体类型及实体间联系的数据模型称为 层次模型 。 4、模式/内模式映象为数据库提供了___物理___数据独立性。

5、在关系代数运算中,从关系中取出满足条件的元组的运算称为____选择_____。 6.参照完整性规则是对 外 键的约束。 7.SELECT语句查询条件中的谓词“=SOME”,与运算符 IN 等价。 8、关系代数中专门的关系运算包括:选择、投影、____连接__和除法。

9、关系数据操作语言(DML)的特点是:操作对象与结果均为关系、操作的_非过程性强_____、语言一体化、并且是建立在数学理论基础之上。

10.文件系统与数据库系统的最大区别是在 数据结构化 方面。

11,内模式是描述数据如何在存储介质上组织存储的,又称之为 存储或物理 模式。 12.E-R图中包括实体、属性和 联系 三种基本图素。

13.数据库逻辑设计步骤分为三步,分析 实体及其联系 、画E-R图、建立数据模型。 14.引用完整性规则是指:如果关系R的外部键是另一关系S的主键,则R关系中外部键的取值,要么等于 关系S中某一记录的主键 的值,要么等于空值。 15.数据库概念设计通常采用 E—R或实体—联系 方法。

16、合同库文件储存批发商与零售商的供货合同。一个合同可以填写不同商品的订货数量。供货合同的关系模式为:合同(合同号,商品号,商品名,单价,数量),该关系的关键字是 (合同号,商品号) 。

17.数据库系统的主要特点是:数据独立、_____数据共享 _______和减少了数据冗余、数据的安全性、使用操作方便性。

18

18.数据库的数据独立性包括:____逻辑数据独立性_______和物理数据独立性。 19.关系代数中专门的关系运算包括:____选择、投影、连接和除法 _______。 20.数据库的存储结构是建立在_____文件组织______基础上的。

21.关系数据操作语言(DML)特点是:操作对象与结果均为关系、操作的非过程性强、语言一体化、并且是建立在______数学理论_____基础之上。

22.数据库系统采用映射技术的好处有:有利于数据库的使用、安全性好、保密性强、保证数据共享和____数据的独立性_______。

23.实体间联系分为三种:一对一联系、 ____一对多联系_______ 、多对多联系。

24.属性是信息世界中广泛使用的一个术语,它对应于数据世界的____数据项(字段)_______。 25.数据库结构设计的过程是“概念设计→____逻辑设计_______→物理设计”。

26.联系是数据库技术的重要特点,至于怎样实现联系,取决于_____数据库类型_______。 27.数据独立性是指当数据发生变化时,可以不用修改___应用程序___。

28.如果有元组在关系的主码上取值为空值,那么它违反了关系的___实体___完整性约束。 29.数据管理经过了手工文档、文件系统和___数据库系统______三个发展阶段。 30.DBMS利用事务日志保存所有数据库事务的_____更新(或修改)____操作。

31.如果两个实体之间具有M:N联系,则将它们转换为关系模型的结果是___3____个表。 32.一个关系就是一个_____二维表____,一行对应一个元组,一列对应一个域,也就是一个属性。

33.DBA是指___数据库管理员______,它的职责是维护和管理____数据库_____,使之始终处于最佳状态。

34.数据库的三个模式之间存在两种映射,一是____外模式/模式_____间的影射,二是____模式/内模式_____间的映射。

35.数据库的三级体系结构,是从______外模式________、_____模式______和_____内模式______三个不同层次描述的。

36.在数据处理领域中,数据处理技术经历了___自由数据管理______、___文件管理________和______数据库管理____三个阶段。

37.在关系数据库中,用___二维表_______表示实体及实体之间的关系。

38.DBMS的含义是___数据库管理系统_____,它是用户和___数据库_____之间的接口。 39.数据冗余是指___数据的重复存储___。

40.除计算机软硬件环境外,数据库系统一般由______数据库_______、______数据库管理系统_______、__数据库管理员___________和___应用程序__________组成。

41.在数据库系统中,用户对数据的操作只能通过____DML_________语言进行。 42.在数据库的三模式中,通过模式之间的____映射______来实现模式之间的转换。

43.外模式又称子模式,是_____用户_______眼中的数据库,因此称外模式为___用户____视图。 44.数据的完整性是指数据的___正确性____和____相容性_____。

45.实体和属性都有“型”和“值”之分,“型”是概念的_内涵____,而“值”是概念的___特例______。

46.在关系模式中,存在三类完整性规则,其中引用完整性约束规则是指____限制引用不存在的记录________。

47.在关系数据操纵语言DML中,其操作的对象和结果都是______关系______。

48.关系的自然连接是连接的一个重要特例,实用价值很大,它要求被连接的两个关系_______

19

有若干相同的属性名_______。

49.在数据库的三模式中,内模式又称_____存储____模式,具体描述了数据是如何___组织存储______在存储介质上,故称内模式为____系统程序员_____视图。 50.域是__值_____的集合,域中数据的个数叫做域的____基数___。 51、专门的关系运算包括___选择____、__投影_____和___连接____。 52.数据库逻辑设计一般分为三个阶段,即____收集和分析用户需求___、_____建立E-R模型____和___数据库模式设计____。

53.在关系的诸属性中,能够用来唯一标识元组的那个属性称为___键____。

54.DDL的中文含义是____数据描述语言__________,它有两种方式,一是__交互式_____,二是____语句描述式______。

55.现实世界中的事物类,在信息世界中称为____实体集_______,而一个事物则称为______实体____,事物的性质称为______属性_____。

56.在关系模型中,实体完整性约束是指_____关系中的“主键”不能取空值______。 57.__外部关键字_______是不同关系实现联系的保证。

58.数据模型应具有描述__数据_______和____数据联系___两方面的功能。

59.“键”也称为关键字,是指在实体属性中,可用来区别实体集中不同个体的一个或几个__属性_____的组合。当有多个属性可作为键而选定其中一个时,则称它为该实体的___主键_______。若在实体的各属性中,某属性虽非该实体的主键,却是另一实体的主键,则成此属性为___外部键________。

60.关系与文件有许多相似之处,当把关系看成是文件时,则___元组_____就是文件中的记录,______属性____就是记录中的数据项。

61.关系模式的三类完整性规则是__实体完整性约束_____、____引用完整性约束___和____用户定义的完整性约束_______。

62.关系的自然连接是____连接___的一个重要特例,它要求被连接的两个关系满足______有若干相同的属性名___________。

63.视图是一个虚表,因为它是从___基本表导出_的表。 64.索引的用途是__加快查找速度___。

65、已知:系(系编号、系名称、系主任、电话、地点)和学生(学号、姓名、性别、入学、日期、专业、系编号)两个关系,指出系关系的主码是__系编号_____,系关系的外码是_无_____,学生关系的主码是_学号_______、外码是__系编号____。

66、已知:学生、课程和成绩三个关系如下:学生(学号,姓名,性别,班级),课程(课程名称,学时,性质),成绩(课程名称,学号,分数),学生关系的主代码应该是___学号__, 外码应该是___无___;课程关系的主码应该是____课程名____,外码应该是____无_____ ;成绩关系的主码应该是__课程名称,学号__, 外码应该是___课程名称和学号__ 。 67、SQL Server 2000的文件包括: 数据文件(.mdf或.ndf)和 日志文件 。 68、在SQL Server 2000中,Unicode 标准的全称是 统一字符编码标准 。 69、在T-SQL语言中,若要修改某张表的结构,应该使用的修改关键字是 ALTER ;若要创建一个数据库,应该使用的语句是 CREATE DATABASE 。 70. 声明局部变量的命令为(declare @变量名)。

20

71. 修改表的命令是(alter table 表名)。 72. (参照)完整性维护实体间的联系。

73.计算字段的累加和的聚合函数是(sum(字段名) 或sum())。 74.(sp_bindrule)命令可以将定义的规则绑定在数据库表的列上。 75.结构化查询语言的英文是(Structure Query Language) 。 76.查看全局变量的命令为(select @@全局变量名)。

77.删除数据库的命令是 drop database 。

78.通配符“%”的含义表示 匹配零个或多个字符 ;而通配符“_” 的含义表示 匹配单个字符 。

表格操作小结:

简单来说,创建新表格时,在关键词create table后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。注意,所有的SQL语句在结尾处都要使用“;”符号。

使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在选择表格名称时不要使用SQL语言中的保留关键词,如select,create,insert等,作为表格或列的名称。

数据类型用来设定某一个具体列中数据的类型。例如,在列中只能采用varchar或char的数据类型,而不能使用number的数据类型。 SQL语言中较为常用的数据类型为:

char(size):固定长度字符串,其中括号中的size用来设定字符串的最大长度。Char类型的最大长度为255字节。

varchar(size):可变长度字符串,最大长度由size设定。 number(size):数字类型,其中数字的最大位数由size设定。 Date:日期类型。

number(size,d):数字类型,size决定该数字总的最大位数,而d则用于设定该数字在小数点后的位数。

最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限制条件就是当向特定列输入数据时所必须遵守的规则。例如,unique这一限制条件要求某一列中不能存在两个值相同的记录,所有记录的值都必须是唯一的。除unique之外,较为常用的列的限制条件还包括notnull和primarykey等。Notnull用来规定表格中某一列的值不能为空。Primarykey则为表格中的所有记录规定了唯一的标识符。 向表格中插入数据

SQL语言使用insert语句向数据库表格中插入或添加新的数据行。Insert语句的使用格式如下:

Insert into tablename

21

(first_column,...last_column)

values(first_value,...last_value);

简单来说,当向数据库表格中添加新记录时,在关键词insert into后面输入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。最后,在关键词values的后面按照前面输入的列的顺序对应的输入所有要添加的记录值。 更新记录

SQL语言使用update语句更新或修改满足规定条件的现有记录。Update语句的格式为: Update tablename

Set columnname=newvalue[,nextcolumn=newvalue2...] Where 条件;

使用update语句时,关键一点就是要设定好用于进行判断的where条件从句。

删除记录

SQL语言使用delete语句删除数据库表格中的行或记录。Delete语句的格式为: Delete from tablename Where 条件;

简单来说,当需要删除某一行或某个记录时,在delete from关键词之后输入表格名称,然后在where从句中设定删除记录的判断条件。注意,如果用户在使用delete语句时不设定where从句,则表格中的所有记录将全部被删除。

删除数据库表

在SQL语言中使用drop table命令删除某个表格以及该表格中的所有记录。Drop table命令的使用格式为:

Drop table tablename; 例如:

如果用户希望将某个数据库表完全删除,只需要在drop table命令后输入希望删除的表格名称即可。Drop table命令的作用与删除表格中的所有记录不同。删除表格中的全部记录之后,该表格仍然存在,而且表格中列的信息不会改变。而使用drop table命令则会将整个数据库表格的所有信息全部删除。

书上第4章例题:

查询语句的基本语句格式:

Select [distinct] 输出列表 From 表名列表 [where 查询条件]

[Group by 列名1 [having 内部函数表达式]] [Order by 排序表达式[asc|desc]]

【例4.5】 查询XSB表中计算机系各同学的学号、姓名和总学分,对其总学分按以下规则进行替换:若总学分为空值,替换为“尚未选课”;若总学分小于50,替换为“不及格”;若总学分在50与52之间,替换为“合格”;若总学分大于52,替换为“优秀”。列标题更改为“等级”。

22

SELECT 学号, 姓名, 等级= CASE WHEN 总学分 IS NULL THEN '尚未选课' WHEN 总学分 < 50 THEN '不及格' WHEN 总学分 >=50 and 总学分<=52 THEN '合格' ELSE '优秀' END FROM XSB WHERE 专业= '计算机'

【例4.8】 对PXSCJ数据库的XSB表选择姓名、专业和总学分,只返回结果集的前6行。 SELECT TOP 6 姓名,专业,总学分 FROM XSB

SELECT TOP 6 PERCENT 姓名,专业,总学分 FROM XSB 【例4.14】统计学分在50分以上的学生的人数。

SELECT count( 总学分 ) AS '总学分大于50' from xsb WHERE 总学分 >50 (2)

【例4.20】 查询XSB表中学号中倒数第3个数字为1且倒数第1个数在1到5之间的 学生学号,姓名及专业。

SELECT 学号,姓名,专业 FROM XSB

WHERE 学号 LIKE '%1_[12345]'

【例4.22】 查询XSB表中不在1989年出生的学生情况。 SELECT 学号, 姓名, 专业, 出生时间 FROM XSB

WHERE 出生时间 NOT BETWEEN '1989-1-1' and '1989-12-31'

【例4.23】 查询XSB表中专业为“计算机”或“通信工程”或“无线电”的学生的情况。 SELECT * FROM XSB WHERE 专业 IN ('计算机', '通信工程', '无线电') 该语句与下列语句等价: SELECT * FROM XSB WHERE 专业= '计算机' or 专业= '通信工程' or专业='无线电'

查询XSB表中专业不为“计算机” 或“无线电”的学生的情况。 SELECT * FROM XSB WHERE 专业 not IN ('计算机', '无线电' )

【例4.27】 查找选修了课程号为206的课程的学生的情况。 在SQL Server Management Studio中新建查询,并在“查询分析器”窗口中输入查询脚本如下: SELECT * FROM XSB WHERE 学号 IN ( SELECT 学号 FROM CJB WHERE 课程号 = '206') 【例4.28】 查找未选修离散数学的学生的情况。 SELECT * FROM XSB

23

WHERE 学号 NOT IN ( SELECT 学号 FROM CJB WHERE 课程号 IN ( SELECT 课程号 FROM KCB WHERE 课程名 = '离散数学' ) ) 【例4.30】 查找比所有计算机系的学生年龄都大的学生。 SELECT * FROM XSB WHERE 出生时间

【例4.31】 查找课程号206的成绩不低于课程号101的最低成绩的学生的学号。 SELECT 学号 FROM CJB WHERE 课程号 = '206' AND 成绩 !< ANY ( SELECT 成绩 FROM CJB WHERE 课程号 = '101' )

【例4.37】 查找选修了学号为081102同学所选修的全部课程的同学的学号。

分析:本例即要查找这样的学号y,对所有的课程号x,若081102号同学选修了该课,那么y也选修了该课。

SELECT DISTINCT 学号 FROM CJB AS CJ1 WHERE NOT EXISTS ( SELECT * FROM CJB AS CJ2 WHERE CJ2.学号 = '081102' AND NOT EXISTS ( SELECT * FROM CJB AS CJ3 WHERE CJ3. 学号= CJ1.学号 AND CJ3.课程号 = CJ2.课程号) )

【例4.45】 查找选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。

SELECT XSB.学号, 姓名, 课程名, 成绩 FROM XSB , KCB , CJB WHERE XSB.学号 = CJB.学号 AND KCB.课程号 = CJB.课程号 AND 课程名 = '计算机基础' AND 成绩 >= 80

【例4.55】 求被选修的各门课程的平均成绩和选修该课程的人数。

SELECT 课程号, AVG(成绩) AS '平均成绩' , COUNT(学号) AS '选修人数' FROM CJB GROUP BY 课程号

【例4.57】 在PXSCJ数据库上产生一个结果集,包括各专业每门课程的平均成绩、每门课程的总平均成绩和所有课程的总平均成绩。

SELECT 课程名,专业, AVG(成绩) AS '平均成绩' FROM CJB, KCB, XSB

24

WHERE CJB.课程号 = KCB.课程号 AND CJB.学号 = XSB.学号 GROUP BY 课程名, 专业 WITH ROLLUP

【例4.58】 在PXSCJ数据库上产生一个结果集,包括每个专业的男生、女生人数、总人数及男生总数、女生总数、学生总人数。

SELECT 专业, 性别, COUNT(*) AS '人数' FROM XSB GROUP BY 专业,性别 WITH CUBE

【例4.59】 在PXSCJ数据库上产生一个结果集,包括各专业每门课程的平均成绩、每门课程的总平均成绩、每个专业的总平均成绩和所有课程的总平均成绩。 SELECT 课程名,专业,AVG(成绩) AS '平均成绩' FROM CJB, KCB, XSB WHERE CJB.课程号 = KCB.课程号 AND CJB.学号 = XSB.学号 GROUP BY 课程名,专业 WITH CUBE

【例4.61】 查找平均成绩在85分以上的学生的学号和平均成绩。

SELECT 学号, AVG(成绩) AS '平均成绩' FROM CJB GROUP BY 学号 HAVING AVG(成绩) > =85

【例4.62】 查找选修课程超过2门且成绩都在80分以上的学生的学号。 SELECT 学号 FROM CJB WHERE 成绩 >= 80 GROUP BY 学号 HAVING COUNT(*) > 2

【例4.63】 查找通信工程专业平均成绩在85分以上的学生的学号和平均成绩。 SELECT 学号, AVG(成绩) AS '平均成绩‘ FROM CJB WHERE 学号 IN (SELECT 学号 FROM XSB WHERE 专业 = '通信工程‘ ) GROUP BY 学号 HAVING AVG(成绩) > =85

【例4.65】 将计算机专业学生的“计算机基础”课程成绩按降序排列。 SELECT 姓名, 课程名, 成绩 FROM XSB, KCB, CJB WHERE XSB.学号 = CJB.学号 AND CJB.课程号 = KCB.课程号 AND 课程名= '计算机基础' AND 专业= '计算机' ORDER BY 成绩 DESC

【例4.66】 查找通信工程专业学生的学号、姓名、出生时间,并产生一个学生总人数行。 SELECT 学号, 姓名, 出生时间 FROM XSB

25

WHERE 专业= '通信工程' COMPUTE COUNT(学号)

【例4.67】 将学生按专业排序,并汇总各专业人数和平均学分。 SELECT 学号, 姓名, 出生时间, 总学分 FROM XSB ORDER BY 专业 COMPUTE COUNT(学号), AVG(总学分) BY 专业

【例4.74】 创建CS_KC视图,包括计算机专业各学生的学号、其选修的课程号及成绩。要保证对该视图的修改都要符合专业为计算机这个条件。

CREATE VIEW CS_KC WITH ENCRYPTION AS SELECT XSB.学号, 课程号, 成绩 FROM XSB, CJB WHERE XSB.学号 =CJB.学号 AND 专业 = '计算机' WITH CHECK OPTION

【例4.75】 创建计算机专业学生的平均成绩视图CS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。 CREATE VIEW CS_KC_AVG(num,score_avg) AS SELECT 学号, AVG(成绩) FROM CJB GROUP BY 学号

【例4.77】 查找平均成绩在80分以上的学生的学号和平均成绩。

本例首先创建学生平均成绩视图XS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。

CREATE VIEW XS_KC_AVG ( num,score_avg ) AS SELECT 学号, AVG(成绩) FROM CJB GROUP BY 学号

第5章要求掌握例题:

【例5.18】 将学号为081101的学生的总学分使用循环修改到大于等于60,每次只加2,并判断循环了多少次。 DECLARE @num INT SET @num=0

WHILE (SELECT 总学分 FROM XSB WHERE 学号='081101')<60 BEGIN UPDATE XSB SET 总学分=总学分+2 WHERE 学号= '081101' SET @num=@num+1 END

SELECT @num AS 循环次数

26

【例5.31】 创建用户定义函数,实现计算全体学生某门功课的平均成绩的功能。 CREATE FUNCTION average(@cnum char(20)) RETURNS int AS BEGIN DECLARE @aver int SELECT @aver= ( SELECT avg(成绩) FROM CJB WHERE 课程号=@cnum GROUP BY 课程号 ) RETURN @aver END

【例5.32】 调用例5.31定义的函数average。新建一个查询,输入以下语句并执行: USE PXSCJ /*假设用户函数average在此数据库中已定义*/ GO

DECLARE @course1 char(20) /*定义局部变量*/ DECLARE @aver1 int

SELECT @course1 = '101' /*给局部变量赋值*/ /*调用用户函数将返回值赋给局部变量*/ SELECT @aver1=dbo.average(@course1)

SELECT @aver1 AS '101课程的平均成绩' /*显示局部变量的值*/

第6章要求掌握例题: 【例6.11】 首先在PXSCJ数据库中定义表book及名为 today 的默认值,然后将其绑定到 book表的hire_date列。 CREATE TABLE book ( book_id char(6), name varchar(20) NOT NULL, hire_date datetime NOT NULL ) GO

CREATE DEFAULT today AS getdate() GO

EXEC sp_bindefault 'today', 'book.hire_date'

【例6.13】 建立表KCB2,同时定义总学分的约束条件为0~60。 CREATE TABLE KCB2

( 课程号 char(6) NOT NULL, 课程名 char(8) NOT NULL, 学分 tinyint CHECK (学分>=0 AND 学分<=60) NULL /*通过CHECK子句定义约束条件*/)

【例6.16】 修改XSB2表,向其中添加一个“身份证号码”字段,对该字段定义UNIQUE约束。对“出生时间”字段定义UNIQUE约束。

27

ALTER TABLE XSB2 add 身份证号码 char(20)

constraint sf_uk unique nonclustered(身份证号码) GO

ALTER TABLE XSB2

add constraint CJSJ_UK UNIQUE NONCLUSTERED(出生时间)

【例6.19】 创建一个表student1,只考虑学号和出生日期两列,出生日期必须大于1980年1月1日,并命名CHECK约束。 CREATE TABLE student1 ( 学号 char(6) NOT NULL, 出生时间 datetime NOT NULL,

CONSTRAINT DF_student1_cjsj

CHECK(出生时间>'1980-01-01') )

【例6.21】 通过修改PXSCJ数据库的CJB表,增加成绩字段的CHECK约束。

ALTER TABLE CJB

ADD CONSTRAINT cj_constraint

CHECK(成绩>=0 AND 成绩<=100)

【例6.23】 如下程序创建一个规则,并绑定到表KCB的课程号列,用于限制课程号的输入范围。

CREATE RULE kc_rule AS @range like '[1-5][0-9][0-9]' GO

EXEC sp_bindrule 'kc_rule', 'KCB.课程号' GO

【例6.24】 创建一个规则,用以限制输入到该规则所绑定的列中的值只能是该规则中列出的值。

CREATE RULE list_rule AS @list IN ('C语言', '离散数学', '微机原理') GO

EXEC sp_bindrule 'list_rule', 'KCB.课程名' GO

【例6.25】 定义CJB外键。 create table cjb1

( 学号 char(6) not null foreign key (学号) references XSB(学号) ,

课程号 char(3) not null foreign key (课程号) references KCB(课程号) ,

28

成绩 int null default 0 check(成绩>=0 and 成绩<=100), primary key(学号,课程号))

alter table CJB

add foreign key (学号) references XSB(学号)

alter table CJB

add foreign key (课程号) references KCB(课程号)

第7章要求掌握例题: 【例7.2】 从PXSCJ1数据库的三个表中查询某人指定课程的成绩和学分。该存储过程接受与传递参数精确匹配的值。

CREATE PROCEDURE student_info1 @name char (8), @cname char(16) AS SELECT a.学号, 姓名, 课程名, 成绩, t.学分 FROM XSB a INNER JOIN CJB b ON a.学号 = b.学号 INNER JOIN KCB t ON b.课程号= t.课程号 WHERE a.姓名=@name and t.课程名=@cname 或

CREATE PROCEDURE student_info1 @name char (8), @cname char(16) AS SELECT a.学号, 姓名, 课程名, 成绩, t.学分 FROM XSB a , CJB b,KCB t WHERE a.姓名=@name and t.课程名=@cname and a.学号 = b.学号and b.课程号= t.课程号

【例7.4】 从三个表的连接中返回指定学生的学号、姓名、所选课程名称及该课程的成绩。该存储过程在参数中使用了模式匹配,如果没有提供参数,则使用预设的默认值。 CREATE PROCEDURE st_info @name varchar(30) = '李%' AS SELECT a.学号,a.姓名,c.课程名,b.成绩 FROM XSB a INNER JOIN CJB b ON a.学号 =b.学号 INNER JOIN KCB c ON c.课程号= b.课程号 WHERE 姓名 LIKE @name EXECUTE st_info '王%'

【例7.11】 创建触发器,当向CJB表中插入一个学生的成绩时,将XSB表中该学生的总学分加上添加的课程的学分。

CREATE TRIGGER cjb_insert ON CJB AFTER INSERT AS

29

BEGIN DECLARE @num char(6), @kc_num char(3) DECLARE @xf int SELECT @num=学号, @kc_num=课程号 from inserted SELECT @xf=学分 FROM KCB WHERE 课程号=@kc_num UPDATE XSB SET 总学分=总学分+@xf WHERE 学号=@num PRINT '修改成功' END

INSERT INTO cjb VALUES('081101','208',65)

【例7.12】 创建触发器,当修改XSB表中的学号时,同时也要将CJB表中的学号修改成相应的学号(假设XSB表和CJB表之间没有定义外键约束)。 CREATE TRIGGER xsb_update ON XSB AFTER UPDATE AS BEGIN DECLARE @old_num char(6), @new_num char(6) SELECT @old_num=学号 FROM deleted SELECT @new_num=学号 FROM inserted UPDATE CJB SET 学号=@new_num WHERE 学号=@old_num END

UPDATE XSB SET 学号='081120' WHERE 学号='081101'

【例7.13】 在删除XSB表中的一条学生记录时将CJB表中该学生的相应记录也删除。 CREATE TRIGGER xsb_delete ON XSB AFTER DELETE AS BEGIN DELETE FROM CJB WHERE 学号 IN ( SELECT 学号 FROM deleted ) END

DELETE FROM xsb WHERE 学号='081120' 【例7.14】 在KCB表中创建UPDATE和DELETE触发器,当修改或删除KCB表中的课程号字段时,同时修改或删除CJB表中的该课程号。

CREATE TRIGGER kcb_trig ON KCB AFTER UPDATE, DELETE AS BEGIN IF (UPDATE(课程号)) UPDATE CJB SET 课程号=(SELECT 课程号 FROM inserted) WHERE 课程号=(SELECT 课程号 FROM deleted) ELSE DELETE FROM CJB

30

WHERE 课程号 IN(SELECT 课程号 FROM deleted) END

Update kcb set 课程号='401' where 课程号 ='101'

31

本文来源:https://www.bwwdw.com/article/0xt3.html

Top