11GConcepts(翻译第七章)SQL(结构化查询语言)(一)

2014-11-24 10:18:21 · 作者: · 浏览: 13

第七章SQL

这一章提供了 Structured Query Language(SQL)的概述,以及Oracle数据库怎样处理SQL语句。

这一章包括如下专题:

·Introduction to SQL

·Overview of SQL Statements

·Overview of the Optimizer

·Overview of SQL Processing

Introduction to SQL(SQL的介绍)

SQL(发音为 sequel) 是基于集合,高级声明计算机,所有的程序和用户通过使用它可以访问Oracle数据库中的数据。虽然一些Oracle工具以及应用掩盖了SQL的使用,但是所有的数据库操作都是通过SQL执行的。任何其他数据访问方法,必须要绕过内置的Oacle数据库安全机制,以及会潜在的损害数据库的安全和完整性。

SQL提供了一个对关系数据库(如Oracle)的接口。SQL以一种一致性的语句统一了如下任务:

·创建,替换,变更以及丢弃 对象。

·插入,更新,删除表中的行

·查询数据

·控制对数据库和它里面对象的访问。

·保证数据库的一致性和完整性

SQL 可以交互地使用,交互指的是 在程序运行时,根据需要手工输入。SQL语句同样可以 嵌入不同语言写成程序(如C 或 Java)

SQL Data Access(SQL数据访问)

有两种大类的计算机语言:declarative languages(声明语言),它是非过程化的,描述什么东西需要完成。Procedural language(过程语言),比如C++ 以及Java,它需要描述 怎样 完成。SQL就是某种意义上的声明,用户指定他们想要的结果,而不必说明怎样去得到它

SQL语言编译器 执行 产生一个过程 以操作数据库,并执行所需的任务。

SQL使你在逻辑级别使用数据。你只有在操作数据的时候才需要关注其实现细节。举个例子,下面的语句查询employees表中谁last name开始字母是K:

SELECT last_name, first_name

FROM hr.employees

WHERE last_name LIKE 'K%'

ORDER BY last_name, first_name;

数据库可以在一个步骤中,将所有符合WHERE条件(同样也称之为predicate 谓词)的行都检索回来。这些行可以作为一个单元传递给用户,传递给其他SQL语句,或传递给一个应用程序。你不需要一行一行的处理,也不需要知道行是怎样物理存储的,或检索回来的。

所有的SQL语句都使用 optimizer(优化器),它是Oracle数据库的一部分,它来确定访问指定数据最有效的方法。Oracle数据库同样只一些技术,你可以使用它来使得optimizer执行它自己的工作时 更加好。

SQL Standards(SQL标准)

Oracle努力紧跟行业普遍接受的标准,以及积极参加SQL标准委员会。Industry-accepted 委员会是 American National StandardsInstitute(ANSI)和International Organization for Standardization(ISO)。ANSI和ISO/IEC都接受SQL作为关系型数据库的标准语言。

最后的SQL标准是2003年7月通过的,经常叫它SQL:2003。SQL标准的第14部分(ISO/IEC 9075-14),在2006年被修订,经常称它为 SQL/XML:2006。

ORACLE SQL包括了很多针对ANSI/ISO标准SQL语句的扩展,而且Oracle数据库工具和应用程序提供了一些额外的语句。SQL*PLUS,SQL Developer,以及OEM都可以对Oracle数据库运行标准SQL中的任何语句,以及这些工具额外的语句或功能。

Overview of SQL Statements

在Oracle数据库中,对信息的任何操作,都是通过使用SQL语句。一个SQL语句是一个计算机程序,或 是包括了标识符,参数,变量,名字,数据类型以及SQL保留字的 一个命令。

注意:SQL保留字在SQL中有特别的含义,它应该用在其他目的。举个例子,SELECT和UPDATE就是保留字,它们不应该用来作为表名。

一个SQL语句必须是一个完整的SQL句子,比如:

SELECT last_name,department_id FROM employees

Oracle数据库只运行完整的SQL语句,像下面这样的片段,会生成一个报错,表明需要更多的内容:

SELECT last_name;

Oracle SQL语句分为下面类型:

·Data Definition Language (DDL) Statements

·Data Manipulation Language (DML) Statements

·Transaction Control Statements

·Session Control Statements

·System Control Statement

·Embedded SQL Statements

Data Definition Language(DDL)statements(数据定义语句)

DDL语句用来定义,结构化改变,以及丢弃 schema objects。举个例子,DDL语句使你可以:

·create ,alert,drop 掉 schema objects以及其他数据库结构,包括数据库自己,以及数据库用户。绝大多数DDL语句开始关键字为 CREATE,ALERT或DROP

·可以不移除表结构,但是将表中的所有数据删除。(TRUNCATE)。

注意:和DELETE不一样,TRUNCATE是不产生undo 数据的,这样导致它比DELETE 要快多了。同样的,TRUNCATE不会触发 delete 触发器。

·授予和收回权限或角色(GRANT,REVOKE)

·开启审核选项或关闭(AUDIT,NOAUDIT)

·添加解释到data dictionary(COMMENT)

DDL使你可以更改一个对象的属性,而不用更改访问这个对象的应用。举个例子,你可以添加一列到一个表,访问这个表的人力资源应用不用重写

你同样可以 有用户在数据库中执行工作时,通过DDL来更改一个对象的结构。

下面例子使用DDL语句创建了一个名为plants的表,以及使用DML插入了两行到表。然后使用DDL去更改这个表的结构,授予和回收 这个表上面的权限 给用户,然后移除了这张表。

CREATE TABLE plants

(plant_id NUMBER PRIMARY KEY,

common_name VARCHAR2(15) );

INSERT INTO plants VALUES (1, 'AfricanViolet'); # DML statement

INSERT INTO plants VALUES (2, 'Amaryllis'); #DML statement

ALTER TABLE plants ADD

(latin_name VARCHAR2(40) );

GRANT SELECT ON plants TO scott;

REVOKE SELECT ON plants FROM scott;

DROP TABLE plants;

当数据库执行DDL语句之前,会隐式发布一个COMMIT。然后在执行完成