zoukankan      html  css  js  c++  java
  • Oracle学习<四>

    六、having 语句

        

        Having 对分组结果筛选

        Where是对单条纪录进行筛选,Having是对分组结果进行筛选.

        select avg(sal),deptno from emp group by deptno having avg(sal)>2000;

        查询工资大于1200雇员,按部门编号进行分组,分组后平均薪水大于1500,按工薪倒充排列.
        select * from emp where sal>1200 group by deptno having avg(sal)>1500 order by avg(sal) desc;

      

    七、子查询


      谁挣的钱最多(谁:这个人的名字, 钱最多)

      select 语句中嵌套select 语句,可以在where,from后.


      问那些人工资,在平均工资之上.

      select ename,sal from emp where sal>(select avg(sal) from emp);


      查找每个部门挣钱最多的那个人的名字.
      select ename ,deptno from emp where sal in(select max(sal) from ename group by deptno) 查询会多值.

      应该如下:

      select max(sal),deptno from emp group by deptno;当成一个表.语句如下:
      select ename, sal from emp join(select max(sal) max_sal,deptno from emp group by deptno) t on(emp.sal=t.max_sal and emp.deptno=t.deptno);

       每个部门的平均薪水的等级.
      分析:首先求平均薪水(当成表),把平均薪水和另外一张表连接.

      join是连接两个表,而on是表示这两个表通过某种条件连接

     八、self_table_connection 自连接

        把某个人的名字以及他的经理人的名字求出来(经理人及这个人在表中同处一行)

        分析:首先求出这个人的名字,取他的编号,然后从另一张表与其相对应编号,然后找到经理的名字.

        select e1.ename ,e2.ename from emp e1,emp e2 where e1.mgr= e2.empno.

        empno编号和MGR都是编号.

      

    九、SQL1999_table_connections 


      select ename,dname,grade from emp e,dept d, sqlgrade s
      where e.deptno = d.deptno and e.sql between s.losal and s.hisal and
      job<>'CLERK';

      有没有办法把过滤条件和连接条件分开来? 出于这样考虑,Sql1999标准推出来了.有许多人用的还是
      旧的语法,所以得看懂这种语句.



      select ename,dname from emp,dept;(旧标准).
      select ename,dname from emp cross join dept;(1999标准)

      select ename,dname from emp,dept where emp.deptno=dept.deptno (旧)
      select ename,dname from emp join dept on(emp.deptno = dept.deptno); 1999标准.没有Where语句.
      select ename,dname from emp join dept using(deptno);等同上句,但不推荐使用.

      select ename,grade from emp e join salgrade s on(e.sal between s.losal and s.hisal);
      join 连接语句, on过滤条件。连接,条件一眼分开。如果用Where语句较长时,连接语句和过滤语句混在一起。

      三张表连接:
      slect ename,dname, grade from
      emp e join dept d on(e.deptno=d.deptno)
      join salgrade s on(e.sal between s.losal and s.hisal)
      where ename not like '_A%';
      把每张表连接 条件不混在一起,然后数据过滤条件全部区分开来。读起来更清晰,更容易懂一点。

      select e1.ename,e2.ename from emp e1 join emp e2 on(e1.mgr = e2.emptno);

      左外连接:会把左边这张表多余数据显示出来。
      select e1.ename,e2,ename from emp e1 left join emp e2 on(e1.mgr =e2.empno);left 后可加outer
      右外连接:
      select ename,dname from emp e right outer join dept d on(e.deptno =d.deptno); outer可以取掉。

      即把左边多余数据,也把右边多余数据拿出来,全外连接。
      select ename,dname from emp e full join dept d on(e.deptno =d.deptno);

  • 相关阅读:
    基于docker+reveal.js搭建一个属于自己的在线ppt网站
    Python3学习笔记
    SSL证书简介
    Centos7.4下用Docker-Compose部署WordPress(续)-服务器端用Nginx作为反向代理并添加SSL证书(阿里云免费DV证书)
    Centos7.4下用Docker-Compose部署WordPress
    Yii2+Swagger搭建RESTful风格的API项目
    CentOS 6(64-bit) + Nginx搭建静态文件服务器
    Ubuntu 14.04TLS和CentOS-6(64bit)上安装Nginx
    Ubuntu 14.04TLS Nginx搭建静态文件服务器
    Ubuntu 12.04 安装Redis并设置主从复制
  • 原文地址:https://www.cnblogs.com/elleniou/p/2628180.html
Copyright © 2011-2022 走看看