zoukankan      html  css  js  c++  java
  • oracle学习笔记(十一) 高级查询

    高级查询

    分组查询

    select * from student
    [where ]
    [having ] --二次限定
    [order by] --asc升序 desc降序 默认升序
    

    查看EMPLOYEE表中,员工在同一部门做相同工作且总工资大于5000,平均工资小于1500的薪水情况和人数?

    select  deptno,job,count(*) from employee
    group by  deptno,job
    having avg(sal)<1500 and sum(sal) >5000
    order by deptno;
    

    分组查询注意事项:
    如果在查询结果中的某些字段上没有使用分组函数,那么这些字段就必须出现在group by子句中。这是一个分组查询的强制性规则。

    --查询每个部门的人数以及部门的总工资
    --两个列都是使用了分组函数,所以group by 语句中可以省略不写
    --但deptno没有使用分组函数,所以要group by语句中要出现deptno
    select deptno,count(empno),sum(sal) from employee
    group by deptno
    
    

    非等值连接

    简单地来说,连接条件就是某些值满足在某个范围之内

    --salgrade表中三个属性,losal-hisal是工资范围,grade则是该范围对应的等级
    select ename,salgrade from employee,salgrade
    where sal between losal and hisal;
    

    内连接inner join(等值连接)

    多用于表之间有关联关系,如主外键关系的表

    select * from employee e
    	join department d  --这里相当于inner join,inner可以省略
    		on e.deptno = d.deptno;
    --等值连接
    select * frjom employee e,department d
    where e.deptno = d.deptno;
    

    左外连接left outer join

    多用于表之间有关联关系,如主外键关系的表,不过以左边数据为标准,未匹配的以空行出现
    一般outer可以省略不写

    select * from employee e
    	left join depaterment d on e.deptno = d.deptno;
    

    右外连接

    与左外连接相反,以右边数据为标准,未匹配的以空行出现,好像不常用

    子查询

    单行子查询可以出现在以下位置:

    • select语句
    • from语句
    • join子句中
    • HAVING子句中

    多行子查询:

    1. ANY(值列表): 与子查询结果列表中的任何一个值比较。
    2. ALL(值列表):与子查询结果列表中的所有值比较。
    3. IN(值列表): 等于列表中的任何一个值。
    select * 
    from employee
    where sal<any(select distinct sal from employee where job='SALESMAN')
    
  • 相关阅读:
    Gengxin讲STL系列——Set
    理解Python的With语句
    Python中Non-ASCII character 'xe7' in file的问题解决
    gnome-terminal的一些调整
    硬盘的CHS寻址
    Wiz发布cnblog笔记
    cygwin安装man手册
    linux命令行使用
    小步前进
    学习的感觉真好
  • 原文地址:https://www.cnblogs.com/stars-one/p/10889316.html
Copyright © 2011-2022 走看看