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 子查询的更多相关文章

  1. Oracle 之——子查询 DDL DML 集合 及其他数据对象

    Oracle 学习笔记(二) 知识概要: 1.子查询 2.集合操作 3.DML语句操作 4.其他数据库对象 1.子查询 查询工资比SCOTT高的员工信息 1  select * 2  from emp ...

  2. oracle数据库子查询的结果需要使用多次解决办法

    with c as (select a.trandt,sum(a.tranam) tranam from tran a group by a.trandt )--将子查询抽取出来,以后可以直接用.该方 ...

  3. Oracle【子查询】

    Oracle子查询:当一个查询依赖于另外一个查询的结果的时候,就需要使用子查询.单行子查询 :筛选条件不明确,需要执行一次查询且查询结果只有一个字段且字段值只有一个.注意:where子句中允许出现查询 ...

  4. Oracle之子查询:Top-N问题

    学习了SQL子查询,遇到个Top-N问题,即:加入有张工资表(这里使用Oracle SCOTT用户的emp表),需要查找工资最高的3个员工信息,以下列格式输出: 乍眼一看,这很简单啊,对sal进行排序 ...

  5. oracle之子查询、创建用户、创建表、约束

      子查询                                    子查询可以分为单行子查询和多行子查询   单行子查询           [1] 将一个查询的结果作为另外一个查询的条 ...

  6. Oracle 通过子查询批量添加、修改表数据

    1.通过查询快速创建表 create table test1(id,job,mgr,sal) as () ) ---这是一个分页查询 ok,表创建成功 2.通过查询快速创建视图 create or r ...

  7. Oracle - 为子查询提供动态结果集

    曾经遇到过这样一个需求:要求为method传入String,内容如"用户ID0,用户ID1,用户ID2...",然后根据这些ID返回一个结果集作为数据表供别人查询. SELECT ...

  8. 数据库Oracle的子查询练习

    1.写一个查询显示与 Zlotkey 的 在同一部门的雇员的 last name和 hire date,结果中不包括 Zlotkey --1.写一个查询显示与 Zlotkey 的 在同一部门的雇员的 ...

  9. .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 ...

随机推荐

  1. Python学习笔记——基础篇【第五周】——正在表达式(re.match与re.search的区别)

    目录 1.正在表达式 2.正则表达式常用5种操作 3.正则表达式实例 4.re.match与re.search的区别 5.json 和 pickle 1.正则表达式   语法: import re # ...

  2. git出错

    查询git的版本是否装对  32 位  64位

  3. CSS行高line-height的一些深入理解及应用

    一.一些字面意思. “行高”大约是指:一行文字的高度.具体来说是指两行文字间基线之间的距离.基线是在英文字母中用到的一个概念,我们刚学英语使用的那个英语本子每行有四条线,其中底部第二条线就是基线,是a ...

  4. nginx配置限制同一个ip的访问频率

    1.在nginx.conf里的http{}里加上如下代码: limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $s ...

  5. Python subprocess + timeout的命令执行

    Popen对象 poll() 判断是否执行完毕,执行完毕返回0,未执行完毕返回None terminate() 终止进程发送SIGTERM信号 raise 自定义返回错误 import time im ...

  6. iPhone doesn’t support any of GongShangJ.app’s architectures. You can add iPhone’s armv7s architectu

    iPhone doesn't support any of GongShangJ.app's architectures. You can add iPhone's armv7s architectu

  7. setAction方法 Snackbar 右侧按钮可以被点击并处理一些事件

    从数据库同一记录取得的字段所组装成的对象应该是同一个对象,然后由不同的Session从数据库同一条记录上分别取得对象,它们的内存地址是不一样的. 一般来说,常见的数字加密方式都可以分为两类,即对称加密 ...

  8. js检测文章敏感词

    在一些博客或者论坛中,文章中的敏感词需要显示出来和高亮显示起到提示用户的作用.这个功能实现的方法有很多,下面是js的实现方式. //将文章中匹配到的敏感词罗列出来 <span style=&qu ...

  9. Cron表达式的详细用法

    字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN- ...

  10. scala正则表达式

       正则表达式     Scala 通过 scala.util.matching 包种的 Regex 类来支持正则表达式 scala.util.matching.Regex.构造一个Regex对象, ...