oracle数据库将多个列的查询结果集合并到一行中

方法一:

select field1,listagg(field3,',') within GROUP (order by field3) from test group by field1;

方法二(在方法一报出所拼接的字符串长度过长时,使用方法二):

select field1,xmlagg(xmlparse(content field3||',' wellformed) order by field3).getclobval() from test1 group by field1

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库Oracle的相关概念和原理、Oracle数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用开发基础,并通过两个完整案例来介绍基于Java开发包和Oracle数据库进行案例开发的详细过程。对于初学者,《Oracle11g从入门到精通》是一本很好的入门教程,对Oracle管理员和应用程序开发员,也有很好的学习和参考价值。   Oracle数据库系统是数据库领域最优秀的数据库之一,《Oracle11g从入门到精通》以Oracle最新版本Oracle 11g为蓝本,系统地讲述了Oracle数据库的概念、管理和应用开发等内容。   全书结构合理、内容翔实、示例丰富、语言简洁。不仅适合作为高等院校本/专科计算机软件、信息系统、电子商务等相关专业的数据库课程教材,同时还适合作为各种数据库技术培训班的教材以及数据库开发人员的参考资料。 目录 前言 第1章 Oracle数据库概述 1.1 Oracle数据库产品结构及组成 1.1.1 企业版 1.1.2 标准版 1.1.3 标准版 1.1.4 个人版 1.2 数据库基本术语 1.2.1 数据库 1.2.2 数据库管理系统 1.2.3 数据库系统 1.2.4 数据库模式 1.2.5 数据模型 1.2.6 数据完整性约束 1.2.7 联机事务处理和联机分析处理 1.2.8 数据仓库 1.3 Oracle基本术语 1.3.1 数据字典 1.3.2 数据文件 1.3.3 控制文件 1.3.4 日志文件 1.3.5 表空间 1.3.6 段 1.3.7 区 1.3.8 数据块 1.4 Oracle 11g的新特性 1.4.1 数据库管理部分 1.4.2 PL/SQL部分 1.4.3 其他部分 第2章 Oracle在Windows平台上的安装与配置 2.1 Oracle通用安装器 2.2 Oracle数据库软件的安装 2.3 Oracle数据库软件的卸载 2.3.1 停止所有的Oracle服务 2.3.2 用OUI卸载所有的Oracle组件 2.3.3 手动删除Oracle遗留的成分 2.4 Oracle的应用结构 2.4.1 单磁盘独立主机结构 2.4..2 多磁盘独立主机结构 2.4.3 多数据库独立主机结构 2.4.4 C/S结构 2.4.5 分布式结构 2.5 Oracle网络与防火墙 2.5.1 Oracle网络服务 2.5.2 配置Oracle网络环境 2.5.3 Oracle防火墙 第3章 SQL语言基础 3.1 SQL概述 3.1.1 SQL语言的功能 3.1.2 SQL的特点 3.1.3 SQL语句的编写规则 3.2 数据定义 3.2.1 CREATE 3.2.2 DROP 3.2.3 ALTER 3.3 数据查询 3.3.1 简单查询 3.3.2 WHERE子句 3.3.3 ORDER BY子句 3.3.4 GROUPBY子句 3.3.5 HAVING子句 3.3.6 多表连接查询 3.3.7 集合操作 3.3.8 子查询 3.4 数据操纵 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 3.4.4 TRLINCATE语句 3.5 数据控制 3.5.1 GRANT语句 3.5.2 REVOKE语句 3.6 Oracle常用函数 3.6.1 字符类函数 3.6.2 数字类函数 3.6.3 日期类函数 3.6.4 转换类函数 3.6.5 聚集类函数 第4章 Oracle PL/SQL语言及编程 4.1 PL/SQL简介 4.1.1 PL/SQL的基本结构 4.1.2 PUSQL注释 4.1.3 PL/SQL字符集 4.1.4 PL/SQL数据类型 4.1.5 PIJSQL变量和常量 4.1.6 PL/SQL语句控制结构 4.1.7 PL/SQL表达式 4.2 PL/SQL的游标 4.2.1 基本原理 4.2.2 显式游标 4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 4.3.1 创建过程 4.3.2 调用过程 4.3.3 删除过程 4.3.4 过程的参数类型及传递 4.4 函数 4.4.1 创建函数 4.4.2 调用函数 4.4.3 删除函数 4.5 程序包 4.5.1 基本原理 4.5.2 创建包 4.5.3 调用包 4.5.4 删除包 4.6 触发器 4.6.1 触发器的基本原理 4.6.2 创建触发器 4.6.3 执行触发器 4.6.4 删除触发器 第5章 熟悉SQL*Plus-Oracle数据库环境 5.1 进入和退出SQL*Plus环境 5.1.1 启动SQL*Plus 5.1.2 创建SQL*Plus快捷方式 5.1.3 退出SQL*Plus环境 5.2 SQL*Plus编辑器的编辑命令 5.2.1 编辑命令 5.2.2 保存命令 5.2.3 加入注释 5.2.4 运行命令 5.2.5 编写交互命令 5.2.6 使用绑定变量 5.2.7 跟踪语句 5.3 设置SQL*Plus环境 5.3.1 SHOW命令 5.3.2 SET命令 5.4 SQL*Plus环境介绍 5.4.1 存储SQL*Plus环境 5.4.2 假脱机输出 5.4.3 联机帮助 5.5 使用SQL*Plus格式化查询结果 5.5.1 格式化 5.5.2 定义页与报告的标题和维数 5.5.3 存储和打印结果 第6章 Oracle的基本操作 6.1 Oracle的启动与关闭 6.1.1 启动Oracle数据库 6.1.2 关闭Oracle数据库 6.2 表的创建与改进 6.2.1 表的基本概念 6.2.2 表结构设计 6.2.3 表的创建 6.2.4 修改表结构 6.3 索引 6.3.1 索引的概念 6.3.2 创建索引 6.3.3 删除索引 6.4 视图 6.4.1 视图的概念 6.4.2 创建视图 6.4.3 视图更改 6.4.4 删除视图 6.5 数据操纵与数据查询 6.5.1 复制原表插入记录 6.5.2 使用视图 6.5.3 使用PL/SQL语言 6.5.4 数据查询 第7章 Oracle数据库管理操作 7.1 学会使用视图 7.1.1 增加安全性 7.1.2 隐藏数据的复杂性 7.1.3 实现命名简洁性和易读性 7.1.4 实现更改灵活性 7.2 实现记录的唯一性 7.2.1 用键实现 7.2.2 创建唯一索引 7.2.3 使用序实现 7.3 实现数据的完整性 7.3.1 域完整性 7.3.2 实体完整性 7.3.3 引用完整性 7.3.4 存储过程检查 7.3.5 使用触发器 7.4 避免更改引起的大量改动 7.4.1 使用视图 7.4.2 使用同义名 7.4.3 使用光标 第8章 数据库用户管理 8.1 授予权限 8.1.1 直接授权 8.1.2 授权角色 8.1.3 使用OEM的“安全管理”创建 角色 8.1.4 使用ALTERUSER语句修改 用户的默认角色 8.1.5 使用SET ROLE控制角色使用 8.2 回收权限 8.2.1 逐一回收 8.2.2 删除角色 8.2.3 删除数据库对象 8.2.4 删除用户 8.3 不同用户权限管理 8.4 管理对数据库对象的访问 8.4.1 使用用户口令 8.4.2 使用权限控制 8.4.3 使用数据库链接 8.4.4 使用配置文件 第9章 数据库空间管理 9.1 建立数据库时的空间设计 9.1.1 指定system表空间初值 9.1.2 设置其他表空间初值 9.2 在空间充足时的管理 9.2.1 使用数据字典动态监视 9.2.2 向表空间增加数据文件 9.3 解决空间不足的方法 9.3.1 增加数据文件大小 9.3.2 创建新表空间 9.3.3 动态增加表空间 9.3.4 三种方法的区别与比较 9.4 合理利用存储空间 9.4.1 采用正确的数据类型 9.4.2 存储参数的正确设置 9.4.3 定期回收无用表空间 9.4.4 归档历史表空间 第10章 备份与恢复机制 10.1 备份与恢复的方法 10.2 使用数据泵进行逻辑备份和恢复 10.2.1 使用expdp导出数据 10.2.2 使用impdp导入数据 10.3 使用OEM进行备份与恢复 10.3.1 通过导出文件来备份 10.3.2 通过导入来恢复 10.4 脱机备份与恢复 10.4.1 脱机备份 10.4.2 脱机恢复 10.5 联机备份与恢复 10.5.1 归档日志模式的设置 10.5.2 创建恢复目录所用的表空间 10.5.3 创建RMAN用户并授权 10.5.4 创建恢复目录 10.5.5 注册目标数据库 10.5.6 使用RMAN程序进行备份 10.5.7 使用RMAN程序进行恢复 10.6 自动备份与恢复 10.6.1 闪回数据库 10.6.2 闪回表 10.6.3 闪回回收站 10.6.4 闪回查询 10.6.5 闪回版本查询 10.6.6 闪回事务查询 10.7 几种备份与恢复方法的比较 第11章 控制文件及日志文件的管理 11.1 控制文件 11.1.1 控制文件概述 11.1.2 多路复用控制文件 11.1.3 控制文件的创建 11.1.4 控制文件的备份与恢复 11.1.5 控制文件的查询与删除 11.1.6 OEM控制文件的管理 11.2 日志文件 11.2.1 日志文件及存储策略 11.2.2 增加日志组和日志成员 11.2.3 设置日志自动存档功能 11.2.4 监视日志工作 第12章 数据库控制 12.1 用事务控制操作 12.1.1 什么是事务 12.1.2 设置事务 12.1.3 事务提交 12.1.4 事务回滚 12.1.5 设置回退点 12.2 用锁控制并发存取 12.2.1 为何加锁 12.2.2 加锁的方法 第13章 Oracle数据库的安全管理 13.1 Oracle数据库安全性概述 13.1.1 Oracle 11g的安全性体系 13.1.2 Oracle 11g的安全性机制 13.2 用户管理 13.2.1 创建用户 13.2.2 修改用户 13.2.3 删除用户信息 13.2.4 查询用户 13.3 虚拟专用数据库 13.3.1 基于行的VPD 13.3.2 基于的VPD 13.4 透明数据加密(’FDE) 13.4.1 创建Oracle钱夹 13.4.2 加密表 13.4.3 加密表空间 13.5 对备份进行加密 13.5.1 透明加密模式 13.5.2 基于密码的加密模式 13.5.3 混合加密模式 第14章 留言板系统 14.1 系统概述 14.1.1 留言板系统的应用背景 14.1.2 留言板系统的总体需求 14.1.3 留言板系统的功能分析 14.1.4 留言板系统的设计思路 14.2 系统功能模块设计 14.2.1 系统框架 14.2.2 系统功能模块划分 14.3 数据库设计 14.3.1 数据库需求分析 14.3.2 数据库概念结构设计 14.3.3 数据库逻辑结构设计 14.3.4 数据库表的创建 14.3.5 数据库的连接 14.4 系统主要功能模块的设计与实现 14.4.1 用户登录模块 14.4.2 添加留言模块 14.4.3 回复留言模块 14.4.4 访问留言人主页 14.4.5 删除留言 14.4.6 修改密码 14.5 本章小结 第15章 新闻发布系统 15.1 系统概述 15.1.1 新闻发布系统的应用背景 15.1.2 新闻发布系统的总体需求 15.1.3 新闻发布系统的功能分析 15.1.4 新闻发布系统的设计思路 15.2 系统功能模块设计 15.3 数据库设计 15.3.1 数据库需求分析 15.3.2 数据库概念结构设计 15.3.3 数据库逻辑结构设计 15.3.4 数据库表的创建 15.3.5 数据库的连接 15.4 网站总体框架 15.4.1 文件布局 15.4.2 网站首页的运行结果 15.5 系统后台主要功能模块的设计与实现 15.5.1 登录模块设计 15.5.2 管理员维护模块设计 15.5.3 新闻管理模块设计 15.6 系统前台主要功能模块的设计与实现 15.6.1 今日新闻的显示 15.6.2 查找新闻 15.6.3 查看新闻人物和投票 15.7 本章小结
一、 数据库介绍 1 1.1表是数据库存储数据的基本单位 1 1.2数据库标准语言 1 1.3数据库(DB) 1 1.4数据库种类 1 1.5数据库如何定义表 1 1.6 create database dbname的含义 1 1.7安装DBMS 1 1.8宏观上是数据-->database 1 1.9远程登录:telnet IP地址 1 1.10 TCP/IP通信协议 2 1.11数据库建连接必须提供以下信息 2 1.12一台机器可跑几个数据库,主要受内存大小影响 2 1.13源表和结果集 2 1.14几个简单命令 2 1.15 tarena给jsd1304授权 2 1.16课程使用的5个表 3 二、 select from语句 5 2.1 select语句功能 5 2.2 select语句基本语法 5 2.3别名 5 2.4算术表达式 5 2.5空值null的处理 5 2.6 nvl(p1,p2)函数 5 2.7拼接运算符 || 6 2.8文字字符串 6 2.9消除重复行 6 2.10其他注意事项 6 三、 SQL语句的处理过程 7 3.1 SQL语句处理过程 7 3.2处理一条select语句 7 四、 where子句 8 4.1 where子句后面可以跟什么 8 4.2语法和执行顺序 8 4.3字符串是大小写敏感的,在比较时严格区分大小写 8 4.4 where子句后面可以跟多个条件表达式 8 4.5 between and运算符 8 4.6 in运算符(多值运算符) 8 4.7 like运算符 9 4.8 is null运算符 9 4.9比较和逻辑运算符(单值运算符) 9 4.10多值运算符all、any 9 4.11运算符的否定形式 9 五、 order by子句 10 5.1语法和执行顺序 10 5.2升降序 10 5.3 null值在排序显示 10 5.4 order by后面可以跟什么 10 5.5多排序 10 六、 单行函数的使用 11 6.1数值类型 11 6.2日期类型 11 6.3字符类型 13 6.4转换函数 14 6.5其他注意事项 14 七、 SQL语句的分支 15 7.1分支表达式 15 7.2分支函数 15 八、 组函数 16 8.1报表统计常用 16 8.2缺省情况组函数处理什么值 16 8.3当组函数要处理的所有值都为null时 16 8.4行级信息和组级信息 16 九、 group by子句 17 9.1语法和执行顺序 17 9.2分组过程 17 9.3常见错误 17 9.4多分组 17 十、 having子句 18 10.1语法和执行顺序 18 10.2执行过程 18 10.3 where和having区别 18 十一、 非关联子查询 19 11.1语法 19 11.2子查询的执行过程 19 11.3常见错误 19 11.4子查询与空值 19 11.5多查询 20 十二、 关联子查询 21 12.1语法 21 12.2执行过程 21 12.3 exists 21 12.4 exists执行过程 21 12.5 not exists 22 12.6 not exists执行过程 22 12.7 in和exists比较 22 十三、 多表查询 23 13.1按范式要求设计表结构 23 13.2多表连接的种类 23 13.3交叉连接 23 13.4内连接 23 13.5外连接 25 13.6非等值连接 27 13.7表连接总结 27 十四、 集合 28 14.1表连接主要解决的问题 28 14.2集合运算 28 14.3集合运算符 28 14.4子查询、连接、集合总结 29 十五、 排名分页问题 30 15.1什么是rownum 30 15.2 where rownum<=5的执行过程 30 15.3 where rownum=5的执行过程 30 十六、 约束constraint 31 16.1约束的类型 31 16.2 primary key:主键约束 31 16.3 not null:非空约束 31 16.4 unique key:唯一建约束 31 16.5 references foreign key:外键约束 32 16.6 check:检查约束 34 十七、 事务 35 17.1 transaction 35 17.2定义 35 17.3事务的特性:ACID 35 17.4事务的隔离级别 35 17.5数据库开发的关键挑战 35 17.6锁的概念 36 17.7 Oracle的锁机制 36 17.8事务不提交的后果 36 17.9回滚事务rollback 36 17.10保留点savepoint 36 十八、 数据库对象:视图view 37 18.1带子查询的create table 37 18.2带子查询的insert 37 18.3定义缺省值:default 37 18.4 视图view 38 18.5视图的应用场景 38 18.6视图的分类 39 18.7视图的维护 39 十九、 数据库对象:索引index 41 19.1创建index 41 19.2扫描表的方式 41 19.3索引的结构 41 19.4为什么要使用索引 42 19.5哪些适合建索引 42 19.6索引的类型 42 19.7哪些写法会导致索引用不了 43 二十、 数据库对象:序号sequence 44 20.1什么是sequence 44 20.2创建sequence 44 20.3缺省是nocycle(不循环) 44 20.4缺省cache 20 44 二十一、 其他注意事项 46 21.1删除表,删除,删除的值 46 21.2多对多关系的实现 46 21.3一对多(两张表) 46 21.4一对一 46 21.5数据库对象 46 12.6缺省(默认)总结: 46
内容简介    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库Oracle的相关概念和原理、Oracle数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用开发基础,并通过两个完整案例来介绍基于Java开发包和Oracle数据库进行案例开发的详细过程。对于初学者,《Oracle11g从入门到精通》是一本很好的入门教程,对Oracle管理员和应用程序开发员,也有很好的学习和参考价值。   Oracle数据库系统是数据库领域最优秀的数据库之一,《Oracle11g从入门到精通》以Oracle最新版本Oracle 11g为蓝本,系统地讲述了Oracle数据库的概念、管理和应用开发等内容。   全书结构合理、内容翔实、示例丰富、语言简洁。不仅适合作为高等院校本/专科计算机软件、信息系统、电子商务等相关专业的数据库课程教材,同时还适合作为各种数据库技术培训班的教材以及数据库开发人员的参考资料。 目录 前言 第1章 Oracle数据库概述 1.1 Oracle数据库产品结构及组成 1.1.1 企业版 1.1.2 标准版 1.1.3 标准版 1.1.4 个人版 1.2 数据库基本术语 1.2.1 数据库 1.2.2 数据库管理系统 1.2.3 数据库系统 1.2.4 数据库模式 1.2.5 数据模型 1.2.6 数据完整性约束 1.2.7 联机事务处理和联机分析处理 1.2.8 数据仓库 1.3 Oracle基本术语 1.3.1 数据字典 1.3.2 数据文件 1.3.3 控制文件 1.3.4 日志文件 1.3.5 表空间 1.3.6 段 1.3.7 区 1.3.8 数据块 1.4 Oracle 11g的新特性 1.4.1 数据库管理部分 1.4.2 PL/SQL部分 1.4.3 其他部分 第2章 Oracle在Windows平台上的安装与配置 2.1 Oracle通用安装器 2.2 Oracle数据库软件的安装 2.3 Oracle数据库软件的卸载 2.3.1 停止所有的Oracle服务 2.3.2 用OUI卸载所有的Oracle组件 2.3.3 手动删除Oracle遗留的成分 2.4 Oracle的应用结构 2.4.1 单磁盘独立主机结构 2.4..2 多磁盘独立主机结构 2.4.3 多数据库独立主机结构 2.4.4 C/S结构 2.4.5 分布式结构 2.5 Oracle网络与防火墙 2.5.1 Oracle网络服务 2.5.2 配置Oracle网络环境 2.5.3 Oracle防火墙 第3章 SQL语言基础 3.1 SQL概述 3.1.1 SQL语言的功能 3.1.2 SQL的特点 3.1.3 SQL语句的编写规则 3.2 数据定义 3.2.1 CREATE 3.2.2 DROP 3.2.3 ALTER 3.3 数据查询 3.3.1 简单查询 3.3.2 WHERE子句 3.3.3 ORDER BY子句 3.3.4 GROUPBY子句 3.3.5 HAVING子句 3.3.6 多表连接查询 3.3.7 集合操作 3.3.8 子查询 3.4 数据操纵 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 3.4.4 TRLINCATE语句 3.5 数据控制 3.5.1 GRANT语句 3.5.2 REVOKE语句 3.6 Oracle常用函数 3.6.1 字符类函数 3.6.2 数字类函数 3.6.3 日期类函数 3.6.4 转换类函数 3.6.5 聚集类函数 第4章 Oracle PL/SQL语言及编程 4.1 PL/SQL简介 4.1.1 PL/SQL的基本结构 4.1.2 PUSQL注释 4.1.3 PL/SQL字符集 4.1.4 PL/SQL数据类型 4.1.5 PIJSQL变量和常量 4.1.6 PL/SQL语句控制结构 4.1.7 PL/SQL表达式 4.2 PL/SQL的游标 4.2.1 基本原理 4.2.2 显式游标 4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 4.3.1 创建过程 4.3.2 调用过程 4.3.3 删除过程 4.3.4 过程的参数类型及传递 4.4 函数 4.4.1 创建函数 4.4.2 调用函数 4.4.3 删除函数 4.5 程序包 4.5.1 基本原理 4.5.2 创建包 4.5.3 调用包 4.5.4 删除包 4.6 触发器 4.6.1 触发器的基本原理 4.6.2 创建触发器 4.6.3 执行触发器 4.6.4 删除触发器 第5章 熟悉SQL*Plus-Oracle数据库环境 5.1 进入和退出SQL*Plus环境 5.1.1 启动SQL*Plus 5.1.2 创建SQL*Plus快捷方式 5.1.3 退出SQL*Plus环境 5.2 SQL*Plus编辑器的编辑命令 5.2.1 编辑命令 5.2.2 保存命令 5.2.3 加入注释 5.2.4 运行命令 5.2.5 编写交互命令 5.2.6 使用绑定变量 5.2.7 跟踪语句 5.3 设置SQL*Plus环境 5.3.1 SHOW命令 5.3.2 SET命令 5.4 SQL*Plus环境介绍 5.4.1 存储SQL*Plus环境 5.4.2 假脱机输出 5.4.3 联机帮助 5.5 使用SQL*Plus格式化查询结果 5.5.1 格式化 5.5.2 定义页与报告的标题和维数 5.5.3 存储和打印结果 第6章 Oracle的基本操作 6.1 Oracle的启动与关闭 6.1.1 启动Oracle数据库 6.1.2 关闭Oracle数据库 6.2 表的创建与改进 6.2.1 表的基本概念 6.2.2 表结构设计 6.2.3 表的创建 6.2.4 修改表结构 6.3 索引 6.3.1 索引的概念 6.3.2 创建索引 6.3.3 删除索引 6.4 视图 6.4.1 视图的概念 6.4.2 创建视图 6.4.3 视图更改 6.4.4 删除视图 6.5 数据操纵与数据查询 6.5.1 复制原表插入记录 6.5.2 使用视图 6.5.3 使用PL/SQL语言 6.5.4 数据查询 第7章 Oracle数据库管理操作 7.1 学会使用视图 7.1.1 增加安全性 7.1.2 隐藏数据的复杂性 7.1.3 实现命名简洁性和易读性 7.1.4 实现更改灵活性 7.2 实现记录的唯一性 7.2.1 用键实现 7.2.2 创建唯一索引 7.2.3 使用序实现 7.3 实现数据的完整性 7.3.1 域完整性 7.3.2 实体完整性 7.3.3 引用完整性 7.3.4 存储过程检查 7.3.5 使用触发器 7.4 避免更改引起的大量改动 7.4.1 使用视图 7.4.2 使用同义名 7.4.3 使用光标 第8章 数据库用户管理 8.1 授予权限 8.1.1 直接授权 8.1.2 授权角色 8.1.3 使用OEM的“安全管理”创建 角色 8.1.4 使用ALTERUSER语句修改 用户的默认角色 8.1.5 使用SET ROLE控制角色使用 8.2 回收权限 8.2.1 逐一回收 8.2.2 删除角色 8.2.3 删除数据库对象 8.2.4 删除用户 8.3 不同用户权限管理 8.4 管理对数据库对象的访问 8.4.1 使用用户口令 8.4.2 使用权限控制 8.4.3 使用数据库链接 8.4.4 使用配置文件 第9章 数据库空间管理 9.1 建立数据库时的空间设计 9.1.1 指定system表空间初值 9.1.2 设置其他表空间初值 9.2 在空间充足时的管理 9.2.1 使用数据字典动态监视 9.2.2 向表空间增加数据文件 9.3 解决空间不足的方法 9.3.1 增加数据文件大小 9.3.2 创建新表空间 9.3.3 动态增加表空间 9.3.4 三种方法的区别与比较 9.4 合理利用存储空间 9.4.1 采用正确的数据类型 9.4.2 存储参数的正确设置 9.4.3 定期回收无用表空间 9.4.4 归档历史表空间 第10章 备份与恢复机制 10.1 备份与恢复的方法 10.2 使用数据泵进行逻辑备份和恢复 10.2.1 使用expdp导出数据 10.2.2 使用impdp导入数据 10.3 使用OEM进行备份与恢复 10.3.1 通过导出文件来备份 10.3.2 通过导入来恢复 10.4 脱机备份与恢复 10.4.1 脱机备份 10.4.2 脱机恢复 10.5 联机备份与恢复 10.5.1 归档日志模式的设置 10.5.2 创建恢复目录所用的表空间 10.5.3 创建RMAN用户并授权 10.5.4 创建恢复目录 10.5.5 注册目标数据库 10.5.6 使用RMAN程序进行备份 10.5.7 使用RMAN程序进行恢复 10.6 自动备份与恢复 10.6.1 闪回数据库 10.6.2 闪回表 10.6.3 闪回回收站 10.6.4 闪回查询 10.6.5 闪回版本查询 10.6.6 闪回事务查询 10.7 几种备份与恢复方法的比较 第11章 控制文件及日志文件的管理 11.1 控制文件 11.1.1 控制文件概述 11.1.2 多路复用控制文件 11.1.3 控制文件的创建 11.1.4 控制文件的备份与恢复 11.1.5 控制文件的查询与删除 11.1.6 OEM控制文件的管理 11.2 日志文件 11.2.1 日志文件及存储策略 11.2.2 增加日志组和日志成员 11.2.3 设置日志自动存档功能 11.2.4 监视日志工作 第12章 数据库控制 12.1 用事务控制操作 12.1.1 什么是事务 12.1.2 设置事务 12.1.3 事务提交 12.1.4 事务回滚 12.1.5 设置回退点 12.2 用锁控制并发存取 12.2.1 为何加锁 12.2.2 加锁的方法 第13章 Oracle数据库的安全管理 13.1 Oracle数据库安全性概述 13.1.1 Oracle 11g的安全性体系 13.1.2 Oracle 11g的安全性机制 13.2 用户管理 13.2.1 创建用户 13.2.2 修改用户 13.2.3 删除用户信息 13.2.4 查询用户 13.3 虚拟专用数据库 13.3.1 基于行的VPD 13.3.2 基于的VPD 13.4 透明数据加密(’FDE) 13.4.1 创建Oracle钱夹 13.4.2 加密表 13.4.3 加密表空间 13.5 对备份进行加密 13.5.1 透明加密模式 13.5.2 基于密码的加密模式 13.5.3 混合加密模式 第14章 留言板系统 14.1 系统概述 14.1.1 留言板系统的应用背景 14.1.2 留言板系统的总体需求 14.1.3 留言板系统的功能分析 14.1.4 留言板系统的设计思路 14.2 系统功能模块设计 14.2.1 系统框架 14.2.2 系统功能模块划分 14.3 数据库设计 14.3.1 数据库需求分析 14.3.2 数据库概念结构设计 14.3.3 数据库逻辑结构设计 14.3.4 数据库表的创建 14.3.5 数据库的连接 14.4 系统主要功能模块的设计与实现 14.4.1 用户登录模块 14.4.2 添加留言模块 14.4.3 回复留言模块 14.4.4 访问留言人主页 14.4.5 删除留言 14.4.6 修改密码 14.5 本章小结 第15章 新闻发布系统 15.1 系统概述 15.1.1 新闻发布系统的应用背景 15.1.2 新闻发布系统的总体需求 15.1.3 新闻发布系统的功能分析 15.1.4 新闻发布系统的设计思路 15.2 系统功能模块设计 15.3 数据库设计 15.3.1 数据库需求分析 15.3.2 数据库概念结构设计 15.3.3 数据库逻辑结构设计 15.3.4 数据库表的创建 15.3.5 数据库的连接 15.4 网站总体框架 15.4.1 文件布局 15.4.2 网站首页的运行结果 15.5 系统后台主要功能模块的设计与实现 15.5.1 登录模块设计 15.5.2 管理员维护模块设计 15.5.3 新闻管理模块设计 15.6 系统前台主要功能模块的设计与实现 15.6.1 今日新闻的显示 15.6.2 查找新闻 15.6.3 查看新闻人物和投票 15.7 本章小结
一、填空 1.在多进程Oracle实例系统,进程分为用户进程、后台进程和服务进程。 2.标准的SQL语言语句类型可以分为:数据定义语句(DDL)、数据操纵语句(DML)和数据控制语句(DCL)。 3.在需要滤除查询结果重复的行时,必须使用关键字Distinct; 在需要返回查询结果的所有行时,可以使用关键字ALL。 4.当进行模糊查询时,应使用关键字like和通配符问号(?)或百分号"%"。 5.Where子句可以接收From子句输出的数据,而HAVING子句则可以接收来自WHERE、FROM或GROUP BY子句的输入。 6.在SQL语句,用于向表插入数据的语句是Insert。 7.如果需要向表插入一批已经存在的数据,可以在INSERT语句使用Select语句。 8.使用Describe命令可以显示表的结构信息。 9.使用SQL*Plus的Get命令可以将文件检索到缓冲区,并且不执行。 10.使用Save命令可以将缓冲区的SQL命令保存到一个文件,并且可以使用Run命令运行该文件。 11.一个模式只能够被一个数据库对象所拥有,其创建的所有模式对象都保存在自己的模式。 12.根据约束的作用域,约束可以分为表级约束和级约束两种。级约束是字段定义的一部分,只能够应用在一个上;而表级约束的定义独立于的定义,它可以应用于一个表多个。 13.填写下面的语句,使其可以为Class表的ID添加一个名为PK_CLASS_ID的主键约束。 ALTER TABLE Class Add ____________ PK_LASS_ID (Constraint) PRIMARY KEY ________ (ID) 14. 每个Oracle 10g数据库在创建后都有4个默认的数据库用户:system、sys、sysman和DBcnmp 15. Oracle提供了两种类型的权限:系统权限和对象权限。系统权限提供了在Oracle数据库系统范围内执行某种任务的操作能力,而对象权限则是一种赋予用户在指定的数据库对象(如表、视图、过程等) 16. Oralce数据库在进行物理备份有联机备份和脱机备份两种方式可供选择。 . 17. 从存储结构的角度来说,Oracle数据库可分为物理结构和逻辑结构。 18. 表空间是Oracle数据库数据的逻辑组织,每个数据库至少有一个SYSTEM系统表空间。 19.视图是一个表示表的数据的数据库对象,它允许用户从一个表或一组表通过一定的查询语句建立一个“虚表”。 20.序是一种可被多个用户使用的用于产生一系唯一数字的数据库对象。尤其适合多用户环境,可以生成唯一的序号而没有磁盘I/O或事务处理锁定开销。 21. 一个表空间具有离线(OFFLINE)、在线(ONLINE)、只读(READ ONLY)、读写(READ WRITE)状态。 二、选择 1.在全局存储区SGA,哪部分内存区域是循环使用的?( B ) A.数据缓冲区 B.日志缓冲区 C. 共享池 D.大池 2.如果一个服务器进程非正常终止,Oracle系统将使用下哪一个进程来释放它所占用的资源?( D ) A.DBWR B.LGWR C. SMON D.PMON 3. 如果要查询数据库所有表的信息,应当使用下哪种数据字典视图?( A ) A. DBA视图 B. ALL视图 C. USER视图 D. 动态性能视图 4. 下哪一项是Oracle数据库最小的存储分配单元? ( C ) A. 表空间 B. 段 C. 盘区 D. 数据块 5. 下面的各选项哪一个正确描述了Oracle数据库的逻辑存储结构? ( A ) A. 表空间由段组成,段由盘区组成,盘区由数据块组成 B. 段由表空间组成,表空间由盘区组成,盘区由数据块组成 C. 盘区由数据块组成,数据块由段组成,段由表空间组成 D. 数据块由段组成,段由盘区组成,盘区由表空间组成 6. 下的哪个子句在SELECT语句用于排序结果集?( D ) A. Having子句 B. Where子句 C. From子句 D. Order by子句 7. Having子句的作用是( B )。 a. 查询结果的分组条件 B. 组的筛选条件 C. 限定返回的行的判断条件 D. 对结果集进行排序 8. 下哪个函数可以把一个的所有值相加求和? ( B ) A MAX B. SUM C. COUNT D. AVG 9. 下哪个子句是SELECT语句必选项?( A ) A. FROM B.WHERE C.HAVING D. ORDER BY 10. 下哪个子句实现对一个结果集进行分组和汇总?( D ) A.HAVING B. ORDER BY C. WHERE D. GROUP BY 11. 查询一个表的总记录数,可以采用_________统计函数。( C ) A. AVG(*) B. SUM(*) C. COUNT(*) D.MAX(*) 12. 要建立一个语句向Types表插入数据,这个表只有两,T_ID和T_Name。如果要插入一行数据,这一行的T_ID值是100,T_Name值是RFUIT。应该使用的SQL语句是_____。( A ) A. INSERT INTO Type Values(100, ‘FRUIT’) B. SELECT * FROM Type WHERE T_ID=100 AND T_NAME=’FRUIT’ C. UPDATE SET T_ID=100 FROM Types WHERE T_Name=’FRUIT’ D. DELET * FROM Types WHERE T_ID=100 AND T_Name=’FRUIT’ 13. 用_____语句修改表的一行或多行数据。( A ) A.Update B.set C.Select D.Where 14. 使用什么命令可以清除表所有的内容? ( D ) A.INSERT B.UPDATE C. DELETE D.TRUNCATE 15.关于模式的描述下哪一项不正确?( C ) A.表或索引等模式对象一定属于某一个模式 B.在Oracle数据库,模式与数据库用户是一一对应的 C.一个表可以属于多个模式 D.一个模式可以拥有多个表 16.唯一约束与主键约束的一个区别是?( D ) A.唯一约束的的值不可以有重复值 B.唯一约束的的值可以不是唯一的 C.唯一约束的不可以为空值 D.唯一约束的可以为空值 17. 只能存储一个值的变量是哪种变量?( B ) A. 游标 B. 标量变量 C. 游标变量 D. 记录变量 18. 声明%TPYE类型的变量时,服务器将会做什么操作?( A ) A. 为该变量检索数据库的数据类型 B.复制一个变量 C.检索数据库的数据 D.为该变量检索的数据类型和值 19.下哪一项可以正确地引用该记录变量的一个值?( B ) A.rec_abc(1) B. rec_abc(1).col C. rec_abc.col D.rec_abc.first() 20. 在定义游标时使用的FOR UPDATE子句的作用是______。( C ) A.执行游标 B. 执行SQL语句的UPDATE语句 C.对要更新表的进行加锁 D. 都不对 21. 如果允许用户对视图进行更新和插入操作,但是又要防止用户将不符合视图约束条件的记录添加到视图,应当在定义视图时指定下哪一个子句?( C ) A.WITH GRANT OPTION B. WITH READ ONLY C. WITH CHECK OPTION D. WITH CHECK ONLY 22. 如果想查看视图哪些字段是可以更新的,应当查询哪一个数据字典视图?( D ) A. DBA_VIEWS B. DBA_OBJECTS C. DBA_CLU_COLUMNS D. DBA_UPDATABLE_COLUMNS 23. 在下各选项,关于序的描述哪一项是不正确的?( D ) A. 序Oracle提供的用于产生一系唯一数字的数据库对象 B.序并不占用实际的存储空间 C.使用序时,需要用到序的两个伪NEXTVAL与CURRVAL。其,NEXTVAL 将返回序生成的下一个值,而CURRVAL返回序的当前值 D.在任何时候都可以使用序的伪CURRVAL,以返回当前序值 24. 在下各选项,关于同义词的描述哪一项是不正确的?( B ) A.同义词是数据库对象的一个替代名,在使用同义词时,Oracle会将其翻译为对应的对象名称 B.在创建同义词时,所替代的模式对象必须存在 C.Oracle的同义词分为公有同义词和私有同义词 D.公有同义词在数据库所有的用户都可以使用;私有同义词由创建它的用户所拥有 25. 下哪个锁模式不属于Oracle?( D ) A. 共享锁 B.排他锁 C. 行级共享锁 D. 死锁 26. 想在另一个模式创建表,用户最少应该具有什么系统权限?( B ) A.CREATE TABLE B. CREATE ANY TABLE C. RESOURCE D. DBA 27. 如果要启用所有角色,则应该使用哪一个命令?( B ) A.SET ROLE ALL B. SET ROLE ENABLE ALL C. ALTER SESSION ALL D.ALTER USER ROLE ALL 28. 下哪一个操作可以用来为一个备份操作手动分配通道?( A ) A.ALLOCATE CHANNEL B. CREATE CHANNEL C. CHANNEL ALLOCATE D. CREATE LINK 29. 下哪一个命令用来显示RMAN通道的配置信息?( C ) A. LIST B. DISPLAY C.SHOW D.都可以 30. 下哪一个命令可以用来执行不完全恢复?( B ) A. RESTORE DATABASE UNTIL B. RECOVER DATABASE UNTIL C. RECOVER DATA UNTIL D. RESTORE DATA UNTIL 三、简答题 1. 说明数据库模式与用户之间的区别。 答案: 数据库模式与用户之间的区别在于:用户是数据库的使用者和管理者,用户具有帐户状态、访问权限和操作权限等属性。模式是一系逻辑数据结构或对象的集合,是数据库对象的组织和管理单位。 2. 简要游标的作用和游标操作的基本步骤。 答案: 游标的作用是将数据库数据检索出来后缓存,可以被PL/SQL程序一行一行的读取并处理。支持一条、多条、零条记录的处理。 游标的基本操作步骤为: (1)声明游标,使用查询来定义游标的和行 (2)打开游标,使用PL/SQL命令OPEN来打开一个声明的游标 (3)提取数据,从游标重复提取每条记录到数据结构,直到数据集合被提交 (4)关闭游标,使用完游标后将其关闭 3.Oracle数据库的工作模式有哪两种?它们之间有有何区别? 答案: 在Oracle数据库数据库的操作模式分为专用服务器(DELICATED SERVER)模式和多线程服务器(MULTITHREADED SERVER)模式两种。其,在专用服务器模式为每个用户进程创建一个服务器进程,用户进程与服务器进程之间是1:1的关系;在共享服务器模式,一个服务器进程可以为多个用户进程服务器。 4.说明数据库内存结构SGA和PGA的组成,以及这两个内存区存放信息的区别。 答案: SGA区由数据缓冲区、共享池、重做日志缓冲区、大型池、JAVA池构成;PGA区由排序区、私有SQL区以及堆栈构成。SGA区是由Oracle分配的共享内存结构,包含一个数据库实例共享的数据和控制信息。当多个用户同时连接同一个实例时,SGA区数据供多个用户共享,所以SGA区又称为共享全局区。用户对数据库的各种操作主要在SGA区进行。该内存区随数据库实例的创建而分配,随实例的终止而释放。PGA区是在用户进程连接数据库,创建一个会话时,由Oracle为用户分配的内存区域,保存当前用户私有的数据和控制信息,因此该区又称为私有全局区。每个服务器进程只能访问自己的PGA区,所有服务器进程PGA区总和即为实例的PGA区的大小。 5. 说明数据库表空间的种类,以及不同类型表空间的作用。 答案: 数据库表空间分为系统表空间和非系统表空间两类,其非系统表空间包括撤销表空间、临时表空间和用户表空间等。 SYSTEM表空间主要用于存储数据库的数据字典、PL/SQL程序的源代码和解释代码、数据库对象的定义。撤销表空间专门进行回退信息的自动管理。临时表空间是专门进行临时段管理的表空间。用户表空间用于分离不同应用的数据,而且能够减少读取数据文件时产生的I/O冲突。 6. 说明Oracle 10g数据库文本初始化参数文件与服务器初始化参数文件的区别。 答案: 文本初始化参数文件是一个本地的初始化参数文件,而服务器初始化参数文件是一个放在数据库服务器端的共享的二进制初始化参数文件。文本参数文件的修改是通过直接对文本的修改实现的,通过命令行是无法将修改后的参数值写入该文件,而服务器初始化参数文件是不能直接修改的,必须通过ALTER SYSTEM语句来进行参数修改的。 7. 简述PL/SQL程序结构及各个部分的作用。 答案: PL/SQL程序的基本单元是语句块,所有的PL/SQL程序都是由语句块构成的,语句块之间可以相互嵌套,每个语句块完成特定的功能。  声明部分:以关键字DECLARE开始,BEGIN结束。主要用于声明变量、常量、数据类型、游标、异常处理名称以及本地(局部)子程序定义等。  执行部分:是PL/SQL块的功能实现部分,以关键字BEGIN开始,EXCEPTION或END结束(如果PL/SQL块没有异常处理部分,则以END结束)。该部分通过变量赋值、流程控制、数据查询、数据操纵、数据定义、事务控制、游标处理等实现块的功能。 异常处理部分:以关键字EXCEPTION开始,END结束。该部分用于处理该块执行过程产生的异常。 8. 说明触发器的种类和对应的作用对象、触发事件。 答案: 触发器包括DML触发器、INSTEAD-OF触发器和系统触发器。其,DML触发器主要作用于表,其事件有INSERT、UPDATE、DELETE;INSTEAD-OF触发器主要主用于视图,其事件有INSERT、UPDATE、DELETE;系统触发器主要是DML事件和系统事件发生时调用的触发器,其DML事件包括CREATE、DROP、ALTER等,系统事件包括LOGON、LOGOFF、STARTUP、SHUTDOWN、SERVERERROR等。 9.简述Oracle数据库角色的种类、作用,以及如何利用角色为用户授权。 答案: Oracle数据库角色分为系统预定义的角色和用户自定义的角色两类。角色是一系权限的集合,可以先将权限授予角色,然后将角色授予具有相同权限的用户。 四、求解题 现有关系数据库如下: S(SNO,SNAME,CITY) P(PNO,PNAME,COLOR,WEIGHT) J(JNO,JNAME,CITY) SPJ(SNO,PNO,JNO,QTY) 其,S为供应商,包含属性的含义依次是供应商代码、供应商名字、供应商所在城市;P为零件,包含属性的含义依次是零件代码、零件名字、颜色、重量;J为工程项目,包含属性的含义依次是工程项目代码、工程项目名字、工程项目所在城市;SPJ为供货关系,包含属性的含义依次是供应商代码、零件代码、工程项目代码,某供应商向某个项目供应数量的零件数量。 请用SQL语言完成如下问题: (1)查询供应工程J1零件P1的供应商号码SNO (2)查询供应工程J1零件为红色的供应商号码SNO (3)查询没有使用北京供应商生产的红色零件的工程号JNO 五、设计题(E-图) 六、PL/SQL语言程序设计题。 设学校环境如下:一个系有若干个专业,每个专业一年只招一个班,每个班有若干个学生: 现要建立关于系、学生、班级的数据库,关系模式为: 班CLASS(班号classid,专业名subject,系名deptname,入学年份enrolltime,人数num) 学生STUDENT(学号studentid,姓名name,年龄age,班号classid) 系DEPARTMENT(系号deptid,系名deptname) 试用PL/SQL语言完成以下功能: 1. 建表,在定义要求声明: (1) 每个表的主外键。 (2) 每个班级的人数不能超过30人。 (3) 学生的年龄介于15到40岁之间。 (4) 学生姓名不能为空。 2. 插入如下数据 CLASS表 classid subject deptname enrolltime num 101 软件 计算机 1995 20 102 微电子 计算机 1996 30 111 无机化学 化学 1995 29 112 高分子化学 化学 1996 25 121 统计数学 数学 1995 20 131 现代语言 文 1996 20 141 国际贸易 经济 1997 30 142 国际金融 经济 1996 14 STUDENT表 studentid name age classid 8101 张三 18 101 8102 钱四 16 121 8103 王玲 17 131 8105 李飞 19 102 8109 赵四 18 141 8110 李可 20 142 8201 张飞 18 111 8302 周瑜 16 112 8203 王亮 17 111 8305 董庆 19 102 8409 赵龙 18 101 8510 李丽 20 142 DEPARTMENT表 deptid deptname 001 数学 002 计算机 003 化学 004 文 005 经济 3. 学校又新增加了一个物理系,编号为006 4. 学生张三退学,请更新相关的表。 1、有一张表test,有3个字段id,name,parentid。parentid是指父亲的id,请写一个sql语句,找出当过爷爷的id和name。 2、有一张学生表student,字段有student_id,name,即学号,名字。 还有一张选课表,字段有student_id,lesson_id。 还有一张课程表,字段lesson_id,lesson_name。 学生和课程是多对多的关系。 写一个sql语句,找出所有选了全部课程的学生。 3、有一张表person表,字段有id,name,age。age是年龄。 写一个sql语句,找出年龄最接近的2个人。 如有下面4条记录: 1,a,18 2,b,20 3,c,25 4,d,26 则输出3,4 emp表和dept表完成下练习 Emp员工表 empno ename job Mgr Hiredate Sal Comm Deptno 员工号 员工姓名 工作 上级编号 受雇日期 薪金 佣金 部门编号 Dept表 Deptno Dname Loc 部门编号 部门名称 地点 1.出至少有一个员工的所有部门。 select dept_id from s_emp where userid is not null; 2.出薪金比“chad”多的所有员工。 select id,salary from s_emp where salary>(select salary from s_emp where first_name='Chad'); 3.出所有员工的姓名及其直接上级的姓名。 select l.first_name as yuangong,e.first_name as laoban from s_emp e,s_emp l where e.manager_id=l.id(+); 4.出受雇日期早于其直接上级的所有员工。 select l.first_name as yuangong,e.first_name as laoban from s_emp e,s_emp l where e.manager_id=l.id(+) and l.start_date>e.start_date; 5.出部门名称和这些部门的员工信息,同时出那些没有员工的部门。 6.出所有“CLERK”(办事员)的姓名及其部门名称。 7.出最低薪金大于1500的各种工作。 8.出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。 9.出薪金高于公司平均薪金的所有员工。 10.出与“SCOTT”从事相同工作的所有员工。 11.出薪金等于部门30员工的薪金的所有员工的姓名和薪金。 12.出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。 13.出在每个部门工作的员工数量、平均工资和平均服务期限。 14.出所有员工的姓名、部门名称和工资。 15.出从事同一种工作但属于不同部门的员工的一种组合。 16.出所有部门的详细信息和部门人数。 17.出各种工作的最低工资。 18.出各个部门的MANAGER(经理)的最低薪金。 19.出所有员工的年工资,按年薪从低到高排序。 原文:http://www.2xyd.cn/showtopic-524.aspx Oracle习题二附答案 使用scott/tiger的emp表完成练习 更多编程相关:http://www.2xyd.cn/showforum-11.aspx 答案: 1. select distinct dname from dept where deptno in (select distinct deptno from emp); 要查部门编号如果存在于emp 表,说明这个部门有员工。 2. select ename,job,mgr,hiredate,sal from emp where sal> (select sal from emp where ename='SMITH'); 3. select e.ename, e.mgr , w.ename from emp e, emp w where e.mgr=w.empno; 4. select e.ename, e.mgr , e.hiredate,w.ename,w.hiredate from emp e, emp w where e.mgr=w.empno and e.hiredate< w.hiredate; 5. select e.ename,e.hiredate, d.dname,d.deptno from emp e, dept d where e.deptno (+)=d.deptno; 本例子使用的是外连接, 也可以用右连接。 select e.ename,e.hiredate, d.dname,d.deptno from emp e right join dept d on e.deptno=d.deptno; 6. select e.ename,e.hiredate,e.job, d.dname,d.deptno from emp e, dept d where e.deptno =d.deptno and e.job=upper('clerk'); 7. select job, min(sal) from emp group by job having min(sal)>1500; 8. select e.ename,d.dname from emp e,dept d 2楼 where e.deptno=d.deptno and d.dname=upper('sales'); 或者: select ename from emp where deptno = (select deptno from dept where dname=upper('SALES')); 9. select ename, job, sal from emp where sal> (select avg(sal) from emp ); 10. select ename, job from emp where job = (select job from emp where ename=upper('scott')); 11. select ename, sal,job from emp where sal in (select sal from emp where deptno=30); 12. select ename, sal,job from emp where sal >all (select sal from emp where deptno=30); 或者 select ename ,sal from emp where sal> (select max(sal) from emp where deptno=30); 13. select d.deptno,d.dname, count(e.ename), avg(e.sal), avg(months_between(sysdate,e.hiredate)) from emp e, dept d where e.deptno(+)= d.deptno group by d.deptno,dname; 或者下面的方法,这种方法更好理解,把需要汇总的生成一个视图e。 select e.*,d.dname , from (select deptno, count(ename) ,avg(sal),avg(months_between(sysdate,hiredate)) from emp group by deptno) e, dept d where e.deptno =d.deptno; 14. select d.dname, e.ename, sal+nvl(comm,0) from emp e, dept d where d.deptno=e.deptno; 15. select e.ename,e.job, e.deptno ,d.job, d.deptno from emp e, emp d where e.job=d.job and e.deptno<>d.deptno; 16. select count(e.ename),d.dname from emp e, dept d where e.deptno(+)= d.deptno group by e.deptno,d.dname; 或者写成 select d.deptno,e.*,d.dname from (select deptno,count(ename) from emp group by deptno) e,dept d where e.deptno(+)= d.deptno; 17. select job,min(sal+nvl(comm,0))from emp group by job; 18. select deptno,min(sal) from emp where job=upper('manager') group by deptno ; 19. select ename , (sal+nvl(comm,0))*12 yearsal from emp order by yearsal ; --1、出至少有一个雇员的所有部门   select distinct dname from dept where deptno in (select distinct deptno from emp);   --2、出薪金比"SMITH"多的所有雇员   select ename,sal from emp where sal>(select sal from emp where ename=upper('smith'));   --3、出所有雇员的姓名及其直接上级的姓名   select e.ename,m.ename from emp e,emp m where e.mgr=m.empno(+);   --4、出入职日期早于其直接上级的所有雇员   select ename from emp e where hiredate<(select hiredate from emp where empno=e.mgr);   --5、出部门名称和这些部门的雇员,同时出那些没有雇员的部门   select dname,ename from dept d left join emp e on d.deptno=e.deptno;   --6、出所有“CLERK”(办事员)的姓名及其部门名称   select ename,dname from emp e left join dept d on e.deptno=d.deptno where job=upper('clerk');   --7、出各种工作类别的最低薪金,显示最低薪金大于1500的记录   select job,min(sal) from emp group by job having min(sal)>1500;   --8、出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号   select ename from emp where deptno = (select deptno from dept where dname=uppder('SALES'))   --9、出薪金高于公司平均水平的所有雇员   select ename from emp where sal>(select avg(sal) from emp);   --10、出与“SCOTT”从事相同工作的所有雇员   select ename from emp where job=(select job from emp where ename=upper('scott'));   --11、出某些雇员的姓名和薪金,条件是他们的薪金等于部门30任何一个雇员的薪金   select ename,sal from emp where sal in (select sal from emp where deptno=30);   --12、出某些雇员的姓名和薪金,条件是他们的薪金高于部门30所有雇员的薪金   select ename ,sal from emp where sal>(select max(sal) from emp where deptno=30);   --13、出每个部门的信息以及该部门雇员的数量   select d.deptno,dname,count(ename) from dept d left join emp e on (d.deptno=e.deptno)   group by d.deptno,dname   --14、出所有雇员的雇员名称、部门名称和薪金   Select e.ename,d.dname,e.sal from emp e left join dept d on (d.deptno=e.deptno)   --15、出从事同一种工作但属于不同部门的雇员的不同组合   Select tba.ename,tbb.ename,tba.job,tbb.job,tba.deptno,tba.deptno   From emp tba,emp tbb   Where tba.job=tbb.job and tba.deptno<>tbb.deptno   --16、出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员   Select dept.deptno,dname,loc,count(empno)   From dept,emp   Where dept.deptno=emp.deptno(+)   Group by dept.deptno,dname,loc   --17、出各种类别工作的最低工资   Select min(sal) from emp group by job   --18、出各个部门的MANAGER(经理)的最低薪金   Select deptno,min(sal) from emp where job=upper(‘manager’) group by deptno   --19、出按年薪排序的所有雇员的年薪   select (sal+nvl(comm,0))*12 as avn from emp order by avn   --20、出薪金水平处于第四位的雇员   Select * from (Select ename,sal, rank() over (order by sal desc) as grade from emp) where grade=4 --1、选择部门30的雇员   select * from emp where deptno=30;   --2、出所有办事员的姓名、编号和部门   select ename,empno,dname from emp e inner join dept d on e.deptno = d.deptno where job=upper(‘clerk’);   --3、找出佣金高于薪金的雇员   select * from emp where comm>sal;   --4、找出佣金高于薪金60%的雇员   select * from emp where comm>sal*0.6   --5、找出部门10所有经理和部门20的所有办事员的详细资料   select * from emp where (deptno=10 and job=upper(‘manager‘)) or (deptno=20 and job=upper(‘clerk ‘));   --6、找出部门10所有经理、部门20所有办事员,既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料   select * from emp where (deptno=10 and job=upper(‘manager‘)) or (deptno=20 and job=upper(‘clerk ‘)) or (job<>upper(‘manager’) and job<>upper(‘clerk’) and sal>=2000)   --7、找出收取佣金的雇员的不同工作   select distinct job from emp where comm>0;   --8、找出不收取佣金或收取的佣金低于100的雇员   select * from emp where nvl(comm,0)<100;   --9、找出各月最后一天受雇的所有雇员   select * from emp where hiredate= last_day(hiredate);   --10、找出早于25年之前受雇的雇员   select * from emp where months_between(sysdate,hiredate)/12>25;   select * from emp where hiredate<add_months(sysdate,-12*25);   --11、显示只有首字母大写的所有雇员的姓名   select ename from emp where ename=initcap(ename);   --12、显示正好为6个字符的雇员姓名   select ename from emp where length(ename)=6   --13、显示不带有‘R‘的雇员姓名   Select ename from emp where ename not like ‘%R%’;   Select ename from emp where instr(ename,’R’)=0;   --14、显示所有雇员的姓名的前三个字符   select substr(ename,1,3) from emp   --15、显示所有雇员的姓名,用a替换所有‘A‘   Select replace(ename,’A’,’a’) from emp   --16、显示所有雇员的姓名以及满10年服务年限的日期   Select ename,add_months(hiredate,12*10) ‘服务年限的日期’ from emp   --17、显示雇员的详细资料,按姓名排序   Select * from emp order by ename   --18、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面   Select ename from emp order by hiredate   --19、显示所有雇员的姓名、工作和薪金,按工作的降序顺序排序,而工作相同时按薪金升序   Select ename,job,sal from emp order by job desc ,sal asc   --20、显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,将最早年份的项目排在最前面   select ename,to_char(hiredate,‘yyyy‘),to_char(hiredate,‘mm‘) from emp order by hiredate asc   --21、显示在一个月为30天的情况下所有雇员的日薪金   select ename,sal/30 from emp;   --22、找出在(任何年份的)2月受聘的所有雇员   select * from emp where to_char(hiredate,‘mm‘)=‘02‘;   --23、对于每个雇员,显示其加入公司的天数   select ename,sysdate-hiredate from emp   --24、显示姓名字段的任何位置,包含 "A" 的所有雇员的姓名   select ename from emp where ename like ‘%A%‘;   select ename from emp where instr(ename,’A’,1)>0;   --25、以年、月和日显示所有雇员的服务年限   Select months_between(sysdate,hiredate)/12 as “年”, months_between(sysdate,hiredate) as “月”, sysdate-hiredate as “日” from emp

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值