第五章SQL语言改

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第五章SQL语言—60—第五章SQL语言SQL(StructuredQueryLanguage)语言是1974年由Boyce和Chamberlin提出的。1975年~1979年IBM公司SanJoseResearchLaboratory研制了著名的关系数据库管理系统原型SystemR并实现了这种语言。由于它功能丰富,语言简捷倍受用户及计算机工业界欢迎,被众多计算机公司和软件公司采用。经各公司的不断修改、扩充和完善,SQL语言最终发展成为关系数据库的标准语言。自SQL成为国际标准语言以后,各个数据库厂家纷纷推出各自的SQL软件或与SQL的接口软件,这就使大多数数据库均用SQL作为共同的数据存取语言和标准接口,使不同数据库系统之间的互操作有了共同的基础,这个意义十分重大,因此,有人把确立SQL为关系数据库语言标准及其后的发展称为是一场革命。SQL成为国际标准,对数据库以外的领域也产生了很大影响,有不少软件产品将SQL语言的数据查询功能与图形功能、软件工程工具、软件开发工具、人工智能程序结合起来。SQL已成为数据库领域中一个主流语言。这一章详细介绍SQL语言,并进一步讲述关系数据库的基本概念。5.1SQL概述SQL是一种介于关系代数与关系演算之间的结构化查询语言,其功能并不仅仅是查询。SQL是一个通用的、功能极强的关系数据库语言。5.1.1SQL的特点SQL语言之所以能够为用户和业界所接受,并成为国际标准,是因为它是一个综合的、功能极强同时又简捷易学的语言。SQL语言集数据查询(DataQuery)、数据操纵(DataManipulation)、数据定义(DataDefinition)和数据控制(DataControl)功能于一体,主要特点包括:一、综合统一数据库系统的主要功能是通过数据库支持的数据语言来实现的。SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括定义关系模式、插入数据建立数据库、查询、更新、维护、数据库重构、数据库安全性控制等一系列操作要求,这就为—61—数据库应用系统的开发提供了良好的环境。用户在数据库系统投入运行后,还可根据需要随时地逐步地修改模式,且并不影响数据库的运行,从而使系统具有良好的可扩展性。另外,在关系模型中实体和实体间的联系均用关系表示,这种数据结构的单一性带来了数据操作符的统一,查找、插入、删除、修改等每一种操作都只需一种操作符,从而克服了非关系系统由于信息表示方式的多样性带来的操作复杂性。二、高度非过程化用SQL语言进行数据操作,只要提出“做什么”,而无须指明“怎么做”,因此无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。三、面向集合的操作方式SQL语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。四、以同一种语法结构提供两种使用方式SQL语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;作为嵌入式语言,SQL语句能够嵌入到高级语言(例如C,COBOL,FORTRAN,PL/1)程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL语言的语法结构基本上是一致的。这种以统一的语法结构提供两种不同的使用方式的做法,提供了极大的灵活性与方便性。五、语言简捷,易学易用SQL语言功能极强,但由于设计巧妙,语言十分简捷,完成核心功能只用了9个动词,如表5.1所示。SQL语言接近英语口语,因此容易学习,容易使用。表5.1SQL语言的动词SQL功能动词数据查询SELECT数据定义CREATE,DROP,ALTER数据操纵INSERT,UPDATE,DELETE数据控制GRANT,REVOKE5.1.2SQL语言的基本概念第五章SQL语言—62—SQL语言支持关系数据库三级模式结构,如图5.1所示。其中外模式对应于视图(View)和部分基本表(BaseTabIe),模式对应于基本表,内模式对应于存储文件。用户可以用SQL语言对基本表和视图进行查询或其他操作,基本表和视图一样,都是关系。基本表是本身独立存在的表,在SQL中一个关系就对应一个表。一个(或多个)基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理结构是任意的,对用户是透明的。视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。视图在概念上与基本表等同,用户可以在视图上再定义视图。下面将逐一介绍各SQL语句的功能和格式。为了突出基本概念和基本功能,略去了许多语法细节。各个DBMS产品在实现标准SQL语言时也各有差别,一般都做了某种扩充。因此,具体使用某个DBMS产品时,还应参阅系统提供的有关手册。5.2数据定义关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有表、视图和索引。因此SQL的数据定义功能包括定义表、定义视图和定义索引,如表5.2所示。SQL视图1基本表2存储文件1基本表1基本表3视图2基本表4存储文件2外模式模式内模式图5.1SQL对关系数据库模式的支持—63—表5.2SQL的数据定义语句操作对象操作方式创建删除修改表CREATETABLEDROPTABLEALTERTABLE视图CREATEVIEWDROPVIEW索引CREATEINDEXDROPINDEX视图是基于基本表的虚表,索引是依附于基本表的,因此SQL通常不提供修改视图定义和修改索引定义的操作。用户如果想修改视图定义或索引定义,只能先将它们删除掉,然后再重建。不过有些关系数据库产品如Oracle允许直接修改视图定义。本节只介绍如何定义基本表和索引,视图的概念及其定义方法将在5.5节专门讨论。5.2.1定义、删除与修改基本表一、定义基本表建立数据库最重要的一步就是建立一些基本表。SQL语言使用CREATTABLE语句定义基本表,其一般格式如下:CREATETABLE表名(列名数据类型[列级完整性约束条件][,列名数据类型[列级完整性约束条件]]...[,表级完整性约束条件]);其中表名是所要定义的基本表的名字,它可以由一个或多个属性(列)组成。建表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由DBMS自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。例1:建立一个学生表Student,它由学号、姓名、性别、年龄、系名五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。CREATETABLEStudent(学号CHAR(5)NOTNULLUNIQUE,/*列级完整性约束条件,学号姓名CHAR(20)UNIQUE,取值唯一,不许取空值*/第五章SQL语言—64—性别CHAR(1),年龄INT,系名CHAR(15));系统执行上面的CREATETABLE语句后,就在数据库中建立一个新的空的学生表Student,并将有关学生表的定义及有关约束条件存放在数据字典中。定义表的各个属性时需要指明其数据类型及长度。不同的数据库系统支持的数据类型不完全相同,例如IBMDB2SQL主要支持以下等数据类型:SMALLINT半字长二进制整数。INTEGER或INT全字长二进制整数。DECIMAL(P[,q])压缩十进制数,共p位,其中小数点后有q位FLOAT双字长浮点数。CHAR(n)长度为n的定长字符串。VARCHAR(n)最大长度为n的变长字符串。GRAPHIC(n)长度为n的定长图形字符串。VARGRAPHIC(n)最大长度为n的变长图形字符串。DATE日期型,格式为YYYY-MM-DD。TIME时间型,格式为HH.MM.SS。TIMESTAMP日期加时间。二、修改基本表随着应用环境和应用需求的变化,有时需要修改已建立好的基本表,SQL语言用ALTERTABLE语句修改基本表,其一般格式为:ALTERTABLE表名[ADD新列名数据类型[完整性约束]][DROP完整性约束名][MODIFY列名数据类型];其中表名是要修改的基本表,ADD子句用于增加新列和新的完整性约束条件,DROP子句用于删除指定的完整性约束条件,MODIFY子句用于修改原有的列定义,—65—包括修改列名和数据类型。例2:向Student表增加“入学时间”列,其数据类型为日期型。ALTERTABLEStudentADD入学时间DATE;不论基本表中原来是否己有数据,新增加的列一律为空值。例3:将年龄的数据类型改为半字长整数。ALTERTABLEStudentMODIFY年龄SMALLINT;修改原有的列定义有可能会破坏己有数据。例4:删除学生姓名必须取唯一值的约束。ALTERTABLEStudentDROPUNIQUE(姓名);SQL没有提供删除属性列的语句,用户只能间接实现这一功能,即先把表中要保留的列及其内容复制到一个新表中,然后删除原表,再将新表重命名为原表名。三、删除基本表当某个基本表不再需要时,可以使用DROPTABLE语句删除它。其一般格式为:DROPTABLE表名例5:删除Student表。DROPTABLEStudent基本表定义一旦删除,表中的数据、此表上建立的索引和视图都将自动被删除掉。因此执行删除基本表的操作一定要格外小心。注意:有的系统,如Oracle,删除基本表后建立在此表上的视图定义仍然保留在数据字典中,但是当用户引用时就报错。5.2.2建立与删除索引建立索引是加快查询速度的有效手段。用户可以根据应用环境的需要,在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。一般说来,建立与删除索引由数据库管理员DBA或表的属主(即建立表的人)负责完成。系统在存取数据时会自动选择合适的索引作为存取路径,用户不必也不能选择索引。一、建立索引在SQL语言中,建立索引使用CREATEINDEX语句,其一般格式为:第五章SQL语言—66—CREATE[UNIQUE][CLUSTER]INDEX索引名ON表名(列名[次序][,列名[次序]]...);其中,表名是要建索引的基本表的名字。索引可以建立在该表的一列或多列上,各列名之间用逗号分隔。每个(列名)后面还可以用次序指定索引值的排列次序,可选ASC(升序)或DESC(降序),缺省值为ASC。UNIQUE表明此索引的每一个索引值只对应唯一的数据记录。CLUSTER表示要建立的索引是聚簇索引。所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。例如,执行下面的CREATEINDEX语句:CREATECLUSTERINDEXStunameONStudent(姓名);将会在Student表的姓名列上建立一个聚簇索引,而且Student表中的记录将按照姓名值的升序存放。用户可以在最常查询的列上建立聚簇索引以提高查询效率。显然在一个基本表上最多只能建立一个聚簇索引。建立聚簇索引后,更新索引列数据时,往往导致表中记录的物理顺序的变更,代价较大,因此对于经常更新的列不宜建立聚簇索引。例6:为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。CREATEUNIQUEINDEXStusnoONStudent(学号);CREATEUNIQUEINDEXCoucourseONCourse(课程号);CREATEUNIQUEIN

1 / 49
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功