收藏 分享(赏)

超详细Oracle教程.doc.doc

上传人:weiwoduzun 文档编号:2842897 上传时间:2018-09-28 格式:DOC 页数:115 大小:5.73MB
下载 相关 举报
超详细Oracle教程.doc.doc_第1页
第1页 / 共115页
超详细Oracle教程.doc.doc_第2页
第2页 / 共115页
超详细Oracle教程.doc.doc_第3页
第3页 / 共115页
超详细Oracle教程.doc.doc_第4页
第4页 / 共115页
超详细Oracle教程.doc.doc_第5页
第5页 / 共115页
点击查看更多>>
资源描述

1、Oracle 教程2009.5LouisOracle 教程目录引言 . 3第一章 数据 库基础 . 6第二章 Oracle 入门 . 6第三章 查询 基础 11 第四章 单行 函数 14 第五章 分组 函数 . 19 第六章 多表 查询 . 21 第七章 子查 询 . 24 第八章 高级 查询 . 40 第九章 数据 字典 . 43 第十章 Oracle 数据类型 . 44 第十一章 Oracle 体系结构( DBA) 45 第十二章 DDL(改变表 结构) 46 第十三章 DML(改变数据 结构) 48 第十四章 约 束 . 49 第十五章 视 图 . 55 第十六章 索 引 . 56 第十

2、七章 序 列、同义 词 65 第十八章 PL SQL. 67 第十九章 游 标、函数 79 第二十章 存 储过程 86 第二十一章 触发器 90 第二十二章 事务(数 据库系统 概论) 99 第二十三章 用户管理 100 第二十四章 备份 恢 复 SQLLoader 104 第二十五章 数据库设 计范式 . 106 第二十六章 数据库设 计工具 . 107 第二十七章 对象关系 数据库系 统 . 112 第二十八章 其他数据 库 . 113-2-Oracle 教程引 言SUN 2008 初 10 亿美 元收购 MySQL Oracle 2009 年 4 月 74 亿美元收 购 SUNSun 与

3、 Oracle 合并的未来1, 如 果 云 计算 对 企 业 来说 变 得 越 来 越 重 要 , 那 么 数 据将 是 云计 算 的 核 心 。 而 讲 到数 据 , 也 就 意味着 数据 库 。 就 如塔 克 商 学 院数 字 策 略 中 心 主任 M. Eric Johnson 所说的那 样 , Sun 已经清楚 展 现 了 一 个真 实 的 云 计算 环 境 。 就那 些 将 云 计 算 停留 在 理 论 阶 段 的 对手 来 说 , 收购 Sun 对 Oracle 来说将获 得竞 争 优 势 。2, Johnson 主任还指 出 , Sun 在很多需 求 旺 盛 的方面 “保持 领

4、先 地 位 ”。 Sun 的技术可 以 帮 助 数 据库 提 高 性 能 , 尤 其是 对 大 型 数 据 库 。 Oracle 和 Sun 的结合之后 , 对 任 何 一 个信 息 官 来 说 都 具有吸 引力。3, Oracle 软 件和 Java 的 紧密 结 合 , 使得 Oracle 的 软 件能 跨 平 台 使用 。 就如 IDC 研 究 副总裁 Jean Bozman 指出 那 样 , 真正 云 计 算 的 第 一步 是 “将 服 务 器 和存 储 单 元 垂直 化 ”,可 以 适 用 于不 同的 硬件 平 台 。 凭借 Java, Oracle 可 以 拓 展 跨平 台 的 控

5、 制 力 , 而这 正 是 企 业 IT 部门想 要 的 。实际 上 , Oracle 的 Oracle Fusion Middleware 正是基于 Java。4, 有 意 思 的 是 , Oracle Fusion Middleware 扩大了 对 服务 器 的 需 求 , 其 中 原因 正 是 由 于 它 是基于 Java。 而 现 在 , Oracle 通过 购 得 Sun 服务器资 源 , 可 以 进一 步 降 低 价 格 , 从 而 进 一 步 提 高 OracleFusion Middleware 的竞争力。5, 由于 Oracle 大 部分 收 入 来 自 数 据库 软 件 许

6、 可 , 因 此有 必 要 的 话, 可 以 用 便宜 的 服 务 器 硬 件 作为 促 销 的 手段 , 这 样 对那 些 硬 件 服 务 器竞 争 对 手 来 说 是 不小 的 打 击 。6, Sun 已经售出 160 万 到 200 万 台服 务 器 , 还有 更 多 的运行 Sun Solaris 操作系统 的 其 它 公司 的服 务 器 。 这对 Oracle 捆 绑 销 售 自 家 产品 也 很 有 帮 助 。7, Oracle 收 购 Sun,当然也 包 括 开 源 数 据库 MySQL。对 于 那 些 预算 不 多 但 又 需 要 Oracle 产 品的 用 户 , Oracl

7、e 可 以 用 MySQL 来 满 足 这 些 用户 的 需求 。 这可 以 使 Oracle 进 入 中小 企 业 业 务 ,更 有机 会 在 这 方面 超 过 SAP。 此外 , 还 提 供 了 和微软 SQLServer 的竞争产品 , 而 不 需 要 降低 Oracle 自有 的 产 品 的定 位 。-3-Oracle 教程Oracle 和 Sun 的合作可能 会 影响 Oracle 和 一 些 合 作 伙伴 的 关 系 , 比 如 Oracle 和惠 普 的 关 系可 能就 会 出 现 问题 。 不过 , 不像 IBM, 事 实 上 , 每 个 硬 件 公 司都 绕 不开 Oracl

8、e, 因 为 它 是 数 据库的 主 力军 。 他 们 离不开 Oracle,因 此 ,他 们 也 只 能 选 择忍 气 吞 声。而 且 , 与 Sun 和 IBM 联合不同 , Oracle 和 Sun 不存在硬 件 的 冲 突 , 那 些 Sun 的服务器 用 户不 必担 心 合 并 会导 致 放 弃 自己 在 使 用 的 服 务器 产 品 线 。总而 言 之, Oracle 以 相 对 较 低 的 价格 收 购 Sun 是明智之 举 ,将 会 使 得 合并 后 的 Oracle 成 为 各 大公 司 数 据 中心 的 枢 纽 。云计 算李开 复 ( 现 任 Google 全球 副 总 裁

9、 、 中 国区 总 裁 ) 打了 一 个 很形 象 的 比 喻: 钱 庄 。 最早 人 们 只 是把 钱放 在 枕 头 底下 , 后 来 有了 钱 庄 , 很 安 全, 不 过 兑 现 起 来 比较 麻 烦 。 现在 发 展 到 银行 可 以 到 任 何 一 个网 点 取 钱 , 甚 至 通 过 ATM, 或者 国 外 的 渠 道 。 就 像 用 电 不需 要 家 家 装备 发 电 机 , 直接 从 电 力 公司 购买 一 样 。 “云 计算 ”带 来 的 就 是 这样 一 种 变 革 由 谷 歌 、 IBM 这样的 专 业 网 络 公 司来 搭 建 计 算机 存储 、 运 算 中心 , 用

10、户 通过 一 根 网 线 借 助浏 览 器 就 可 以 很 方便 的 访 问 , 把 “云 ”做 为 资 料 存 储以 及 应 用服 务 的 中 心。GOOGLE(一 ) 原 理 :云 计算 (Cloud Computing)是分布式 处 理 (Distributed Computing)、并行 处 理 (Parallel Comput ing)和网格计算 (Grid Computing)的发展,或 者 说 是 这些 计 算机 科 学 概 念的 商 业 实 现。云 计 算 的基 本 原 理 是, 通 过 使 计 算 分布 在 大 量 的 分 布 式计 算 机 上 ,而 非 本 地 计算 机 或

11、 远 程 服 务 器中 , 企 业 数据 中 心 的 运行 将 更 与 互 联 网相 似 。 这 使 得 企 业能 够 将 资 源切 换 到 需 要的 应 用 上 , 根 据 需求 访 问 计 算机 和 存 储 系统。这 可 是 一种 革 命 性 的举 措 , 打 个 比 方, 这 就 好 比 是 从 古老 的 单 台 发电 机 模 式 转向 了 电 厂 集 中 供 电的 模 式 。 它意 味 着 计 算能 力 也 可 以 作 为一 种 商 品 进 行 流 通, 就 像 煤 气、 水 电 一 样, 取 用 方 便 , 费 用低 廉 。 最 大的 不 同 在 于, 它 是 通 过 互 联网 进

12、行 传 输 的 。云 计 算 的蓝 图 已 经 呼之 欲 出 : 在 未 来, 只 需 要 一 台 笔 记本 或 者 一 个手 机 , 就 可以 通 过 网 络 服 务 来实 现 我 们 需要 的 一 切 ,甚 至 包 括 超 级 计算 这 样 的 任 务 。 从这 个 角 度 而言 , 最 终 用户 才 是 云 计 算 的 真正 拥 有 者 。云 计 算 的应 用 包 含 这样 的 一 种 思 想 ,把 力 量 联 合 起 来 ,给 其 中 的 每一 个 成 员 使用。-4-(二 ) 云 计 算有 哪 些 好 处?Oracle 教程1、 安 全 , 云 计 算 提 供 了 最可靠 、 最 安

13、 全的 数 据 存 储 中 心 , 用 户 不用 再 担 心 数 据 丢失 、 病 毒 入 侵等麻 烦 。2、 方 便 ,它 对 用 户 端的 设 备 要 求 最 低, 使 用 起 来 很 方 便。3、 数 据 共享 , 它 可 以轻 松 实 现 不 同 设备 间 的 数 据 与 应 用共 享 。4、 无 限 可能 , 它 为 我们 使 用 网 络 提 供了 几 乎 无 限 多 的 可能。(三 ) 云 计 算最 有 利 于 中小 企 业? 云 计 算 技术 将 使 得 中小 企 业 的 成 本 大大 降 低 。 如 果 说 “云 ”给 大 型企业 的 IT 部门 带 来了 实 惠 , 那么对

14、于 中 小 型企 业 而 言 ,它 可 算 得 上 是 上天 的 恩 赐 了 。 过 去, 小 公 司 人力 资 源 不 足 , IT 预算 吃 紧,那种 动 辄 数 百万 美 元的 IT 设 备 所带 来 的 生 产力 对 它 们 而 言 真是 如 梦 一 般遥 远 , 而 如今 , “云 ”为 它 们 送来 了 大 企 业级 的 技 术 ,并 且 先 期 成 本 极低 , 升 级 也 很 方 便。这 一 新 兴趋 势 的 重 要性 毋 庸 置 疑 , 不过 , 它 还 仅 仅 是 一系 列 变 革 的起 步 阶 段 而已 。 云 计 算 不 但 抹平 了 企 业 规模 所 导 致 的优 劣

15、 差 距 , 而 且极 有 可 能 让 优 劣 之势 易 主 。 简单 地 说 , 当今 世 上 最 强 大 最 具革 新 意 义 的技 术 已 不 再为 大 型 企 业 所 独有 。 “云 ”让 每 个 普 通人 都 能 以 极低 的 成 本 接触 到 顶 尖 的 IT 技术。(四 ) “云 ”时代目 前 , PC 依 然是 我 们 日 常 工 作生 活 中 的 核 心 工 具 我们用 PC 处 理 文档 、 存储 资 料 , 通 过电 子邮 件 或 U 盘 与 他人 分 享 信 息 。 如果 PC 硬盘 坏 了 , 我 们 会因 为 资 料 丢失 而 束 手 无策。而 在 “云 计 算 ”

16、时 代 , “云 ”会 替 我 们做 存 储 和 计 算 的工 作 。 “云 ”就 是 计 算 机群 , 每 一 群 包 括了 几 十 万台 、 甚 至 上百 万 台 计 算机 。 “云 ”的 好 处 还 在 于 ,其 中 的 计 算机 可 以 随 时更 新 , 保 证 “云 ”长 生不 老 。 Google 就有好 几 个这 样 的 “云 ”, 其 他 IT 巨头 , 如 微软 、 雅 虎 、 亚 马 逊 ( Amazon) 也有或 正 在建设 这样 的 “云 ”。届 时 , 我 们 只 需要 一 台 能 上网 的 电脑 , 不 需 关 心 存 储 或计 算 发 生 在哪 朵 “云 ”上 ,

17、 但 一 旦 有 需 要, 我们 可 以 在 任何 地 点 用 任何 设 备 , 如 电 脑、 手 机 等 , 快 速 地 计 算 和 找 到这 些 资 料 。我 们 再 也 不 用 担 心资 料 丢 失 。-5-第一章 数据库基础1.1、数据库基 本概念数据库( Database, DB)数据库管理 系统( Database Management System, DBMS) 数据库管理 员( Database Administrator, DBA) 数据库系统 ( Database System, DBS )1.2、关系型数 据库Q:目前都有哪些主流的关系型 数据库Oracle 教程A:Or

18、acle Oralce、 IBM DB2、 MS SQL /Server、 SyBase SyBase、 IBM Informix、 MySQL、AccessQ:XML,TXT 可以做为数据库吗?1.3、 E-R 模型( Entry-Relation)E-R 模型三 要素: 实 体、关系 、属性 实体间联系 ( 1:1(1:n )( n:m)Q:学生与课程什么关系?第二章 Oracle 入门2.1、 Oracle 概述甲骨文,四 大创始人-6-Oracle 教程Larry Ellison 一生最大的目标“ 财富榜超 过 Bill Gate”Bruce Scott 已离开 Oralce,创建了

19、一套 新的数据 库 PointBase2.2、 Oracle 特点全球化、跨 平台的数 据库 支持多用户 、高性能 的事务处 理 强大的安全 性控制和 完整性控 制 支持分布式 数据库和 分布处理2.3、 Oracle 版本Oracle8i: I internet 表示 Oracle 公司要开 始正式进 入互 联网 Oracle9i:与 Oracle8i 相关,性能 方面更佳 , 管理 更人性化 Oracle10g: g(grid)网格技术Oracle11g: g(grid)网格技术Q: 何为网格技术?2009 年 1 月淘宝网决定 采用 Oracle 网格计算 (Grid Computing

20、)架构来,采用 Oracle 数据库和 Oracle 真正 应用集群来 重新打造 并强化其 基础架构 和数据仓 库环 境2.4、安装 Oracle 数据库注意:1、 安装的时候 ,一定要 关掉防火 墙。 否则 可能造成 安装 不成功-7-2、 全局数据库 名 SID,类似 于 MYSQL 中常用的 localhost.Oracle 教程3、 字符集一定 要选择正 确。一旦 选错,除 非更改成 该字 符集的父类 。否则只 能重装4、 安装完主要 的用户为 :a) 普通用户: Scott/tiger(练习常 用 )b) 普通管理员 :S ystem/system c)超级管理员 :S ys/sys

21、5、安装完后 的服务配 置 (运行中输 入:se rvices.msc)开启该服务 ,会占用 tomcat 的 8080 端口。查看端口号 :t asklist|findstr “8080“如果装完 Oracle 后, 又改了机器名可 能会导 致 Listener 服务无 法启动, 解决 方式: 修改 C:oracleora92networkadmin listener.ora 下的 HOST2.5、卸载 Oracle 数据库-8-2.6、 Oracle 目录( Admin,oracle92,oradata)Oracle 教程Q:这三个文件夹各存放什么文 件?2.7、 Oracle 客户端 工

22、具2.7.1、 SQLPLUS2.7.2、 SQLPLUSW2.7.3、 Sql Plus WorkSheet2.7.4、 iSqlplus( HTTP)http:/localhost:7778/isqlplus2.7.5、 PL /SQL Developer7.14 以上版 本,带有 自动提示 功能2.7.6、 Object Browser国外用的比 较多(日 本)-9-2.8、 Scott 案 例下表分析2.8.1、 雇 员 表 : EMPOracle 教程2.8.2、 部 门 表 : Dept2.8.3、 工 资 等 级 表 : Salgrade-10-Oracle 教程2.8.4、 奖

23、 金 表 : Bonus第三章 查询基础3.1、入门语句普通用户连 接: Conn scott/tiger 超级管理员 连接: Conn “sys/sys as sysdba” Disconnect; 断开连接Save c:1.txt 把 SQL 存到文件Ed c:1.txt 编辑 SQL 语句 c:1.txt 运行 SQL 语句Desc emp; 描述 Emp 结构Select * from tab; 查看该用户 下的所有 对象Show user; 显示当前用 户如果在 sys 用户下:查询 Select * from emp; 会报错, 原因 : emp 是属于 scott, 所以此时必

24、须使用: select * from scott.emp;/ 运行上一条 语句3.2、 SQL 简介SQL 全名是结构化查询语 言( Structured Query Language,是用于数据库 中 的标准 数据查 询语言, IBM 公司最 早使用 在 其开发的 数据库系 统中 。 1986 年 10 月, 美国 ANSI 对 SQL 进行规范后 ,以此作 为 关系式 数据库管 理系统 的 标准 语言 (ANSI X3. 135-1986),1987 年 得到 国际标 准组织的 支持下成 为国际 标 准。不过 各种 通行的数据 库系统在 其实践过 程中都对 SQL 规范作了某些 编 改和扩

25、充 。 所以 , 实际上 不 同数据库系 统之间的 SQL 语言 不能完 全相互通用DML 语句(数据 操 作语言) Insert、U pdate、 Delete、Me rge DDL 语句(数 据 定义语言 ) Create、A lter、 Drop、T runcate DCL 语句(数据控制 语言) Grant、R evoke事务控制语 句 Commit 、R ollback、S avepoint-11-3.3、简单的 Select 语句3.4、使用算术 表达式 + - / *3.5、连接运算 符 |3.6、使用字段 别名 as3.7、空值 is null3.8、去除重复 行 distin

26、ct3.9、查询结果 排序 order by asc(desc)3.10、 比较运算符 ) between and3.11、 in 操作 not in3.12、 模糊查询 like% 表示零 或多个字 符_ 表示一 个字符对于特殊符 号可使用 ESCAPE 标识符来查找select * from emp where ename like %*_% escape *Oracle 教程上面的 escape 表示* 后面的那个符号不 当 成特殊字 符 处理,就是 查找普通 的 _符号3.13、 逻辑运算符 or and not3.14、 练习选 择 在部门 30 中 员 工 的 所 有 信息Sele

27、ct * from emp where deptno=30;-12-Oracle 教程列 出 职 位 为 ( MANAGER)的 员 工 的 编 号 , 姓 名Select empno,ename from emp where job = Manager;找 出 奖 金 高 于 工 资 的 员 工Select * from emp where commsal;找 出 每 个 员 工 奖 金 和 工 资 的 总和Select sal+comm,ename from emp;找 出 部门 10 中 的 经 理 (MANAGER)和部门 20 中 的 普 通 员 工 (CLERK)Select *

28、from emp where (deptno=10 and job=MANAGER) or (deptno=20 and job=CLERK);找 出 部门 10 中 既 不 是 经 理 也 不 是 普 通 员 工 , 而 且 工 资 大 于 等 于 2000 的 员工Select * from emp where deptno=10 and job not in(MANAGER,CLERK) and sal=2000;找 出 有 奖 金 的 员 工 的 不 同 工 作Select distinct job from emp where comm is not null and comm0找

29、出 没 有 奖 金 或 者 奖 金 低于 500 的 员 工Select * from emp where comm 2000;group by deptno;5.5、 HAVING 子句select deptno, job, avg(sal)from emp-19-where hiredate = to_date(1981-05-01,yyyy-mm-dd)group by deptno,job having avg(sal) 1200 order by deptno,job;5.6、分组函数 嵌套select max(avg(sal)from empgroup by deptno;5.7、

30、练习分 组 统 计 各 部 门 下 工 资 500 的 员 工 的 平 均 工 资 、Oracle 教程Select avg(sal) from emp where sal500 group by deptno ;统 计 各 部 门 下 平 均 工 资 大于 500 的 部 门select deptno,avg(sal) from emp group by deptno having avg(sal)500 ;算 出 部门 30 中 得 到 最 多 奖 金 的 员 工 奖 金Select max(comm) from emp where deptno = 30 ;算 出 部门 30 中 得 到

31、 最 多 奖 金 的 员 工 姓 名select ename from emp where comm = (select max(comm) from emp where deptno=30);算 出 每 个 职 位 的 员 工 数 和 最 低 工 资Select job,min(sal),count(*) from emp group by job;-20-Oracle 教程算 出 每 个 部 门 ,, 每 个 职 位 的 平 均 工 资 和 平 均 奖 金 (平 均 值 包 括 没 有 奖 金 ), 如 果 平 均 奖 金 大于 300, 显 示 “奖金 不 错 ”, 如 果 平 均 奖金

32、 100 到 300, 显 示 “奖 金 一 般 ”, 如 果 平 均 奖 金 小于 100, 显 示 “基 本 没 有 奖 金 ”, 按 部 门 编 号 降 序 , 平 均 工 资 降 序 排列Select avg(sal),avg(nvl(comm.,0) case when avg(nvl(comm.,0)300 then 奖 金 不 错 when avg(nvl(comm.,0)300 then 奖金不错 end 奖金状况 from emp group by job order by job desc,avg(sal) desc;列 出 员 工 表 中 每 个 部 门 的 员 工 数

33、, 和 部门 noSelect count(*),deptno from emp group by deptno;得 到 工 资 大 于 自 己 部 门 平 均 工 资 的 员 工 信 息select * from emp e1,(select deptno,avg(sal) as avgsal from emp group by deptno) e2where e1.deptno=e2.deptno and e1.sal e2.avgsal;分 组 统 计 每 个 部 门 下 , 每 种 职 位 的 平 均 奖 金 ( 也 要 算 没 奖 金 的 人 ) 和 总 工 资 (包 括 奖 金 )

34、select deptno,job,avg(nvl(comm,0),sum(sal+nvl(comm,0) from emp group by deptno,job;第六章 多表查 询6.1、笛卡尔集 (Cross Join)Select * from emp,dept;6.2、等值连接 (Equijoin)(Natural joinon)select empno, ename, sal, emp.deptno, dname from emp, dept where emp.deptno = dept.deptno;6.3、非等值连 接 (Non-Equijoin)select ename,e

35、mpno,grade from emp,salgrade where sal between losal and hisal;-21-6.4、自连接 (Self join)Oracle 教程select e.empno,e.ename,m.empno,m.ename from emp e,emp m where e.mgr =m.empno;select e.empno,e.ename,m.empno,m.ename from emp e,emp m where m.mgr =e.empno;6.5、左外联接 ( Left Outer Join )select s.sid,s.sname,s1

36、.sid,s1.sname from student s,student1 s1 where s.sid=s1.sid(+);select empno,ename,dname from emp left outer join dept on emp.deptno =dept.deptno;6.6、右外联接 ( Right Outer Join)select s.sid,s.sname,s1.sid,s1.sname from student s,student1 s1 where s.sid(+)=s1.sid;select empno,ename,dname from emp right o

37、uter join dept on emp.deptno= dept.deptno;6.7、满外联接 ( Full Outer Join)select empno,ename,dname from emp full outer join dept on emp.deptno =dept.deptno;12243645内连接2244-22-Oracle 教程满连接12234456左连接12 234 45右连接2 24 466.8、集合操作 UNION:并集,所 有的内容 都查询, 重复的 显 示一 次 UNION ALL:并集,所有的内容 都 显示,包 括重 复的 INTERSECT:交集:只显

38、示重复的 MINUS:差集:只显 示 对方没 有 的 (跟顺 序是有关 系的) 首先建立一 张只包含 20 部门 员 工信息的 表:CREATE TABLE emp20 AS SELECT * FROM emp WHERE deptno=20 ;1、 验证 UNION 及 UNION ALLUNION:S ELECT * FROM emp UNION SELECT * FROM emp20 ;使用此语句 重复的内 容不再显 示了UNION ALL:S ELECT * FROM emp UNION ALL SELECT * FROM emp20 ;重复的内容 依然显示2、 验证 INTERSEC

39、TSELECT * FROM emp INTERSECT SELECT * FROM emp20 ;只显示了两 个表中彼 此重复的 记录。3、 MINUS:返回差异的记录SELECT * FROM emp MINUS SELECT * FROM emp20 ;只显示了两 张表中的 不同记录-23-满链接也可 以用以下 的方式来 表示:Oracle 教程select t1.id,t2.idfrom table1t1,table t2 wheret1.id=t2.id(+)unionselect t1.id,t2.idfrom table1t1,table t2 wheret1.id(+)=t2.

40、id第七章 子查询7.1、单行子查 询select * from empwhere sal (select sal from emp where empno = 7566);7.2、子查询空 值 /多值问题如果子查询 未返回任 何行,则 主查询也 不会返回 任何 结果(空 值 )select * from emp where sal (select sal from emp where empno = 8888);如果子查询 返回单行 结果,则 为单行子 查询,可 以在 主查 询中对其使 用相应的 单行记录 比较运算 符(正 常 )select * from emp where sal (se

41、lect sal from emp where empno = 7566);如果子查询 返回多行 结果,则 为多行子 查询,此 时不 允许 对其使用单 行记录比 较运算符(多 值 )select * from emp where sal (select avg(sal) from emp group by deptno);/非法7.3、多行子查 询select * from emp where sal any(select avg(sal) from emp group by deptno);select * from emp where sal all(select avg(sal) fro

42、m emp group by deptno);select * from emp where job in (select job from emp where ename = MARTIN or ename = SMITH);7.4、T opN 查 询select * from emp where rownum=1 or rownum=2;select *-24-from (select * from emp order by sal desc)where rownum =3;select *from(select rownum no,e.* from (select * from emp

43、order by sal desc) e)whereno=3 and no3) ed where d.deptno=ed.deptno;找 出 工资比 jones 多 的 员 工select * from emp where sal=(select sal from emp where lower(ename)=jones);列 出 所 有 员 工 的 姓 名 和 其 上 级 的 姓名select e1.ename as lower ,e2.ename as upper from emp e1,emp e2 where e1.mgr= e2.empno;select e1.ename as l

44、ower ,e2.ename as upper from emp e1,emp e2 where e1.mgr = e2.empno(+);以 职 位 分 组 , 找 出 平 均 工 资 最 高 的 两 种 职 位Select * from ( select avg(sal) from emp order by job desc ) where rownum (select max(sal) from emp where deptno=20) and e.deptno=d.deptno得 到 平 均 工 资 大于 2000 的 工 作 职 种select job from emp group

45、by job having avg(sal) 2000;-26-Oracle 教程分 部 门 得 到 工 资大于 2000 的 所 有 员 工 的 平 均 工 资 , 并 且 平 均 工 资 还 要 大于 2500select deptno,avg(sal) from emp where sal2000 group by deptno having avg(sal)2500;得 到 每 个 月 工 资 总 数 最 少 的 那 个 部 门 的 部 门 编 号 , 部 门 名 称 , 部 门 位置select * from dept wheredeptno = (select e.deptno f

46、rom(select deptno,sum(sal) from emp group by deptno order by sum(sal)ewhere rownum=1);分 部 门 得 到 平 均 工 资 等 级为 2 级 ( 等 级 表 ) 的 部 门 编号select new.dno from salgrade sa,(select deptno as dno,avg(sal) as avgsal from emp group by deptno) new where sa.grade=4 and new.avgsal between sa.losal and sa.hisal;、查 找

47、 出部门 10 和部门 20 中 , 工 资 最 高第 3 名 到 工 资第 5 名 的 员 工 的 员 工 名 字 , 部 门 名 字 , 部 门 位 置select emp.ename,dept.dname,dept.loc fromemp, dept,(select rownum no,new.* from(select * from empwhere emp.deptno = 10 or deptno = 20 order by emp.sal desc) new)ewhere emp.deptno = dept.deptno and e.no =3 and e.no (m.sal+n

48、vl(m,0);-27-Oracle 教程查 找 出 工 资 等 级不为 4 级 的 员 工 的 员 工 名 字 , 部 门 名 字 , 部 门 位置select ename,dname,loc,salfrom dept d,(select emp.deptno,emp.ename,emp.sal from emp,salgradewhere sal between losal and hisal and grade !=4) new where d.deptno = new.deptno;select e.ename,d.dname,d.loc from emp e,dept d,(sele

49、ct * from salgrade where grade=4) s where e.deptno=d.deptno and(e.sals.hisal);查 找 出 职 位和 MARTIN 或 者 SMITH一样的 员 工 的 平 均 工资select avg(sal)from empwhere job in (select jobfrom empwhere ename=MARTIN or ename=SMITH);查 找 出 不 属 于 任 何 部 门 的 员 工select * from emp where deptno is null or deptno not in(select deptno from dept);按 部 门 统 计 员 工 数 , 查 处 员 工 数 最 多 的 部 门 的 第 二 名 到 第 五 名 ( 列 出 部 门 名 字 , 部 门 位 置 )select dept.dname, dept.locfrom (select rownum no, deptno from(select count(*) employeeSum, deptno from emp group b

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报