第9章Oracle数据查询.ppt

上传人:sccc 文档编号:5314885 上传时间:2023-06-25 格式:PPT 页数:52 大小:400.53KB
返回 下载 相关 举报
第9章Oracle数据查询.ppt_第1页
第1页 / 共52页
第9章Oracle数据查询.ppt_第2页
第2页 / 共52页
第9章Oracle数据查询.ppt_第3页
第3页 / 共52页
第9章Oracle数据查询.ppt_第4页
第4页 / 共52页
第9章Oracle数据查询.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《第9章Oracle数据查询.ppt》由会员分享,可在线阅读,更多相关《第9章Oracle数据查询.ppt(52页珍藏版)》请在三一办公上搜索。

1、第9章 Oracle 数据查询,9.1 PL/SQL简介9.2 常用内置函数9.3 基本查询9.4 连接查询9.5 嵌套查询9.6 复合与分组查询,9.1.1 PL/SQL的基本结构 9.1.2 常量、变量、表达式 9.1.3 流程控制 9.1.4 异常处理,9.1 PL/SQL简介,9.1.1 PL/SQL的基本结构,1.PL/SQL块PL/SQL结构化的语言,其程序结构的基本单位是“块”(Block)。PL/SQL块有三个部分:声明部分、执行部分、异常处理部分。DECLAREdeclaration statementsBEGINexecutable statementsEXCEPTIONe

2、xception statementsEND,PL/SQL块中的每一条语句都必须以分号结束,SQL语句可以多行,但分号表示语句的结束。一行中可以有多条SQL语句,他们之间以分号分隔。每一个PL/SQL块由BEGIN或DECLARE开始,以END结束。,9.1.1 PL/SQL的基本结构,9.1.1 PL/SQL的基本结构,2.块的命名和匿名PL/SQL程序块可以是一个命名的程序块也可以是一个匿名程序块,匿名程序块可以用在服务器端也可以用在客户端。执行部分包含了所有的语句和表达式,执行部分以关键字BEGIN开始,以关键字EXCEPTION结束,如果EXCEPTION不存在,那么将以关键字END结

3、束。分号分隔每一条语句,使用赋值操作符:=或SELECT INTO给每个变量赋值,执行部分的错误将在异常处理部分解决,在执行部分中可以使用另一个PL/SQL程序块,这种程序块被称为嵌套块。,9.1.1 PL/SQL的基本结构,3.块的执行SQL*Plus中匿名的PL/SQL块的执行是在PL/SQL块后输入“/”来执行。命名的程序与匿名程序的执行不同,执行命名的程序块必须使用execute关键字。,9.1.2 常量、变量、表达式,1.变量 声明变量Variable_name datatype(WIDTH):=DEFAULT expression 给变量赋值通常给变量赋值有两种方式:一是直接给变量

4、赋值;二是通过SQL SELECT INTO给变量赋值。,9.1.2 常量、变量、表达式,2.常量常量与变量相似,但常量的值在程序内部不能改变,常量的值在定义时赋予,声明方式与变量相似,但必须包括关键字CONSTANT。,9.1.2 常量、变量、表达式,3.有效字符集 所有的大写和小写英文字母;数字:0-9 符号:()+-*/=!;:.%,#&_?,9.1.2 常量、变量、表达式,PL/SQL标识符的最大长度是30个字符,并且不区分字母的大小写。但是适当地使用大小写,可以提高程序的可读性。4.运算符PL/SQL支持的运算符包括算术运算符、和关系运算符和逻辑操作符。,9.1.2 常量、变量、表达

5、式,9.1.3 流程控制,1.条件结构IF条件判断逻辑结构IF condition THEN statement END IFIF condition THEN statements_1 ELSE statements_2 END IF,9.1.3 流程控制,IF condition1 THEN statements_1 ELSE IF condition2 THEN statements_2 ELSE statements_3END IF,9.1.3 流程控制,1.条件结构CASE 表达式CASE 变量 WHEN 表达式1 THEN 值1 WHEN 表达式2 THEN 值2 WHEN 表达式

6、3 THEN 值3 WHEN 表达式4 THEN 值4 ELSE 值5END;,9.1.3 流程控制,2.循环控制LOOP EXIT END循环控制语句LOOP循环语句是其中最基本的一种。LOOP语句的格式如下:LOOP statementsEND LOOP;这种循环语句是没有终止的,如果不人为控制的话,其中的statements将会无限地执行。一般可以通过加入EXIT语句来终结该循环。,9.1.3 流程控制,2.循环控制WHILE LOOP循环控制语句WHILE LOOP有一个条件与循环相联系,如果条件为TRUE,则执行循环体内的语句,如果结果为FALSE,则结束循环。FOR LOOP循环控

7、制语句FOR counter IN REVERSE start_range end_range LOOP statements;END LOOP;,9.1.3 流程控制,counter是一个隐式声明的变量,初始值是start_range,第二个值是start_range+1,直到end_range。如果使用了REVERSE关键字,那么范围将是一个降序。,9.1.3 流程控制,3.GOTO语句GOTO LABEL;执行GOTO语句时,控制会立即转到由标签标记的语句。PL/SQL中对GOTO语句有一些限制,即在块、循环和IF条件结构中使用GOTO语句时不能从外层跳转到内层。,9.1.3 流程控制,

8、4.嵌套程序块的内部可以有另一个程序块这种情况称为嵌套。嵌套要注意的是变量,定义在最外部程序块中的变量可以在所有子块中使用,如果在子块中定义了与外部程序块变量相同的变量名,在执行子块时将使用子块中定义的变量。子块中定义的变量不能被父块引用。同样GOTO语句不能由父块跳转道子块中,反之则是合法的。,9.1.4 异常处理,1.PL/SQL的异常异常处理块中包含了与异常相关的错误发生以及当错误发生时要进行执行和处理的代码。异常部分的语法一般如下:BEGIN EXCEPTION WHEN excep_name1 THEN WHEN excep_name2 THEN WHEN OTHERS THEN E

9、ND;,9.1.4 异常处理,2.预定义异常预定义异常是由运行系统产生的。例如,出现被0除时,PL/SQL就会产生一个预定义的ZERO_DIVIDE异常。3.自定义异常异常不一定必须是Oracle返回的系统错误,用户可以在自己的应用程序中创建可触发及可处理的自定义异常,调用异常处理需要使用Raise语句。异常情态的传播指的是当在程序块的声明、执行、异常部分分别出现异常情态时,或在本块中没有相应的异常处理器时会将这个异常情态传播到哪里,会去激发那个块中的处理器。,9.2.1 数字函数 9.2.2 字符函数 9.2.3 日期函数 9.2.4 数据类型转换函数 9.2.5 集合函数,9.2 常用内置

10、函数,9.2.1 数字函数,9.2.2 字符函数,9.2.3 日期函数,9.2.4 数据类型转换函数,9.2.5 集合函数,9.3.1 查询语句 9.3.2 简单查询 9.3.3 结果排序,9.3 基本查询,9.3.1 查询语句,1.SELECT 语句的格式SELECT ALL|DISTINCT*|table_name|view_name|table_alias.*|column_name1,column_name2,.|expression AS column_alias|column_alias=expression,.nFROM table_source,9.3.1 查询语句,WHERE

11、 search_conditionGROUP BY group_by_expressionHAVING search_conditionORDER BY order_expressionASC|DESC,9.3.1 查询语句,2.SELECT中的子句描述:FROM 子句SELECT column_name1,column_name2,.nFROM table_name WHERE条件子句SELECT column_name1,column_name2,.nFROM table_name WHERE search_condition,9.3.1 查询语句,“*”,ALL,DISTINCT属性词用

12、法 SELECT*|DISTINCT FROM table_nameALL表示输出所有记录,包括重复记录;DISTINCT表示输出无重复结果的记录。,9.3.1 查询语句,ORDER BY子句 SELECT column_name1,column_name2,.nFROM table_nameWHERE search_conditionORDER BY column_name1ASC|DESC,column_nameASC|DESC,.,9.3.1 查询语句,GROUP BY 条件子句SELECT column_name1,column_name2,.nFROM table_nameWHERE

13、 search_conditionGROUP BY group_by_expression,9.3.1 查询语句,HAVING子句 SELECT column_name1,column_name2,.nFROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING search_condition,9.3.1 查询语句,注意事项 列名(column_name)之间可以进行算术运算,例如:(column_name1*column_name2)/3 查询语句可以嵌套,例如:SELECT FROM table_name1

14、 WHERE search_condition1 in(SELECT FROM table_name1,table_name2,WHERE search_condition2);,9.3.1 查询语句,查询结果集的排序操作,默认的排序是升序ASC,降序是DESC。每个表都有一个隐含的列ROWID,它标记着记录的唯一性。,9.3.2 简单查询,1查询指定列在很多情况下,用户只对表中的一部分属性列感兴趣,这时可以通过在SELECT子句的目标列选项(column_name1,column_name2,.)中指定要查询的属性。2查询全部列将表中的所有属性列都选出来,可以有两种方法。一种方法就是在SEL

15、ECT关键字后面列出所有列名。如果列的显示顺序与其在基表中的顺序相同,也可以简单地将指定为*。,9.3.2 简单查询,3.查询满足条件的列查询满足指定条件的记录可以通过WHERE子句来实现。WHERE子句对应于关系代数中的选择,使WHERE子句中的逻辑表达式返回True值的记录,是符合要求的记录,将被选择出来。WHERE子句中常用的关键字符有:,9.3.2 简单查询,比较包括、=、=、;范围包括Between A and B与Not Between A and B;集合包括IN、NOT IN;字符匹配包括LIKE、NOT LIKE;空值主要有IS NULL、IS NOT NULL;多重条件主要

16、有AND、OR、NOT;,9.3.2 简单查询,4.消除结果中的重复行ALL和DISTINCT也是SELECT语句中的可选关键字,它们用于在你的查询结果中选择ALL(缺省)或者DISTINCT。5.使用SELECT子句更名使用SELECT子句在取出某个列值的同时,还可以用汉字标题更改结果集中的列名,这样使得结果集更具可读性。,9.3.3 结果排序,ORDER BY是一个可选的子句,它允许你根据指定列的上升或者下降的顺序来显示查询的结果。使用ORDER BY子句来指定结果集中记录的排列次序时,可以使用表达式、列别名或列序号(即列在SELECT语句选择列表中的序号)等方式。需要注意的是,在由UNI

17、ON、INTERSECT、MINUS等运算符组成的复合查询中,只能使用列序号方式进行指定排序列,ORDER BY子句也只能出现在最后一个复合查询语句中。,9.4.1 简单连接 9.4.2 外连接,9.4 连接查询,9.4.1 简单连接,简单连接的查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。通常有三种:等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。不等连接:在连接条件中使用除等于运算符以外的其它比较运算符,来比较被连接的列的列值。这些运算符包括、=、!。自然连接:在连接条件中使用等于(=)运算符比

18、较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。,9.4.2 外连接,在简单连接查询中,返回到查询结果集合中的仅是符合连接条件(WHERE搜索条件或HAVING条件)的数据行。与简单连接不同,外连接不仅返回符合连接条件的数据行,而且还返回一个连接表中所包含的所有其它数据行。在外连接中,选择一张表作为主表,此表中任何与另一张表不匹配的行都被保留在结果中。外连接的运算符为(+),应将该运算符放在非主表一边。在返回结果中,所有不符合连接条件的数据行中的非主表中的列值均为NULL。,9.5.1 单值嵌套查询 9.5.2 多值嵌套查询,9.5 嵌套查询,9.5.1

19、 单值嵌套查询,一个SELECT-FROM-WHERE语句称为一个查询块。有时一个查询块无法完成查询任务,需要一个子SELECT的结果作为主查询语句的条件。将一个查询块嵌套在另一个查询块的条件子句中的查询被称为嵌套查询。嵌套查询一般由里向外进行处理。子查询可以有多层,所存取的表可以是父查询没有存取的表,子查询选出的记录不显示。嵌套查询可分为单值嵌套查询和多值嵌套查询。子查询的返回结果是一个值的嵌套查询称为单值嵌套查询。,9.5.2 多值嵌套查询,子查询的返回结果不是一个值,而是一个集合的嵌套查询称为多值嵌套查询。1.带有NOT IN的嵌套查询IN运算符可以测试表达式的值是否与子查询返回集中的某

20、一个相等,NOT IN恰好与其相反。2.带有NOT ANY/SOME的嵌套查询将表达式的值与子查询返回集中的任一值相比较,只要其中有一个值满足条件就返回TRUE。,9.5.2 多值嵌套查询,3.带有NOT ALL的嵌套查询将表达式的值与子查询返回集中的所有值相比较,只有所有值都满足条件时才返回TRUE。4.带有NOT EXISTS的嵌套查询EXISTS表示一个子查询至少返回一行时条件成立,NOT EXISTS表示一个子查询不返回任何行时条件成立。,9.6.1 复合查询 9.6.2 分组查询,9.6 复合与分组查询,9.6.1 复合查询,由集合运算符UNION、INTERSECT、MINUS连接

21、的两个或多个子查询构成的查询语句称为复合查询。复合查询将各子查询的查询结果组合为一个查询结果返回,它要求每个子查询所返回的列数和对应列的数据类型必须相同,数据长度可以不同。1.UNION能将多个查询的结果集进行组合。2.INTERSECT能将多个查询结果集的公共部分作为结果。3.MINUS能将两个查询结果集进行差操作,即从一个结果集中去掉属于另一个结果集的行。,9.6.2 分组查询,1.GROUP BY 子句GROUP BY 子句可以将查询结果表按某一列值或多个列值进行分组,它将列值相等的所有行集中在一组,并通过集合函数来计算一个或者多个列。2.HAVING 子句HAVING子句允许你为每一个组指定条件,换句话说,使用GROUP BY子句时,可以用HAVING子句为分组统计进一步设置统计条件,限制SELECT语句返回的行数。HAVING子句与GROUP BY子句的关系类似于WHERE子句与SELECT子句的关系。不过,要注意HAVING子句的使用,应该在GROUP BY子句之后。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号