360 likes | 459 Views
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 的概念.
E N D
Oracle 10g管理及应用 第四章 用SQL语言访问数据库
第四章 用SQL语言访问数据库 • 4.1 SQL的概念 • 4.2 通过查询检索数据 • 4.3 插入、更新和删除表中行 • 4.4 提交和回退事务 • 4.5 事务处理设计 • 实训2 用SQL语言访问数据库 Oracle 10g管理及应用
4.1 SQL的概念 • 4.1.1SQL的特点和命令类型 • 4.1.2 应用程序的可移植性和ANSI/ISOSQL标准 • 4.1.3Oracle 10g 中的SQL环境 Oracle 10g管理及应用
4.1 SQL的概念 4.1.1 SQL的特点和命令类型 • SQL语言具有如下特点: • 综合统一 • 高度非过程化 • 面向集合的操作方式 • 同一种语法结构提供两种使用方式 • 语言简洁、易学易用 Oracle 10g管理及应用
4.1 SQL的概念 4.1.1 SQL的特点和命令类型 • SQL语言可以分成如下几类: • 数据定义语言:用于定义、修改、删除数据库模式对象,进行权限管理等。包括:Create、Drop、Alter。 • 数据操纵语言:用于查询、生成、修改、删除数据库中的数据。包括:Insert、Delete、Update、Select。 • 数据控制语言:用于改变与数据库用户相关联的权限。包括:Grant、Deny、Revoke。 Oracle 10g管理及应用 2014年11月11日星期二
4.1 SQL的概念 4.1.2 应用程序的可移植性和ANSI/ISOSQL标准 第一个SQL标准是1986年10月由ANSI颁布的。1987年ISO将这个标准采纳为国际标准。后来,ISO不断修改和完善SQL标准,并于1989年颁布了第二个SQL标准,即SQL89。随后,ISO在1992年颁布了SQL92,即SQL2。SQL的标准化工作还在继续,正在酝酿的新标准是SQL3。 Oracle 10g管理及应用 2014年11月11日星期二
4.1 SQL的概念 4.1.3 Oracle 10g 中的SQL环境 PL/SQL是Oracle的过程语言,由SQL扩充而来,它将SQL的简单和灵活与结构化程序语言的过程功能相结合,PL/SQL代码可以集中存储在数据库中。 通过使用PL/SQL,Oracle 10g在性能方面有了重大改进。 Oracle 10g管理及应用 2014年11月11日星期二
4.2 通过查询检索数据 • 4.2.1 查询结构 • 4.2.2 建立基本查询 • 4.2.3 在查询的SELECT子句中建立表达式 • 4.2.4 从表中检索特定行 • 4.2.5 分组和排序查询结果集的数据 • 4.2.6 连接相关表中的数据 Oracle 10g管理及应用 2014年11月11日星期二
4.2 通过查询检索数据 4.2.1 查询结构 SQL语句使用SELECT语句实现对数据表的任何查询,包括选择符合条件的行或列及其他操作等。常用的SELECT语法格式如下: SELECT 字段1,字段2,…… FROM 表1[,表2]…… WHERE 查询条件 GROUP BY 分组字段1[,分组字段2]……HAVING 分组条件 ORDER BY 列1[,列2]…… Oracle 10g管理及应用 2014年11月11日星期二
4.2 通过查询检索数据 4.2.2 建立基本查询 查询DEPT表中的所有数据 SQL> SELECT *FROM SCOTT.DEPT; 执行结果为: DEPTNO DNAME LOC ---------- -------------- ------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 其中,“*”表示查询表中的所有字段。 Oracle 10g管理及应用 2014年11月11日星期二
4.2 通过查询检索数据 4.2.3 在查询的SELECT子句中建立表达式 可以在查询列中使用表达式来连接字符串(使用||连接字符串)、改变显示的格式(如使用函数TO _CHAR或用AS定义列别名)、计算显示的数据(如使用+,-,*,/)等。 查询DEPTNO以及DNAME,要求将DNAME这个字段名换成“部门名称”。 SQL> SELECT DEPTNO,DNAME AS 部门名称FROM DEPT; 执行结果为: DEPTNO 部门名称 ---------------- -------------- 10 ACCOUNTING 20 RESEARCH 30 SALES 40 OPERATIONS Oracle 10g管理及应用 2014年11月11日星期二
4.2 通过查询检索数据 4.2.4 从表中检索特定行 如果不需要查询出所有的行,只想查询满足某些条件的行,则可以使用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 Oracle 10g管理及应用 2014年11月11日星期二
4.2 通过查询检索数据 4.2.5 分组和排序查询结果集的数据 在开发数据库应用程序时,往往需要将数据进行分组,以便对各个组的数据进行统计。在关系数据库中,数据分组是通过在SELECT语句中加如GROUP BY子句、组处理函数和HAVING子句共同完成的。其基本语法是: SELECT 字段1,字段2…… WHERE 条件表达式 GROUP BY 分组表达式 HAVING 分组条件表达式 ORDER BY 字段(ASC|DESC) Oracle 10g管理及应用 2014年11月11日星期二
4.2 通过查询检索数据 4.2.6 连接相关表中的数据 多表查询指从多个有关联的表中查询数据,其基本语法跟单表查询类似。一般来说,多表查询的表要用等值连接联系起来,如果没有连接,则查询结果是这多个查询表的笛卡儿积。 用来建立两表之间关系的最简单的运算符是等号(=)。如果使用等号两个表连接起来。这种类型的连接把来自两个表的在指定列中具有相等值的行连接起来。 Oracle 10g管理及应用 2014年11月11日星期二
4.3 插入、更新和删除表中行 • 1.使用INSERT语句插入数据 • 2.使用UPDATE语句更新数据 • 3.使用DELETE语句删除数据 Oracle 10g管理及应用 2014年11月11日星期二
4.3 插入、更新和删除表中行 1 使用INSERT语句插入数据 SQL语句用INSERT语句在数据表中插入数据。INSERT语句的语法一般有如下两种: INSERT INTO 表名 [字段1,字段2,……] VALUES (值1,值2……); INSERT INTO表名 [字段1,字段2,……] SELECT (字段1,字段2,……) FROM 其他表名; 其中,INSERT INTO指明要插入的表以及表中的字段,VALUES指明要插入相应字段的值。第一条INSERT语句用于向数据表中插入单条记录,第二条INSERT语句用于把从其他表中查询出来的数据插入到当前表中,用于多条记录的插入。无论是哪一种用法,都应该注意要插入的值与要插入的字段相互对应。 Oracle 10g管理及应用 2014年11月11日星期二
4.3 插入、更新和删除表中行 2 使用UPDATE语句更新数据 SQL使用UPDATE语句对数据表中的符合更新条件的记录进行更新。UPDATE语句的一般语法如下: UPDATE 表名SET 字段1=值1 [,字段2=值2]……WHERE 条件表达式 其中,表名指定要更新的表,SET指定要更新的字段及其相应的值,WHERE指定更新条件,如果没有指定更新条件,则对表中所有记录进行更新。 Oracle 10g管理及应用 2014年11月11日星期二
4.3 插入、更新和删除表中行 3 使用DELETE语句删除数据 SQL语言使用DELETE语句删除数据表中的记录,语法格式如下: DELETE FROM 表名 [WHERE 条件]; 其中,FROM指定要删除数据的表,WHERE指定要删除数据的条件。如果没有WHERE字句,则删除表中的所有记录。值得注意的,使用DELETE语句删除表中数据时,并不能释放被占用的数据块空间,它只是把那些被删除的数据块标记为Unused,将来还可以使用回退(Rollback)操作。 Oracle 10g管理及应用 2014年11月11日星期二
4.4 提交和回退事务 • 1.提交事务 • 2.设置保留点 • 3.回滚事务 Oracle 10g管理及应用 2014年11月11日星期二
4.4 提交和回退事务 1. 提交事务 • 在对数据库发出DML操作时,只有当事务提交到数据库才确保操作完成。在事务提交前所作的修改只有操作者本人可以查看操作结果,其他用户只有在事务提交后才能够看到。 • 提交事务有以下3种类型: • 自动提交 • 显示提交 • 隐式提交 Oracle 10g管理及应用 2014年11月11日星期二
4.4 提交和回退事务 2. 设置保留点 保留点是设置在事务中的标记,把一个较长的事务划分为若干个短事务。通过设置保留点,在事务需要回滚操作时,可以只回滚到某个保留点。 设置保留点的语法如下: SAVAPOINT 保留点名 如下面的语句设置保留点SP1: SQL> SAVEPOINT SP1; Oracle 10g管理及应用 2014年11月11日星期二
4.4 提交和回退事务 3. 回滚事务 有时用户在事务提交前取消所作的修改或由于系统故障等原因,Oracle系统将恢复到执行事务执行前的一致性状态,这称为回滚事务。Oracle系统允许回滚整个事务,也可以只回滚到某个保留点,但不能回滚已经被提交的事务。回滚到某个保留点的事务将撤消保留点之后的所有修改,而保留点之前的所有操作不受影响。同时,Oracle系统还删除该保留点之后的所有保留点,而该保留点还保留,以便多次回滚到同一保留点。 Oracle 10g管理及应用 2014年11月11日星期二
4.5 事务处理设计 • 4.5.1 工作单元 • 4.5.2 读写事务处理 • 4.5.3 只读事务处理 Oracle 10g管理及应用 2014年11月11日星期二
4.5 事务处理设计 4.5.1 工作单元 • 事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性: • 原子性 • 一致性 • 隔离性 • 持久性 Oracle 10g管理及应用 2014年11月11日星期二
4.5 事务处理设计 4.5.2 读写事务处理 SET TRANSACTION READ WRITE(读写事务) 在读方面,read write和read committed都避免了脏读,但都无法实现重复读。写方面与read committed一致,但显然它在写的时候会加排他锁以避免更新丢失。 Oracle 10g管理及应用 2014年11月11日星期二
4.5 事务处理设计 4.5.3 只读事务处理 设置只读事务(SET TRANSACTION READ ONLY)。在只读事务中不允许执行DML语句更改数据,因此只读事务只能使用下列语句: SELECT(不包括FOR UPDATE字句) LOCK TABLE SET ROLE ALTER SYSTEM ALTER SESSION Oracle 10g管理及应用 2014年11月11日星期二
本章小结 SQL语言是一种结构化非过程的语言,是一种在关系数据库中定义和操纵数据的标准语言。它是用户与数据库之间进行交流的接口,并且易学易用。 本章首先介绍了SQL语言的特点、分类,然后着重介绍了如何使用SQL语言进行数据的查询,包括基本查询、使用表达式、分组和排序、表连接等,并使用大量的实例说明各种查询操作;接着描述了插入数据、更改数据、删除数据等数据维护操作。在事务控制方面,介绍了事务的概念,以及事务管理。 只有学会了SQL语言才能操作和管理数据库,才能在开发数据库应用程序时,在过程化的高级语言中编写嵌入式的SQL语句,所以本章是后续学习使用Oracle 10g的基础。 Oracle 10g管理及应用
实训2 用SQL语言访问数据库 目标 完成本实验后,将掌握以下内容: 使用SQL语言进行数据的查询,包括 • 基本查询 • 使用表达式 • 分组和排序 • 表连接 Oracle 10g管理及应用
实训2 用SQL语言访问数据库 准备工作 • 建立图书管理数据库。 • 在进行本实验前,必须先建立图书管理数据库。如果还没有创建这个数据库,请先通过练习前创建数据库的脚本(实训\Ch4\实训练习\建立实训环境.sql)创建数据库到数据库管理系统中。 Oracle 10g管理及应用
实训2 用SQL语言访问数据库 场景 • 学校进行图书的借阅管理,通过student数据库实现,需要用到以下三张数据表: Oracle 10g管理及应用
实训2 用SQL语言访问数据库 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; Oracle 10g管理及应用
实训2 用SQL语言访问数据库 练习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='水浒'; Oracle 10g管理及应用
实训2 用SQL语言访问数据库 练习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; Oracle 10g管理及应用
练习4 查询书名包括“网络”关键词的图书,输出书号、书名、作者。 实验步骤: (1)打开“SQL*Plus”,连接到数据库实例“student”。 (2)在“SQL*Plus”中输入以下语句,实现查询出书名包括"网络"关键词的图书,显示其书号、书名、作者。 SQL> Select Bbook,Bbname,Bauth From Book Where Bname like '%网络%'; 实训2 用SQL语言访问数据库 Oracle 10g管理及应用 2014年11月11日星期二
练习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语言访问数据库 Oracle 10g管理及应用 2014年11月11日星期二