




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、结构化查询SQL(Structured Query Language)是关系数据库的标准语言,对关系模型的发展和商用DBMS的研制起着重要的作用。SQL语言建立在关系运算理论基础之上,是介于关系代数和元组演算之间的一种语言,是一种通用的、功能强大的关系数据库语言。本章将介绍SQL的数据定义、数据查询、数据更新和嵌入式SQL。绪论机械工业出版社0目录SQL语言概述3.1SQL数据定义3.2 SQL数据查询3.3SQL数据更新3.4视图 3.5SQL 数据控制 3.6 嵌入式SQL 3.7机械工业出版社13.1 SQL语言概述3.1.1 SQL语言的产生与发展: 1970年,美国IBM研究中心的E
2、.Codd发表多篇文章,提出了关系模型。1972年,IBM公司开始研制关系数据库管理实验系统System R,配制的查询语言称为SQUARE语言(Specifying Queries As Relational Expression),在语言中使用了大量的数学符号。1974年,Boyce和Chamberlin把SQUARE语言修改为SEQUEL语言(Structured English Query Language)。这两种语言在本质上是相同的,但后者去掉了一些数学符号,并采用英语单词表示和结构式的语法规则,后来SEQUEL语言简称为SQL,即结构化查询语言。由于它功能丰富,语言简捷,倍受用户
3、欢迎。经众多计算机公司的不断修改、扩充和完善,SQL语言最终发展成为关系数据库的标准语言。机械工业出版社23.1 SQL语言概述SQL被认为是数据库界的奇迹,几乎所有著名的关系数据库管理系统,如Oracle、Sybase、Informix、Ingres、DB2、SQL server都先后实现了对SQL语言的支持。1986年,美国国家标准协会(ANSI)发布了第一个SQL标准,即SQL86,并于1987年获得国际标准化组织(ISO)的一致通过。SQL86主要包括模式定义、数据操作、嵌入式SQL等内容。1989年,ISO组织在模式定义中增补了完整性描述并修订了一些其他内容,并颁布了SQL89标准。
4、1992年ISO组织对SQL89又进行了扩充和修改,公布了SQL92标准,人们习惯称为SQL2标准。SQL2标准分为初级SQL2、中级SQL2和完全SQL2三个级别。初级SQL2在SQL89的基础上增加了某些功能;中级SQL2是在初级SQL2的基础上扩充了数据的类型、操作的种类和完整性方面的内容;完全SQL2进一步扩充了中级SQL2,放宽了对某些操作的限制,并增加了“BIT”的数据类型。此外,SQL2还提供对网络环境和互联网的支持,以实现对远程数据库的访问。 机械工业出版社33.1 SQL语言概述1995年美国国家标准局在SQL2的基础上进一步扩充了面向对象的功能,并公布了SQL3标准。SQL
5、3支持用户自定义数据类型,提供了递归操作、临时视图、嵌套查询、异步DML等新功能。SQL3是目前的最新标准,但由于各种历史原因,仍有一些数据库仅支持到SQL2。自SQL成为国际标准语言以后,各个数据库厂家纷纷推出各自的SQL软件或与SQL的接口软件。这就使大多数数据库均用SQL作为共同的数据存取语言和标准接口,使不同数据库系统之间的互操作有了共同的基础。SQL成为国际标准,对数据库以外的领域也产生了巨大影响,很多软件产品将SQL语言的数据查询功能与图形功能、软件工程工具、软件开发工具、人工智能程序结合起来。SQL已成为数据库领域中一个主流语言,被广泛应用在各种系统中。 机械工业出版社43.1
6、SQL语言概述3.1.2 SQL语言的基本概念 SQL语言支持关系数据库的三级模式结构体系,如图3-1所示。在SQL中,外模式对应于视图(View)或部分基本表(Base Table),模式对应于基本表,内模式对应于存储文件(Stored File)。 图3-1 SQL数据库的体系结构机械工业出版社53.1 SQL语言概述SQL数据库的体系结构要点如下:(1)一个SQL模式(Schema)是已命名的数据组,由表、授权、规则、约束等组成。(2)一个SQL表由行(Row)组成,行由列(Column)组成,每一列对应一个数据项。(3)SQL表有三种类型:基本表、视图和导出表。基本表是实际存储在数据库
7、中的表,视图是由若干个基本表或其他视图构成的表的定义,是虚拟表,而导出表是执行查询后产生的表。(4)一个基本表可以跨一个或多个存储文件,一个存储文件也可以存放一个或多个基本表。每个存储文件与外部存储上的一个物理文件相对应。 机械工业出版社63.1 SQL语言概述(5)用户可以使用SQL语句对基本表和视图进行查询等操作。对用户来说,基本表和视图是一样的,都是表。(6)SQL用户可以是终端用户,也可以是应用程序。也就是说,SQL语言既可以作为独立的交互型语言,供交互环境下的终端用户使用;也可以作为嵌入式语言嵌入宿主语言的程序中使用,宿主语言可以是Visual Basic(VB)、C语言、COBOL
8、、 FORTRAN、PL/1等程序设计语言。(7)存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理结构是任意的,对用户是透明的。 机械工业出版社73.1 SQL语言概述3.1.3 SQL语言的主要特点 SQL语言是介于关系数据库与关系演算之间的一种结构化查询语言。虽然SQL是一种查询语言,但实际上它的功能并非查询信息那么简单,主要功能包括数据查询(Data Query)、数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control),是一种通用的、功能强大而又简单易学的关系数据库语言,其主要特点包括以下几个方面。 机械
9、工业出版社83.1 SQL语言概述1综合统一 数据库系统的主要功能是通过数据库支持的数据语言来实现。层次模型、网状模型等非关系模式数据库语言大多分为模式数据定义语言(模式DDL,Schema Data Definition Language)、外模式数据定义语言(外模式DDL或子模式DDL,Subschema Data Definition Language)、与数据存储有关的描述语言(DSDL,Data Storage Description Language)及数据操纵语言(DML,Data Manipulation Language),分别用于定义模式、外模式、内模式和进行数据的存取与处
10、置。不足之处是:当用户数据库投入运行之后,如果需要修改模式,必须停止现有数据库的运行,转储数据,修改模式并编译后再重装数据库,非常麻烦。SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括定义关系模式、建立数据库、插入数据、查询、更新、维护、数据库重构、数据库安全控制等一系列操作要求,为数据库应用系统提供了良好的开发环境。更重要的是,用户数据库在投入运行后,在不影响数据库运行的情况下,可根据需要随时修改模式,从而使系统具有良好的可扩展性。机械工业出版社93.1 SQL语言概述2高度非过程化 非关系数据模型
11、的数据操纵语言是面向过程的语言,如果要完成某项请求,必须指出存取路径。而SQL语言是高度非过程化语言,当进行数据操作时,只需要指出“做什么”,无须指明“怎么做”,存储路径对用户来说是透明的,而不需要指出存储路径,存储路径的选择和SQL语句的操作过程全部是由系统自动完成的,从而大大减轻了用户的负担,同时有利于提高数据的独立性。机械工业出版社103.1 SQL语言概述3面向集合的操作方 法 非关系数据模型采用面向记录的操作方式,操作对象是一条记录。例如查询工资在2000元以上的员工姓名,用户必须要编写一段处理程序,指明具体处理过程,包括按照哪条存储路径、如何循环等,才能一条一条地把满足要求的员工记
12、录查找出来。而SQL语言采用面向集合的操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。机械工业出版社113.1 SQL语言概述4以同一种语言结构提供两种使用方式 SQL语言提供两种工作方式:一种是交互式命令方式,另一种是嵌入式程序方式。第一种方式是用户可以在终端键盘上输入SQL命令,对数据库进行操作,能够独立地用于联机交互的使用方式,所以称为自含式语言;第二种方式是将SQL语句嵌入到高级程序设计语言(如C语言、C+语言、COBOL、 FORTRAN、PowerBuilder、PL/1)程序中,供程序员设计程序时使用,因此又称为嵌入式语言。
13、而在以上两种不同的使用方式下,SQL语言的语法结构基本上是一致的。这种以统一的语法结构提供两种不同的使用方式的做法,提供了极大的灵活性和方便性。机械工业出版社123.1 SQL语言概述5语言简洁,易学易用 SQL语言不仅功能强大,而且十分简洁,完成核心功能只用了9个动词,如表3-1所示。SQL语言接近英语口语,因此容易学习,方便使用。 表3-1 SQL语言功能表SQL功能 动 词 数据查询SELECT数据定义CREATE,DROP,ALTER数据操纵INSERT,UPDATE,DELETE数据控制GRANT,REVOKE机械工业出版社133.2 SQL数据定义 关系数据库系统支持三级模式结构,
14、其模式、外模式和内模式中的基本对象有表、视图和索引。因此SQL的数据定义功能包括定义表、定义视图和定义索引,具体命令如表3-2所示。 机械工业出版社143.2 SQL数据定义表3-2 SQL的数据定义语句 操作对象 操 作 方 式 创 建删 除修 改表CREATETABLEDROPTABLEALTERTABLE视图CREATE VIEWDROP VIEW索引CREATE INDEX DROP INDEX 机械工业出版社153.2 SQL数据定义 在数据库中独立存在的表称为基本表,一个基本表对应一个基本关系,它是由CREATE TABLE命令来创建的。基本表的定义是指建立基本的关系模式,基本表的
15、变更是指对数据库中已存在的基本表进行修改或删除。数据库通常是包含多个基本表的一个数据集。 机械工业出版社163.2 SQL数据定义 一个基本表可以建立若干索引,它们都依附于基本表且存放在存储文件中。索引属于物理存储概念,而不是逻辑概念。有些关系型数据库同时包括索引机制和主键机制,相比而言,主键机制占用系统资源较少,并且效率较高。 机械工业出版社173.2 SQL数据定义 视图对应于外模式,它是从现有的一个或几个基本表中抽取若干子集组成的“虚表”。 视图可以通过SQL中的CREATE VIEW命令来来创建,创建视图只是把视图的定义存放在系统中,而不是直接存储视图相应的数据,这些数据仍然存放在导出
16、视图的基本表中。只有当用户使用该视图时,才从相应的表中获取数据。SQL在查询视图时与基本表完全相同,并且用户可以在视图上再定义视图,但用视图对数据库中的数据进行增加、删除、修改等更新操作时有一定的限制。本节将介绍如何定义基本表和索引,视图的定义方法将在3.5节介绍。机械工业出版社183.2 SQL数据定义3.2.1 基本数据类型 不同的数据库系统支持的数据类型不完全相同。SQL提供的主要数据类型(也称为“域类型”)有以下几种:(1)数值型 INTEGER 全字长二进制整数(也可写成INT) SMALLINT 半字长二进制整数 REAL 取决于机器精度的浮点数 DOUBLE PRECISION
17、取决于机器精度的双精度浮点数 FLOAT(n) 浮点数,精度至少为n位数字 NUMERIC(p,d) 定点数,由p位数字(不包括符号、 小数点)组 成,小数点后面有d位数字 (也可以写成 DECIMAL(p,d)DEC(p,d)机械工业出版社193.2 SQL数据定义(2)字符串型 CHAR(n) 长度为n的定长字符串 VARCHAR(n) 具有最大长度为n的变长字符串 GRAPHIC(n) 长度为n的定长图形字符串 VARGRAPHIC(n) 具有最大长度为n的定长图形字符串(3)位串型 BIT(n) 长度为n的二进制位串 BIT VARYING(n) 最大长度为n的变长二进制位串(4)时间
18、型 DATE 日期型,格式为YYYY-MM-DD TIME 时间型,格式为HH:MM:SS TIMESTAMP 日期加时间机械工业出版社203.2 SQL数据定义3.2.2 创建、修改和删除基本表 如果在系统中创建了一个数据库,那么就可以在数据库中定义基本表。对基本表的操作包括创建、修改和删除。1基本表的创建 建立数据库最基本、最重要的一步就是创建基本表,也就是定义基本表的结构。SQL语言使用CREATE TABLE语句创建基本表,其一般格式为:CREATE TABLE ( 列级完整性约束条件 , 列级完整性约束条件 ,); 其中,是所要定义的基本表的名字,基本表可以由一个或多个属性(列)组成
19、,每个列的类型可以是基本数据类型,也可以是用户预先定义的域名。机械工业出版社213.2 SQL数据定义 建立基本表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存储在系统的数据字典中,当用户操作表中数据时,由DBMS自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及该表的多个属性列,则必须定义在表级上,否则既可以定义在列级上,也可以定义在表级上。 机械工业出版社223.2 SQL数据定义 例3.1 设教学管理数据库S-C中有三个基本表:学生表STUDENT、学生选课表SC和课程表COURSE。其中学生表由学号SNO、姓名SNAME、性别SSEX、年龄SAGE
20、、所在系SDEPT五个属性组成;学生选课表由学号SNO、课程号CNO、成绩GRADE三个属性组成;课程表由课程号CNO、课程名CNAME、先修课程号CPNO、学分CREDITS 四个属性组成。 STUDENT (SNO, SNAME, SSEX, SAGE, SDEPT) SC (SNO, CNO, GRADE) COURSE (CNO, CNAME, CPNO, CREDITS)机械工业出版社233.2 SQL数据定义基本表STUDENT可用下列命令创建: CREATE TABLE STUDENT (SNO CHAR(5) NOT NULL UNIQUE, /*列级完整性约 束条件, SNO
21、、SNAME不能为空值,取值唯一*/ SNAME CHAR(8) NOT NULL UNIQUE, SSEX CHAR(2), SAGE INT, SDEPT CHAR(20), PRIMARY KEY(SNO); 机械工业出版社243.2 SQL数据定义 系统执行上面的CREATE TABLE命令后,就在数据库中建立一个新的空表STUDENT,并将有关表的定义以及有关约束条件存放在数据字典中。定义表的各个属性时需要指明其数据类型及长度。 SQL中允许列值是空值,但当要求某一列的值不允许为空值时,就应在定义该列时写上关键字“NOT NULL”,例如这里的学号SNO、学生姓名SNAME后都有“N
22、OT NULL”字样。PRIMARY KEY(SNO)表示定义主码为SNO。 机械工业出版社253.2 SQL数据定义对于基本表SC、COURSE可以用下列语句创建:CREATE TABLE SC (SNO CHAR(5), CNO CHAR(4), GRADE INT, PRIMARY KEY(SNO,CNO), FOREIGN KEY(SNO) REFERENCES STUDENT(SNO), FOREIGN KEY(CNO) REFERENCES COURSE(CNO), CHECK (GRADE BETWEEN 0 AND 100);CREATE TABLE COURSE (CNO C
23、HAR(4) NOT NULL, CNAME CHAR(10) NOT NULL, CPNO CHAR(4), CREDITS INT, PRIMARY KEY(CNO); 机械工业出版社263.2 SQL数据定义 在基本表SC的定义中说明有三个属性列,主键是(SNO,CNO)。还定义了两个外码,并指出外码SNO和基本表STUDENT中的SNO相对应,外码CNO和基本表COURSE中的CNO相对应。在本例中对应的属性列名称恰好同名,实际上也可以不同名,只要指出其对应性即可。外码体现了关系数据库的参照完整性。定义中还使用了一个检查子句,指出成绩GRADE的值应在0100之间。 在基本表COURS
24、E的定义中也说明有三个属性列,主码是CNO,同时属性CNO和CNAME不允许为空值。 机械工业出版社273.2 SQL数据定义 2基本表的修改 在基本表建立后,可根据实际需要对基本表的结构进行修改,可以增加新的属性列和新的完整性约束条件、删除指定列的完整性约束条件,还可以修改数据类型、宽度等。SQL语言用ALTER TABLE语句修改基本表,其一般格式为: ALTER TABLE ADD 完整性约束 DORP MODIFY ; 其中指出要修改的基本表;ADD子句用于增加新列和新的完整性约束条件;DORP子句用于删除指定的完整性约束条件;MODFIY子句用于修改原有的列定义,包括修改列名和数据类
25、型。 机械工业出版社283.2 SQL数据定义 (1)增加列 例3.2 在基本表STUDENT中增加一个地址列ADDRESS, 可用下列语句实现: ALTER TABLE STUDENT ADD ADDRESS CHAR(30) 应该注意的是,不论基本表中原来是否已有数据,新增加 的列不能定义为“NOT NULL”,基本表在增加一个属性列后,原有元组在新增加的列上的值都被定义为空值NULL。 机械工业出版社293.2 SQL数据定义 (2)补充定义主码 由于SQL并不要求每个基本表在建立时都定义主码,因此提供了一个补充定义主码的命令,在需要时定义主码。被定义为主码的列名表必须满足NOT NUL
26、L和唯一性条件。ALTER TABLE ADD PRIMARY KEY(); 机械工业出版社303.2 SQL数据定义 (3)撤销主码定义 如果定义了主码,系统一般在主码上自动建立索引,并在插入新的元组时,进行主码唯一性检验。这在插入大量数据时,会严重影响系统的性能。利用下面的命令,可以暂时撤销主码定义。 ALTER TABLE DORP PRIMARY KEY; 机械工业出版社313.2 SQL数据定义 (4)补充定义外码 ALTER TABLE ADD FOREIGN KEY )() REFERENCES ON DELETERESTRICT|CASCADE|SET NULL; 上述命令中,
27、花括号表示任选三项中的一项,RESTRICT为默认值。 机械工业出版社323.2 SQL数据定义 (5)撤销外码定义 定义了外码,必须引用完整性检验,这在有些情况下会影响系统的性能。为此,SQL提供了撤销外码的命令,在必要时暂时撤销外码。 ALTER TABLE DORP ;(6)修改属性的数据类型及约束条件 机械工业出版社333.2 SQL数据定义例3.3 将表STUDENT中年龄的数据类型改为半字长整数(SMALLINT)。 ALTER TABLE STUDENT MODIFY SAGE SMALLINT; 修改原有的属性列定义有可能会破坏已有的数据。例3.4 删除表STUDENT中学生姓
28、名必须取唯一值的约束。 ALTER TABLE STUDENT DORP UNIQUE(SNAME); 标准SQL没有提供删除属性列的语句,用户只能间接实现这一功能,可以先把表中要保留的属性列及其内容复制到一个新表中,然后删除原表,再建新表重新命名为原表名。 机械工业出版社343.2 SQL数据定义3基本表的删除 当某个基本表不再需要时,用户可以使用DORP TABLE命令删除它。其一般格式为:DORP TABLE ; 基本表一旦删除,表中的数据以及此表上建立的索引和视图都将自动被删除掉。因此执行删除基本表的操作一定要格外谨慎。例3.5 删除STUDENT表。 DORP TABLE STUDE
29、NT;机械工业出版社353.2 SQL数据定义3.2.3 创建和维护索引 索引属于物理存储的路径概念,而不是逻辑的概念。在定义基本表时定义索引,就会把数据库的物理结构和逻辑结构混在一起。建立索引是加快查询速度的有效手段。用户可以根据应用环境的需要,在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。一般来说,建立与删除索引由数据库管理员DBA或表的属主(即建立该表的人)负责完成。系统在存取数据时会自动选择合适的索引作为存取路径,用户不必也不能选择索引。 机械工业出版社363.2 SQL数据定义1索引的建立 在SQL语言中,建立索引使用CREATE INDEX语句,其一般格式为: C
30、REATE UNIQUECLUSTER INDEX ON (,); 机械工业出版社373.2 SQL数据定义 其中,表名是要建立索引的基本表的名字。索引可以建立在该表的一列或多列上,各列名之间用逗号分隔。每个列名后面还可以用次序指定索引值的排列次序,可选ASC(升序)或DESC(降序),默认值为ASC。 UNIQUE表明此索引的每一个索引值只对应唯一的数据记录。 CLUSTER表示要建立的索引是聚簇索引。所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。机械工业出版社383.2 SQL数据定义 例3.6 在基本表STUDENT中的SNAME(姓名)列 上建立一个聚簇索引,并且ST
31、UDENT表中的记录将按照SNAME值的降序存放。 CREATE CLUSTER INDEX STU-SNAME ON STUDENT (SNAME DESC); 用户可以在最常查询的列上建立聚簇索引以提高查询效率。值得注意的是,每个基本表上最多只能建立一个聚簇索引。建立聚簇索引后,更新索引列上的数据时,往往导致基本表中元组的物理顺序的变更,时间开销较大,因此对于经常更新的列不易建立聚簇索引。机械工业出版社393.2 SQL数据定义 例3.7 为教学管理数据库中的STUDENT、SC、COURSE三个表建立索引。其中STUDENT表按学号(SNO)升序建立唯一索引,SC表按学号(SNO)升序和
32、成绩(GRADE)降序建立唯一索引,COURSE表按课程号(CNO)升序建立唯一索引。 CREATE UNIQUE INDEX STU-SNO ON STUDENT (SNO ASC); CREATE UNIQUE INDEX SC-SNO ON SC (SNO ASC, GRADE DESC); CREATE UNIQUE INDEX C-CNO ON COURSE (CNO ASC);机械工业出版社403.2 SQL数据定义2索引的删除 索引建立以后,就由系统使用和维护它,不需用户干预。建立索引是为了减少查询操作的时间。但如果数据增加和修改频繁,系统会花费许多时间来维护索引。这时可以删除不
33、必要的索引。 在SQL语言中,删除索引使用DORP INDEX语句,其一般格式为:DORP INDEX ;机械工业出版社413.2 SQL数据定义 例3.8 删除基本表STUDENT中的STU-SNAME索引。DORP INDEX ; 删除索引时,系统会同时从数据字典中删去有关该索引的描述。机械工业出版社423.3 SQL数据查询3.3.1 SELECT查询命令 数据查询是数据库的核心操作。SQL提供了SELECT语句进行数据库的查询,该语句具有灵活的使用方式和丰富的功能。其一般格式为: SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING OR
34、DER BY ASC|DESC;机械工业出版社433.3 SQL数据查询 整个SELECT语句的含义是:根据WHERE子句给出的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按照SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。如果有GROUP子句,则将结果按的值进行分组,该属性列值相等的元组为一个组。如果GROUP子句带有HAVING短语,则只输出满足指定条件的组。如果有ORDER子句,则结果表还要按的值的升序或降序排序。机械工业出版社443.3 SQL数据查询 SELECT语句既可以完成简单的单表查询,也可以完成复杂的连接查询和嵌套查询,SELECT语句
35、能表达所有的关系代数表达式。下面以教学管理数据库S-C为例说明SELECT语句的各种用法。 教学管理数据库中包含三个基本表:学生表:STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT) STUDENT由学号(SNO)、姓名(SNAME)、性 别(SSEX)、年龄(SAGE)、所在系(SDEPT) 五个属性组成,其中SNO为主码。机械工业出版社453.3 SQL数据查询课程表: CORUSE(CNO,CNAME,CPNO,CREDITS) CORUSE有课程号(CNO)、课程名 (CNAME)、选修课号(CPNO)、学分 (CREDITS)四个属性组成,其中CNO为主码。学生选课
36、表:SC(SNO,CNO,GRADE) SC由学号(SNO)、课程号(CNO)、成绩 (GRADE)三个属性组成,其中主码为 (SNO,CNO)。机械工业出版社463.3 SQL数据查询SNOSNAMESSEXSAGESDEPTS8201王晨男21计算机系S8202李俊女20计算机系S8203刘利敏女19计算机系S8204张海男20计算机系S8801吴浩男18数学系S8802程小磊男20数学系S8803张建超男19数学系S9101李云鹏男18自动化系S9102刘一鸣女20自动化系表3-3 基本STUDENT机械工业出版社473.3 SQL数据查询CNOCCNAMECPNOCREDITS1高等数
37、学 22英语43C语言44数据结构345操作系统446离散数学137数据库438网络原理53表3-4 基本表COURSE机械工业出版社483.3 SQL数据查询SNOCNOGRADES8201195S8201385S8202188S8202274S8202383S8203194S8203291S82044 75S8204590S8801486表3-5 基本表SC机械工业出版社493.3 SQL数据查询3.3.2 简单查询 简单查询是指数据源只涉及一个基本表或一个视图的查询。1选择表中的若干列 选择表中的若干列,既可以是选择表中的全部列,也可以是选择表中的部分列。选择表中的全部列或部分列,这就是
38、投影运算。 (1) 查询指定列 在多数情况下,用户只对表中的一部分属性列感兴趣,这时可通过在SELECT子句的目标列表达式中指定要查询的属性列。机械工业出版社503.3 SQL数据查询 例3.9 查询全体学生的学号、姓名和所在系。SELECT SNO, SNAME, SEPTFROM STUDENT; 查询结果如表3-6所示。机械工业出版社513.3 SQL数据查询SNOSNAMESDEPTS8201王晨计算机系S8202李俊计算机系S8203刘利敏计算机系S8204张海计算机系S8801吴浩数学系S8802程小磊数学系S8803张建超数学系S9101李云鹏自动化系S9102刘一鸣自动化系表3
39、-6 查询学号、姓名和所在系结果机械工业出版社523.3 SQL数据查询例3.10 查询全体学生的姓名、学号、性别和所在系。SELECT SNAME, SNO, SSEX, SEPTFROM STUDENT;查询结果如表3-7所示。 机械工业出版社533.3 SQL数据查询SNOSNAMESSEXSDEPTS8201王晨男计算机系S8202李俊女计算机系S8203刘利敏女计算机系S8204张海男计算机系S8801吴浩男数学系S8802程小磊男数学系S8803张建超男数学系S9101李云鹏男自动化系S9102刘一鸣女自动化系表3-7查询学号、姓名、性别和所在系结果目标列表达式中各个列的先后顺序可
40、以与表中的顺序不一致,用户可以根据应用的需要改变列的显示顺序。机械工业出版社543.3 SQL数据查询(2) 查询全部列 如果要查询表中的所有属性列,可以使用两种方法:一种方法是在目标列表达式中列出所有的列名;另一种方法是如果列的显示顺序与基本表中定义的顺序相同,则可以简单地将目标列表达式指定为星号“*”。例3.11 查询全体学生的记录。SELECT SNO, SNAME, SAGE, SSEX, SEPTFROM STUDENT; 等价于: SELECT * FROM STUDENT;查询结果如表3-8所示。机械工业出版社553.3 SQL数据查询例3.10 查询全体学生的姓名、学号、性别和
41、所在系。SELECT SNAME, SNO, SSEX, SEPTFROM STUDENT;查询结果如表3-7所示。 机械工业出版社563.3 SQL数据查询SNOSNAMESSEXSAGESDEPTS8201王晨男21计算机系S8202李俊女20计算机系S8203刘利敏女19计算机系S8204张海男20计算机系S8801吴浩男18数学系S8802程小磊男20数学系S8803张建超男19数学系S9101李云鹏男18自动化系S9102刘一鸣女20自动化系表3-8 查询全体学生记录结果机械工业出版社573.3 SQL数据查询(3)查询经过计算的列 SELECT子句中的目标列表达式可以是表中存在的属
42、性列,也可以是表达式、常量或函数。例3.12 查询全体学生的姓名和出生年份。 在STUDENT表中只记录了学生的年龄,而没有记录学生的出生年份,但可以经过计算得到出生年份,即用当前年(假设为2007年)减去年龄,得到出生年份。因此,实现此功能的查询语句为:SELECT SNAME,2007SAGEFROM STUDENT;查询结果如表3-9所示。机械工业出版社583.3 SQL数据查询SNAMESSEX王晨1986李俊1987刘利敏1988张海1987吴浩1989程小磊1987张建超1988李云鹏1989刘一鸣1987表3-9 查询姓名和出生年份结果机械工业出版社593.3 SQL数据查询例3
43、.13 查询全体学生的姓名和出生年份,并在出生年 份列前加入一个列,此列的每行数据均为“YEAR OF BIRTH”常量值。SELECT SNAME, YEAR OF BIRTH,2007SAGEFROM STUDENT;查询结果如表3-10所示。机械工业出版社603.3 SQL数据查询表3-10 查询并加入新列结果SNAME王晨YEAROFBIRTH 1986李俊YEAROFBIRTH1987刘利敏YEAROFBIRTH1988张海YEAROFBIRTH1987吴浩YEAROFBIRTH1989程小磊YEAROFBIRTH1987张建超YEAROFBIRTH1988李云鹏YEAROFBIRT
44、H1989刘一鸣YEAROFBIRTH1987注意,选择列表中的常量和计算是对表中的每一行进行的。机械工业出版社613.3 SQL数据查询例3.14 查询全体学生的姓名、出生年份和所在系,要求用小写字母表示学号中的字母。 SELECT ISLOWER(SNO) ,SNAME, YEAR OF BIRTH,2007SAGEFROM STUDENT;查询结果如表3-11所示。机械工业出版社623.3 SQL数据查询表3-11 查询并用小写字母标示系名结果SNAMES8201王晨YEAROFBIRTH 1986S8202李俊YEAROFBIRTH1987S8203刘利敏YEAROFBIRTH1988
45、S8204张海YEAROFBIRTH1987S8801吴浩YEAROFBIRTH1989S8802程小磊YEAROFBIRTH1987S8803张建超YEAROFBIRTH1988S9101李云鹏YEAROFBIRTH1989S9102刘一鸣YEAROFBIRTH1987机械工业出版社633.3 SQL数据查询 可以看出经过计算的列、函数的列和常量列显示结果都没有列标题,通过指定列的别名可以改变查询结果的列标题,这对于算数表达式、常量、函数名的目标列尤其有用。 改变列标题的语法格式为:列名|表达式 AS 列标题或列标题=列名|表达式机械工业出版社643.3 SQL数据查询例如,对于例3.14,
46、可以定义如下列别名:SELECT ISLOWER(SNO) LSNO,SNAME, YEAR OF BIRTH BRITH, 2007SAGE BRITHDAYFROM STUDENT;查询结果间如表3-12所示。机械工业出版社653.3 SQL数据查询表3-12 查询并定义别名结果LSNO SNAMEBIRTHBRITHDAYS8201王晨YEAROFBIRTH 1986S8202李俊YEAROFBIRTH1987S8203刘利敏YEAROFBIRTH1988S8204张海YEAROFBIRTH1987S8801吴浩YEAROFBIRTH1989S8802程小磊YEAROFBIRTH1987
47、S8803张建超YEAROFBIRTH1988S9101李云鹏YEAROFBIRTH1989S9102刘一鸣YEAROFBIRTH1987机械工业出版社663.3 SQL数据查询2选择表中的若干元组 上面介绍的例子全部都是选择表中的所有记录,而没有对表中的记录进行任何有条件的选择。事实上,在查询的过程中,除了可以选择列之外,还可以对行进行选择,使查询结果更加满足用户的要求。(1)消除取值相同的元组 本来在数据库表中不存在取值完全相同的元组,但在进行了对列的选择后,在查询结果中就有可能出现取值完全相同的行了。取值相同的行在结果中是没有意义的,因此应消除掉。机械工业出版社673.3 SQL数据查询
48、例3.15 在基本表SC中查询选修了课程的学生学号。SELECT SNO FROM SC;查询结果如表3-13所示。SNOS8201S8202S8203S8204S8801S8802S8803S9101S9102 表3-13 查询学号结果机械工业出版社683.3 SQL数据查询 在这个查询结果中有许多重复的元组,一个学生选修了多少门课程,其学号就在结果中重复几次。如果想去掉结果表中的重复行,必须指定DISTINCT短语:SELECT DISTINCT SNO FROM SC;执行结果如表3-14所示。机械工业出版社69TableSNOS8201S8202S8203S8204S8801表3-14
49、去掉重复行结果 DISTINCT关键字在SELECT的后边,目标列表达式的前边。如果没有指定DISTINCT短语,则默认ALL,即保留结果表中取值重复的行。SELECT SNO FROM SC;等价于:SELECT ALL SNO FROM SC;机械工业出版社703.3 SQL数据查询(2)查询满足条件的元组查询满足条件的元组是通过WHERE子句来实现的。WHERE子句常用的查询条件如表3-15所示。查询条件谓 词比较(比较运算符)=,=,=,!=,!,!,NOT+上述比较运算符确定范围BETWEEN AND,NOT BETWEEN AND确定集合IN,NOT IN字符匹配LIKE,NOT
50、LIKE空值IS NULL,IS NOT NULL多重条件(逻辑谓词)AND,OR表3-15 常用的查询条件机械工业出版社713.3 SQL数据查询比较大小的查询例3.16 查询计算机系的所有学生的学号、姓名。SELECT SNO, SNAMEFROM STUDENTWHERE SDEPT=计算机系;查询结果如表3-16所示。SNOSNAMES8201王晨S8202李俊S8203刘利敏S8204张海表3-16 查询计算机系学生学号、姓名结果机械工业出版社723.3 SQL数据查询例3.17 查询所有年龄在21岁以下的学生姓名及年龄。SELECT SNAME, SAGEFROM STUDENTW
51、HERE SAGE=21;查询结果如表3-17所示。SNAMESAGE李俊20刘利敏19张海20吴浩18程小磊20张建超19李云鹏18刘一鸣20表3-17 查询21岁以下的学生结果机械工业出版社733.3 SQL数据查询例3.18 查询考试成绩在85分以上(包括85分)的学生学号。SELECT SNOFROM COURSEWHERE GRADE=85;查询结果如表3-18所示。SNO GRADES820192S820185S820288S820394S820391S820490S880186表3-18 查询成绩在85分以上的结果机械工业出版社743.3 SQL数据查询确定范围的查询 BETWE
52、ENAND和NOT BETWEENAND是逻辑运算符,可以用来查找属性值在或不在指定范围内的元组,其中BETWEEN后面指定范围的下限,AND后面指定范围的上限。使用BETWEENAND的格式为:列名|表达式 NOT BETWEEN 下限值 AND 上限值 BETWEENAND一般用于对数值型数据进行比较。列名或表达式的类型要与下限值或上限值的类型相同。 “BETWEEN 下限值 AND 上限值”的含义是:如果列或表达式的值在下限值和上限值范围内,则结果为TRUE,表明此记录符合查询条件,否则结果为FALSE,表明此记录不符合查询条件。 “NOT BETWEEN 下限值 AND 上限值”的含义
53、正好相反:如果列或表达式的值在下限值和上限值范围内,则结果为FALSE,表明此记录不符合查询条件,否则结果为TRUE,表明此记录符合查询条件。机械工业出版社753.3 SQL数据查询例3.19 查询年龄在1921岁之间的学生学号、 姓名和年龄。SELECT SNO, SNAME, SAGEFROM STUDENTWHERE SAGE BETWEEN 19 AND 21;查询结果如表3-19所示。机械工业出版社763.3 SQL数据查询SNOSNAMESAGES8201王晨21S8202李俊20S8203刘利敏19S8204张海20S8802程小磊20S8803张建超19S9102刘一鸣20表3
54、-19 查询年龄1921岁学生结果等价于:SELECT SNO, SNAME, SAGEFROM STUDENTWHERE SAGE=19 AND SAGE=21;机械工业出版社773.3 SQL数据查询例3.20 查询年龄不在1921岁之间的学生学号、姓名和年龄。SELECT SNO, SNAME, SAGEFROM STUDENTWHERE SAGE NOT BETWEEN 19 AND 21;等价于:SELECT SNO, SNAME, SAGEFROM STUDENTWHERE SAGE21;查询结果如表3-20所示。SNOSNAMESAGES8801吴浩18S9101李云鹏18表3-
55、20查询不在年龄1921岁学生结果机械工业出版社783.3 SQL数据查询确定集合的查询 如果要查找属性值属于指定集合的元组,可以使用一个逻辑运算符IN,使用IN的格式为:列名NOT IN 用IN进行比较的数据大多为字符型数据,也可以是数值型数据。 IN的含义为:当列的值与IN中的某个常量值相同时,则结果为TRUE,表明此记录符合查询条件。NOT IN的含义正好相反,当列的值与某个常量相同时,则结果为FALSE,表明此记录不符合查询条件。机械工业出版社793.3 SQL数据查询例3.21查询计算机系和数学系学生的学号、姓名和性别。SELECT SNO, SNAME, SSEXFROM STUD
56、ENTWHERE SDEPT IN (计算机系, 数学系);等价于:SELECT SNO, SNAME, SSEXFROM STUDENTWHERE SDEPT =计算机系 OR SDEPT =数学系;查询结果如表3-21所示。机械工业出版社803.3 SQL数据查询SNOSNAMESSEXS8201王晨男S8202李俊女S8203刘利敏女S8204张海男S8801吴浩男S8802程小磊男S8803张建超男表3-21 查询计算机系和数学系学生结果机械工业出版社813.3 SQL数据查询例3.22 查询既不是计算机系,也不是数学系学生的学号、姓名、性别和年龄。SELECT SNO, SNAME,
57、 SSEX, SAGEFROM STUDENTWHERE SDEPT NOT IN (计算机系, 数学系);等价于:SELECT SNO, SNAME, SSEX, SAGEFROM STUDENTWHERE SDEPT! =计算机系 OR SDEPT!= 数学系;查询结果如表3-22所示。表3-22查询既不是计算机系也不是数学系学生结果机械工业出版社823.3 SQL数据查询字符匹配的查询 LIKE用于查找指定列值与匹配串常量匹配的元组。匹配串是一种特殊的字符串,其特殊之处在于它不仅可以包含普通字符,而且还可以包含通配符。通配符用于表示任意的字符或字符串。在实际应用中,如果需要从数据库中检索
58、一批记录,但又不能给出精确的字符查询条件,这时就可以使用LIKE运算符和通配符来实现模糊查询。在LIKE运算符前边也可以使用NOT运算符,表示对结果取反,其一般格式为:NOT LIKE 匹配串 ESCAPE 机械工业出版社833.3 SQL数据查询 其含义是查找指定的属性列值与匹配串相匹配的元组。匹配串可以是一个完整的字符串,也可以含有通配符%和_。其中:%(百分号)代表任意长度(长度可以为0)的字符串。例如,a%b表示以a开头,以b结尾的任意长度的字符串。如acb、adertb、artghklb等。_(下横线)表示任意单个字符。例如,a_b表示以a开头,以b结尾的长度为3的任意字符串。如ad
59、b、agb等都满足该匹配串。机械工业出版社843.3 SQL数据查询例3.23 查询数学系学生的信息。SELECT *FROM STUDENTWHERE SDEPT LIKE 数学系;等价于:SELECT *FROM STUDENTWHERE SDEPT= 数学系;如果LIKE后面的匹配串中不含通配符,则可以用=(等于)运算符代替LIKE谓词,用!=或(不等于)运算符取代NOT LIKE谓词。查询结果如表3-23所示。机械工业出版社853.3 SQL数据查询SNOSNAMESSEXSAGESDEPTS8801吴浩男18数学系S8802程小磊男20数学系S8803张建超男19数学系表3-23查询
60、数学系学生结果机械工业出版社863.3 SQL数据查询例3.24 查询所有姓李的学生信息。SELECT *FROM STUDENTWHERE SNAME LIKE 李%;查询结果如表3-24所示。SNOSNAMESSEXSAGESDEPTS8202李俊女20计算机系S9101李云鹏男18自动化系表3-24 查询所有姓李的学生结果机械工业出版社873.3 SQL数据查询例3.25 查询姓名中第二个字为“小”的学生信息。SELECT *FROM STUDENTWHERE SNAME LIKE _ _小%;注意:因为一个汉字要占两个字符的位置,所以匹配串“小”前面需要两个“_”。查询结果如表3-25
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 牛磺酸对脂肪变性肝细胞内质网-线粒应激的调控机制研究
- 基于功效系数法的P公司多元化经营财务绩效研究
- 益肝超微茶粉乳基泡腾片的研制及其护肝作用研究
- 2025至2030年中国医院专用大型血压计市场现状分析及前景预测报告
- 污水管道分部分项施工方案和质量保证措施
- 2025至2030年中国全自动水泥抗折抗压试验机市场现状分析及前景预测报告
- 文化创意项目管理组织机构图和职责
- 保险行业保险理赔程序合同
- 农民水产合作养殖项目合同书
- 一次成功的实验读后感一600字8篇范文
- 江苏医疗机构设置审批申请表
- 人教版二年级下册《有余数的除法》教学设计公开课
- 某某医院猴痘培训试题含答案
- ISO9001-ISO14001-ISO45001三体系内部审核检查表
- 班组安全标准化建设发布材料PPT通用课件
- 华为信息安全手册
- GB_T 20223-2018棉短绒_(高清-最新版)
- 部编版四年级语文下册《亲爱的汉修先生》整本书导读课件(共38张PPT)
- 成都市田家炳中学初一新生分班(摸底)数学模拟考试(含答案)
- 高填方路基施工方案(新版)
- 三一重工服务营销体系建构
评论
0/150
提交评论