Oracle Day04 子查询
1.子查询解决什么问题: 当一个简单的查询查询不到结果的时候,可以使用子查询来丰富查询的条件以达到显示结果的目的。
子查询的格式: 用一个小括号包含,然后在里面写sql语句
2.子查询的注意事项:
1).注意一定要有小括号。
2).一定要注意书写格式,不要混乱。
3). 子查询可以放在select,from ,where having后面。
4). 注意子查询一定不能放在group by的后面。
5). 子查询和主查询可以不是同一张表,只要子查询的结果在主查询中能用就可以。
6). 子查询中一般都不排序,但是在TOP-N中需要排序 。
7). 一般是先执行子查询操作,再执行主查询操作,但是在相关子查询中先执行主查询,再执行子查询。
8). 对于子查询的结果,如果是单行只能用单行操作符;如果是多行,只能用多行操作符。
9). 自查中的null处理。
3.例
1)-- 子查询放在select后面
select ename,job,(select sal from emp where empno=7566) 子查询 from emp;
注意:放在select后面的时候结果只能是单行的。
2)-- from后面放置子查询 重点掌握
-- 查询员工的姓名 工资 job
select * from (
select ename,job,sal from emp
);
3)-- where 后面跟子查询
select * from emp
where sal > (
select sal from emp where ename = (
select ename from emp where empno = 7566
)
);
注意: 子查询不能过多的去嵌套,一般嵌套三层,加多了会影响性能。
4)order by 后面不能跟子查询,语法上是可以跟的,但是跟了不起作用。
5)--子查询和主查询可以不是同一张表,只要子查询的结果在主查询中能用就可以
-- 查询部门名称为SAL的所有的员工信息
select *
from emp
where deptno=(
select deptno from dept where dname='SALES'
);
6)--对于子查询的结果,如果是单行只能用单行操作符;如果是多行,只能用多行操作符。
单行操作符: ><= <= !=
-- 查询部门号不为30的员工信息
select * from (select * from emp where deptno != 30);
select * from (select * from emp where deptno <> 30);
-- <> 用来表示不等于
多行操作符 in, not in,any,all.
-- 查询和SCOTT用户和CLARK用户共同部门的所有员工
select * from emp
where deptno in(
select deptno from emp where ename='SCOTT' or ename='CLARK'
);
例1:子查询中的Top-N问题
select rownum,empno,ename,sal
from (
select rownum r,empno,ename,sal
from emp
order by sal desc)
where rownum<=3;
例2:
select empno,ename,sal,avgsal
from emp e,(
select deptno,avg(sal) avgsal
from emp
group by deptno) d
where e.deptno = d.deptno and e.sal > d.avgsal;
例3:
select sum(1) "total",
sum(decode(to_char(hiredate,'yyyy'),'',1,0)) "1980",
sum(decode(to_char(hiredate,'yyyy'),'',1,0)) "1981",
sum(decode(to_char(hiredate,'yyyy'),'',1,0)) "1982",
sum(decode(to_char(hiredate,'yyyy'),'',1,0)) "1987"
from emp;
Oracle Day04 子查询的更多相关文章
- Oracle 之——子查询 DDL DML 集合 及其他数据对象
Oracle 学习笔记(二) 知识概要: 1.子查询 2.集合操作 3.DML语句操作 4.其他数据库对象 1.子查询 查询工资比SCOTT高的员工信息 1 select * 2 from emp ...
- oracle数据库子查询的结果需要使用多次解决办法
with c as (select a.trandt,sum(a.tranam) tranam from tran a group by a.trandt )--将子查询抽取出来,以后可以直接用.该方 ...
- Oracle【子查询】
Oracle子查询:当一个查询依赖于另外一个查询的结果的时候,就需要使用子查询.单行子查询 :筛选条件不明确,需要执行一次查询且查询结果只有一个字段且字段值只有一个.注意:where子句中允许出现查询 ...
- Oracle之子查询:Top-N问题
学习了SQL子查询,遇到个Top-N问题,即:加入有张工资表(这里使用Oracle SCOTT用户的emp表),需要查找工资最高的3个员工信息,以下列格式输出: 乍眼一看,这很简单啊,对sal进行排序 ...
- oracle之子查询、创建用户、创建表、约束
子查询 子查询可以分为单行子查询和多行子查询 单行子查询 [1] 将一个查询的结果作为另外一个查询的条 ...
- Oracle 通过子查询批量添加、修改表数据
1.通过查询快速创建表 create table test1(id,job,mgr,sal) as () ) ---这是一个分页查询 ok,表创建成功 2.通过查询快速创建视图 create or r ...
- Oracle - 为子查询提供动态结果集
曾经遇到过这样一个需求:要求为method传入String,内容如"用户ID0,用户ID1,用户ID2...",然后根据这些ID返回一个结果集作为数据表供别人查询. SELECT ...
- 数据库Oracle的子查询练习
1.写一个查询显示与 Zlotkey 的 在同一部门的雇员的 last name和 hire date,结果中不包括 Zlotkey --1.写一个查询显示与 Zlotkey 的 在同一部门的雇员的 ...
- .Net程序员学用Oracle系列(14):子查询、集合查询
1.子查询 1.1.子查询简介 1.2.WITH 子查询 2.集合查询 2.1.UNION 和 UNION ALL 2.2.MINUS 2.3.INTERSECT 2.4.集合运算与 ORDER BY ...
随机推荐
- 《Intel汇编第5版》 条件汇编伪指令
一.条件汇编伪指令和宏使用可以使汇编程序更加灵活 二.通过伪指令来检查函数的参数是否为空,如果为空则输出警告信息 INCLUDE Irvine32.inc includelib Irvine32.li ...
- SNMP概述–运维必知的协议基础
一.什么是SNMP? SNMP是 “Simple Network Management Protocol” 的缩写,中文意思是简单网络管理协议,它是由互联网工作小组在RFC1157中定义的应用层 ...
- edgerouter bonding
configure set interfaces bonding bond0 mode 802.3ad set interfaces ethernet eth1 bond-group bond0 se ...
- TheSixthWeekJavaText
加密文档 实验要求编写一个算法加密一串英文字串. 设计思想:对于一个字符串,我们可以用String.charAt()方法依次取出其中的字符元素,组成一个字符数组.由于字符可以转化为short类型变量进 ...
- redirect-action
功能: 点击login , redirect 到hello.jsp 显示 "hello" 点击redirect, redirect 到 error.jsp 显示 "err ...
- 为什么要lock,lock了什么?
当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待.但当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是说当对同一个资源进行读写的时候,我们要使该资源 ...
- C#委托与事件讲解(一)
首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个意思,除非委托2个中文字不认识,举个例子,小明委托小张去买车票. 但是在我们的程序世界里,也是这么的简单吗?当然,什么是OO ...
- 微信小程序跳转页面
小程序页面有2种跳转,可以在wxml页面或者js中: 1,在wxml页面中: <navigator url="../index/index">跳转到新页面</na ...
- Java 实现大整数加减乘除
自己用Java实现的大整数加减乘除运算.还有可以改进的地方,有兴趣的童鞋可以加以改进.仅供参考,请勿转载! package barrytest; import java.util.ArrayList; ...
- Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件(二)
Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件第二版 上次粗略的写了相同功能的代码,这次整理修复了之前的一些BUG,结构也大量修改 ...