第2章_SQL语言初步_第1页
第2章_SQL语言初步_第2页
第2章_SQL语言初步_第3页
第2章_SQL语言初步_第4页
第2章_SQL语言初步_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第2章 SQL语言初步SQL(Structured Query Language),顾名思义,它是一种结构化的查询语言。其特点是功能丰富:同时具有数据定义(DDL)、数据操纵(DML)、数据控制(DCL)和强大的查询功能。而且完成核心功能只用了9个动词,易于学习和使用。所以是目前关系数据库的标准语言。2.1 与SQL有关的基本概念SQL支持数据库的三级模式结构:外模式、模式及内模式。SQL所涉及到的三个基本对象:视图、基本表及存储文件与之相对应。如P20图2-1。下面分别介绍这三个基本概念:1、基本表:(Base Table)基本表是模式的基本内容。每个基本表都是一个实际存在的关系。从用户角度

2、来看,它是一张二维的数据表。2、视图(View)视图是外模式的基本单位,用户通过视图使用数据库中基于基本表的数据。(1)顾名思义,视图即用户眼中所看到的图像,是直接面向用户及应用程序的一个窗口,它实际上并不存在,只是一个逻辑上的定义,是一张虚表。视图在被使用时是呈现在用户眼前的一张虚表,不用时是存放在数据库的数据字典中的一条查询定义。(2)视图是从已有的若干关系中导出的关系。基本表是关系,视图也是关系。所以说,用户可以在基本表上定义视图,也可以在视图上定义视图。(3)视图是系统依据它的定义从基本表或其它视图中导出来呈现到用户眼前的。它的定义包括:从哪几个关系中,根据什么标准选取数据,组成一个什

3、么名称的关系三个方面的内容,它被存放在数据库的数据字典中。(4)视图的内容可以被修改,对视图的修改实际上是转化成对它所基于的基本表的修改,所以并不是所有视图都能被修改,当对视图的修改不能被有意义地转化为对基本表的修改时,这样的视图就不能被修改。3、存储文件存储文件是内模式的基本单位。一个存储文件可以存储一个或多个基本表,而一个基本表也可以跨一个或多个存储文件。一个基本表可以有若干个索引,索引也存储在存储文件中。存储文件的结构对用户透明,即用户看不到其结构,也没有必要了解它的结构。索引:根据一定需要,把书刊中的主要内容或各种题名摘录下来,标明出处、页码,按一定次序分条排列,以供人查阅的资料。索引

4、一种用以指引、指示或方便寻找资料的东西。索引按字母顺序排列的人名、地名、标题名等名称,并在每个后面注上页码。2.2 SQL的数据定义语句SQL的数据定义功能包括三个部分: 建立基本表(Create Table)、修改基本表(Alter Table)、删除基本表(Drop Table); 建立视图(Create View)、删除视图(Droop View); 建立索引(Create Index)、删除索引(Drop Index)。2.2.1 基本表的定义1、建立基本表格式: CREATE TABLE ();说明:(1)中的内容是可选项;可以不用;(2):同一数据库中,不允许有两个关系同名;(3)

5、: (字段长度,小数位数)两列内容之间用西文逗号隔开。 :一个表中不能有两个列同名; :该列的数据类型,常用的有:n INT 或 INTEGER:全字长二进制整数n DEC或DECIMAL(p,q): 压缩十进制数,共p位,其中小数点后有q位,0=qp=15,q=0时可省略。n CHAR(n):长度为n的定长字符串。n VARCHAR(n):最大长度为n的变长字符串;n DATE:日期型,格式为YYYYMMDDn TIME:时间型,格式为HH:MM:SSn DATETIME:日期时间型,格式为:YYYY-MM-DD HH:MI:SS :该列上数据必须符合的条件。最常见的有:n NOT NULL

6、:该列值不能为空n NULL: 该列值可以为空n UNIQUE: 该列值不能有相同者n DEFAULT: 该列上某值未定义时的默认值(4):对整个表的一些约束条件,常见的有定义主码,各列上数据必须符合的关联条件等。注意:SQL语句只要求语法正确,对语句格式不作特殊要求,一条语句可以一行写完,也可以放在多行,字和符号间用一个或多个空格分隔。一条语句结尾可以用“;”号,也可以什么都不用。但为了阅读和维护方便,一般要求以最醒目的方式书写。例如:CREATE TABLE Employee (Eno CHAR(4) NOT NULL UNIQUE Ename CHAR(8),Sex CHAR(2),Ag

7、e INT,Marry CHAR(1),Title CHAR(6),Dno CHAR(2);执行后,数据库中就建立了一个名为Employee的表,此表尚无元组,是一个空表。此表的定义及各约束条件都自动存放在数据字典中。给表中输入数据并对数据进行各种操作,还要用到其它的SQL语句。2、修改基本表的结构 ALTER TABLE语句格式及说明:ALTER TABLE ADD -为表增加一新列DROP COLUMN -删除表中一个原有的列MODIFY COLUMN -修改表中原有列的定义ADD CONSTRAINT -增加表级约束DROP CONSTRAINT -删除原有的表级约束3、删除基本表的语句

8、格式为:DROP TABLE ;它把一个基本表的定义连同表中的所有数据记录、索引以及由此表导出的所有视图全部删除,并释放相应的存储空间。此语句格式简单,功能却很强,所以执行此语句一定要慎重。2.2.2 索引的定义对于一个基本表,根据应用环境的需要,可以建立若干个索引,以提供多种存取路径。通常,索引的建立与删除由DBA或表的主人负责,用户不能也不必在存取数据时选择索引,存取路径的选择由DBMS自动进行。建立索引的目的是为了加快查询速度。1、建立索引的语句(1)格式:CREATE UNIQUECLUSTERINDEX ON ()(2)说明:中,每个列名后都可指定 ASC(升序)或DESC(降序),

9、默认为升序。索引后数据表中记录的排列方式为:首先以中的第一个列的值排序;该列值相同的记录,按下一个列名的值排序;以此类推。UNIQUE:规定索引的每一个索引值只对应于表中唯一的记录。CLUSTER:规定此索引为聚簇索引。一个表最多只能有一个聚簇索引。有了聚簇索引后,表中记录的物理顺序将与聚簇索引的顺序一致。在最常查询的列上建立聚簇索引可以加快查询速度;但在经常更新的列上建立聚簇索引,则会使DBMS维护索引的代价太大。因为改变表中记录的物理顺序需要至少两倍于数据表的磁盘空间,而且耗时较多。例:CREATE INDEX IX_Empl ON Employee(Dno ASC,Eno DESC);2

10、、删除索引的语句当表中数据被修改后,表的所有相关索引都要得到及时维护,索引太多时,维护索引的开销将不容忽视,因此,不必要的索引应及时被删除。(1)格式:DROP INDEX (2)说明:索引被删除后,其在数据字典中的描述也将被DBMS 同时删除。例:DROP INDEX IX_Empl;2.2.3 视图的定义1、建立视图: CREATE VIEW(1)格式:CREATE VIEW As WITH CHECK OPTION(2)说明:,可选项,若有,则给出了此视图的全部数据列的列名,否则,此视图的所有列名即为中SELECT语句中的全部目标列。为任一合法的SELECT语句(一般不含ORDER BY

11、,UNION等语法成分)有WITH CHECK OPTION时,则今后对视图时行INSERT、UPDATE和DELETE操作时,系统会自动检查视图是否符合原定义视图时子查询中的。 本语名执行后,此视图的定义即被存入数据字典中,对语句的并不执行,即视图并未真正生成,所以,视图只是一个虚表。(3)例:CREATE VIEW Employee_02 AS SELECT * FROM Employee WHERE Dno=O2;从职工表中取出部门为“02”的元组组成一个视图。2、删除视图 DROP VIEW(1)格式: DROP VIEW (2)说明:此语句把指定的视图从数据字典中删除。(3)例: D

12、ROP VIEW Employee_022.3 SQL的数据操作语句SQL的数据操纵功能包括SELECT(检索)、INSERT(插入)、DELETE(删除)和UPDATE(更新)四个语句。2.3.1 SQL的查询语句(SELECT)是SQL语言的核心语句,1、格式:SELECT DISTINCT/ALLFROM WHERE ORDER BY GROUP BY HAVING INTO TABLE/CURSOR 2、说明:(1)本语句首先从所规定的若干关系中找出符合WHERE子句中的元组(无此子句时查询所有元组);再根据的规定,组合这些元组的属性值,形成一个新的查询结果关系;最后输出这个结果关系。

13、(2)DISTINCTALL查询结果中有重复元组存在时,选择DISTINCT,则每组重复元组只输出一条;选择ALL,则全部输出。默认时为ALL。(3)每个本身将作为查询结果关系的列名,表达式的值作为结果关系中该列的值。目标列表达式的一般格式为:.(如:Salary.Basepay50)若被查询的诸关系中,只有一个关系中有此属性,则关系名可以省略。反之,若有两个或以上的关系中有此属性,为区分起见,就必须加上关系名。.* (如: Employee.*)结果关系的列中正好包含某个被查询关系的全部列时,可用此式。(4)中可能含有的集函数,一般有下列几个: COUNT(*) -统计关系中元组的个数 CO

14、UNT(DISTINCT/ALL) -统计关系中某一列上元组的个数 MAX()与MIN() -给出一列上的最大小值 SUM(DISTINCT/ALL) -给出一列上值的总和(只对数值型) AVG(DISTINCT/ALL) -给出一列上值的平均值(只对数值型)(5),目标列表达式中含有符号或集函数时,在结果关系中要指定来表示该列名,其值仍为该目标列表达式的值。表示方法为: AS (6)FROM,指明了被查询的各关系的关系名,有时一个关系会被两次查询,这时就需要把先后查询的同一关系区分开来。使用别名即可达到此目的。但在SELECT子句和WHERE子句中出现的属性名必须指明是FIRST关系的,还是

15、SECOND关系的。例:SELECT DISTINCT FIRST.Eno,SECOND.Reno FROM Item_Emp FIRST,Item_Emp SECOND WHERE FIRST.Eno=SECOND.REno 是一个自身连接的例子,根据Item_Emp,求出参加某项目的间接联系人(7)子句WHERE 给出查询条件,其格式有如下几种: VS , VS 其中VS为 , =, 等比较操作符 NOT BETWEEN AND (稍做解释)例:WHERE Sage BETWEEN 20 AND 25 意思是查询年龄在20与25岁之间的学生(包括20,25岁) NOT IN() NOT L

16、IKE 注:表示任意长度的字符串,_ 表示任意单个的字符,若通配符本身就是字符串内容时,则可增加ESCAPE短语解释之。如:WHERE Iname LIKE C_%ESCAPE,则紧跟在后的_不是通配符,仅是一个字符而已。 IS NOT NULL ANDOR (注:为逻辑值:真或假)注意:WHERE 子句不能用集函数作为条件表达式(8)ORDER BY 子句对查询结果关系中元组进行排序。(9)GROUP BY HAVING 当中含有集函数时,往往就需要有GROUP子句来对被查询关系中满足WHERE条件表达式的元组进行分组统计,并将结果作为查询结果关系的元组成分,再由HAVING子句的条件表达式

17、进行再过滤,最终留下符合条件的元组。3、SQL查询语句的使用(1)简单查询:只对一个被查询关系进行查询的操作。(2)连接查询:涉及到两个以上关系的查询称之。例:SELECT S.*,SC.* FROM S,SC WHERE S.S#=SC.S#此例查找学生以及其选修课程的信息,S.S#=SC.S# 称为连接条件或连接谓词,连接谓词中的属性称之为连接属性。连接属性的类型必须是可比的,但不必相同,连接谓词的比较符可以是 ,,=,。当比较符是“”时称为等值连接。又如:求选修C1课程且成绩为B以上的学生及成绩SELECT S.S#,SNAME,SD,AGE,GRADE FROM S,SC WHERE

18、S.S#=SC.S# AND SC.C#=C1AND(SC.GRADE=AOR SC.GRADE=B);连接谓词可以和其它谓词组合起来,形成各种复合条件。连接查询可以是两个关系的连接,也可以多个关系的连接,也可以是一个关系自身的连接。(3)嵌套查询:嵌套查询亦称子查询。是指一个SELECT-FROM-WHERE查询块可以嵌入另一个查询块之中。在SQL中允许多层嵌套。例:求选修了课程“J”的学生的学号和姓名。SELECT S#,SNAME FROM S WHERE S# IN(SELECT S# FROM SC WHERE C# IN(SELECT C# FROM C WHERE CNAME=J

19、);子查询在上一级查询处理之前求解,即嵌套查询是由里向外处理的,这样,外层查询可以利用内层查询的结果。(解释上例 )在查询涉及到多个关系时,用嵌套查询逐次求解,层次分明,易于理解和编写,具有结构化程序设计的优点。在嵌套查询除最常用的谓词IN以外,还用到ANYALL,EXISTS,BETWEEN等谓词,主要用法如下:VSANYALL(SELECT语句)ANY表示只要与子查询中的一个值符合即可,而ALL表示要与子查询中所有值相符合才行。VS代表,=,=,等比较符VS ANY 表示只要VS其中一个即可,VS ALL表示必须VS所有结果(参考P30下部)例:WHERE DnoANY(SELECT Dn

20、o FROM Employee WHERE Eno1002OR Eno1003); NOT IN (SELECT 语句)无NOT时表示只要属性值在SELECT子查询结果中即可。NOTEXISTS(SELECT 语句),如:SELECT Eno,Ename FROM Employee WHERE EXISTS(SELECT FROM Item_Emp WHERE Eno=Employee.Eno);EXISTS代表存在量词。在此格式中,子查询只返回逻辑值:真或假。此类查询求解方式与前面的例子不同,一般来说,内查询的结果作为外查询的条件,求解的方式是由内向外逐层展开。在这里,子查询的查询条件往往依

21、赖于父查询的某个属性值。这类查询称之为相关子查询。相关子查询的执行过程为:从外查询的关系(Employee)中依次取一个元组,根据它的值在内查询进行检查,若WHERE 子句为真,将此元组放入结果关系中(为假,则舍弃)。这样反复处理,直至外查询关系的元组全部处理完为止。NOTBETWEEN AND 中的和也可以是子查询。这种情况下,子查询的结果作为边界使用。SELECT FIRST.Eno,FIRST.Basepay FROM Salary FIRST WHERE Basepay BETWEEN(SELECT Basepay FROM Salary SECOND WHERE SECOND.Eno

22、=1010)AND (SELECT Basepay FROM Salary SECOND WHERE SECOND.Eno=1050)在工资表中,把基本工资介于职工号为1010和1050的两个职工的基本工资之间的职工号及其基本工资查询出来。(4)视图的查询视图定义后,用户可以像对基本表那样对视图时行查询。例:SELECT * FROM Employee_02 WHERE Title=助工;当查询视图表时,DBMS: 首先从数据字典中取出该视图的定义;如Employee_02 的视图定义为:CREATE VIEW Employee_02 AS SELECT * FROM Employee WHE

23、RE Dno=O2; 然后把视图定义的子查询语句和对该视图的查询语句相结合,生成等价的对基本表的查询;如:SELECT * FROM Employee WHERE Dno=O2AND Title=助工; 最后执行对基本表的查询,把查询结果(作为本次对视图的查询结果)向用户显示。由于对视图的查询实质上是对基本表的查询,因此基本表的变化可以反映到视图上,视图就如同“窗口”一样,通过视图可以看到基本表的动态变化。(5)多个SELECT语句的集合操作SQL提供了集合并操作手段 UNION例:SELECT * FROM Item_Emp WHERE Ino= UNION SELECT * FROM It

24、em_Emp WHERE Ino=本例把两条SELECT语句各自得到的结果集并为一个集(两个集中若有相同元组,只留一个)。注意:参加UNION的元组结果集必须有相同的列数,各对应项的数据类型也必须相同。SQL未直接提供集合交操作和集合差操作,但完全可用一般的SELECT语句代替之。如:SELECT FIRST.* FROM Item_Emp FIRST WHERE FIRST.Ino LIKE 199%AND FIRST.Ino IN (SELECT SECOND.Ino FROM Item_Emp SECOND WHERE SECOND.Ino BETWEEN AND)此例是个求解集合交操作

25、的SELECT语句,此例中在下划线的IN前面加上NOT后即变为求解集合差操作的查询语句。(以上三种集合操作都在SQL server 2000上调试通过)2.3.2 SQL的插入语句(INSERT)1、格式:(1)INSERT INTO (列名清单)VALUES()(2)INSERT INTO (列名清单)SQL子查询2、说明:(1)格式(1)把一个新记录插入到指定的表中,格式(2)把子查询的结果插入指定表中;(2)可以没有,没有时VALUES中的常量列表中常量的数目和数据类型必须对应指定表中的每一个列;子查询中的也应与指定表的全部列名对应;(3)中有指定列名时,VALUES中的与SQL子查询中

26、的也必须与之对应,此时,在指定表中说明了 NOT NULL的列必须出现在中,因为,此时未指定的列将被赋以 NULL值。(4)用上述格式插入新记录时要符合参照完整性约束条件。例如插入一个选课记录:INSERT INTO SC(S,C,GRADE) VALUES(S15,C10,A)其中:S15、C10两个值在学生信息表和课程表中都必须存在,否则,就破坏了参照完整性。2.3.3 SQL的删除语句(DELETE)1、格式: DELETE FROM WHERE 2、说明:(1)从指定表中删除满足WHERE条件的记录;(2)没有WHERE条件时,表示删除指定表中全部记录,但表的定义仍在数据字典中,它是一个没有记录的空表;(3)执行删除操作,也可能破坏数据的参照完整性。(4)WHERE 可以是带有SQL子查询的条件,例如删除计算机科学系全体学生的选课记录:DELETE FROM SC WHERE S IN (SELECT S FROM S WHERE SDCS)2.3.4 SQL的更新语句(UPDATE)1、格式:UPDATE SET , WHERE ;2、说明:(1)更新语句修改指定表中满足WHERE的元组,把这些元组按SET子句中的表达式修改相应属性上的值;(2)更新语句中没有WHERE时,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论