- 浏览: 340393 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
苍ing:
的确很郁闷啊。同时用代码生成的页眉页脚,wps打开时看不到页眉 ...
iText生成word代码及jar包(含页眉页脚) -
jinhuazhe:
写的挺好的,有用
Unix 环境变量设置 -
zoboy:
iText生成word代码及jar包(含页眉页脚) -
zhangxy2188:
下载不了哦,请楼主重新提供一下,谢谢!
cognos10下载 -
housen1987:
shuai_94250 写道licence无效啊,麻烦您指点一 ...
Sybase数据库客户端——Auqa Data Studio 7.5(破解版)
认证目标:
- 定义子查询
- 描述子查询能够解决的问题的类型
- 列举子查询的类型
- 写单行和多行子查询
8.1 定义子查询
子查询是嵌套在select、insert、update或delete语句内或者其他子查询内的查询。
子查询为父查询返回一行或多行。
标量子查询(scalar subquery):只返回一个值的查询,一行或一列。
查询中可以使用子查询的位置:
-
- 列投影的select列表
- from字句中
- where字句中
- having字句中
子查询又叫做内部查询(inner query),含有内部查询的语句称为外部查询(outer query)。
- 练习8.1
子查询的类型:
(1) 写一个子查询,在列投影使用子查询,该查询会报告当前部门和员工数量:
select sysdate today,( select count(*) from departments) department_number, (select count(*) from employees) employee_number from dual
(2) 写一个子查询,来确定所有是经理的员工:
思路:首先找出经理的MANAGER_ID是什么,然后再用子查询在employees表中寻找。
select * from employees where employee_id in (select manager_id from employees)
(3) 写一个子查询,来确定每个国家支付的最高薪水
select max(a.salary),c.country_id from employees a join departments b on(a.department_id=b.department_id) join locations c on(b.location_id=c.location_id) group by country_id
8.2 描述子查询能够解决的问题的类型
在许多情况下,需要将一个查询的结果作为另一个查询的输入。
- 将子查询的结果用于比较
哪些员工的薪水低于平均薪水?
select * from employees where salary < (select avg(salary) sal from employees)
查询拥有一名或多名员工的部门:
select * from departments where department_id in (select distinct department_id from employees)
或者:
select department_name from departments join employees using(department_id) group by department_name;
【注意】:使用NOT IN会因为SQL处理NULL的方式带来问题,因此,通常不要使用NOT IN,除非您确定结果集中不包含NULL。
- 星形转换(Star Transformation)
Oracle内部有一个实例初始化参数STAR_TRANSFORMATION_ENABLED,如果设置它为true时,Oracle查询优化器会讲代码重写为星形查询。
- 生成执行select语句的表
可以在from字句中使用子查询,称为内联视图(inline views)
如果查询一个国家的员工的平均薪水:
select avg(salary) average,country_name from (select * from employees a join departments b on a.department_id =b.department_id join locations c on b.location_id=c.location_id join countries d on c.country_id=d.country_id ) group by country_name
- 生成投影值
在查询select中使用子查询。
最高薪水的员工,有最高的佣金率,那么需要支付的佣金是多少?
select (select max(salary) from employees) *(select max(commission_pct) from employees) sal from dual;
- 生成传递给DML语句的行
我想插入一条名称来自于departments的表的数据到regions表中。
insert into regions select 104,department_name from where manager_id=200
【注意】:
- 不能再values字句中出现select,除非它是单个值
- DML中的select子句的列投影名称可以与目标列不同,但是数据类型必须一一对应。
- 已知的值,可以直接写在子句select中充当一列。
查询在英国的部门工作的员工:
select * from employees where department_id in (select department_id from departments where location_id in(select location_id from locations where country_id = 'UK'))
确定薪水高于平均值,且在IT部门工作的员工
select * from employees where salary > (select avg(salary) from employees) and department_id in (select department_id from departments where department_name like '%IT%')
8.3 列举子查询的类型
子查询可以分为3类:
- 单行子查询
- 多行子查询
- 关联子查询
- 单行和多行子查询
单行子查询返回一行。
标量子查询返回一行一列。
多行子查询返回行集合。
可以在父查询的where和having子句中使用单行和多行子查询。
适用于单行子查询的比较运算符:=,>,>=,<,<=,<>
适用于多行子查询的比较运算符:IN,NOT IN,ANY,ALL
写一个查询,获得高于本部门平均工资的员工:
select * from employees a, (select avg(salary) salary,department_id from employees group by department_id) b where a.department_id = b.department_id and a.salary > b.salary;
写一个查询确定谁的工资比Mr.Tobias高:
select * from employees where salary > (select salary from employees where lower(last_name) = 'tobias')
ANY和ALL的使用:
运算符 | 含义 |
<ANY | 小于最高 |
>ANY | 大于最低 |
=ANY | 等于IN |
>ALL | 大于最高 |
<ALL | 小于最低 |
查询工资高于80部门的任何员工的员工:
select * from employees where salary > ALL (select salary from employees where department_id = 80)
发表评论
-
存储过程返回多个结果集
2012-07-20 13:54 7326对于查询试的存储过程,一般会返回一个结果集,这个时候,使用正常 ... -
Oracle学习第三课(启动oracle)
2012-01-19 10:39 38【学习是螺旋上升的过程,由易到难,由少到多,由点到面,每一个步 ... -
oracle锁表与解除锁定
2012-01-17 13:50 3162SELECT s.sid,s.serial# as seria ... -
Oracle学习第二课(登出oracle和删除用户)
2012-01-14 19:43 4025【学习是螺旋上升的过程,由易到难,由少到多,由点到面,每一个步 ... -
Oracle学习第一课(登录oracle和创建用户)
2012-01-14 18:16 53327【学习是螺旋上升的过程,由易到难,由少到多,由点到面,每一个步 ... -
oracle sqlplus出现中文乱码
2012-01-13 22:24 1721使用下面语句设置当前session的语言环境: ... -
oracle中如何创建dblink
2012-01-12 16:56 1535当用户要跨本地数据库 ... -
安装完Oracle之后没有isqlplus服务
2012-01-12 01:15 1544在命令行中运行isqlplusctl start命令即可。 -
Osgi SpringDM struts2 学习笔记
2012-01-09 10:40 3182本笔记针对Spring-dynami ... -
JAR 文件规范(年底了,最近两天比较忙,可能要慢一点)
2012-01-07 13:03 3934英文版本: http://docs.oracle. ... -
第18章 Moving Data
2011-12-29 00:14 879certification objectives: D ... -
第11章 Managing Undo Data(管理撤销数据)
2011-12-24 17:55 1084certification objectives Ex ... -
Introduction to the Oracle Server Technologies(Oracle服务器技术介绍)
2011-12-22 21:33 1206certification objectives: Pos ... -
Exploring the database architecture(探索数据库架构)
2011-12-21 22:46 981certification objectives: ... -
第七章 显示多个表中的数据
2011-12-18 17:08 1487认证目标: 使用同等连接和非同等连接编写select子 ... -
最简单的Oracle数据恢复 select ... as of
2011-12-09 10:20 5748概念: You perform a Flashback Qu ... -
cognos10下载
2011-12-08 22:10 2874cognos10 for windows下载地址: ... -
Oracle建立HR模式
2011-11-18 10:32 9652官方帮助 写道 Installing the HR Sch ... -
Oracle 权限、角色和安全规则
2011-11-16 15:54 1372权限 权限是执行某种类型的SQL语句和访问其他用户对象的 ... -
Oracle性能监视
2011-11-16 11:43 1194反应性监视(reactive) 10g以前的监视方法,事 ...
相关推荐
第8章 使用子查询解决问题 8.1 定义子查询 8.2 描述子查询能够解决的问题的类型 8.2.1 将子查询的结果集用于比较 8.2.2 星型转换(StarTransformation) 8.2.3 生成执行SELECT语句的表 8.2.4 生成投影值 ...
第8章 聚合分析与分组 8.1 聚合分析的基本概念 8.1.1 聚合分析 8.1.2 聚合函数 8.2 聚合函数的应用 8.2.1 求和函数-SUM() 8.2.2 计数函数-COUNT() 8.2.3 最大/最小值函数-MAX()/MIN() 8.2.4...
第8章 使用子查询 第9章 多表查询 第10章 高级查询 第11章 插入数据 第12章 更新和删除数据 第13章 创建、操纵数据库和表 第14章 使用视图 第15章 使用存储过程和函数 第...
第8章 使用子查询 第9章 多表查询 第10章 高级查询 第11章 插入数据 第12章 更新和删除数据 第13章 创建、操纵数据库和表 第14章 使用视图 第15章 使用存储过程和函数 第...
第8章 使用子查询 第9章 多表查询 第10章 高级查询 第11章 插入数据 第12章 更新和删除数据 第13章 创建、操纵数据库和表 第14章 使用视图 第15章 使用存储过程和函数 第...
第8章 使用子查询 第9章 多表查询 第10章 高级查询 第11章 插入数据 第12章 更新和删除数据 第13章 创建、操纵数据库和表 第14章 使用视图 第15章 使用存储过程和函数 第...
第8章 数据修改 8.1 插入数据 8.2 删除数据 8.3 更新数据 8.4 合并数据 8.5 通过表表达式修改数据 8.6 带有TOP选项的数据更新 8.7 OUTPUT子句 8.8 总结 8.9 练习 8.10 解决方案 第9章 事务和...
01 三面式电子站牌 02 候车亭一体化电子站牌 03 嵌入式电子站牌 04 悬挂式电子站牌 安装方式 智能公交电子站牌解决方案全文共20页,当前为第8页。 无线WiFi功能 乘客投诉及 报警功能 全状态故障 检测功能 公交预报...
第8章 数据修改 8.1 插入数据 8.2 删除数据 8.3 更新数据 8.4 合并数据 8.5 通过表表达式修改数据 8.6 带有TOP选项的数据更新 8.7 OUTPUT子句 8.8 总结 8.9 练习 8.10 解决方案 第9章 事务和并发 9.1 ...
以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决方案。 作为一本讲述T-SQL高级查询的专业图书,《Microsoft...
本书是Inside Microsoft SQL Server ...第4章 子查询、表表达式和排名函数 第5章 联接和集合操作 第6章 聚合和旋转数据 第7章 TOP和ALLPY 第8章 数据修改 第9章 图、树、层次结构和递归查询 附录A 逻辑难题 索引
第一章 引言 1. 本课题的研究意义 2. 本课题要实现的功能 第二章 开发平台 1.VB介绍 2.Access介绍 3.数据库的基本概念 4.数据访问对象(DAO) 5.ActiveX数据对象(ADO) ...第八章 结束语 致谢 参考文献
第8章 设计Web数据库 8.1 关系数据库的概念 8.1.1 表格 8.1.2 列 8.1.3 行 8.1.4 值 8.1.5 键 8.1.6 模式 8.1.7 关系 8.2 如何设计Web数据库 8.2.1 考虑要建模的实际对象 8.2.2 避免保存冗余数据 8.2.3 使用原子列值...
第8章 设计Web数据库 8.1 关系数据库的概念 8.1.1 表格 8.1.2 列 8.1.3 行 8.1.4 值 8.1.5 键 8.1.6 模式 8.1.7 关系 8.2 如何设计Web数据库 8.2.1 考虑要建模的实际对象 8.2.2 避免保存冗余数据 8.2.3 ...
第8章 设计Web数据库 8.1 关系数据库的概念 8.1.1 表格 8.1.2 列 8.1.3 行 8.1.4 值 8.1.5 键 8.1.6 模式 8.1.7 关系 8.2 如何设计Web数据库 8.2.1 考虑要建模的实际对象 8.2.2 避免保存冗余数据 8.2.3 ...
7.3.2 使用子查询创建表 221 7.3.3 在创建之后更改表定义 222 7.3.4 删除和截断表 222 7.4 创建和使用临时表 225 7.5 索引 227 7.5.1 为什么说索引是必需的 227 7.5.2 索引类型 228 7.5.3 创建和使用索引 ...
7.3.2 使用子查询创建表 221 7.3.3 在创建之后更改表定义 222 7.3.4 删除和截断表 222 7.4 创建和使用临时表 225 7.5 索引 227 7.5.1 为什么说索引是必需的 227 7.5.2 索引类型 228 7.5.3 创建和使用索引 ...
8.7 用查询解决问题 213 8.7.1 分组以获得百分比 213 8.7.2 查找并删除重复的记录 215 8.7.3 用组的嵌套彻底解决问题 217 8.7.4 区分新旧记录 217 8.7.5 在交叉表查询中使用“总计”行 220 8.8 查询过程...
8.7 用查询解决问题 213 8.7.1 分组以获得百分比 213 8.7.2 查找并删除重复的记录 215 8.7.3 用组的嵌套彻底解决问题 217 8.7.4 区分新旧记录 217 8.7.5 在交叉表查询中使用“总计”行 220 8.8 查询过程的结构...