资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第三章,关系数据库,SQL,语言,关系数据库语言 ,SQL,SQL(Structured Query Language),结构化查询语言,,1974年,Boyce,和,Chamberlin,提出,首先在,IBM,公司的关系数据库系统,System R,上实现。,特点:功能丰富、使用方便、灵活、语言简洁易学,应用系统范围广,统一标准,。,1986年,,ANSI,数据库委员会,X3H2,批准了,SQL,作为数据库语言的美国标准,,ISO,随后也提出了同样的决定。,SQL,概述,标准化,有关组织,ANSI(American Natural Standard Institute),ISO(International Organization for Standardization),有关标准,SQL-86:,“,数据库语言,SQL,”,SQL-89:,“,具有完整性增强的数据库语言,SQL,”,,,增加了对完整性约束的支持。,SQL-92:,“,数据库语言,SQL,”,,,是,SQL-89,的超集,增加了许多新特性,如新的数据类型,更丰富的数据操作,更强的完整性、安全性支持等。,SQL-3:,正在讨论中的新的标准,将增加对面向对象模型的支持。,现状,大部分,DBMS,产品都支持,SQL,,成为操作数据库的标准语言,有方言,支持程度不同,3.1 SQL,概貌及其特点,主要特点,:,1. 语言简洁、易学易用:核心功能只有8个动词,,语法简单,接近英语。,SQL,功能,操作符,数据查询,SELECT,数据定义,CREATE,DROP,数据操纵,INSERT,UPDATE,DELETE,数据控制,GRANT,REVOKE,3.1 SQL,概貌及其特点,主要特点:,2. 高度非过程化的语言:用户只需提出,“,干什么,”,,,至于“,怎么干,”,由,DBMS,解决;用户只需要早查询语句中提出需要什么,,DBMS,即可按路径存取,并把结果返回给用户。,3. 面向集合的语言:每一个,SQL,的操作对象是一个或多个关系,操作的结果也是一个关系。,4. 即可独立使用,又可嵌入到宿主语言中使用,具有自主型和宿主型两种特点。,5. 具有查询、操作、定义和控制四种语言一体化的特点。它只向用户提供一种语言,但该语言具有上述多种功能,且每中操作只需一种操作符。,3.1.2 SQL,数据库的体系结构,SQL,用户,Base Table,B1,View V1,View V2,Base Table,B2,Base Table,B3,Base Table,B4,Stored File,S1,Stored File,S1,Stored File,S1,Stored File,S1,外模式,模式,内模式,SQL,语言支持的关系数据库的三级模式结构,3.1.3 SQL,的功能,数据定义(,DDL),定义、删除、修改关系模式(基本表),定义、删除视图(,View),定义、删除索引(,Index),数据操纵(,DML),数据查询,数据增、删、改,数据控制(,DCL),用户访问权限的授予、收回,3.1.3 SQL,的功能,嵌入式,SQL,的使用规定,能将,SQL,语句嵌入到高级语言(宿主语言),使应用程序充分利用,SQL,访问数据库的能力、宿主语言的过程处理能力,一般需要,预编译,,将嵌入的,SQL,语句转化为宿主语言编译器能处理的语句,3.1.3 SQL,的功能,main ( ),.,exec,sql,begin declare section;,char co10;,int,id;,exec,sql,end declare section;,exec,sql,select company_name,from customer,where id = :id,into co;,SQL,的形式交互式,交互式,SQL,一般,DBMS,都提供联机交互工具,用户可直接键入,SQL,命令对数据库进行操作,由,DBMS,来进行解释,SQL,的形式交互式,SQL,的形式交互式,SQL,的形式,SQL/API,SQL/API,从宿主语言主程序中,调用,一个,SQL DBMS,库,而,SQL,语句是这个调用的参数,目前更多的数据库编程在使用这种方法,ODBC,JDBC,SQL/CLI,OCI,SQL,的形式,SQL/API,#include “,sqlcli,.h”,SQLHSTMT,hstmt,;,SQLPrepare,(,hstmt,“,Insert Into customer values(),”);,SQLExcute,(,hstmt,);,3.2 SQL,的数据定义(,DDL),数据定义语言(,Data Definition Language),Create、Drop、Alter,定义一组关系(基本表)、说明各关系的信息,各关系的模式,各属性的值域,完整性约束,索引,安全性和权限,各关系在磁盘上的物理存储结构,3.2.1 SQL,模式的创建和撤销,在,SQL,中,一个,SQL,模式被定义为基本表的集合。一个,SQL,模式由模式名和模式拥有者的用户名或账号来确定,并包含模式中每一个元素的定义。创建一个,SQL,模式,就是定义了一个存储空间。,SQL,模式的创建可以用,CREATE,语句实现,句法如下:,CREATE SCHEMA,AUTHORIZATION ,例如:,CREATE SCHEMA ST_CO AUTHORIZATION LISMITH,1、SQL,模式的创建和撤销,2、SQL,模式的撤消,3.2.1 SQL,模式的创建和撤销,当,一个,SQL,模式及其所属的基本表、视图等元素都不需要时,可以用,DROP,语句撤消这个,SQL,模式:,DROP SCHEMA ,CASCADE|RESTRICT,CASCADE,方式:执行,DROP,语句时,把,SQL,模式及其下属的基本表、视图、索引等所有元素全部撤消。,RESTRICT,方式:执行,DROP,语句时,只有当,SQL,模式中没有任何下属元素时,才能撤消,SQL,模式。,DROP SCHEMA ST_CO CASCADE,3.2.2 SQL,提供的基本数据类型,数值型,int,:,整数。,smallint,:,小整数类型。,numeric(p,d):,定点数,小数点左边,p,位,右边,q,位。,real:,浮点数。,double precision:,双精度浮点数。,float(n),3.2.2 SQL,提供的基本数据类型,字符型,char(n),固定长度的字符串。,varchar,(n),可变长字符串。,位串型,BIT(n),BIT VARYING(n),日期/时间型,date:,日期(年、月、日)。,time:,时间(小时、分、秒)。,interval:,两个,date,或,time,类型数据之间的差。,3.2.3,基本表的创建、修改和撤销,1.,定义基本表,(1) 定义基本表的语句格式:,CREATE TABLE ,(,),表名,:,列定义,:列名、列数据类型、长度、是否允许空值等。,定义完整性约束,:列约束和表约束,CONSTRAINT ,3.2.3,基本表的创建、修改和撤销,完整性约束类型:,NULL/NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY,CHECK,例如:建立一个学生基本表,CREATE TABLE S ( S# CHAR(4), SN CHAR(8), AGE SMALLINT,SEX CHAR(2) DEFAULT,男,DEPT CHAR(2);,3.2.3,基本表的创建、修改和撤销,3.2.3,基本表的定义和修改,例:建立包含完整性定义的学生基本表,CREATE TABLE S ( S# CHAR(4),CONSTRAINT S,_PRIM,PRIMARY KEY,SN CHAR(8),CONSTRAINT SN_CONS,NOT FULL, AGE,SMALLINT,CONSTRAINT AGE_CHE,CHECK(AGE BETWEEN 15 AND 45),SEX CHAR(2),DEFAULT,男,DEPT CHAR(2);,3.2.3,基本表的定义和修改,例:建立包含完整性定义的选课基本表,CREATE TABLE SC ( S# CHAR(4),CONSTRAINT S,_CONS NOT NULL,C# CHAR(5),CONSTRAINT C_CONS NOT FULL, GRADE SMALLINT,CONSTRAINT GRADE_CHE CHECK(GRADE=0 AND GRADE=100),CONSTRAINT SC_PRIM PRIMARY KEY(S#,C#),CONSTRAINT SC_S FOREIGN KEY (S#) REFERENCES S(S#),CONSTRAINT SC_S FOREIGN KEY (C#) REFERENCES C(C#),);,3.2.3,基本表的定义和修改,(2),用其它表的数据创建一个新表,CREATE TABLE (,),AS ,例:建立计算机系学生情况基本表,CREATE TABLE S6,AS,SELECT S#,SN,SEX,AGE,FROM S,WHERE DEPT=6,3.2.3,基本表的定义和修改,2.,修改基本表,(1),ADD,方式,使用,ADD,方式可以向表中增加列定义和表约束,语法格式:,ALTER TABLE ,ADD (|,(|),例:在,S,表中增加一个班号列,ALTER TABLE S,ADD(CLASSNO CHAR(6);,3.2.3,基本表的定义和修改,例:在,S,表中增加一个完整性约束定义,,使,DEPT,的取值只能在“,1,”到“,15,”,之间,ALTER TABLE S,ADD (CHECK(DEPT BWTEEN “1”AND”15”);,将学号属性改为10个字符,并改为非空,ALTER TABLE w4 alter column s#,char(10) not null,3.2.3,基本表的定义和修改,(2),MODIFY,方式,该方式能对基本表中已有的列定义进行修改,语法格式:,ALTER TABLE ,MODIFY ( 数据类型,NULL|NOT NULL, ( 数据类型,NULL|NOT NULL),例:把,S,表中,S#,列加宽到10为字符宽度,ALTER TABLE S,MODIFY(S# CHAR(10);,3.2.3,基本表的定义和修改,(,3),DROP,方式,该方式能删除基本表中已有的完整性约束定义,语法格式:,ALTER TABLE ,DROP CONSTRAINT |,PRMARY KEY|UNIQUE(,),例:删除,S,表中的主码,ALTER TABLE S,DROP PRIMARY KEY,alter table s drop constraint age_check,3.2.3,基本表的定义和修改,3.,删除基本表,DROP TABLE ,示例,drop table,sc,DANGER,撤消基本表后,基本表的定义、表中数据、索引、以及由此表导出的视图的定义都被删除。,3.2.3,视图的定义和撤销,是从基本表(或其他视图)中导出的,虚表(结果集),数据库中存放它的定义(在数据字典中),是,RDBMS,提供给用户以多种角度观察数据库中数据的重要机制,外模式:用户定义的基本表和若干视图组成,视图:由基本表或其它视图导出的表,其本身不存在与数据库中,称为虚表,视图一经定义,就可被检索或删除,但更新操作有一定的限制,也可定义其它视图,表与视图,基本表,本身是实际且独立存在的。,是数据库存储数据的基本单元,视图,视图是虚表,数据库只存储视图的定义,不存储对应的数据。,视图用一组查询来定义,是被存储的查询,3.2.3,视图的定义和撤销,1.,定义视图,视图是用一个查询块的查询结果来定义的,语法格式:,创建视图,、删除,Create View,v,as,;,Drop View,v,例:计算机系的花名册,Create View CS_,Stu,as,Select,sno,sname,ssex,From Student,Where,sdept,= CS,(,一般情况下,)视图可以象基本表那样使用,视图名可以出现在关系名可以出现的地方,DBMS,将视图转换成对基本表的操作,例:列出计算机系的男生,Select,sno,sname,From CS_,Stu,Where,ssex,= M,3.2.3,视图的定义和撤销,3.2.3,视图的定义和撤销,例:建立学生平均成绩视图,Create View,avg,_grade(,sno,avg,) as,Select,sno,avg,(grade),From SC,Group By,sno,3.2.3,视图的定义和撤销,例:找出平均成绩大于等于75的学生,Select *,From,avg,_grade,Where,avg,= 75,注意:此例的使用方法是非标准的。有很多,DBMS,产品不支持此用法,3.2.3,视图的定义和撤销,2.,删除视图,DROP VIEW ,3.2.3,视图的定义和撤销,3.,使用视图的优点:,(1)能够将对数据库的访问限制在一定范围内,有利于数据保密,(2)视图机制使不同的用户能以不同的方式看待同一数据,当许多不同种类的用户使用同一个集成数据库时,这种灵活性非常重要,(3)简化了用户观点,(4)视图对于数据库的重构提供了一定程度的逻辑独立性,3.2.3,索引的定义和撤销,1.,建立索引,语法格式:,CREATE UNIQUE INDEX ,ON (,),若指定,UNIQUE,选项,系统将保证基本表中的任意两行记录在索引列上或组合的索引列上具有唯一值,例:为,SC,表在,S#,和,C#,列上建立唯一索引,CREATE UNIQUE INDEX SC1,ON SC(S#,C#);,对于一个基本表,根据需要建立若干个索引,建立索引的两个主要目的:加快查询速度、保证行的唯一性,unique(distinct):,唯一性索引,不允许表中不同的行在索引列上取相同值。若已有相同值存在,则系统给出相关信息,不建此索引。系统并拒绝违背唯一性的插入、更新。,asc,/,desc,:,索引表中索引值的排序次序,缺省为,asc,。,示例:,create index,s-index,on,S(S#),3.2.3,索引的定义和撤销,3.2.3,索引的定义和撤销,2.,删除索引,DROP INDEX ,索引的有关说明,可以动态地定义索引,即可以随时建立和删除索引。,不允许用户在数据操作中引用索引。索引如何使用完全由系统决定,这支持了数据的物理独立性。,应该在使用频率高的、经常用于连接的列上建索引。,一个表上可建多个索引。索引可以提高查询效率,但索引过多耗费空间,且降低了插入、删除、更新的效率。,
展开阅读全文