zoukankan      html  css  js  c++  java
  • 子查询

     
    子查询遵循的原则
    1.子查询放在园括号中(),优先父查询被执行
    2.一般无需对子查询的结果进行排序
     
    非相关子查询
    子查询仅执行一次,子查询返回的结果集可以与父查询中每一行进行比较。
     
    按返回结果划分
    1. 单行单列子查询,通常与比较预算符=,>,<,!=,<=,>=联合使用来比较运算
    2.多行单列子查询返回单列多行数据时,必须使用特定的关键字any,all
     1 --子查询: sql语句内的另外一条select语句,也曾为内查询或内select 查询
     2 --任何在 select、insert、update或delete命令中允许表达式的地方都
     3 --在emp表中查询部门名称(dname)为“RESEARCH”的员工信息;
     4 select empno,ename,job from emp where deptno=(select deptno from dept where dname ='RESEARCH' );
     5 --多表连接的方式
     6 select empno,ename,job from emp join dept on emp.deptno=dept.deptno
     7 where dept.dname='RESEARCH';
     8 --相对于多表关联查询,子查询的使用更加灵活、功能更强,而且更容易理解
     9 --但是多表连接的效率要高于子查询;
    10 --子查询语句
    11 select deptno from dept
    12 where dname ='RESEARCH'
    13 --外查询语句
    14 select  empno,ename,job from emp;
    15 --一般情况下,外查询语句检索一行,子查询语句需要检索一遍数据,然后判断外查询语句的条件是否满足。
    16 --如果条件满足,将检索的数据添加的结果集中,不满足则检索下一行的数据,所以说子查询相对于关联查询要更慢一些;
    17 --(1)子查询必须用括号“()”括起来。(2)子查询不能包括ORDER BY子句。(3)子查询允许嵌套多层,但不能超过255层。
    18 --(1)单行子查询 (2)多行子查询(3)关联子查询
    19 --单行子查询 :查询emp表中既不是最高工资,也不是最低工资的员工信息;
    20 --子查询返回的行数据
    21 select empno,ename,sal from emp where sal >(select min(sal) from emp)
    22 and sal <(select max(sal) from emp);
    23 --多行子查询:查询不是销售部 的员工信息    (in,any,all)
    24 --子查询返回的是多行的数据
    25 select empno,ename,job from emp where deptno in(select deptno from dept where dname <>'SALES');
    26 --查询工资大于部门编号为10 的任意一个员工即可的其他部门的员工信息
    27 select deptno,ename,sal from emp where sal >any (select sal from emp where deptno =10) and deptno<>10;
    28 --查询工资大于部门编号为30的所有员工的工资信息
    29 select deptno,ename,sal from emp where sal>all (select sal from emp where deptno =30);

     

    --相关子查询
    当一个子查询引用了父查询中的一个或多个列时,这种查询称为相关子查询
    --检索工资大于(同职位的平均工资)的员工信息
    select empno,ename,sal from emp f
    where sal>(select avg(sal) from emp where job = f.job)order by job;
     
    oracle group by中rollup和cube的区别: 
    Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是ROLLUP(A, B, C)的话, 
    首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。 
    如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C), 
    最后对全表进行GROUP BY操作。 
  • 相关阅读:
    sql优化
    一些有用的单词(1)
    用到的 Sed 注解
    终端工具注册码
    nginx四层、七层负载均衡配置示例
    http 状态码
    04. Golang 数据类型
    03. Golang 特性
    02. Go 命令
    01. GOPATH 目录结构划分的两种风格
  • 原文地址:https://www.cnblogs.com/Remedy/p/8652009.html
Copyright © 2011-2022 走看看