您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第2章_SQL语言初步
-1-第2章SQL语言初步SQL(StructuredQueryLanguage),顾名思义,它是一种结构化的查询语言。其特点是功能丰富:同时具有数据定义(DDL)、数据操纵(DML)、数据控制(DCL)和强大的查询功能。而且完成核心功能只用了9个动词,易于学习和使用。所以是目前关系数据库的标准语言。2.1与SQL有关的基本概念SQL支持数据库的三级模式结构:外模式、模式及内模式。SQL所涉及到的三个基本对象:视图、基本表及存储文件与之相对应。如P20图2-1。下面分别介绍这三个基本概念:1、基本表:(BaseTable)基本表是模式的基本内容。每个基本表都是一个实际存在的关系。从用户角度来看,它是一张二维的数据表。2、视图(View)视图是外模式的基本单位,用户通过视图使用数据库中基于基本表的数据。(1)顾名思义,视图即用户眼中所看到的图像,是直接面向用户及应用程序的一个窗口,它实际上并不存在,只是一个逻辑上的定义,是一张虚表。视图在被使用时是呈现在用户眼前的一张虚表,不用时是存放在数据库的数据字典中的一条查询定义。(2)视图是从已有的若干关系中导出的关系。基本表是关系,视图也是关系。所以说,用户可以在基本表上定义视图,也可以在视图上定义视图。(3)视图是系统依据它的定义从基本表或其它视图中导出来呈现到用户眼前的。它的定义包括:从哪几个关系中,根据什么标准选取数据,组成一个什么名称的关系三个方面的内容,它被存放在数据库的数据字典中。(4)视图的内容可以被修改,对视图的修改实际上是转化成对它所基于的基本表的修改,所以并不是所有视图都能被修改,当对视图的修改不能被有意义地转化为对基本表的修改时,这样的视图就不能被修改。3、存储文件存储文件是内模式的基本单位。一个存储文件可以存储一个或多个基本表,而一个基本表-2-也可以跨一个或多个存储文件。一个基本表可以有若干个索引,索引也存储在存储文件中。存储文件的结构对用户透明,即用户看不到其结构,也没有必要了解它的结构。索引:根据一定需要,把书刊中的主要内容或各种题名摘录下来,标明出处、页码,按一定次序分条排列,以供人查阅的资料。索引一种用以指引、指示或方便寻找资料的东西。索引按字母顺序排列的人名、地名、标题名等名称,并在每个后面注上页码。2.2SQL的数据定义语句SQL的数据定义功能包括三个部分:建立基本表(CreateTable)、修改基本表(AlterTable)、删除基本表(DropTable);建立视图(CreateView)、删除视图(DroopView);建立索引(CreateIndex)、删除索引(DropIndex)。2.2.1基本表的定义1、建立基本表格式:CREATETABLE表名(列定义清单[,表级完整性约束]);说明:(1)[]中的内容是可选项;‘;’可以不用;(2)表名:同一数据库中,不允许有两个关系同名;(3)列定义清单:列名类型(字段长度,小数位数)[该列的完整性约束]两列内容之间用西文逗号隔开。列名:一个表中不能有两个列同名;类型:该列的数据类型,常用的有:INT或INTEGER:全字长二进制整数DEC或DECIMAL(p[,q]):压缩十进制数,共p位,其中小数点后有q位,0=qp=15,q=0时可省略。CHAR(n):长度为n的定长字符串。VARCHAR(n):最大长度为n的变长字符串;DATE:日期型,格式为YYYY―MM―DDTIME:时间型,格式为HH:MM:SSDATETIME:日期时间型,格式为:YYYY-MM-DDHH:MI:SS-3-该列的完整性约束:该列上数据必须符合的条件。最常见的有:NOTNULL:该列值不能为空NULL:该列值可以为空UNIQUE:该列值不能有相同者DEFAULT:该列上某值未定义时的默认值(4)表级完整性约束:对整个表的一些约束条件,常见的有定义主码,各列上数据必须符合的关联条件等。注意:SQL语句只要求语法正确,对语句格式不作特殊要求,一条语句可以一行写完,也可以放在多行,字和符号间用一个或多个空格分隔。一条语句结尾可以用“;”号,也可以什么都不用。但为了阅读和维护方便,一般要求以最醒目的方式书写。例如:CREATETABLEEmployee(EnoCHAR(4)NOTNULLUNIQUEEnameCHAR(8),SexCHAR(2),AgeINT,MarryCHAR(1),TitleCHAR(6),DnoCHAR(2));执行后,数据库中就建立了一个名为Employee的表,此表尚无元组,是一个空表。此表的定义及各约束条件都自动存放在数据字典中。给表中输入数据并对数据进行各种操作,还要用到其它的SQL语句。2、修改基本表的结构ALTERTABLE语句格式及说明:ALTERTABLE表名[ADD列名数据类型[完整性约束]]----为表增加一新列[DROPCOLUMN列名]----删除表中一个原有的列[MODIFYCOLUMN列名数据类型[完整性约束]]----修改表中原有列的定义[ADDCONSTRAINT表级完整性约束]----增加表级约束[DROPCONSTRAINT表级完整性约束]----删除原有的表级约束3、删除基本表的语句格式为:-4-DROPTABLE表名;它把一个基本表的定义连同表中的所有数据记录、索引以及由此表导出的所有视图全部删除,并释放相应的存储空间。此语句格式简单,功能却很强,所以执行此语句一定要慎重。2.2.2索引的定义对于一个基本表,根据应用环境的需要,可以建立若干个索引,以提供多种存取路径。通常,索引的建立与删除由DBA或表的主人负责,用户不能也不必在存取数据时选择索引,存取路径的选择由DBMS自动进行。建立索引的目的是为了加快查询速度。1、建立索引的语句(1)格式:CREATE[UNIQUE][CLUSTER]INDEX索引名ON表名(列名清单)(2)说明:①列名清单中,每个列名后都可指定ASC(升序)或DESC(降序),默认为升序。②索引后数据表中记录的排列方式为:首先以列名清单中的第一个列的值排序;该列值相同的记录,按下一个列名的值排序;以此类推。③UNIQUE:规定索引的每一个索引值只对应于表中唯一的记录。④CLUSTER:规定此索引为聚簇索引。一个表最多只能有一个聚簇索引。有了聚簇索引后,表中记录的物理顺序将与聚簇索引的顺序一致。在最常查询的列上建立聚簇索引可以加快查询速度;但在经常更新的列上建立聚簇索引,则会使DBMS维护索引的代价太大。因为改变表中记录的物理顺序需要至少两倍于数据表的磁盘空间,而且耗时较多。例:CREATEINDEXIX_EmplONEmployee(DnoASC,EnoDESC);2、删除索引的语句当表中数据被修改后,表的所有相关索引都要得到及时维护,索引太多时,维护索引的开销将不容忽视,因此,不必要的索引应及时被删除。(1)格式:DROPINDEX索引名(2)说明:索引被删除后,其在数据字典中的描述也将被DBMS同时删除。例:DROPINDEXIX_Empl;2.2.3视图的定义-5-1、建立视图:CREATEVIEW(1)格式:CREATEVIEW视图名[列名清单]As子查询[WITHCHECKOPTION](2)说明:①列名清单,可选项,若有,则给出了此视图的全部数据列的列名,否则,此视图的所有列名即为子查询中SELECT语句中的全部目标列。②子查询为任一合法的SELECT语句(一般不含ORDERBY,UNION等语法成分)③有[WITHCHECKOPTION]时,则今后对视图时行INSERT、UPDATE和DELETE操作时,系统会自动检查视图是否符合原定义视图时子查询中的条件表达式。④本语名执行后,此视图的定义即被存入数据字典中,对语句的子查询并不执行,即视图并未真正生成,所以,视图只是一个虚表。(3)例:CREATEVIEWEmployee_02ASSELECT*FROMEmployeeWHEREDno=’O2’;从职工表中取出部门为“02”的元组组成一个视图。2、删除视图DROPVIEW(1)格式:DROPVIEW视图名(2)说明:此语句把指定的视图从数据字典中删除。(3)例:DROPVIEWEmployee_022.3SQL的数据操作语句SQL的数据操纵功能包括SELECT(检索)、INSERT(插入)、DELETE(删除)和UPDATE(更新)四个语句。2.3.1SQL的查询语句(SELECT)是SQL语言的核心语句,1、格式:SELECT[DISTINCT/ALL]目标列表达式[别名]清单FROM关系名[别名]清单[WHERE查询条件表达式][ORDERBY列名[ASC/DESC]清单][GROUPBY列名清单[HAVING条件表达式]][INTOTABLE/CURSOR磁盘关系名/临时关系名]-6-2、说明:(1)本语句首先从关系名清单所规定的若干关系中找出符合WHERE子句中查询条件表达式的元组(无此子句时查询所有元组);再根据目标列表达式清单的规定,组合这些元组的属性值,形成一个新的查询结果关系;最后输出这个结果关系。(2)[DISTINCT/ALL]查询结果中有重复元组存在时,选择DISTINCT,则每组重复元组只输出一条;选择ALL,则全部输出。默认时为ALL。(3)每个目标列表达式本身将作为查询结果关系的列名,表达式的值作为结果关系中该列的值。目标列表达式的一般格式为:[关系名.]属性名表达式(如:Salary.Basepay+50)若被查询的诸关系中,只有一个关系中有此属性,则关系名可以省略。反之,若有两个或以上的关系中有此属性,为区分起见,就必须加上关系名。[关系名.]*(如:Employee.*)结果关系的列中正好包含某个被查询关系的全部列时,可用此式。(4)目标列表达式中可能含有的集函数,一般有下列几个:COUNT(*)---统计关系中元组的个数COUNT([DISTINCT/ALL]列名)---统计关系中某一列上元组的个数…MAX(列名)与MIN(列名)---给出一列上的最大/小值SUM([DISTINCT/ALL]列名)---给出一列上值的总和(只对数值型)AVG([DISTINCT/ALL]列名)---给出一列上值的平均值(只对数值型)(5)目标列表达式[别名]清单,目标列表达式中含有+-*/符号或集函数时,在结果关系中要指定别名来表示该列名,其值仍为该目标列表达式的值。表示方法为:目标列表达式AS别名(6)FROM关系名[别名]清单,指明了被查询的各关系的关系名,有时一个关系会被两次查询,这时就需要把先后查询的同一关系区分开来。使用[别名]即可达到此目的。但在SELECT子句和WHERE子句中出现的属性名必须指明是FIRST关系的,还是SECOND关系的。例:SELECTDISTINCTFIRST.Eno,SECOND.RenoFROMItem_EmpFIRST,Item_EmpSECONDWHEREFIRST.Eno=SECOND.REno是一个自身连接的例子,根据Item_Emp,求出参加某项目的间接联系人(7)子句WHERE查询条件表达式给出查询条件,其格式有如下几种:①属性名VS属性名,属性名VS常量-7-其中VS为=,,,=,=,等比较操作符②属性名[NOT]BETWEEN常量1AND常量2(稍做解释)例:WHERESageBETWEEN20AND25意思是查询年龄在20与25岁之间的学生(包括20,25岁)③属性名[NOT]IN(常量清单)④属性名[NOT]LIKE含有通配符(‘%’或‘_’)的字符串注:‘%’表示任意长
本文标题:第2章_SQL语言初步
链接地址:https://www.777doc.com/doc-2246633 .html