Oracle 第一天

写来自己回忆的。

1、group by 子句

  如果select语句后跟了n个列,那么group by后面也要跟相同的n个。比如:select deptno,ename,sum(sal) from emp。

2、where 和 having 的区别

  where不能跟组函数,having可以;

  where是先过滤后分组,而having是先分组后过滤。相比而言,where效率更高。

3、多表查询(连接条件)

  --连接条件:表有n张,则条件至少有n-1个;

  --笛卡尔积:列数相加,行数相乘。比如一个2列*4的表与一个三列*2的表,运算后得一个5列*8的表;

  --等值连接: =

  --不等值连接: >   <

  --自连接:通过表的别名,把一个表当做多个表;

  --外连接 --按部门共计员工人数:部门化  部门名称 人数
      select d.deptno 部门号,d.dname 部门名称,count(e.empno) 人数
      from emp e,dept d
      where e.deptno(+) = d.deptno
      group by d.deptno,d.dname;
      /**
      希望:对于某些不成立的记录,仍然希望包含在最后的结果中
      左外连接:当where e.deptno = d.deptno不成立的时候,=左边的表仍然被包含
        写法:where e.deptno = d.deptno(+)
      右外连接:当where e.deptno = d.deptno不成立的时候,=右边的表仍然被包含
        写法:where e.deptno(+) = d.deptno
      */
    --自连接:通过表的别名,将同一张表视为多张表。不适合操作大表
    --查询员工信息:员工姓名  老板的姓名
    select e1.ename,(select e2.ename from emp e2 where e1.mgr = e2.empno) from emp e1;
    --层次查询:本质上为单表查询.不会产生笛卡尔积
    -- level>伪列
     select level,empno,ename,mgr from emp
     connect by prior empno = mgr
     start with empno = 7839  --从这个节点开始往下 遍历这棵树
     order by 1;
     --start with mgr is null;-- King

posted on 2016-12-14 22:12  ing。。。  阅读(58)  评论(0编辑  收藏  举报

导航