精华内容
下载资源
问答
  • Oracle子查询 何为子查询子查询时嵌入在其他SQL语句中的SELECT语句,也称嵌套查询 举例:查询和SMITH是同一个职位的员工 //这是在where子句中使用子查询 Select * From emp Where job = (select job ...

    Oracle的子查询

    何为子查询:子查询时嵌入在其他SQL语句中的SELECT语句,也称嵌套查询

    举例:查询和SMITH是同一个职位的员工

    //这是在where子句中使用子查询
    		Select *
    		From emp
    		Where job = (select job 
    		from emp
    		where ename = ‘SMITH’);
    //第一步 查询SMITH的职位
    //第二步 查询和SMITH是同一个职位的员工
    

    子查询语法

    	SELECT  select_lis
    	FROM  table
    	WHERE  expr operator
    					(SELECT  select_list
    FROM  table);
    

    可以使用子查询的位置: where, select, having, from

    在select子句中使用子查询

    举例:查询出每个部门的编号、名称、位置、部门人数。

    Select deptno,dname,loc, (select count(empno) 
    from emp
    where emp.deptno = dept.deptno ) from dept;
    

    在having子句中使用子查询

    举例:查询员工信息表,按部门编号进行分组,要求显示员工的部门编号、平均工资,查询条件是平均工资大于30号部门的最高工资

    Select deptno,avg(sal)
    from emp 
    group by deptno
    having avg(sal)> (selct max(sal) from emp where deptno = 30);
    

    在from子句中使用子查询:把子查询看成一张新的表

    Select * from (select empno,ename,sal from emp);
    

    举例:查询并显示高于部门平均工资的雇员信息

    Select empno,ename,sal
     	From emp,(select deptno,avg(sal) avgsal from emp group by deptno) dept(别名)
    	Where emp.deptno = dept.deptno and sal > avgsal;
    

    主查询和子查询

    简单来说括号里的就是子查询,也叫内查询

    一个主查询可以有多个子查询

    举例:显示职位和7521的职位相同并工资大于7934这个员工工资的员工信息

    select *
    from emp
    where job = (select job from emp whereempno = 7521)
    and sal > (select sal from emp where empno = 7934)
    

    子查询的执行顺序:一般先执行子查询,再执行主查询,但相关子查询例外。

    举例:查询员工表中小于平均工资的员工信息

    Select *
    	From emp
    	Where sal < (select avg(sal) from emp);
    

    相关子查询:当查询需要引用主查询的表列时,oracle会执行相关子查询相关子查询是先执行主查询,再执行子查询。

    举例:查询工资高于部门平均工资的雇员名,工资和部门号。

    Select ename,sal,deptno
    	From emp e	//这里需要主查询给e.depeno传信息,所以会先执行主查询
    	Where sal > (select avg(sal) from emp where deptno = e.deptno);
    

    主查询和子查询可以不是同一张表

    举例:查询部门名称是ACCOUNTING的员工信息

    Select * 
    	From emp
    	Where deptno = (select deptno from dept where dname=’ACCOUNTING’);
    

    用多表连接查询方法

    Select * 
    	From emp e,dept d
    	Where e.deptno = d.deptno and d.dname=’ACCOUNTING’;
    

    注意
    尽量使用多表连接查询方法 因为只访问一次 子查询访问两次
    这是理论上的,因为理论上不考虑笛卡尔集

    展开全文
  • Oracle 普通子查询和关联子查询

    千次阅读 2017-09-02 21:22:20
    子查询(普通子查询和关联子查询子查询 = 简单查询 + 限定查询 + 多表查询 + 统计查询的综合体; 所谓子查询:指的就是在一个查询之中嵌套了其他的若干查询,嵌套子查询之后的查询SQL语句如下: SELECT [DISTINCT...
    子查询(普通子查询和关联子查询)
    子查询 = 简单查询 + 限定查询 + 多表查询 + 统计查询的综合体;
    所谓子查询:指的就是在一个查询之中嵌套了其他的若干查询,嵌套子查询之后的查询SQL语句如下:
    SELECT [DISTINCT] *|分组字段1 [别名] [,分组字段2 [别名] ,…] | 统计函数 ,(
          SELECT [DISTINCT] *|分组字段1 [别名] [,分组字段2 [别名] ,…] | 统计函数
          FROM 表名称 [别名], [表名称 [别名] ,…]
          [WHERE 条件(s)]
          [GROUP BY 分组字段1 [,分组字段2 ,…]]
          [HAVING 分组后的过滤条件(可以使用统计函数)]
          [ORDER BY 排序字段 ASC | DESC [,排序字段 ASC | DESC]])
    FROM 表名称 [别名], [表名称 [别名] ,…] ,(
          SELECT [DISTINCT] *|分组字段1 [别名] [,分组字段2 [别名] ,…] | 统计函数
          FROM 表名称 [别名], [表名称 [别名] ,…]
          [WHERE 条件(s)]
          [GROUP BY 分组字段1 [,分组字段2 ,…]]
          [HAVING 分组后的过滤条件(可以使用统计函数)]
          [ORDER BY 排序字段 ASC | DESC [,排序字段 ASC | DESC]])
    [WHERE 条件(s) (
          SELECT [DISTINCT] *|分组字段1 [别名] [,分组字段2 [别名] ,…] | 统计函数
          FROM 表名称 [别名], [表名称 [别名] ,…]
          [WHERE 条件(s)]
          [GROUP BY 分组字段1 [,分组字段2 ,…]]
          [HAVING 分组后的过滤条件(可以使用统计函数)]
          [ORDER BY 排序字段 ASC | DESC [,排序字段 ASC | DESC]])]
    [GROUP BY 分组字段1 [,分组字段2 ,…]]
    [HAVING 分组后的过滤条件(可以使用统计函数)]
    [ORDER BY 排序字段 ASC | DESC [,排序字段 ASC | DESC]];
    注意:理论上子查询可以出现在查询语句的任意位置上,但是实际开发运用中,子查询出现在WHERE和FROM子句之中较多

    普通子查询
    一般情况下:
    WHERE:子查询一般只返回单行单列、多行单列、单行多列的数据;
    FROM:子查询返回的一般是多行多列的数据,当作一张临时表出现。
    HAVING:子查询返回的一般是单行单列数据。
    子查询在 WHERE 中出现
    1.返回 单行单列 数据
    范例一: 查询出工资比SMITH还要高的全部雇员信息
    SELECT * FROM EMP WHERE sal>(SELECT sal FROM EMP WHERE ename='SMITH');
    2.子查询返回 单行多列 数据
    以上所返回的是单行单列,但是在子查询之中,也可以返回单行多列的数据,只是这种子查询很少出现。
    范例:查询出emp表中 职位和薪资 与雇员 'SCOTT'的 职位和薪资 相同的雇员信息。
    SELECT * FROM EMP WHERE (JOB,SAL)=(SELECT job,sal from emp where ename='SCOTT');
    3.子查询返回 多行单列 数据
    如果现在的子查询返回的是多行单列数据的话,这个时候就需要使用三种判断符判断了:IN、ANY、ALL;

    IN 操作符
    IN里面的范围由子查询指定。
    案例:查询雇员的工资等于在经理的工资的范围内的雇员信息
    SELECT * FROM EMP WHERE SAL IN (SELECT SAL FROM EMP WHERE JOB='MANAGER');
    但是在使用IN的时候还要注意 NOT IN的问题,如果使用NOT IN操作,在子查询之中,如果有一个内容是null,则不会查询出任何的结果。
    解决非空 问题,使用空判断NVL。
    SELECT * FROM EMP WHERE SAL IN (SELECT NVl(SAL,0) FROM EMP WHERE JOB='MANAGER');

    ANY操作符:与每一个内容想匹配,有三种匹配形式
    =ANY:功能与IN操作符是完全一样的;
    案例:查询雇员的工资等于在经理的工资的范围内的雇员信息
    SELECT * FROM EMP WHERE SAL =ANY(SELECT NVl(SAL,0) FROM EMP WHERE JOB='MANAGER');
    >ANY:比子查询中返回记录最小的还要大的数据;
    案例:查询雇员的工资比经理的工资高的雇员信息
    SELECT * FROM EMP WHERE SAL >ANY(SELECT NVl(SAL,0) FROM EMP WHERE JOB='MANAGER');
    <ANY:比子查询中返回记录的最大的还要小;
    案例:查询雇员的工资比经理的工资低的雇员信息
    SELECT * FROM EMP WHERE SAL <ANY(SELECT NVl(SAL,0) FROM EMP WHERE JOB='MANAGER');

    ALL操作符:与每一个内容相匹配,有两种匹配形式:
    需要注意的是:ALL 。(如果有一个内容是null,则不会查询出任何的结果。)
    >ALL:比子查询中返回的最大的记录还要大
    案例:查询雇员的工资比经理的任意一个工资高的雇员信息
    SELECT * FROM EMP WHERE SAL >ALL(SELECT NVl(SAL,0) FROM EMP WHERE JOB='MANAGER');
    <ALL:比子查询中返回的最小的记录还要小
    案例:查询雇员的工资比经理的任意一个工资低的雇员信息
    SELECT * FROM EMP WHERE SAL <ALL(SELECT NVl(SAL,0) FROM EMP WHERE JOB='MANAGER');

    子查询在 FROM 中出现

    这个子查询一般返回的是多行多列的数据,当作一张临时表的方式来处理。
    范例:查询出每个部门的编号、名称、位置、部门人数、平均工资
    SELECT
      d.DEPTNO 编号,
      d.DNAME  名称,
      d.LOC    位置,
      temp.c   部门人数,
      temp.a   平均工资
    FROM DEPT d, (SELECT
                    DEPTNO     dno,
                    count(SAL) c,
                    avg(SAL)   a
                  FROM EMP
                  GROUP BY DEPTNO) temp
    WHERE d.DEPTNO = temp.dno;

    子查询在 HAVING 中出现(一般在条件判断出现统计函数的时候才使用)

    范例:查询出职位的名称、人数、平均薪资,且要求 职位平均薪资高于公司平均薪资的,查询结果根据平均薪资降序排列。
    SELECT
      JOB          名称,
      count(ENAME) 人数,
      avg(SAL)     平均薪资
    FROM EMP
    GROUP BY JOB
    HAVING avg(SAL) > (SELECT avg(sal)
                       FROM EMP)
    ORDER BY 平均薪资 DESC;

    关联子查询
    关联子查询就是指子查询与主查询之间有条件关联,不能独自执行。而 普通子查询 的子查询语句可以单独执行。
    对于关联子查询有以下要求:
    被关联的 子查询不能返回多于1行的数据
    范例一:查询雇员的领导不是经理的雇员的姓名、雇员部门、雇员薪资。
    SELECT
      e.ENAME  雇员的姓名,
      e.DEPTNO 雇员部门,
      e.SAL    雇员薪资
    FROM EMP e
    WHERE 'MANAGER' <> (SELECT JOB
                        FROM EMP
                        WHERE EMPNO = e.MGR);

    范例二:列出比本部门平均工资高的员工姓名,工资,职位,部门号。
    SELECT
      e.ENAME  员工姓名,
      e.SAL    工资,
      e.job    职位,
      e.DEPTNO 部门号
    FROM EMP e
    WHERE e.SAL > (SELECT avg(SAL)
                 FROM EMP
                 WHERE e.DEPTNO = DEPTNO);

    展开全文
  • 什么是子查询? 使用子查询解决问题:谁的工资比SCOTT高? 子查询的语法 子查询(内查询)在主查询之间一次执行完成。\color{red}{子查询(内查询)在主查询之间一次执行完成。}子查询(内查询)在主查询...

    什么是子查询?

    使用子查询解决问题:谁的工资比SCOTT高?
    在这里插入图片描述

    子查询的语法

    在这里插入图片描述

    • 子 查 询 ( 内 查 询 ) 在 主 查 询 之 间 一 次 执 行 完 成 。 \color{red}{子查询(内查询)在主查询之间一次执行完成。}
    • 子 查 询 的 结 果 被 主 查 询 使 用 ( 外 查 询 ) 。 \color{red}{子查询的结果被主查询使用(外查询)。} 使

    子查询的类型

    在这里插入图片描述

    单行子查询

    • 只返回一条记录
    • 单行操作符
    操作符含义
    =Equal to
    >Greater than
    >=Greater than or equal to
    <Less than
    <=Less than or equal to
    <>Not equal to

    示例1:

    select ename,job,sal
    from emp
    where job=
          (select job
          from emp
          where empno=7566) and sal >
                (select sal
                from emp
                where empno=7782);
    

    在这里插入图片描述
    示例2:

    select ename,job,sal
    from emp
    where sal=
         (select min(sal)
         from emp);
    

    在这里插入图片描述
    示例3:

    select deptno,min(sal)
    from emp
    group by deptno
    having min(sal) >
          (select min(sal)
          from emp
          where deptno=20);
    

    在这里插入图片描述
    示例4:
    查询出比雇员7654的工资高,同时从事和7788的工作一样的员工

    select *
    from emp t1
    where t1.sal>
          (select t.sal 
          from emp t 
          where t.empno=7654) and t1.job=
                (select t2.job
                from emp t2
                where t2.empno=7654);
    

    在这里插入图片描述
    示例5:
    要求查询每个部门的最低工资和最低工资的雇员和部门名称

     select d.dname, a.minsal, e.ename
     from dept d,
          (select deptno, min(sal) minsal 
          from emp
          group by deptno) a,emp e
     where d.deptno=a.deptno and e.sal=a.minsal;
    

    在这里插入图片描述

    非法使用单行子查询示例

    select empno,ename
    from emp
    where sal=
         (select min(sal)
         from emp
         group by deptno);
    

    在这里插入图片描述

    多行子查询

    • 返回了多条记录
    • 多行操作符
    操作符含义
    IN等于列表中的任何一个
    ANY和子查询返回的任意一个值比较
    ALL和子查询返回的所有值比较

    示例:in 在集合中
    查询部门名称是SALES和ACOUNTING的员工

    select * from emp where deptno in
           (select deptno from dept where dname='SALES' or dname='ACCOUNTING');
    

    在这里插入图片描述
    示例:any 和集合中的任意一个值比较
    查询工资比30号部门员工高的员工信息

    select * from emp where sal > any
           (select sal from emp where deptno=30);
    

    在这里插入图片描述
    示例:all 和集合中的所有值比较
    查询工资比30号部门所有员工高的员工信息

    select * from emp where sal > all
           (select sal from emp where deptno=30);
    

    在这里插入图片描述

    子查询需要注意的问题

    • 括号
    • 合理的书写风格
    • 可以在主查询的where、select、having、from后面使用子查询
    • 不可以在group by使用子查询
    • 强调from后面的子查询
    • 主查询和子查询可以不是同一张表;只有子查询返回的结果 主查询可以使用 即可
    • 一般不在子查询中排序;但在top-n分析问题中,必须对子查询排序
    • 一般先执行子查询,再执行主查询;相关子查询列外
    • 单行子查询只能使用单行操作符;多行子查询只能使用多行操作符
    • 子查询中的null

    示例:在select语句后使用子查询
    注意:select语句后的子查询必须是单行子查询
    查询员工号,姓名,薪水,7839的职位

    select empno,ename,sal,
           (select job 
           from emp 
           where empno=7839)
    from emp;
    

    在这里插入图片描述
    示例:在from语句后面使用子查询
    查询员工信息:员工号,姓名,月薪

    select * 
    from (select empno, ename, sal from emp);
    

    在这里插入图片描述
    示例:top-n分析问题
    rownum行号:

    1. rownum永远按照默认的顺序生成
    2. rownum只能使用小于等于,不能使用大于等于

    查询员工表中工资最高的前三名

    select rownum, empno, ename, sal
    from (select * from emp order by sal desc)
    where rownum <= 3;
    

    在这里插入图片描述
    示例:找到员工表中薪水大于本部门平均薪水的员工

    select e.empno, e.ename, e.sal, d.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;
    

    在这里插入图片描述
    相关子查询:
    将主查询中的值 作为参数传递给子查询
    使用相关子查询解决上面的示例

    select empno, ename, sal, (select avg(sal) from emp where deptno=e.deptno) avgsal
    from emp e
    where sal > (select avg(sal) from emp where deptno=e.deptno);
    

    在这里插入图片描述

    示例:统计每年入职员工的个数

    select count(*) Total,
           sum(decode(to_char(hiredate, 'yyyy'), '1980', 1, 0)) "1980",
           sum(decode(to_char(hiredate, 'yyyy'), '1981', 1, 0)) "1981",
           sum(decode(to_char(hiredate, 'yyyy'), '1982', 1, 0)) "1982",
           sum(decode(to_char(hiredate, 'yyyy'), '1987', 1, 0)) "1987"
    from emp;
    

    在这里插入图片描述

    子查询中的null值问题

    • 单行子查询中的null值问题
      在这里插入图片描述- 多行子查询中的null值问题
      示例:查询不是老板的员工
      在这里插入图片描述在这里插入图片描述查询错误,集合中有null值不可以使用not in
    展开全文
  • oracle 子查询走hash内连接的问题

    千次阅读 2018-08-26 12:28:02
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Release 11.2.0.1.0 - Production “CORE 11.2.0.1.0 Production” TNS for 64-bit Windows: Version 11.2.0.1.0 -...

    环境:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    PL/SQL Release 11.2.0.1.0 - Production
    “CORE 11.2.0.1.0 Production”
    TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production

    说明:我们知道,子查询展开几乎没有直接hash join的,遇到走hash join的,说明cbo认为子查询里面的的值没有重复值
    或者说不考虑有没有重复值,可以直接关联.此时一定要注意这类的连接列基数问题,很可能存在问题,下面的例子会具体说明;

    由2个distinct字段触发:

    
    drop table a purge;
    drop table b purge;
    create table a as select * from dba_objects;  
    create table b as select * from dba_objects;  
    
    select count(1) from a;
    --场景1:很慢
    A:select count(distinct owner), count(distinct object_name)  
      from a  
     where owner in (select owner from b);  
    

    这里写图片描述
    可以看到,此时cbo选择的是hash_join, 这里的owner连接列的基数很低;
    直接hash_join,比如这里的sys:30925,那么hash join一走记录数为30925*30925,
    这就是一个小型笛卡尔积了
    这里写图片描述
    为啥cbo要走hash_join,估计人家认为,我不管你子查询有木有重复值,反正你是要count(distinct),又不影响结果;
    直接跟你join;

    场景2:这个很快:因为使用了hash右半连接
    select count(owner), count(distinct object_name)
    from a
    where owner in (select owner from b);
    这里写图片描述
    为啥走右半连接,因为它没的选

    –场景3:很快
    select count(distinct owner), count(distinct object_name)
    from a
    where object_id in (select object_id from b);
    这里写图片描述
    这里也是走的hash join,为啥那么快,因为人家的是object_id,连接基数高,走hash也不影响;

    由此我们知道了如何优化场景1的sql了:
    1.不改变hash的连接方式,将子查询的结果集去重,变成n:1,这样返回的就是主表的记录数;
    2.改变hash的连接方式走右半连接就对了,因为右半连接只返回主表数据;

    解决方式1:去重
    select count(distinct owner), count(distinct object_name)
    from a
    where owner in (select owner from b group by b.owner ) ;
    这里写图片描述
    可以发现,此时子查询还是展开的,只不过是第二形态而已;

    解决方式2:走右半连接
    select count(distinct owner), count(distinct object_name)
    from a
    where owner in (select /+ hash_sj/ owner from b );
    可惜这里的hint没有用;

    于是就手动改写吧
    2.1不让视图合并
    select count(distinct owner), count(distinct object_name)
    from (select owner, object_name
    from a
    where owner in (select owner from b)
    and rownum > 0);
    这里写图片描述

    2.2使用with固化
    with tt as
    (select /+ materialize / owner, object_name
    from (select owner, object_name
    from a
    where owner in (select owner from b)))
    select count(distinct owner), count(distinct object_name) from tt;
    这里写图片描述
    这里with语句,必须加materialize,否则就视图合并了;

    2.3 加一个count(1)
    select count(1), count(distinct owner), count(distinct object_name)
    from a
    where owner in (select owner from b);
    这里写图片描述
    为啥加多加一个count(1),cbo就乖乖走右半连接了呢.因为此时要返回的是主表的count数,此时cbo如果要想转join就必须知道,in子查询有没有重复值;或者有没有重复值都不影响结果
    cbo掐指一算,这里in如果有重复值,对结果是有影响的,于是他肯定不会选择走hash join的;
    因为cbo转换的基础是等价转换!

    注意:这里的场景1 cbo选择走hash join跟是否直方图收集是没有的关系的;
    在12c这隔小bug已经修复;

    参考来源:
    https://blog.csdn.net/robinson1988/article/details/51148332

    展开全文
  • oracle_高级子查询

    千次阅读 多人点赞 2014-11-12 15:09:20
    oracle_高级子查询子查询 子查询是嵌套在 SQL 语句中的另一个SELECT 语句 子查询 (内查询) 在主查询执行之前执行 主查询(外查询)使用子查询的结果 ②多列子查询 主查询与子查询返回的多个列进行比较 where...
  • oracle 分组查询 子查询

    千次阅读 2017-10-27 12:02:44
    分组查询 例: 统计平均工资大于2000的部门信息 -- 1.确定要查询的字段及表 select e.sal,d.deptno, d.dname, d.loc from emp e,dept d where e.deptno= d.deptno -- 2.统计平均工资及部门信息 select ...
  • Oracle: 四、Oracle连接查询,子查询(相关子查询,嵌套子查询)(下) 内容简介  1,Demo连接查询。2,Demo 子查询(相关子查询,嵌套子查询)。 技术与环境 操作系统: ...
  • 子查询 –单行子查询 显示和雇员7369从事相同工作并且工资大于雇员7876的雇员 的姓名和工作 SELECT ename, job FROM emp WHERE job=( SELECT job FROM emp WHERE empno=7369 ) AND sal&amp;amp...
  • 子查询结果返回一个值(单列单行) 选择比较运算符:> < >= <= = <> select ename from emp_xxx where salary > ( select salary from emp_xxx where ename = '张无忌' ) ; 子查询结果返回...
  • d.depart_count as depart_count, d.createby_name as createby_name, to_char(d.createby_date, 'yyyy-MM-dd') as createby_date, d.remark as remark from base_detail d where 1 = 1 and d.detail_...
  • oracle练习之 子查询

    千次阅读 2017-03-31 16:56:52
    子查询 问题1 : 按工资进行排名,排名从1开始,工资相同则排名相同,(如果两人并列第一则没有第二名 从第三名开始继续排) select e.* , (select count(*) from emp where sal>e.sal ) +1 pm from emp e order ...
  • oracle联合子查询

    千次阅读 2011-03-18 16:02:00
    表的联合查询:oracle 多表联合查询,统计查询,组函数,order by,having,子查询,集合运算,关键字: oracle 多表 联合 查询 统计 组函数 order by having 子查询 集合 运算 多表联合查询 通过连接可以建立多表查询,多表...
  • ORACLE 高级子查询

    千次阅读 2014-07-30 22:16:43
    :: 在返回空值时描述并解释子查询的行为 :: 写一个在 FROM 子句中的子查询 :: SQL 中使用分级子查询 :: 描述能够用相关子查询解决的问题类型 :: 写相关子查询 :: 用相关子查询更新和删除行 :: 使用 EXISTS 和 NOT ...
  • 2,Demo 子查询(相关子查询,嵌套子查询)。 技术与环境 操作系统: windows 语言类别: SQL之PL/SQL thankyou: sunshine, 谢谢你的默默付出 数据库: Oracle 学习软件: Oracle 10g 课程总策划: yuanbo ...
  • oracle子查询分解(分而治之)

    千次阅读 2009-01-15 15:34:00
    oracle子查询分解(分而治之) url:http://hi.baidu.com/danghj/blog/item/fa2a7363971bff670c33fa0e.html 2009-01-07 15:23用一个sql语句完成一下问题: A,B,C三人的年龄相乘为36;相加等于所有在场的人的人数;...
  • Oracle子查询性能优化一例

    千次阅读 2012-05-23 10:30:03
     要做一个birt报表,数据库是oracle10g,但数据源是从多个数据表中得到的,所以只能写存储过程,把数据整合到一个临时表中去。完成的存储过程大致如下(只保留主要代码): createor replace procedure Rpt_Dyhgl_...
  • oracle 子查询因子化 with as

    千次阅读 2014-03-22 17:44:09
    WITH TB_DEPT_COUNT AS (SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO) SELECT * FROM TB_DEPT_COUNT; 结果: 查看所有的表: 表TB_DEPT_COUNT,相当于临时表。 使用with as能简化SQL。 不使用
  • Oracle 相关子查询理解

    千次阅读 2018-07-28 17:05:27
    相关子查询:执行查询的时候先取得外层查询的一个属性值,然后执行与此属性值相关的子查询,执行完毕后再取得外层父查询的下一个值,依次再来重复执行子查询;  不相关子查询:子查询的执行不需要提前取得父查询的...
  • 在sql中我们经常会使用到有in的子查询,例如:where id in(1,2,3),如果语句在数据库中出现,将会引起数据库的大量硬解析与共享池SQL碎片(简而言之就是影响数据库性能); 改善方法: 我们可以将in list绑定起来,...
  • oracle with as子查询用法

    千次阅读 2014-10-16 17:00:53
    with table as 相当于建个临时表(用于一个语句中某些中间结果放在临时表空间的SQL语句),Oracle 9i 新增WITH语法,可以将查询中的子查询命名,放到SELECT语句的最前面。
  • Oracle的高级查询 概述:Oracle作为一个老牌数据库,风风雨雨经历了二三十年。我们平时工作的时候,或多或少也会接触到...Oracle高级查询中,比较难理解的是分组查询,连接查询以及子查询,以及基于子查询的分页...
  • oracle多表查询子查询及实例

    千次阅读 2017-01-15 21:51:41
    多表查询笛卡儿集 列数相加,行数相乘,笛卡尔集不一定每条记录都正确.为了避免笛卡尔集,可以用where来避免.在实际生产中,应该避免笛卡尔全集.N张表至少有N-1个条件. 自连接:核心是通过别名,将一张表视为多张表select ...
  • 比如说:select a.id,a.name,(select sum(b.count),a.num-sum(b.count) from b) from a; 有这么一个语句,我想一下在b表里查出两个值来,作为两列字段跟a.id a.name两列的值同时都显示出来,但是我上面的写法会报错...
  • 本文含:多表查询/子查询/集合运算 1.多表查询 主要就是连接条件: nge表至少有n-1个连接条件 1.1连接类型: 1. 等值连接 2. 不等值连接 3. 外连接 4. 自连接 举例: 等值连接 :查询员工信息:员工号 姓名 月薪 ...
  • oracle中查询:子查询,连接查询

    千次阅读 2012-08-14 19:51:43
    多行的子查询 ( 使用多行运算符: in 、 ANY 、 ALL)IN 表示在某一个集合范围之内 -- 查询每个部门中最低工资的员工信息 SELECT empno,ename,sal,deptno FROM emp WHERE sal IN ( SELECT MIN (sal...
  • Oracle_子查询和常用函数

    千次阅读 2018-09-06 10:38:45
    1、子查询 子查询在 SELECT、UPDATE、DELETE 语句内部可以出现 SELECT 语句。内部的 SELECT 语句结果可以作为外部语句中条件子句的一部分,也可以作为外部查询的临时表。子查询的类型有: 单行子查询:不向外部...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,956
精华内容 20,782
关键字:

oracle子查询带count