《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第08章 Oracle支持的SQL

上传人:E**** 文档编号:89399589 上传时间:2019-05-24 格式:PPT 页数:59 大小:932KB
返回 下载 相关 举报
《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第08章  Oracle支持的SQL_第1页
第1页 / 共59页
《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第08章  Oracle支持的SQL_第2页
第2页 / 共59页
《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第08章  Oracle支持的SQL_第3页
第3页 / 共59页
《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第08章  Oracle支持的SQL_第4页
第4页 / 共59页
《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第08章  Oracle支持的SQL_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第08章 Oracle支持的SQL》由会员分享,可在线阅读,更多相关《《Oracle数据库实用教程(第二版)》-唐远新-电子教案(含源代码) 第08章 Oracle支持的SQL(59页珍藏版)》请在金锄头文库上搜索。

1、Oracle数据库实用教程 (第二版),唐远新 曲卫平 李晓峰等编著 中国水利水电出版社 2009.6,第8章 Oracle支持的SQL,Oracle的DML包括4条语句 INSERT UPDATE DELETE MERGE,8.1 Oracle的数据操纵语言,使用VALUES子句的INSERT语句 INSERT INTO table (column_1, column_2,. ) VALUES ( sql_expression_1 ,sql_expression_2,. ) ;,1.INSERT语句,此语法一次只能向表中插入一条记录,INSERT INTO 子句的table后可省略列名表 建

2、议使用列名表明确要往哪些列插入数据,Values子句中,字符型、日期型数据要用单引号括起来 可以在列值处使用关键字DAFAULT表示该列取缺省值,插入空值 (1) 在INSERT INTO 子句的table后不指定该列名,默认情况下该列取空值 (2) 在VALUES子句中使用NULL作为列的值,1.INSERT语句,例8.1 向dept表插入一个新部门记录,但该部门的所在地尚未确定(值为空)。 EXA_08_01.SQL,使用子查询的INSERT语句 INSERT INTO (,.) SELECT ,. FROM ;,1.INSERT语句,例8.2 从ORCL数据库通过数据库链接向数据库CEM

3、ERP的表emp插入记录。 EXA_08_02.SQL,SELECT子句中列的数量与列类型应与INTO 子句中指定的列数量与列类型一致,常见的数据插入错误 (1) 没有对强制为非空(NOT NULL) 的列赋值 (2) 对唯一性索引列(包括主键) 插入重复值 (3) 违反参照完整性(插入了被参照表中主键列不存在的外键值) (4) 违反检查(CHECK) 约束 (5) 数据类型不匹配,且系统不能完成自动类型转换 (6) 值太大,超出列定义的表示范围,1.INSERT语句,UPDATE语句语法如图,2.UPDATE语句,最简单的UPDATE语句语法 UPDATE table SET column

4、= value , column = value , . WHERE condition ;,指定被更新表的语法,2.UPDATE语句,设置更新值的语法,2.UPDATE语句,使用子查询从其他表获取数据作为列的新值 UPDATE SET (,.) = ( SELECT ,. FROM WHERE ) WHERE ( SELECT FROM WHERE );,2.UPDATE语句,SET子句中的SELECT子句只能返回一行数据,例8.3 将EMP表30部门的雇员佣金设为800。 EXA_08_03.SQL,例8.4 修改part_emp表sal_3000分区中的记录SAL列值为2500 EXA_

5、08_04.SQL,例8.5 修改part_emp表,将7654号雇员调整为与7934号雇员一个部门。 EXA_08_05.SQL,DELETE语句语法 DELETE FROM schema . table PARTITION ( partition ) | SUBPARTITION ( subpartition ) | dblink | view | materialized view dblink WHERE condition ;,3.DELETE语句,例8.6 使用DELETE语句删除数据的不同方法。 EXA_08_06.SQL,例8.7 删除分区中信息。EXA_08_07.SQL,用

6、于将一个表的数据合并到另一个表中,4.MERGE语句,根据指定的合并比对条件将源表中记录在目标表中进行查找 如找到对应记录,则执行UPDATE操作 如找不到满足条件的对应记录,则执行INSERT操作,MERGE是一条“确定性的语句”,4.MERGE语句,例8.8 将emp表中30部门的雇员记录合并到bonus表中。EXA_08_08.SQL,MERGE语句的语法,MERGE INTO table t_alias USING table | view | subquery t_alias ON ( condition ) WHEN MATCHED THEN UPDATE SET column =

7、 expr | DEFAULT . WHEN NOT MATCHED THEN INSERT ( column , column. ) VALUES ( expr , expr. ) ;,5.事务控制命令,COMMIT:提交 SAVEPOINT savepoint:设置保存点savepoint ROLLBACK WORK TO savepoint:回退,DML操作结果的提交 执行COMMIT命令 以EXIT命令退出SQL*Plus 执行DML之后发布了DDL命令,未提交的修改对操作者是生效的,提交后其他用户才可看到修改后的结果,SELECT语句完成如下运算:,8.2 Oracle支持的查询,投

8、影(Projection) 选取指定的列(字段) 在SELECT子句中列出所需的列(字段)名,选择(Selection) 选取指定的行(记录) 无条件选取全部行或选WHERE子句条件所限定的行,连接(Joining) 将多个表的数据连接在一起 在FROM子句中列出多个表名然后在WHERE子句中指定连接条件 由Join指定参与连接的多个表,然后在ON子句中指定连接条件,1.SELECT语句,SELECT DISTINCT | ALL * | column | expression AS alias, . FROM schema . table PARTITION ( partition ) |

9、SUBPARTITION ( subpartition ) sample_clause | sample_clause | dblink | view | materialized view dblink | (subquery subquery_restriction_clause ) WHERE condition CONNECT BY condition START WITH condition GROUP BY expn HAVING expn UNION ALL | INTERSECT | MINUS SELECT . ORDER BY expn ASC | DESC FOR UPD

10、ATE OF schema .table | view column ;,1.SELECT语句,一般将各子句单独成行书写,并采用缩进格式,别名(alias) 用于重命名列标题以改善查询结果的可读性 别名中使用到空格或需要区分大小写时,别名应用双引号括起来 两种定义别名方法 别名直接写在列名或列表达式之后 用AS 定义,将别名放在AS关键字之后 别名不可用于WHERE子句,选择表中所有列 *(星号)或在SELECT子句中列出所有的字段 消除重复出现的行:使用DISTINCT限定词,1.SELECT语句,字符串和日期常量需用单引号括起来 字符串常量区分大小写,在SELECT子句中可以使用运算符和S

11、QL函数构造列表达式,在取出数据同时进行有关的运算,从何处取数据 表 表分区 视图 远程数据库,1.SELECT语句,数据分组 GROUP BY子句对记录分组并执行相应数据聚集运算 在SELECT 子句的列名表中的所有非分组函数计算列必须出现在GROUP BY子句中 使用HAVING子句对数据分组后的返回结果进行限制 HAVING子句应放在GROUP BY子句之后,升序用ASC,降序用DESC 默认排序方式为升序,记录以如下方式排列: (1) 数值型从小到大 (2) 日期型按年份从小到大 (3) 字符型按字母表顺序 (4) 空值排在最后,1.SELECT语句,CONNECT BY:层次树型查询

12、 UNION:集合运算 FOR UPDATE:锁定选取记录,例8.9 DISTINCT限定词的应用。EXA_08_09.SQL,例8.10 别名与列标题的应用。EXA_08_10.SQL,例8.11 SELECT语句的综合例子。EXA_08_11.SQL,2.虚表与伪列,伪列 CURRVAL和NEXTVAL:序列当前值和下一个值 LEVEL:层次树型查询记录所对应的级 ROWID:记录的物理标识 ROWNUM:查询结果集中记录的行序号 Oracle针对闪回版本查询提供了一组伪列,例: SELECT sysdate FROM DUAL; SELECT user FROM DUAL;,虚表 DUA

13、L,3.表的连接,在使用连接运算时,应注意如下几点: (1) 建议在列名之前使用表名前缀以改善运行性能 (2) 对表使用简短的别名可改善连接性能 (3) 使用准确的连接条件和WHERE子句条件可显著改善连接性能,不使用无条件的连接(即笛卡儿积) (4) 应对同名的列冠以表名前缀以明确告知Oracle数据库该列选取自哪个表,例8.12 查看工资高于2500的雇员及所在部门。EXA_08_12.SQL,等值连接指参与连接的多个表将连接条件列值相同的记录连接在一起作为查询结果记录返回 SELECT . FROM table1, table2 WHERE table1.column1 oper tab

14、le2.column2 ; 等值连接,运算符oper为 = 非等值连接,oper可为!=、=等,3.表的连接,自连接将一个表看成两个副本,取不同的别名 用别名构造连接条件 SELECT . FROM table alias1, table alias2 WHERE alias1.column1=alias2.column2;,例8.13 查询出部门30中每个雇员的上司名字。EXA_08_13.SQL,3.表的连接,外连接 增加空行将不满足连接条件的记录也返回。 SELECT . FROM table alias1, table alias2 WHERE alias1.column1(+) =

15、alias2.column2 | alias1.column1 = alias2.column2(+) ;,例8.14 查询出每个部门中雇员的名字。 EXA_08_14.SQL,在(+)端引入一空行与另一端匹配,保证无(+)端表的记录可全部显示出来 (+)在左端时称为左外连接 (+)在右端时称为右外连接,3.表的连接,ANSI/ISO SQL:1999标准中连接语法 SELECT table1.column , table2.column FROM table1 CROSS JOIN table2 | NATURE JOIN table2 | JOIN table2 USING ( colum

16、n ) | JOIN table2 ON ( table1.column_name = table2.column_name ) | LEFT | RIGHT | FULL OUTER JOIN table2 ON (table1.col_name = table2.col_name ) ;,建议使用Oracle公司的连接语法,4.子查询,子查询是出现在SQL语句中的SELECT语法成分,子查询分类 简单子查询:用独立的条件返回值 相关子查询:子查询WHERE条件中用到了嵌套它的SQL语句的当前记录值 单行子查询:仅返回一条记录 多行子查询:返回多条记录,当子查询出现在WHERE子句中时 WHERE expr operator (SEL

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号