1、 和和数据库的语言一般数据库的语言一般的,的,而而数据模型的抽象级别较高,比较简单,且数据模型的抽象级别较高,比较简单,且有明确的数学定义。用户只须了解逻辑模式,不有明确的数学定义。用户只须了解逻辑模式,不必关心物理存储的细节,这就为设计必关心物理存储的细节,这就为设计关系关系数据库语言提供了良好的基础。数据库语言提供了良好的基础。关系称为表,是关系数据库的基本组成单位。在关系称为表,是关系数据库的基本组成单位。在SQLSQL中,表分为两种:中,表分为两种:基表基表(base table)(base table)-数据显式地存储在数据库中。数据显式地存储在数据库中。视图视图(view)(vie
2、w)视图是个虚表。仅有逻辑定义,可根据其定义由视图是个虚表。仅有逻辑定义,可根据其定义由其它表(视图)导出,但不作为一个表显式地存储在其它表(视图)导出,但不作为一个表显式地存储在数据库中。视图可像基表一样,参与各种数据库操作。数据库中。视图可像基表一样,参与各种数据库操作。(2 2)临时视图)临时视图 对于较复杂的查询,可将查询中相对独立部分对于较复杂的查询,可将查询中相对独立部分作为查询的中间结果,定义为临时视图。作为查询的中间结果,定义为临时视图。临时视图在功能上与普通视图一样,但仅用于临时视图在功能上与普通视图一样,但仅用于附在临时视图定义后的查询语句中。该查询语句附在临时视图定义后的
3、查询语句中。该查询语句结束后,临时视图随之自行消失。结束后,临时视图随之自行消失。(1 1)普通视图)普通视图一般一般SQLSQL都支持的数据类型见表都支持的数据类型见表3-13-1。定义基表模式语句的格式见图定义基表模式语句的格式见图3-13-1所示。所示。图中图中椭圆形框椭圆形框中的内容是中的内容是关键字关键字;方框方框中的内容是中的内容是非终极符非终极符;圆圈圆圈中的内容是中的内容是终极符终极符。非终极符非终极符终极符终极符此列不此列不得设置为空得设置为空列值列值不得重复不得重复当此列的值空当此列的值空缺时,填以缺省值缺时,填以缺省值定义外键定义外键来自的表名,来自的表名,即主表名即主表
4、名 引用完整引用完整性检查,主表性检查,主表中被引用的主中被引用的主键删除时用键删除时用 关键字关键字 SET NULL SET NULL-该列应无该列应无NOT NULLNOT NULL说明说明 RESTRICT RESTRICT-凡被基表引用的主键,不得删除;凡被基表引用的主键,不得删除;加下划线表示为加下划线表示为ON DELETEON DELETE的缺省项的缺省项 CASCADE CASCADE-如主表中删除了某一主键,则基表如主表中删除了某一主键,则基表 中引用此主键的行也被删除中引用此主键的行也被删除 例例3-13-1 定义定义STUDENTSTUDENT(学生),(学生),COU
5、RSECOURSE(课程课程),SCSC(选课)三个基表。(选课)三个基表。(SNO CHAR(7)NOT NULL,(SNO CHAR(7)NOT NULL,SNAME VARCHAR(8)NOT NULL,SNAME VARCHAR(8)NOT NULL,SEX CHAR(2)NOT NULL,SEX CHAR(2)NOT NULL,BDATE DATE NOT NULL,BDATE DATE NOT NULL,HEIGHT DEC(5,2)DEFAULT 000.00 HEIGHT DEC(5,2)DEFAULT 000.00,PRIMARY KEYPRIMARY KEY(SNO);(S
6、NO);CREATECREATE TABLETABLE /*建立学生表建立学生表*/CREATE TABLECREATE TABLE /*建立课程表建立课程表*/(CNO CHAR(6)NOT NULL,(CNO CHAR(6)NOT NULL,LHOUR SMALLINT NOT NULL,LHOUR SMALLINT NOT NULL,CREDIT DET(1,0)NOT NULL,CREDIT DET(1,0)NOT NULL,SEMESTER CHAR(2)NOT NULL,SEMESTER CHAR(2)NOT NULL,PRIMARY KEYPRIMARY KEY(CNO);(CN
7、O);CREATE TABLECREATE TABLE /*建立选课基表建立选课基表*/(SNO CHAR(7)NOT NULL,(SNO CHAR(7)NOT NULL,CNO CHAR(6)NOT NULL,CNO CHAR(6)NOT NULL,GRADE DEC(4,1)DEFAULT NULLGRADE DEC(4,1)DEFAULT NULL,PRIMARY KEYPRIMARY KEY(SNO (SNO,CNO)CNO),FOREIGN KEYFOREIGN KEY(SNO)(SNO)REFERENCESREFERENCES STUDENT STUDENT ON DELETEON
8、 DELETE CASCADECASCADE,FOREIGN KEYFOREIGN KEY(CNO)(CNO)REFERENCESREFERENCES COURSE COURSE ON DELETEON DELETE RESTRICTRESTRICT););外键来外键来自自STUDENTSTUDENT表表如主表中删除了某一如主表中删除了某一主键,则加此选项的基表主键,则加此选项的基表中引用此主键的行也随之中引用此主键的行也随之删除删除凡是被基表引用的凡是被基表引用的主键,不得删除主键,不得删除SQLSQL提供提供7 7种修改基表模式的命令:种修改基表模式的命令:1.1.增加列增加列ALTER
9、TABLE ALTER TABLE.ADD ADD ;注:注:内为任选项。如果用户本身就是被修内为任选项。如果用户本身就是被修改的表的创建者,则可略去表的创建者名,改的表的创建者,则可略去表的创建者名,否则不可略去。否则不可略去。注:注:SQLSQL未提供删除列的命令。未提供删除列的命令。(为什么?)(为什么?)2.2.删除基表删除基表 DROP TABLE DROP TABLE ;若要删除列,只有另定义一个新表,并将原若要删除列,只有另定义一个新表,并将原来表中要保留的列的内容复制到新表中,然后删来表中要保留的列的内容复制到新表中,然后删除原表。最后还得用重命名命令把新表改为原表除原表。最后
10、还得用重命名命令把新表改为原表名。名。3.3.补充定义主键补充定义主键 如果原表以前未定义主键,需要时可利用此命令如果原表以前未定义主键,需要时可利用此命令补充定义主键。补充定义主键。ALTER TABLE ALTER TABLE ADD PRIMARY KEY ADD PRIMARY KEY(.)4 4撤消主键定义撤消主键定义 一般情况下,一个基表如果已定义了主键,则一般情况下,一个基表如果已定义了主键,则系统会在主键上自动建立索引。系统会在主键上自动建立索引。当插入新行时当插入新行时 ,系统会进行主键唯一性检查,这样,当进行大量的系统会进行主键唯一性检查,这样,当进行大量的插入操作时,势必
11、影响系统效率。插入操作时,势必影响系统效率。下面命令暂时撤消主键。下面命令暂时撤消主键。ALTER TABLE ALTER TABLE DROP PRIMARY KEY;DROP PRIMARY KEY;5 5补充定义外键补充定义外键ALTER TABLE ALTER TABLE-1 ADD FOREIGN KEY ADD FOREIGN KEY()REFERENCES REFERENCES -2 ON DELETE ON DELETE RESTRICTRESTRICT|CASCADE|CASCADE|SET NULL;|SET NULL;花括号表示三项中任选一项。有横线表示缺省项。花括号表示
12、三项中任选一项。有横线表示缺省项。6 6撤消外键定义撤消外键定义 由于定义外键后,须作引用完整性检查,这会由于定义外键后,须作引用完整性检查,这会影响系统性能,因此,影响系统性能,因此,SQLSQL提供了撤消外键的命令,提供了撤消外键的命令,必要时可暂时撤消。必要时可暂时撤消。ALTER TABLE ALTER TABLE DROP DROP;7 7定义和撤消别名定义和撤消别名 CREATE SYNONYM CREATE SYNONYM FOR FOR.|;DROP SYNONYM DROP SYNONYM;索引的建立和撤销语句的格式如图索引的建立和撤销语句的格式如图3-23-2所示所示.在图
13、在图3-2(a)3-2(a)中,中,UNIQUEUNIQUE是可选项;如果加了是可选项;如果加了UNIQUEUNIQUE,则每个索引属性值只能对应一个元组,则每个索引属性值只能对应一个元组,即此即此索引属性是主键或候补键索引属性是主键或候补键。图。图3-2(a)3-2(a)中的列中的列名就是指索引属性。如果列名后加名就是指索引属性。如果列名后加ASCASC,表示索,表示索引属性按升序排列;如果列名后加引属性按升序排列;如果列名后加DESCDESC,表示索,表示索引属性按降序排列。引属性按降序排列。例例 :CREATE INDEX H_INDEXCREATE INDEX H_INDEX ON S
14、TUDENT(HEIGHT);ON STUDENT(HEIGHT);即:对即:对STUDENTSTUDENT文件建立以文件建立以 HEIGHTHEIGHT为索引值的为索引值的 索引文件。索引文件。CREATE UNIQUE CREATE UNIQUE INDEXINDEX SC_INDEX SC_INDEX ON SC(SNO DESC,CNO ASC);ON SC(SNO DESC,CNO ASC);即:对选课文件即:对选课文件SCSC按学号属性降序、按课程号按学号属性降序、按课程号属性升序建立索引文件。属性升序建立索引文件。SQL SQL查询语句的具体形式见图查询语句的具体形式见图3-33
15、-3。SELECTSELECT指出要查询的项目,通常指指出要查询的项目,通常指列名列名或或表表达式达式,是必需的。,是必需的。FROMFROM指明被查询的表或视图名,是必需的。指明被查询的表或视图名,是必需的。WHERE WHERE 说明查询条件,是任选的。说明查询条件,是任选的。GROUP BYGROUP BY将表按列的值分组,是任选的。将表按列的值分组,是任选的。ORDER BYORDER BY将查询结果排序,是任选的。将查询结果排序,是任选的。例例3-2 3-2 查询查询STUDENTSTUDENT、COURSECOURSE、SCSC三表的全部内容。三表的全部内容。语句:语句:*STUD
16、ENT STUDENT;查询结果为:查询结果为:SNOSNAMESEXBDATEHEIGHT9309203欧阳美林欧阳美林女女1975-6-31.629208123王义平王义平男男1974-8-201.719104421周远行周远行男男1973-7-161.839309119李维李维女女1976-8-101.689209120王大力王大力男男1973-10-201.75语句:语句:*COURSE;COURSE;查询结果为:查询结果为:CNOLHOURCREDITSEMESTERCS-110603秋秋CS-201804春春CS-221402秋秋EE-1221065秋秋EE-201452春春语句:
17、语句:*SC SC查询结果为:查询结果为:SNOCNOGRADE9309203CS-11082.59309203CS-201809309203EE-201759208123EE-122919208123EE-201839104421EE-2011009104421CS-110919309119CS-110729309119CS-201659209120CS-221 例例3-3 3-3 查询所有女学生的身高(以厘米表示)。查询所有女学生的身高(以厘米表示)。SNAME100*HEIGHT欧阳美林欧阳美林162李维李维168查询结果为:查询结果为:SNOSNAMESEXBDATEHEIGHT930
18、9203欧阳美林欧阳美林女女1975-6-31.629208123王义平王义平男男1974-8-201.719104421周远行周远行男男1973-7-161.839309119李维李维女女1976-8-101.689209120王大力王大力男男1973-10-201.75(集合(集合1 1)(集合(集合2 2)(集合(集合1 1)(集合(集合2 2)集合集合1 1与集合与集合2 2可以是一个可以是一个SELECTSELECT子查询,或是值的子查询,或是值的集合,但它们的结构相同。集合,但它们的结构相同。:如果集合:如果集合1 1中每个元素都在集合中每个元素都在集合2 2内,内,那么其逻辑值为
19、那么其逻辑值为truetrue,否则为,否则为false;false;:如果集合:如果集合1 1中某个元素不在集中某个元素不在集合合2 2内,那么其逻辑值为内,那么其逻辑值为truetrue,否则为,否则为false;false;SNOCNOGRADE9309203CS-11082.59309203CS-201809104421CS-110919309119CS-110729309119CS-201659209120CS-221 SQL SQL还提供了一些集合运算,如还提供了一些集合运算,如UNIONUNION(并)(并)、INTERSECTIONINTERSECTION(交)、(交)、MIN
20、USMINUS(差)。(差)。注:注:参与集合运算的两个关系必须具参与集合运算的两个关系必须具 有相等的目,且对应的属性域相同。有相等的目,且对应的属性域相同。,视图:是由其它视图或基表导出的虚表。视图:是由其它视图或基表导出的虚表。它不是一个存在数据库中的表,而是在数据它不是一个存在数据库中的表,而是在数据目录中保留其逻辑定义。目录中保留其逻辑定义。当视图参与数据库操作时,可通过修改查当视图参与数据库操作时,可通过修改查 询条件,把对视图的查询转换为对基表的查询条件,把对视图的查询转换为对基表的查 询。询。1 1、用户经常要用到的一些数据;、用户经常要用到的一些数据;2 2、用户经常要查询的
21、内容;、用户经常要查询的内容;可见,视图实际上是一个可见,视图实际上是一个SELECTSELECT语句。语句。撤消上述两个视图撤消上述两个视图:ENROL-SPRING;ENROL-SPRING;GRADE-AVG;GRADE-AVG;视图对应的内容总是视图对应的内容总是实时、最新实时、最新的内的内容,并不是视图定义时对应内容。这是由于基容,并不是视图定义时对应内容。这是由于基表随着更新操作其内容在不断变化,所以视图表随着更新操作其内容在不断变化,所以视图对应的内容也在不断变化。对应的内容也在不断变化。视图的内容是静态的,还是动态的?视图的内容是静态的,还是动态的?视图的查询可像基表一样参与数
22、据库操视图的查询可像基表一样参与数据库操作,作,但视图的更新则最终落实到有关基表的但视图的更新则最终落实到有关基表的更新更新。通常情况下,由连接定义的视图是不可通常情况下,由连接定义的视图是不可更新的。但如果连接定义的视图所涉及到的更新的。但如果连接定义的视图所涉及到的几个基表的主键都在视图中时,还是可以更几个基表的主键都在视图中时,还是可以更新的新的。(。(见例见例3-183-18)(1 1)在数据的整体结构或存储结构发生改变,在数据的整体结构或存储结构发生改变,并且这些改变与用户无关,那么原有的应用并且这些改变与用户无关,那么原有的应用程序不必修改;当这些改变与用户有关时,程序不必修改;当
23、这些改变与用户有关时,也只要修改视图,至于应用程序仍可不改动也只要修改视图,至于应用程序仍可不改动或只需做少量改动。或只需做少量改动。(2 2)数据库的全部结构是复杂的、并有多种数据库的全部结构是复杂的、并有多种联系。一般用户只要用到数据库中一部分数联系。一般用户只要用到数据库中一部分数据,而视图机制正好适应了用户的需要。视据,而视图机制正好适应了用户的需要。视图是一个图是一个SELECTSELECT语句定义的,用户只需关心语句定义的,用户只需关心视图的内容,而不必关心构成视图的若干关视图的内容,而不必关心构成视图的若干关系的联接、投影操作。系的联接、投影操作。(3 3)在数据库中,有些数据是保密的,不能让在数据库中,有些数据是保密的,不能让用户随便使用。此时,可针对不同的用户定用户随便使用。此时,可针对不同的用户定义不同的视图,在视图中只出现用户需要的义不同的视图,在视图中只出现用户需要的数据。系统提供视图让用户使用,而不是关数据。系统提供视图让用户使用,而不是关系。这样,就达到数据的安全保护功能。系。这样,就达到数据的安全保护功能。)