Oracle 10g 管理及应用

36
Oracle 10g 管管管管管 管管管 管 SQL 管管管管管管管

description

Oracle 10g 管理及应用. 第四章 用 SQL 语言访问数据库. 第四章 用 SQL 语言访问数据库. 4.1 SQL 的概念 4.2 通过查询检索数据 4.3 插入、更新和删除表中行 4.4 提交和回退事务 4.5 事务处理设计 实训 2 用 SQL 语言访问数据库. 4.1 SQL 的概念. 4.1.1 SQL 的特点和命令类型 4.1.2 应用程序的可移植性和 ANSI/ISO SQL 标准 4.1.3 Oracle 10g 中的 SQL 环境. 4.1 SQL 的概念. - PowerPoint PPT Presentation

Transcript of Oracle 10g 管理及应用

Page 1: Oracle 10g 管理及应用

Oracle 10g 管理及应用第四章 用 SQL 语言访问数据库

Page 2: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

第四章 用 SQL 语言访问数据库

4.1 SQL的概念 4.2 通过查询检索数据 4.3 插入、更新和删除表中行 4.4 提交和回退事务 4.5 事务处理设计 实训2 用SQL语言访问数据库

Page 3: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.1 SQL 的概念

4.1.1 SQL的特点和命令类型 4.1.2 应用程序的可移植性和ANSI/

ISO SQL标准 4.1.3 Oracle 10g 中的SQL环境

Page 4: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.1 SQL 的概念

SQL 语言具有如下特点:• 综合统一 • 高度非过程化• 面向集合的操作方式 • 同一种语法结构提供两种使用方式 • 语言简洁、易学易用

4.1.1 SQL 的特点和命令类型

Page 5: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.1 SQL 的概念

SQL 语言可以分成如下几类:

• 数据定义语言:用于定义、修改、删除数据库模式对象,进行权限管理等。包括: Create 、 Drop 、 Alter 。• 数据操纵语言:用于查询、生成、修改、删除数据库中的数据。包括: Insert 、 Delete 、 Update 、 Select 。• 数据控制语言:用于改变与数据库用户相关联的权限。包括: Grant 、 Deny 、 Revoke 。

4.1.1 SQL 的特点和命令类型

Page 6: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.1 SQL 的概念

第一个 SQL 标准是 1986 年 10 月由 ANSI 颁布的。1987 年 ISO 将这个标准采纳为国际标准。后来, ISO 不断修改和完善 SQL 标准,并于 1989 年颁布了第二个 SQL 标准,即 SQL89 。随后, ISO在 1992 年颁布了 SQL92 ,即 SQL2 。 SQL 的标准化工作还在继续,正在酝酿的新标准是 SQL3 。

4.1.2 应用程序的可移植性和 ANSI /ISO  SQL 标准

Page 7: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.1 SQL 的概念

PL/SQL 是 Oracle 的过程语言,由 SQL 扩充而来,它将 SQL 的简单和灵活与结构化程序语言的过程功能相结合, PL/SQL 代码可以集中存储在数据库中。 通过使用 PL/SQL , Oracle 10g 在性能方面有了重大改进。

4.1.3 Oracle 10g 中的 SQL 环境

Page 8: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.2 通过查询检索数据

4.2.1 查询结构 4.2.2 建立基本查询 4.2.3 在查询的SELECT

子句中建立表达式 4.2.4 从表中检索特定行 4.2.5 分组和排序查询结果集的数据 4.2.6 连接相关表中的数据

Page 9: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.2 通过查询检索数据

SQL 语句使用 SELECT 语句实现对数据表的任何查询,包括选择符合条件的行或列及其他操作等。常用的 SELECT 语法格式如下:SELECT 字段 1 ,字段 2 ,……FROM 表 1[ ,表 2]……WHERE 查询条件GROUP BY 分组字段 1[ ,分组字段 2]…… HAVING 分组条件ORDER BY 列 1[ ,列 2]……

4.2.1 查询结构

Page 10: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.2 通过查询检索数据

查询 DEPT 表中的所有数据SQL> SELECT *FROM SCOTT.DEPT;执行结果为: DEPTNO DNAME LOC---------- -------------- ------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON其中,“ *” 表示查询表中的所有字段。

4.2.2 建立基本查询

Page 11: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.2 通过查询检索数据

可以在查询列中使用表达式来连接字符串(使用 || 连接字符串)、改变显示的格式(如使用函数 TO _CHAR 或用 AS 定义列别名)、计算显示的数据(如使用 + , - , * , / )等。 查询 DEPTNO 以及 DNAME ,要求将 DNAME 这个字段名换成“部门名称”。SQL> SELECT DEPTNO,DNAME AS 部门名称 FROM DEPT;执行结果为: DEPTNO 部门名称---------------- -------------- 10 ACCOUNTING 20 RESEARCH 30 SALES 40 OPERATIONS

4.2.3 在查询的 SELECT 子句中建立表达式

Page 12: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.2 通过查询检索数据

如果不需要查询出所有的行,只想查询满足某些条件的行,则可以使用WHERE 子句来进行条件限制。如果条件表达式为 TRUE ,则查询出该行,否则不查询出该行。可以在 WHERE 子句中使用列名或表达式,但不能使用列别名。 查询雇员姓名( ENAME )为“ BLAKE”的雇员编号、姓名、工作和雇佣日期。SQL> SELECT EMPNO,ENAME,JOB,HIREDATE FROM SCOTT.EMP WHERE ENAME='BLAKE';执行结果为: EMPNO ENAME JOB HIREDATE ---------------- ---------- --------- 7698 BLAKE MANAGER 01-5 月 -81

4.2.4 从表中检索特定行

Page 13: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.2 通过查询检索数据

在开发数据库应用程序时,往往需要将数据进行分组,以便对各个组的数据进行统计。在关系数据库中,数据分组是通过在 SELECT 语句中加如 GROUP BY子句、组处理函数和 HAVING 子句共同完成的。其基本语法是:SELECT 字段 1 ,字段 2……WHERE 条件表达式GROUP BY 分组表达式HAVING 分组条件表达式ORDER BY 字段 ( ASC|DESC )

4.2.5 分组和排序查询结果集的数据

Page 14: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.2 通过查询检索数据

多表查询指从多个有关联的表中查询数据,其基本语法跟单表查询类似。一般来说,多表查询的表要用等值连接联系起来,如果没有连接,则查询结果是这多个查询表的笛卡儿积。用来建立两表之间关系的最简单的运算符是等号( =)。如果使用等号两个表连接起来。这种类型的连接把来自两个表的在指定列中具有相等值的行连接起来。

4.2.6 连接相关表中的数据

Page 15: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.3 插入、更新和删除表中行

1.使用INSERT语句插入数据 2.使用UPDATE语句更新数据 3.使用DELETE语句删除数据

Page 16: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.3 插入、更新和删除表中行

SQL 语句用 INSERT 语句在数据表中插入数据。 INSERT 语句的语法一般有如下两种:INSERT INTO 表名 [ 字段 1 ,字段 2 ,…… ] VALUES (值 1 ,值2…… );INSERT INTO 表名 [ 字段 1 ,字段 2 ,…… ] SELECT (字段 1 ,字段 2 ,……) FROM 其他表名;其中, INSERT INTO指明要插入的表以及表中的字段, VALUES指明要插入相应字段的值。第一条 INSERT 语句用于向数据表中插入单条记录,第二条 INSERT 语句用于把从其他表中查询出来的数据插入到当前表中,用于多条记录的插入。无论是哪一种用法,都应该注意要插入的值与要插入的字段相互对应。

1 使用 INSERT 语句插入数据

Page 17: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.3 插入、更新和删除表中行

SQL 使用 UPDATE 语句对数据表中的符合更新条件的记录进行更新。 UPDATE 语句的一般语法如下:

UPDATE 表名 SET 字段 1= 值 1 [ ,字段 2= 值 2]…… WHERE 条件表达式

其中,表名指定要更新的表, SET指定要更新的字段及其相应的值, WHERE指定更新条件,如果没有指定更新条件,则对表中所有记录进行更新。

2 使用 UPDATE 语句更新数据

Page 18: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.3 插入、更新和删除表中行

SQL 语言使用 DELETE 语句删除数据表中的记录,语法格式如下:

DELETE FROM 表名 [WHERE 条件 ];

其中, FROM指定 要删除数据的表, WHERE指定要删除数据的条件。如果没有 WHERE 字句,则删除表中的所有记录。值得注意的,使用 DELETE 语句删除表中数据时,并不能释放被占用的数据块空间,它只是把那些被删除的数据块标记为Unused ,将来还可以使用回退( Rollback )操作。

3 使用 DELETE 语句删除数据

Page 19: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.4 提交和回退事务

1. 提交事务2. 设置保留点3. 回滚事务

Page 20: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.4 提交和回退事务

在对数据库发出 DML 操作时,只有当事务提交到数据库才确保操作完成。在事务提交前所作的修改只有操作者本人可以查看操作结果,其他用户只有在事务提交后才能够看到。 提交事务有以下 3 种类型:• 自动提交• 显示提交 • 隐式提交

1. 提交事务

Page 21: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.4 提交和回退事务

保留点是设置在事务中的标记,把一个较长的事务划分为若干个短事务。通过设置保留点,在事务需要回滚操作时,可以只回滚到某个保留点。 设置保留点的语法如下: SAVAPOINT 保留点名 如下面的语句设置保留点 SP1 : SQL> SAVEPOINT SP1;

2. 设置保留点

Page 22: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.4 提交和回退事务

有时用户在事务提交前取消所作的修改或由于系统故障等原因, Oracle系统将恢复到执行事务执行前的一致性状态,这称为回滚事务。 Oracle系统允许回滚整个事务,也可以只回滚到某个保留点,但不能回滚已经被提交的事务。回滚到某个保留点的事务将撤消保留点之后的所有修改,而保留点之前的所有操作不受影响。同时, Oracle系统还删除该保留点之后的所有保留点,而该保留点还保留,以便多次回滚到同一保留点。

3. 回滚事务

Page 23: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.5 事务处理设计

4.5.1  工作单元4.5.2 读写事务处理 4.5.3  只读事务处理

Page 24: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.5 事务处理设计

事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性 :• 原子性• 一致性• 隔离性• 持久性

4.5.1 工作单元

Page 25: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.5 事务处理设计

SET TRANSACTION READ WRITE (读写事务) 在读方面, read write 和 read committed都避免了脏读,但都无法实现重复读。写方面与 read committed 一致,但显然它在写的时候会加排他锁以避免更新丢失。

4.5.2 读写事务处理

Page 26: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

4.5 事务处理设计

设置只读事 务 ( SET TRANSACTION READ ONLY )。在只读事务中不允许执行 DML 语句更改数据,因此只读事务只能使用下列语句:SELECT (不包括 FOR UPDATE 字句)LOCK TABLESET ROLEALTER SYSTEMALTER SESSION

4.5.3 只读事务处理

Page 27: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

本章小结

SQL 语言是一种结构化非过程的语言,是一种在关系数据库中定义和操纵数据的标准语言。它是用户与数据库之间进行交流的接口,并且易学易用。

本章首先介绍了 SQL 语言的特点、分类,然后着重介绍了如何使用 SQL 语言进行数据的查询,包括基本查询、使用表达式、分组和排序、表连接等,并使用大量的实例说明各种查询操作;接着描述了插入数据、更改数据、删除数据等数据维护操作。在事务控制方面,介绍了事务的概念,以及事务管理。

只有学会了 SQL 语言才能操作和管理数据库,才能在开发数据库应用程序时,在过程化的高级语言中编写嵌入式的SQL 语句,所以本章是后续学习使用 Oracle 10g 的基础。

Page 28: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

实训 2 用 SQL 语言访问数据库

目标完成本实验后,将掌握以下内容: 使用 SQL 语言进行数据的查询,包括1. 基本查询2. 使用表达式3. 分组和排序4. 表连接

Page 29: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

准备工作建立图书管理数据库。 在进行本实验前,必须先建立图书管理

数据库。如果还没有创建这个数据库,请先通过练习前创建数据库的脚本(实训 \Ch4\ 实训练习 \ 建立实训环境 .sql )创建数据库到数据库管理系统中。

实训 2 用 SQL 语言访问数据库

Page 30: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

场景 学校进行图书的借阅管理,通过 student 数据库实现

,需要用到以下三张数据表:

实训 2 用 SQL 语言访问数据库

Page 31: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

实训 2 用 SQL 语言访问数据库

Page 32: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

实训 2 用 SQL 语言访问数据库

练习 1 找出借书超过 5 本的读者 ,输出借书卡号及所借图书册数。实验步骤:

( 1 )打开“ SQL*Plus” ,连接到数据库实例“ student” 。( 2 )在“ SQL*Plus”中输入以下语句,实现查询借书超过 5

本的读者的借书卡号及所借图书册数。SQL>Select Rcard, count(*) as 借阅数 From Record

Group by Rcard

Having count(*)>5;

Page 33: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

练习 2 查询借阅了 "水浒 " 一书的读者,输出姓名及班级实验步骤:

( 1 )打开“ SQL*Plus” ,连接到数据库实例“ student” 。( 2 )在“ SQL*Plus”中输入以下语句,实现查询借阅了 "水浒 " 一书的读者的姓名及班级。

SQL> Select A.Bname,A.Bclass

From Borrow A, Book B,Record C

Where A.Bcard=C.Rcard and B.Bbook=C.Rbook and B.Bbname='水浒 ';

实训 2 用 SQL 语言访问数据库

Page 34: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

练习 3 查询过期未还图书,输出借阅者卡号、书名及作者。 实验步骤:( 1 )打开“ SQL*Plus” ,连接到数据库实例“ student” 。( 2 )在“ SQL*Plus”中输入以下语句,实现查询出过期未还

的图书,显示借阅者卡号、书名及作者。SQL> Select Rcard,Bbname,Bauth

From Record C,Book B

Where C.Rbook=B.Bbook and current_date>Rdate;

实训 2 用 SQL 语言访问数据库

Page 35: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

练习 4 查询书名包括“网络”关键词的图书,输出书号、书名、作者。

实验步骤:( 1 )打开“ SQL*Plus” ,连接到数据库实例“ student” 。( 2 )在“ SQL*Plus”中输入以下语句,实现查询出书名包括 "网络 " 关键词的图书,显示其书号、书名、作者。

SQL> Select Bbook,Bbname,Bauth

From Book

Where Bname like '%网络%';

实训 2 用 SQL 语言访问数据库

Page 36: Oracle 10g 管理及应用

2023年4月19日Oracle 10g管理及应用

练习 5 从图书表中删除当前无人借阅的图书记录。 实验步骤:( 1 )打开“ SQL*Plus” ,连接到数据库实例“ student” 。( 2 )在“ SQL*Plus”中输入以下语句,实现将图书表中当前无人借阅的图书记录删除。

SQL> Delete From Book

Where Bbook not in (select B.Bbook From Book B,Record C Where B.Bbook=C.Rbook);

实训 2 用 SQL 语言访问数据库