数据库理论与应用实验指导书.doc_第1页
数据库理论与应用实验指导书.doc_第2页
数据库理论与应用实验指导书.doc_第3页
数据库理论与应用实验指导书.doc_第4页
数据库理论与应用实验指导书.doc_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库理论与应用实验指导书李爱武 编2005年1月目 录第1章 SQL语言31.1 SQL语言概述31.1.1 SQL语言与传统程序语言的差别41.1.2 SQL语言的历史41.1.3 SQL语言的分类41.2 SQL *Plus的使用方法51.2.1 Oracle中的预置用户51.2.2 连接数据库的方式51.2.3 使用SQL*Plus61.3 简单查询91.3.1 select-from-where结构91.3.2设置查询结果字段的别名及排序101.3.3 WHERE关键字的使用111.3.4 汇总函数141.3.5 GROUP BY及HAVING子句161.3.6 理解NULL161.4 UPDATE、DELETE、INSERT语句171.5 复杂查询181.5.1 表连接181.3.7 集合运算221.3.8 子查询231.3.9 EXISTS及NOT EXISTS的用法(略)25第2章 表及完整性约束252.1 数据类型252.2 创建简单的表262.3 完整性约束272.4 创建带有约束的表272.6 修改表30第3章 Oracle中建立数据库及表空间管理323.1 手工建库323.2 数据库的启动和关闭363.2.1 数据库的启动363.2.2 数据库的关闭363.3 管理表空间(tablespace)373.3.1 表空间的基本概念373.3.2 表空间的种类373.3.3 在Oracle中创建表空间383.3.4 在表空间中创建表393.3.5 autoallocate及uniform size选项使用探秘393.3.6 由多个数据文件构成的表空间43第4章 事务处理、并发控制及锁484.1 事务的概念及ACID属性484.2 Oracle中的事务操作494.3 Oracle中的并发控制494.4 Oracle中的事务隔离级别494.5 锁51第5章 索引原理525.1 索引结构(略)525.2 Oracle中如何创建索引525.3在SQL*Plus中查看执行计划535.4 使用索引的场合555.5 索引未被使用的原因555.6 索引与空值585.7 实验:应用索引提高查询速度的检验605.8 DML语句对索引的影响60第6章 存储过程以及触发器646.1 PL/SQL的基本结构646.2 简单的PL/SQL程序设计666.2.1 声明666.2.2 使用%TYPE和%ROWTYPE676.3 游标686.3.1 显式游标686.3.2 隐式游标706.4 触发器716.4.1 语句触发器716.4.2 行触发器726.4.3 instead of触发器736.5 存储过程74第7章 备份与恢复777.1 Oracle数据库日志及归档日志的作用777.1 归档日志的设置777.2 备份与恢复实验797.3 逻辑备份80第8章 Oracle的用户和权限管理838.1 用户管理838.2 权限管理84第9章 Oracle数据库的网络连接85第10章 Oracle数据库的体系结构87第1章 SQL语言1.1 SQL语言概述SQL是在各种关系型数据库中对数据进行操作的语言(也可称为工具),可以利用数据库管理系统本身提供的客户端管理工具通过输入SQL对数据库进行操作,也可以嵌入到第三方程序开发语言中,对数据库进行操作。由于SQL语言在查询上的灵活性、在语法上的简捷以及在执行上的高效率,使它成为数据库管理者及设计者的不可替代的工具。SQL语言已经成为数据库系统的标准语言。1.1.1 SQL语言与传统程序语言的差别SQL语言或用SQL语言写成的程序必须应用在数据库管理系统中,其本身不能独立执行,而且为“非过程性”语言,与平时所熟悉的C、PASCAL等程序设计语言有很大不同。利用SQL语句我们只要指出自己所要的数据、存放位置和查询条件,根本不需要知道数据库管理系统是如何找到或处理数据的。为了加强SQL语言的能力,各数据库厂商都在SQL语言中加入了过程性语言的特征,增加了诸如流程控制、条件转向、变量定义等指令,使SQL语言有了很大程度上的扩展。Oracle对SQL语言的扩展称为PL/SQL,而SQL Server、Sybase对SQL语言的扩展称为T-SQL。SQL是一种介于关系代数和关系演算之间的非过程化的集合操作语言,具有关系代数和关系演算的双重特点:1) 综合统一;2) 高度非过程化;3) 面向集合的操作方式;4) 以一种语法结构提供两种使用方式,即,既是自包含式语言,又是嵌入式语言;5) 语言简捷,易学易用。1.1.2 SQL语言的历史1) 1970年,IBM研究中心的EF Codd提出关系模型的概念2) 1972年,IBM公司开始研制实验型关系数据库系统SYSTEM R,配置的查询语言SQUARE语言,在语言中使用了较多的数学符号。3) 1974年,Boyce和Chamberlin把SQUARE语言修改为SEQUEL语言,这两个语言在本质上是相同的,但后者去掉了一些实数学符号,并采用英语单词和结构化的语法规则,看起来很象英语句子,受到很大欢迎。4) SEQUEL简称为SQL(Structured Query Langauge)。5) 1986年,ANSI发布SQL(86)标准,后来被ISO采纳为国际标准,称为“SQL-86”。6) 1989年,ANSI发布SQL-89,后来也被ISO采纳为国际标准。SQL-86和SQL-89现在当然已经成为过时的标准。7) 1992年,ANSI/ISO发布SQL(1992),习惯称为SQL2,它分为Entry SQL,Intermediate SQL,Full SQL。Entry SQL基本上就是SQL89,现在的数据库产品多数都完全支持Entry级别,同时部分支持Intermediate和Full级别的某些特性。8) 1999年,ANSI/ISO发布SQL-99(或SQL-1999),习惯称为SQL3。1.1.3 SQL语言的分类在SQL-92标准中,SQL语法中的语句,依据其功能的差别,可以分为DDL(Data Definition Language,数据定义语言)、DML(Data Manipulation Language,数据处理语言)及DCL(Data Control Language,数据控制语言)三类。SQL-99的分类方式有所变化。1) DDL语句数据表、视图、索引、存储过程、触发器等都视为数据库对象。凡用来定义(或建立)数据库对象,以及修改数据库对象结构的SQL语句,都属于DDL语句。2) DML语句DML类型语句主要包括由SELECT、UPDATE、INSERT、DELETE构成的SQL语句。用于在数据表中查询、更新、增加和更改记录。3) DCL语句DCL语句一般指专门用来设置数据库对象使用权限的语句,包括GRANT、DENY和REVOKE三种。从广义的角度看,还包括控制执行流程的IFELSE、WHILE语句,以及控制事务进行的BEGIN TRAN、COMMIT TRAN和ROLLBACK TRAN等语句。1.2 SQL *Plus的使用方法为了方便读者进行实验,我们首先讲解Oracle的客户端工具的使用方法。多数数据库产品都提供与数据库进行交互操作的两类客户端管理工具图形界面和字符界面(或称为命令行),字符界面客户端管理工具用于输入和执行SQL语句,对SQL语句不熟悉的用户可以利用图形界面管理工具以更直观的方式操作数据库。数据库专业人员一般主要使用字符界面工具。Oracle提供的这两种工具分别是SQL*Plus和Enterprise Manager,前者为字符界面,后者为图形界面。SQL Server提供的字符管理工具为osql(7.0之前的版本是isql),图形界面工具也称为Enterprise Manager。在Oracle中,主要的管理工具为字符界面的SQL*Plus,这就要求用户要熟悉各种SQL命令。1.2.1 Oracle中的预置用户要操作Oracle数据库,首先要以数据库中的合法用户连接到数据库,Oracle中常用的预置用户有以下三个:sys:Oracle中权限最大的用户,位于数据库之外,可以启动、关闭数据库,创建数据库,在数据库内拥有操作数据库的所有权限,以sys连接数据库时要加上as sysdba子句。system:是数据库内权限最大的用户。scott用户:Oracle提供的用于学习和测试的用户,其口令为tiger,可以在SQL*Plus中执行scott.sql脚本文件建立这个用户以及此用户下的四张表,这几张表及其数据模拟了一个小型公司的员工管理系统,非常适合作为学习之用。Oracle公司成立之初,软件开发任务主要由Bruce Scott(也就是Oracle数据库中的scott用户)和Bob Miner担任,他们各自编写了Oracle的一半代码,tiger是Scott的女儿的猫的名字,Bruce Scott在Oracle公司工作了5年半左右,于1982年离开Oracle公司,现在是Pointbase公司的创办者和CEO,Bob Miner一直是Oracle的技术总裁,1996年去世。1.2.2 连接数据库的方式打开windows命令行工具,输入sqlplus /nolog,nolog关键字指明只启动SQL*Plus,而不连接到数据库。出现“SQL”提示符后,说明SQL*Plus正常启动。C:sqlplus /nologSQL*Plus: Release 9.2.0.1.0 - Production on 星期一 12月 13 08:48:23 2004Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.SQLSQL*Plus中以关键字connect连接数据库,后面跟用户名及对应的口令。语法格式如下:SQL connect scott/tiger已连接。SQL上面的命令连接的数据库为本地机器上的数据库。也可以在启动SQL*Plus的同时,连接到数据库,命令如下:C:sqlplus scott/tigerSQL*Plus: Release 9.2.0.1.0 - Production on 星期二 12月 14 20:46:47 2004Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.连接到:Oracle9i Enterprise Edition Release 9.2.0.1.0 - ProductionWith the Partitioning, OLAP and Oracle Data Mining optionsJServer Release 9.2.0.1.0 - ProductionSQL1.2.3 使用SQL*Plus1) 查询当前用户拥有的表使用SQL语句:select * from tab;查看当前用户的表。SQL connect scott/tiger已连接。SQL select * from tab;TNAME TABTYPE CLUSTERID- - -BONUS TABLEDEPT TABLEEMP TABLE2) 查看表的结构使用命令“describe”或其简写“desc”查看表的结构,即查看表有哪些字段以及每个字段属于什么数据类型SQL desc dept 名称 是否为空? 类型 - - - DEPTNO NOT NULL NUMBER(2) DNAME VARCHAR2(14) LOC VARCHAR2(13)3) 输入和执行SQL语句直接在“SQL”提示符下输入SQL语句,一条命令可以多行输入,输入“;”执行。也可以另起一新行,输入“/”来执行,另外,除了字符串外,SQL语句是不区分字母大小写的,“select * from dept”与“selEct * FROm depT”在语法上都是正确的,功能也是相同的。SQL select * from dept; DEPTNO DNAME LOC- - - 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON已选择6行。SQL select * from deptSQL / DEPTNO DNAME LOC- - - 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON已选择6行。4) 修改SQL语句如果SQL语句中某个词汇输入错误,Oracle会以“*”标识错误的词汇。可以通过change命令修改错误:change/deptt/dept,前面命令把SQL语句中的错误单词“deptt”改为“dept”。要注意上面的命令只能修改当前行中的错误词汇,如果错误词汇不在当前行中,可以通过在“SQL”提示符下输入错误词汇所在的行号,从而把那一行变为当前行。另外,“change”可以简写为“c”。SQL select * from deptt 2 where deptno=20 3 ;select * from deptt *ERROR 位于第 1 行:ORA-00942: 表或视图不存在SQL change/deptt/dept 1* select * from deptSQL / DEPTNO DNAME LOC- - - 20 RESEARCH DALLAS5) 使用edit命令调用编辑工具修改缓冲区中的SQL语句在“SQL”提示符下输入“edit”命令(可简写为“ed”),可以调用操作系统默认的编辑器(Windows操作系统中为记事本)来编辑或修改当前缓冲区中的SQL语句。这种方法便于用户对SQL语句做较大的变动。6) 执行SQL脚本SQL脚本是指内容为SQL语句或PL/SQL程序段的文本文件,一般扩展名为.sql,可以用常用的操作系统的文本编辑工具(比如Windows的记事本)中编辑完成,然后在SQL*Plus中执行。例如,我们把下面内容在Windows记事本中编辑后,存储为扩展名为.sql的脚本文件:select * from dept;,然后在SQL*Plus中以“”或“start”命令执行,可以省略扩展名。SQL c:test DEPTNO DNAME LOC- - - 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON7) show命令的使用show命令可以显示当前的用户名、内存配置、初始化参数值、当前的数据库版本、当前SQL*Plus的配置环境等。这些命令分别为:show user:显示当前用户。show sga:显示数据库的内存配置。show parameter:显示初始化参数的值。show release:显示Oracle数据库的版本。show linesize:显示SQL*Plus的环境配置值。show pagesize:显示SQL*Plus的环境配置值。读者可以在SQL*Plus中输入这些命令自行测试,有些命令的含义以后都会涉及到。8) 列的格式化column col_name format a30上面命令可以把字段“col_name”用30个字符来显示,如果某些字段定义过长,而实际内容很短,可以用上述命令格式化,使得查询内容更加清楚地显示。其中的字符a表示alphabet,即字母的意思。9) 自定义SQL*Plus环境SQL*Plus环境主要是指SQL*Plus中的显示内容的外观,下面是一些常用的定义SQL*Plus环境的命令。set linesize n:定义在SQL*Plus中一行显示的字符个数,n是一指定整数。linesize可简写为line。set pagesize n:定义在SQL*Plus中每个页面显示的行数。set pause on/off:当查询内容一个画面不能容纳时,是否在按回车键之前暂停显示。set timing on/off:是否显示当前操作花费的时间。用show命令,可以查看SQL*Plus当前的相应环境参数的设置值。10) 保存SQL*Plus环境SQL*Plus启动时都会读取%oracle_home%sqlplusadmin目录下的glogin.sql文件,可以在此文件中添加set语句从而让环境设置永久生效。Oracle_home是安装Oracle数据库后产生的一个环境变量,指Oracle数据库的程序文件和配置文件所在的目录。1.3 简单查询1.3.1 select-from-where结构一般简单的SQL查询语句的结构为:select-from-where,其中select后面是要查询的字段名列表,“*”表示要查询所有字段,from后面是要查询的表名,where后面是附加的查询条件。下面的语句查询dept表中的所有记录的所有字段。SQL select * from dept; DEPTNO DNAME LOC- - - 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON下面的语句查询dept表中满足部门号为10的所有记录的值。SQL select * from dept 2 where deptno=10 3 ; DEPTNO DNAME LOC- - - 10 ACCOUNTING NEW YORK下面的语句查询dept表中满足部门号为10的所有记录的地址(loc)字段的值。SQL select loc from dept 2 where deptno=10 3 ;LOC-NEW YORK1.3.2设置查询结果字段的别名及排序查询结果字段的别名是指在查询结果中,字段名称用另外一个自定义名称表示。一般来说,自定义的字段名称可以在ORDER BY参数中使用,但是不能在WHERE、GROUP BY或HAVING参数中使用。以下两种方式是等价的。SQL select loc location from dept2 where deptno=10;LOCATION-NEW YORKSQL select loc as location from dept 2 where deptno=10;LOCATION-NEW YORK可以用“order by”关键字设置查询结果按一个或几个字段排序。其中“desc”可以指定结果按降序排列,asc按升序排列,默认为升序,所以asc关键字一般不用。下面的语句对emp表的查询结果分别按sal字段值的升序和降序来排列。SQL select ename,sal from emp 2 where deptno20 order by sal;ENAME SAL- -JAMES 950WARD 1250MARTIN 1250TURNER 1500ALLEN 1600BLAKE 2850已选择6行。SQL select ename,sal from emp 2 where deptno20 order by sal desc 3 ;ENAME SAL- -BLAKE 2850ALLEN 1600TURNER 1500WARD 1250MARTIN 1250JAMES 950已选择6行。1.3.3 WHERE关键字的使用WHERE关键字的功能就是设置查询结果应该符合的条件。当不需要过滤数据记录时,就不需要使用WHERE关键字。上面已经用到过一些带有where关键字的例子。在WHERE关键字的过滤条件中,可以利用以下表所示的运算符进行对比处理。表4-1 WHERE参数中的运算符运算符说明=等于大于或!=不等于(!=为SQL-92标准)=大于或等于!不大于IN判断数据记录的某个字段值是否出现在所赋值的各个数据中BETWEEN判断数据记录是否出现在所赋值范围的数据中,也可以用于判断日期值范围LIKE主要用于判断字符串字段值是否符合指定的格式除了上面这些运算符,还可以用AND、OR以及NOT来连接多个过滤条件。下面我们通过例子来讲解IN、BETWEEN及LIKE的用法,其他几个比较简单,请读者自行实验。1) IN的用法下面语句查询部门号为10或20的部门的信息。SQL select * from dept 2 where deptno in (10,20); DEPTNO DNAME LOC- - - 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS下面两个语句都是查询部门地址在NEW YORK或DALLAS的部门信息。注意涉及字符串条件的查询,要把字符串用单引号括住,而且要注意字符串大小写在Oracle中是有区别的。SQL select * from dept 2 where loc in (NEW YORK,DALLAS); DEPTNO DNAME LOC- - - 10 ACCOUNTING NEW YORK 20 RESEARCH DALLASSQL select * from dept 2 where loc=NEW YORK or loc=DALLAS; DEPTNO DNAME LOC- - - 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS2) BETWEEN的用法Between的用法不言自明。下面的查询列出emp表中月工资额在2000到3000之间的员工的名字和工资额。其中的where条件显然可以写为:where sal=2000 and sal select ename,sal from emp 2 where sal between 2000 and 3000;ENAME SAL- -JONES 2975BLAKE 2850CLARK 2450FORD 30003) LIKE关键字及通配符的用法前面我们已经用过的“*”就是一个通配符,它代表所查询的表中的所有字段,不过这个符号只能用于select_list,而不能用于WHERE关键字中的过滤条件。我们在这里讲解其他几个用于过滤条件的通配符的用法。这几个通配符都要结合关键字LIKE使用。过滤条件中能够使用的通配符共有2个,分别是:%(百分号)、_(下划线)。其中%表示任意个任意字符,下划线表示一个任意字符。下面查询列出emp表中,名字中的最后一个字符为E的所有员工的名字。SQL select ename from emp2 where ename like %E;ENAME-BLAKE下面查询列出emp表中,名字的第二个字符为A的所有员工的名字。SQL select ename from emp 2 where ename like _A%;ENAME-WARDMARTINJAMES如果要查询的字符串中含有%或下划线,在可以使用escape关键字指定转义符,然后在%或下划线后面附加转义符即可。下面查询列出dept表中,部门名称第一个字符为下划线的部门信息。SQL select * from dept 2 where dname like _% escape ; DEPTNO DNAME LOC- - - 50 _aaa bbb上面这些语法也是所有产品都支持的,另外SQL Server 2000还支持 (中括号)、的用法,使有关字符串的查询更加灵活。如:like ABC% 是指字段值满足第一个字符为A、B、C三个字符中的一个,like A-F% 是指第一个字符为A到F中的某一个,而like ABC% 是指第一个字符不能为A、B、C三个字符中的任意一个,类似的like A-F% 指第一个字符不能是A到F中的任一个,读者可以推测like _ A-F% 、like %A-F% 的含义。1.3.4 汇总函数汇总函数专门用于在SELECT语句中获得数据记录的相关统计信息。这里我们介绍几个常用的汇总函数:COUNT(计数函数)、SUM(求和函数)、MAX(最大值函数)、MIN(最小值函数) 、AVG(平均数函数)。需要注意的是,这里汇总函数不能用于where条件。1) COUNT函数COUNT函数主要用于计算查询结果中返回的记录条数,通常用“*”作为COUNT函数的参数,我们举几个例子来看COUNT函数的用法。下面的语句查询emp表中记录的条数,即员工的人数。SQL select count(*) from emp; COUNT(*)- 12下面的语句查询emp表中不重复的部门号的个数(可以用字段别名修正下面字段的显示结果)。SQL select count(distinct deptno) 2 from emp;COUNT(DISTINCTDEPTNO)- 3下面语句查询emp表中月工资额高于2500的员工个数。SQL select count(*) from emp 2 where sal2500; COUNT(*)- 42) SUM函数下面查询列出emp表中的月工资总额。SQL select sum(sal) from emp; SUM(SAL)- 249253) MAX函数及MIN函数下面查询列出emp表中月工资最高的工资额。SQL select max(sal) from emp; MAX(SAL)- 50004) AVG函数下面示例查询部门号为10的员工的平均工资。SQL select avg(sal) from emp 2 where deptno=10; AVG(SAL)-2916.666671.3.5 GROUP BY及HAVING子句GROUP BY子句用来把查询结果分组,HAVING子句用来把分组的查询结果过滤。我们通过实例来看其用法。下面示例按部门号求出最高工资和平均工资。SQL select deptno,max(sal),min(sal) 2 from emp group by deptno; DEPTNO MAX(SAL) MIN(SAL)- - - 10 5000 1300 20 3000 800 30 2850 950下面查询列出部门平均工资高于2000的部门号及其最高、最低工资。SQL select deptno,max(sal),min(sal) 2 from emp group by deptno 3 having avg(sal)2000; DEPTNO MAX(SAL) MIN(SAL)- - - 10 5000 1300 20 3000 800不要把HAVING子句和WHERE子句混淆,where子句在分组之前对记录进行过虑,而HAVING子句对分组之后的数据进行过虑。HAVING子句只能用于使用了GROUP BY的查询,并且通常会含有汇总函数,如:AVG、SUM、MAX等,但是WHERE子句不能使用这些汇总函数作为查询条件。1.3.6 理解NULL如果表中的某条记录的某个字段为NULL,意味着没有给这个字段赋值。包含NULL的判断条件,其返回值为Unkown,基本等同于False。可以通过以下示例理解。Scott的dept表中的loc字段允许为NULL,我们首先向dept表添加一条记录,指定loc字段为NULL,然后用loc=null作为查询条件,可以看到刚才添加的那条记录是查不到的。SQL insert into dept values(50,Develop,NULL);已创建 1 行。SQL select * from dept where loc=null;未选定行对于包含NULL的过虑条件,应该使用is null和is not null:SQL select * from dept where loc is null; DEPTNO DNAME LOC- - - 50 Develop1.4 UPDATE、DELETE、INSERT语句这几种语句一般称为DML语句,其用法比较简单。1) UPDATE语句UPDATE语句用于修改表中的记录。其基本结构为:update-set-where。下面语句把emp表中10号部门的员工的工资都增加100。SQL update emp set sal=sal+100 2 where deptno=10;已更新3行。2) DELETE语句DELETE语句用于删除表中的记录。其基本结构为:delete from-where下面语句把emp表中10号部门的员工记录删除。如果不附加过虑条件,则delete命令会把表中的记录全部清空。SQL delete from emp where deptno=10;已删除3行。3) INSERT语句INSERT语句用于向表中添加记录。其基本结构为:insert into-values()。INSERT语句有两种用法,一种不在表名后加列名,这时后面的VALUES参数要按表中列的顺序,依次把各个列值写上,不能有遗漏,另外一种是在表名后加上若干列名,这时VALUES参数中的各个值的顺序要和前面列名的顺序一致,这种情况下,不用把所有的列值都写上。下面示例用第一种方式向dept表添加一条记录。SQL insert into dept values(60,PRODUCT,CHICAGO);已创建 1 行。下面示例用第二种方式向dept表添加一条记录。SQL insert into dept(deptno,dname) values(70,DEVELOP);已创建 1 行。INSERT语句的另外一种用法是:INSERT INTO table_name(column_list) SELECT column_list FROM another_table_name这种用法要求两个表的对应的列名必须类型一致,这种用法我们不再举例。1.5 复杂查询1.5.1 表连接当查询结果涉及多个表时,特别是涉及有主外键关联的两个表时,就要用到所谓的多表连接,比如我们要查询emp表中某个员工的工资和所属部门时,就要查询emp以及dept两个表中的数据才能获得。具体来说,多表连接有五种类型,分别是交叉连接(Cross Join)、内连接(Inner Join)、左外连接(Left Outer Join)、右外连接(Right Outer Join)及全连接(Full Outer Join)。这些连接方式的语法一般都有SQL92标准语法形式和Oracle的传统形式,在Oracle9i之前只有传统语法。建议大家用SQL92标准语法格式1) Cross JoinCross Join也叫笛卡儿积,如果两个表做交叉连接,就是把一个表的每一条记录与另一个表的所有记录做组合,或者可以看作没有连接条件的表连接,如果一个表有m条记录,另一个表有n条记录,则这两个表做交叉连接后,查询结果的数量为mn条。因为交叉连接的查询结果多数没有意义,所以实际应用很少用到交叉连接,它的一个作用是生成大量测试数据,比如由两个各有1000条记录的表,通过交叉连接可以生成1000000条记录,然后我们可以用这些记录测试某些应用程序的执行效率。给出两个示例如下,第一个语句为SQL-92的标准语法,第二个为Oracle的传统语法。因为查询结果太多,为节省篇幅,略去查询结果。SQL select * from emp cross join dept;SQL select * from emp,dept;2) Inner Join内连接也称为自然连接,与外连接相对,内连接只把两个表中有匹配关系的记录查询出来,有匹配关系的记录即两个表中满足连接条件的记录。而外连接除了把满足连接条件的记录查询出来以外,还把不满足连接条件的也显示出来,只是这些不满足连接条件的记录只能是一个表的记录,对应的另外一个表中的部分都为空而已。下面我们来看几个内连接的例子。我们查询emp表中的所有员工的名字及他们所在的部门名称,应用SQL-92标准语法。SQL select emp.ename,dept.dname 2 from emp join dept on emp.deptno=dept.deptno;ENAME DNAME- -SMITH RESEARCHJONES RESEARCHFORD RESEARCHALLEN SALESWARD SALESMARTIN SALESBLAKE SALESTURNER SALESJAMES SALES已选择9行。对应上述查询的Oracle传统语法为:SQL select e.ename,d.dname 2 from emp e join dept d on e.deptno=d.deptno;上面两个示例也可以用表别名来写。SQL select emp.ename,dept.dname 2 from emp,dept where emp.deptno=dept.deptno;SQL select e.ename,d.dname 2 from emp e,dept d where e.deptno=d.deptno;3) Left Outer Join我们通过一个示例来看左外连接的含义。我们先修改emp表中的几条记录,使其deptno

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论