第3章关系数据库标准语言SQL3.1SQL概述3.2数据定义3.3查询3.4数据更新3.5视图3.6数据控制3.7嵌入式SQL3.8小结关系数据库标准语言SQL(续)SQL语言(StructuredQueryLanguage)–1974年由Boyce和Chamberlin提出–1975年~1979年IBM公司在SystemR原型系统上实现–是关系数据库的标准语言,是数据库领域中一个主流语言关系数据库标准语言SQL(续)SQL标准–SQL-86•第一个SQL标准•由美国国家标准局(AmericanNationalStandardInstitute,简称ANSI)公布•1987年国际标准化组织(InternationalOrganizationforStandardization,简称ISO)通过–SQL-89–SQL-92–SQL3第3章关系数据库标准语言SQL3.1SQL概述3.2数据定义3.3查询3.4数据更新3.5视图3.6数据控制3.7嵌入式SQL3.8小结3.1SQL概述3.1.1SQL的特点3.1.2SQL语言的基本概念3.1SQL概述3.1.1SQL的特点3.1.2SQL语言的基本概念3.1.1SQL的特点⒈综合统一2.高度非过程化3.面向集合的操作方式4.同一种语法结构提供两种使用方式5.语言简捷,易学易用⒈综合统一SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体非关系模型的数据语言–模式数据定义语言(模式DDL)–外模式数据定义语言(外模式DDL或子模式DDL)–与数据存储有关的描述语言(DSDL)–数据操纵语言(DML)2.高度非过程化用户只需提出“做什么”,而不必指明“怎么做”存取路径的选择以及SQL语句的操作过程由系统自动完成。大大减轻了用户负担,而且有利于提高数据独立性。3.面向集合的操作方式SQL语言采用集合操作方式–操作对象、查找结果可以是元组的集合–一次插入、删除、更新操作的对象可以是元组的集合非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。4.同一种语法结构提供两种使用方式自含式语言–能够独立地用于联机交互的使用方式嵌入式语言–能够嵌入到高级语言(例如C,COBOL,FORTRAN,PL/1)程序中,供程序员设计程序时使用。两种不同使用方式下,SQL语言的语法结构基本一致5.语言简捷,易学易用表3.1SQL语言的动词SQL功能动词数据定义CREATE,DROP,ALTER数据查询SELECT数据操纵INSERT,UPDATEDELETE数据控制GRANT,REVOKE3.1SQL概述3.1.1SQL的特点3.1.2SQL语言的基本概念3.1.2SQL语言的基本概念SQL语言支持关系数据库三级模式结构SQL视图1视图2基本表1基本表2基本表4基本表3存储文件1存储文件2外模式模式内模式SQL语言的基本概念(续)用户用SQL语言对基本表和视图进行操作基本表–本身独立存在的表,一个关系对应一个表–一个(或多个)基本表对应一个存储文件–一个表可以带若干索引,索引也存放在存储文件中存储文件–存储文件的逻辑结构组成了关系数据库的内模式–存储文件的物理结构是任意的,对用户是透明的视图–从一个或几个基本表或视图导出的表–是虚表,只存放视图的定义而不存放对应数据第3章关系数据库标准语言SQL3.1SQL概述3.2数据定义3.3查询3.4数据更新3.5视图3.6数据控制3.7嵌入式SQL3.8小结数据定义概述SQL的数据定义功能–定义表(模式)•创建表•删除表•修改表定义–定义视图(外模式)•创建视图•删除视图•间接修改视图定义:删除+创建数据定义概述(续)SQL的数据定义功能(续)–定义索引(内模式)•创建索引•删除索引•间接修改索引定义:删除+创建数据定义概述(续)表3.2SQL的数据定义语句操作方式操作对象创建删除修改表CREATETABLEDROPTABLEALTERTABLE视图CREATEVIEWDROPVIEW索引CREATEINDEXDROPINDEX3.2数据定义3.2.1定义、删除与修改基本表3.2.2建立与删除索引3.2数据定义3.2.1定义、删除与修改基本表3.2.2建立与删除索引3.2.1定义、删除与修改基本表一、定义基本表二、修改基本表三、删除基本表一、定义基本表关系名(表名)属性名(列名)完整性约束定义基本表(续)语句格式CREATETABLE表名(列名数据类型[列级完整性约束条件][,列名数据类型[列级完整性约束条件]]…[,表级完整性约束条件]);–表名:所要定义的基本表的名字–列名:组成该表的各个属性(列)–列级完整性约束条件:涉及相应属性列的完整性约束条件–表级完整性约束条件:涉及一个或多个属性列的完整性约束条件定义基本表(续)表级完整性约束与列级完整性约束常用完整性约束–主码约束:PRIMARYKEY–参照完整性约束–唯一性约束:UNIQUE–非空值约束:NOTNULL–取值约束:CHECK定义基本表(续)数据类型–不同的数据库系统支持的数据类型不完全相同–IBMDB2SQL支持的数据类型•SMALLINT半字长二进制整数。•INTEGER或INT全字长二进制整数。•DECIMAL(p[,q])压缩十进制数,共p位,其中小数或DEC(p[,q])点后有q位。0≤q≤p≤15,q=0时可以省略不写。•FLOAT双字长浮点数。定义基本表(续)数据类型(续)•CHARTER(n)长度为n的定长字符串。或CHAR(n)•VARCHAR(n)最大长度为n的变长字符串。•GRAPHIC(n)长度为n的定长图形字符串。•VARGRAPHIC(n)最大长度为n的变长图形字符串。•DATE日期型,格式为YYYY-MM-DD。•TIME时间型,格式为HH.MM.SS。•TIMESTAMP日期加时间。定义基本表(续)数据类型(续)–ORACLESQL支持的数据类型•VARCHAR2(n)•CHAR(n)•NUMBER[(p[,q])]•DATE•LONG•RAW或LONGRAW定义基本表(续)数据类型(续)–KingBaseISQL支持的数据类型•字符串类型CHARACTER[(长度)]最大长度为256个字符CHAR[(长度)]CHARACTIC的同义词CHARACTERVARYING(n)VARCHAR(n)TEXT大文本定义基本表(续)数据类型(续)–KingBaseISQL支持的数据类型•精确数值类型NUMERIC[(精度[,标度])]标度值应小于精度值标度缺省为0,精度缺省为10DECIMAL[(精度[,标度])]DEC[(精度[,标度])]DECIMAL的同义词INTEGERINTINTEGER的同义词SMALLINT定义基本表(续)数据类型(续)–KingBaseISQL支持的数据类型•近似数值类型FLOAT[(精度)]可选精度浮点数REAL单精度浮点数DOUBLEPRECISION双精度浮点数DOUBLE同义词定义基本表(续)数据类型(续)–KingBaseISQL支持的数据类型•日期时间类型DATE日期TIME[WITHTIMEZONE]时间TIMETZTIME[WITHOUTTIMEZONE]TIMETIMESTAMP[WITHTIMEZONE]日期和时间TIMESTAMPTZTIMESTAMP[WITHOUTTIMEZONE]TIMESTAMPINTERVAL通用的时间间隔定义基本表(续)数据类型(续)–KingBaseISQL支持的数据类型•位串BIT[(n)]定长位串BITVARYING[(n)]变长位串BINARYLARGEOBJECT二进制大对象BLOBBINARYLARGEOBJECT的同义词BYTEA二进制位串•布尔型BOOLEAN逻辑布尔量BOOLBOOLEAN的同义词例题[例1]建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。SnoSnameSsexSageSdept ↑ ↑ ↑ ↑ ↑字符型 字符型 字符型 整数 字符型长度为5长度为20长度为1 长度为15不能为空值例题(续)CREATETABLEStudent(SnoCHAR(5)NOTNULLUNIQUE,SnameCHAR(20)UNIQUE,SsexCHAR(1),SageINT,SdeptCHAR(15));例题(续)[例2]建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno,Cno)为主码。CREATETABLESC(SnoCHAR(5),CnoCHAR(3),Gradeint,Primarykey(Sno,Cno));二、修改基本表语句格式ALTERTABLE表名[ADD新列名数据类型[完整性约束]][DROP完整性约束名][MODIFY列名数据类型];–表名:要修改的基本表–ADD子句:增加新列和新的完整性约束条件–DROP子句:删除指定的完整性约束条件–MODIFY子句:用于修改列名和数据类型二、修改基本表语句格式(续)–只能间接删除属性列•把表中要保留的列及其内容复制到一个新表中•删除原表•再将新表重命名为原表名–不能修改完整性约束–不能为已有列增加完整性约束例题[例2]向Student表增加“入学时间”列,其数据类型为日期型。ALTERTABLEStudentADDScomeDATE;–不论基本表中原来是否已有数据,新增加的列一律为空值。–如果基本表中原来已有数据,新增列不可有NOTNULL约束例题[例3]将年龄的数据类型改为半字长整数。ALTERTABLEStudentMODIFYSageSMALLINT;–注:修改原有的列定义有可能会破坏已有数据。例题[例4]删除学生姓名必须取唯一值的约束。ALTERTABLEStudentDROPUNIQUE(Sname);三、删除基本表语句格式DROPTABLE表名;–系统从数据字典中删去:•该基本表的描述•该基本表上的所有索引的描述–系统从文件中删去表中的数据–表上的视图往往仍然保留,但无法引用例题[例5]删除Student表。DROPTABLEStudent;3.2数据定义3.2.1定义、删除与修改基本表3.2.2建立与删除索引3.2.2建立与删除索引建立索引是加快查询速度的有效手段建立索引–DBMS自动建立•PRIMARYKEY•UNIQUE–DBA或表的属主(即建立表的人)根据需要建立维护索引–DBMS自动完成使用索引–DBMS自动选择是否使用索引以及使用哪些索引一、建立索引语句格式CREATE[UNIQUE][CLUSTER]INDEX索引名ON表名(列名[次序][,列名[次序]]…);–用表名指定要建索引的基本表名字–索引可以建立在该表的一列或多列上,各列名之间用逗号分隔–用次序指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC–UNIQUE表明此索引的每一个索引值只对应唯一的数据记录–CLUSTER表示要建立的索引是聚簇索引建立索引(续)唯一值索引–对于已含重复值的属性列不能建UNIQUE索引–对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束。建立索引(续)聚簇索引–建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中记录的物理顺序一致。例:CREATECLUSTERINDEXStusnameONStudent(Sname);在Student表的Sname(姓名)列上建立一个聚簇