5.3.5 嵌套查询的改进方法
1.导出表
SQL2允许在FROM子句中使用子查询。如果在FROM子句中使用了子查询,那么要给子查询的结果起个表名和相应的列名。
2.WITH子句和临时视图
SQL3允许用户用WITH子句定义一个临时视图(即子查询),至于SELECT语句的开始出。而临时视图本身是用SELECT语句定义的。
5.3.6 基本表的连接操作
下面是与连接操作有关的解释和说明:
(1)连接类型分成内连接和外连接两种。内连接(INNER JOIN)是等值连接,外连接又分成左(LEFT OUTER JOIN)、右(RIGHT OUTER JOIN)、完全连接(FULL OUTER JOIN)三种。连接类型中INNER、OUTER字样可不写。
(2)连接条件分成三种:
① NATURAl:表示两个关系执行自然连接操作,即在两个关系的公共属性上作等值连接,运算结果中公共属性只出现一次。
② ON等值连接条件:具体列出两个关系在哪些相应属性上做等值连接。
③ USING(A1,A2,...,An):类似于NATURAL形式,这里A1,A2,...,An是两个关系上的公共属性,但可以不是全部公共属性。在连接的结果中,公共属性A1,A2,...,An只出现一次。
(3)若连接操作是“INNER JOIN”,未提及连接条件,那么这个操作等价与笛卡尔积,SQL2把此操作定义为“CROSS JOIN”。
(4)若连接操作是“FULL OUTER JOIN ON false”,这里的连接条件总是false,那么这个操作类十余“外部并”操作,但也有区别。这里操作结果要把两个关系的属性全部包括进去。SQL2把此操作定义为“UNION JOIN”。
5.4 数据更新
5.4.1 数据插入
往SQL基本表中插入数据的语句是INSERT语句,在SQL3中,有以下四种方式:
(1)单元组的插入
INSERT INTO<基本表名>[(<列名序列>)]
VALUES(<元组值>)
(2)多元组插入
INSERT INTO<基本表名>[(<列名序列>)]
VALUES(<元组值>),(<元组值>),(<元组值>)……,(<元组值>)
(3)查询结果的插入
INSERT INTO<基本表名>[(<列名序列>)]
<SELECT 查询语句>
这个语句可把一个SELECT语句的查询结果插到某个基本表中。
(4)表的插入
INSERT INTO<基本表名>[(<列名序列>)]
TABLE<基本表名2>
上述各种插入语句中,如果插入的值在属性个数、顺序与基本表的结构完全一致,那么基本表后的(<列名序列>)可省略,否则必须详细列出。
5.4.2 数据删除
SQL的删除操作是指从基本表中删除元组,其句法如下:
DELETE FROM <基本表名>
[WHERE <条件表达式>]
DELETE语句只能从一个基本表中删除元组。如果想从多个基本表中删除元组,就必须为每一个基本表写一条DELETE语句。WHERE子句中的添加可以和SELECT语句的WHERE子句中条件一样复杂,可以嵌套,也可以是来自几个基本表的复合条件。
5.4.3 数据修改
当需要修改基本表中元组的某些列值时,可以用UPDATE语句实现,其句法如下:
UPDATE <基本表名>
SET<列名>=<值表达式>[,<列名>=<值表达式>…]|ROW=(<元组>)
[WHERE<条件表达式>]
其语义是:修改基本表中满足条件表达式的那些元组的列值,需修改的列值在SET子句中指出。SET子句中第一种格式是对符合条件元组中的列值进行修改,第二种格式是可对符合条件的元组中每个列值进行修改。
5.5 视图
5.5.1 视图的创建和撤销
在SQL中,外模式一级数据结构的基本单位是视图(view),视图是从若干个基本表和(或)其他视图构造出来的表。
1.视图的创建
创建视图可用“CREATE VIEW”语句实现。其句法如下:
CREATE VIEW<视图名>(<列表序列>)
AS <SELECT查询语句>
2.视图的撤销
在视图不需要时,可以用“DROP VIEW”语句把其从系统中撤销。其句法如下:
DROP VIEW <视图名>
5.5.2 对视图的操作
定义5.1 如果视图是从单个基本表只使用选择、投影操作导出的,并且包含了基本表的主键,那么这样的视图称为“行列子集视图”,并且可以被执行更新操作。允许用户更新的视图在定义时必须加上“WITH CHECK OPTION”短语。
5.6 嵌入式SQL
在主语言中使用的SQL结构称为嵌入式SQL。
5.6.1 嵌入式SQL的实现方式
SQL语言有两种使用方式:一种是在终端交互方式下使用,称为交互式SQL;另一种是嵌入在主语言的程序中使用,称为嵌入式SQL。
存储设备上的数据库是用SQL存取的,数据库和主语言程序间信息的传递是通过共享变量实现的。这些共享变量要用SQL的DECLARE语句说明,随后SQL语句就可引用这些变量。共享变量也就成了SQL和主语言的接口。
SQL2规定,SQL_STATE是一个特殊的共享变量,起着解释SQL语句执行状况的作用,它是一个由5个字符组成的字符数组。当一样SQL语句执行成功时,系统自动给SQL_STATE赋上全零值(即“00000”),表示未发生错误;否则其值为非全零,表示执行语句时发生的各种错误情况。
5.6.2 嵌入式SQL的使用规定
在主语言的程序中使用SQL语句有以下规定:
1.在程序中要区分SQL语句和主语言语句
所有SQL语句钱必须加上前缀标识“EXEC SQL”,并以“END_EXEC”作为语句结束标志。嵌入的SQL语句的格式如下:
EXEC SQL <SQL语句> END_EXEC
结束标识在不同的主语言中是不同的。
2.允许嵌入的SQL语句引用主语言的程序变量(称为共享变量)
允许嵌入的SQL语句引用主语言的程序变量。但有两条规定:
(1)引用时,这些变量前必须加冒号“:”作为前缀标识,以示与数据库中变量有区别。
(2)这些变量要用SQL的DECLARE语句说明。
3.SQL的集合处理方式与主语言单记录处理方式之间的协调
与游标(cursor)有关的SQL语句有下列四个:
(1)游标定义语句(DECLARE)。游标是与某一查询结果相联系的符号名,游标用SQL的DECLARE语句定义,句法如下:
EXEC SQL DECLARE <游标名> CURSOR FOR
<SELECT语句>
END_EXEC
游标定义语句是一个说明语句,定义中的SELECT语句并不立即执行。
(2)游标打开语句(OPEN)。该语句执行游标定义中的SELECT语句,同事游标处于活动状态。游标是一个指针,此时指向查询结果的第一行之前。OPEN的句法如下:
EXEC SQL OPEN <游标名> END_EXEC
(3)游标推进语句(FETCH)。此时游标推进一行,并把游标指向的行(称为当前行)的值取出,送到共享变量。其句法如下:
EXEC SQL FETCH FROM<游标名> INTO<变量表> END_EXEC
变量表是由逗号分开的共享变量注册。FETCH语句常置于主语言程序的循环结果中,并借助主语言的处理语句逐一处理查询结果中的一个个元组。
(4)游标关闭语句(CLOSE)。关闭游标,使它不再和查询结果相联系。关闭了的游标,可以再次打开,与新的查询结果相联系。该语句的句法如下:
EXEC SQL CLOSE<游标名> END_EXEC
在游标处于活动状态时,可以修改和删除游标指向的元组。
5.6.3 嵌入式SQL的使用技术
SQL DDL语句,只要加上前缀标识“EXEC SQL”和结束标志“END_EXEC”,就能嵌入在主语言程序中使用。SQL DML语句在嵌入使用时,要注意是否使用了游标机制。
1.不涉及游标的SQL DML语句
SELECT语句的使用方式
由于INSERT、DELETE、和UPDATE语句不反悔数据结果,只是对数据库进行操作,隐藏只要加上前缀标识“EXEC SQL”和结束标志“END_EXEC”,就能嵌入在主语言程序中使用。对于SELECT语句,如果已知查询结果肯定是单元组时,在加上前缀合结束标志后,也可直接嵌入在主程序中使用,此时应在SELECT语句中再增加一个INTO子句,指出找到的值应送到相应的共享变量中去。
2.涉及游标的SQL DML语句
(1)SELECT语句的使用方式
(2)对游标指向元组的修改或删除操作
在游标处于活动状况时,可以修改或删除游标指向的元组。
3.卷游标的定义和推进
SQL2提供了卷游标(scroll cursor)技术解决这个问题,在推进游标时可以进退自如。
(1)卷游标的定义句法如下:
EXEC SQL DECLARE<游标名> SCROLL CURSOR FOR
<SELECT语句>
END_EXEC
(2)卷游标的推进句法如下:
EXEC SQL FETCH
[NEXT|PRIOR|FIRST|LAST|RELATIVE<整数>|ABSOLUTE<整数>]
FROM <游标名> INTO <变量表> END_EXEC
这里,NEXT 表示把游标从当前位置推进一行;
PRIOR 表示把游标从当前位置返回一行;
FIRST 表示把游标移向查询结果的第一行;
LAST 表示把游标移向查询结果的最后一行;
后两种句法举例说明:
RELATIVE 3 表示把游标从当前位置推进3行;
RELATIVE -5 表示把游标从当前位置返回5行;
ABSOLUTE 4 表示把游标移向查询结果的第4行;
ABSOLUTE -6 表示把游标移向查询结果的倒数第6行。
5.6.4 动态SQL语句
动态SQL技术主要有两个SQL语句:
1.动态SQL预备语句
EXEC SQL PREPARE<动态SQL语句名> FROM <共享变量或字符串>
这里的共享变量或字符串的值应是一个完整的SQL语句。这个语句可以在程序运行时根据用户输入组合起来。此时,这个语句并不执行。
2.动态SQL执行语句
ESEC SQL EXECUTE<动态语句名>
动态SQL语句使用时,还可以有两点改进:
(1)当预备语句中组合而成的SQL语句只需执行一次时,那么预备语句和执行语句可以合并成一个语句:
EXEC SQL EXECUTE IMMEDIATE<共享变量或字符串>
(2)当预备语句中组合而成的SQL语句中条件值尚缺时,可以在执行语句中用USING短语补上:
EXEC SQL EXECUTE <动态SQL语句名> USING <共享变量>
5.7 存储过程与SQL/PSM
存储过程(Stored Procedure)和SQL/PSM(Persistent Stored Module,持久化存储模块)
5.7.1 数据库存储过程与函数
定义5.2 存储过程是使用SQL语句和控制流程控制语句编写的模块,存储过程经编译和优化后存储在数据库服务器端的数据库中,使用时调用即可。
使用存储过程具有以下优点:
(1)提高运行速度。
(2)增强了SQL的功能和灵活性。
(3)可以降低网络的通信量。
(4)减轻了程序编写的工作量。
(5)间接实现了安全控制功能。
由于存储过程只是用来完成数据查询和数据处理操作,因此在存储过程中不可以使用创建数据库对象的语句。
声明存储过程的一般形式如下:
CREATE PROCEDURE <过程名> (<参数>)
<局部声明>
<过程体>;
这里的声明和参数都是可选的,只在需要时才指定。
函数的声明形式:
CREATE FUNCTION <函数名>(<参数>)
RETURN <返回类型>
<局部声明>
<函数体>;
如果过程(或函数)用通用程序设计语言编写,则要指定语言和存储程序代码的文件名。
CREATE PROCEDURE <函数名> (<参数>)
LANGUAGE <程序设计语言名>
EXTERNAL NAME<文件路径名>;
通常情况下,每个参数都应当有一个参数类型,该参数类型应是一种SQL数据类型。每个参数还应有一个参数模式,可以为IN、OUT或INOUT。这些模式是指只能输入值、只能输出(返回)值、即可输入又可输出值。
可使用SQL标准中的CALL语句来调用存储过程,可以从交互式界面调用,也可以由嵌入式SQL调用。该调用语句的形式如下:
CALL<过程名>(<参数列表>);
5.7.2 SQL/PSM
SQL/PSM是SQL标准的一部分,它指定了如何编写持久存储模块,提供流程控制语句来表示过程处理的应用逻辑。
1.顺序执行
2.条件分支语句
条件分支是在存储过程中进行流程控制的基本依据之一。它根据条件表达式的执行结果来确定后续执行的语句分支。其形式如下:
IF <条件> THEN <语句列表>
ELSEIF <条件> THEN <语句列表>
……
ELSEIF <条件> THEN <语句列表>
ELSE <语句列表>
END IF;
3.循环语句
SQL/PSM中有多种循环构造,下面介绍三种形式
(1)标准的WHILE循环结构:
WHILE <条件> DO
<语句列表>
END WHILE;
(2)标准的REPEAT循环结构:
REPEAT
<语句列表>
UNTIL <条件>
END REPEAT;
(3)基于游标的循环结构:
FOR <循环名> AS <游标名> CURSOR FOR <查询> DO
<语句列表>
END FOR;
此循环中的语句列表会对查询结果中的每个元组执行一次。循环也可以起一个名字。
另外,如果条件得到了满足,还可以用一个“LEAVE<循环名>”语句来中断循环。
<!--EndFragment-->
分享到:
相关推荐
SQL数据库第五章的作业可能涵盖了多个关键概念,包括查询、数据操作、表间关系以及数据库设计原则。以下是对这些核心知识点的详细阐述: 1. **SQL基本查询**:SQL查询是获取数据库中信息的基本方式。这涉及到SELECT...
Oracle第13章SQL语言基础 本资源为Oracle第13章SQL语言基础的教学资料,涵盖了SQL语言的基础知识,包括SQL语言概述、数据查询、数据操纵、事务控制、SQL函数等内容。 SQL语言概述 SQL(Structured Query Language...
Oracle 数据库应用:第5章 SQL 语言.ppt
在本资源"C#语言和SQL Server数据库基础-第5章上机练习.zip"中,我们主要探讨了C#编程语言与SQL Server数据库的基础知识及其在实际应用中的结合。这一章节的上机练习将帮助初学者深入理解这两个核心概念,通过实践来...
Oracle 11g SQL语言基础(DML) Oracle 11g 第5章 SQL语言基础(DML).ppt
在本资源包"C#语言和SQL Server数据库基础第5章.zip"中,我们可以深入学习C#编程语言与SQL Server数据库的基础知识。C#是微软公司推出的一种面向对象的、安全的、类型强化的编程语言,广泛应用于Windows平台的开发,...
《C#语言与SQL Server数据库基础-第8章上机练习》 在深入探讨C#语言与SQL Server数据库的基础知识时,我们首先需要理解这两者的核心概念。C#是一种面向对象的编程语言,由微软公司开发,广泛应用于Windows平台上的...
【SQL语言概述】 SQL,全称为Structured Query Language,即结构化查询语言,是1972年由IBM公司为实验型关系数据库管理系统SYSTEM R设计的一种查询语言。起初名为SQUARE,后改为SEQUEL,最终简化为SQL。SQL是关系...
5. **SQL Server基础知识**:了解数据库的概念、表的创建与管理,掌握SQL语言的基本操作,如SELECT查询、INSERT插入、UPDATE更新和DELETE删除记录。 6. **事务处理**:理解SQL Server中的事务概念,如何通过BEGIN ...
《第六章 数据库及SQL查询语言》 数据库是存储和管理信息的核心工具,SQL(Structured Query Language)则是访问和操作这些数据库的标准语言。本章将深入探讨数据库的基础知识以及SQL的使用。 6.1 数据库基础知识 ...
2. **SQL语言**:SELECT语句用于查询数据,INSERT用于插入数据,UPDATE用于更新数据,DELETE用于删除数据。还有JOIN操作用于连接不同表的数据。 3. **T-SQL扩展**:存储过程、触发器、函数(内置函数与自定义函数)...
它支持标准的SQL语言,包括SELECT、INSERT、UPDATE、DELETE等基本操作,以及更复杂的JOIN、子查询、视图、存储过程等功能。在SQL Server中,我们可以通过创建数据库、表、索引来组织和优化数据。安全性方面,SQL ...
SQL 语言基础知识点 SQL 语言是关系数据库管理系统的核心语言,用于完成数据定义、数据操纵、数据控制等核心功能。SQL 语言的核心功能包括 SELECT、CREATE、DROP、ALTER、INSERT、UPDATE、DELETE、GRANT、REVOKE 等...
第5章 表表达式 5.1 派生表 5.2 公用表表达式(CTE) 5.3 视图 5.4 内联表值函数 5.5 APPLY运算符 5.6 总结 5.7 练习 5.8 解决方案 第6章 集合运算 6.1 UNION(并集)集合运算 6.2 INTERSECT...
"SQL语言练习题和答案" 第三章 SQL 语言练习题和答案是关系数据库管理系统中的一种重要语言,用于定义、操作和控制关系数据库中的数据。下面我们将对该语言的基本概念和操作进行详细的解释。 SQL 语言的基本概念 ...
本书第五章介绍了如何使用SQL管理数据库,包括创建、修改和删除表,以及如何维护数据库的完整性和安全性。还讲解了索引的概念、创建和使用方法。 《图解SQL数据库语言轻松入门》是一本非常实用的学习指南,旨在帮助...
5. 表达式:Transact-SQL语言中的表达式是指由变量、常量和运算符组成的式子,例如算术表达式、字符串表达式和逻辑表达式等。 6. 控制流语句:Transact-SQL语言中的控制流语句是指控制程序执行顺序的语句,例如IF...