oracle分组统计、多表查询、子查询和分页查询

摘要:
select1.ename,e2.eamerefrompe1,empe2其中e1.mgr=e2.empno;------查询员工姓名、员工部门名称、员工领导姓名、员工领导部门名称selecte1.ename、d1.dname、e2.ename、d2.dnamefrompe1、empe2、deptd1、deptd2,其中e1.mgr=e2.empnoande1.deptno=d1.deptnoande2.deptno=d2.deptno;子查询:---子查询---子查询返回一个值---查询与SCOTT相同薪资的员工信息select*frompwheresalin---子查询将返回一个集合---查询与部门10中任何员工相同薪资的人员信息select*frompwhere salin---该子查询返回表---查询每个部门的最低工资,最低工资员工的姓名,以及员工的部门名称---1.首先查询每个部门的最低工资,选择deptno,minmsalforommpgroupbydeptno---2.通过三表联合查询得到最终结果。选择rownum,t*来自;----emp表按相反顺序排列后,每一页上有五条记录,您可以查询第二页。

分组统计:

  分组统计需要使用 GROUP BY来分组

  语法:SELECT * |列名 FROM 表名 {WEHRE 查询条件} {GROUP BY 分组字段} ORDER BY 列名 1 ASC|DESC,列名 2...ASC|DESC
    按部门分组,查询出部门名称和部门的员工数量

    select d.deptno, d.dname, count(e.ename) from emp e, dept d where e.deptno = d.deptno group by d.deptno, d.dname;

    查询出部门人数大于 5 人的部门

    select d.deptno, d.dname, count(e.ename) from emp e, dept d where e.deptno = d.deptno group by d.deptno, d.dname having count(ename) > 5;

    查询出部门平均工资大于 2000的部门

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

多表查询:

---笛卡尔积
select *
from emp e, dept d;
---等值连接
select *
from emp e, dept d
where e.deptno=d.deptno;
---内连接
select *
from emp e inner join dept d
on e.deptno = d.deptno;
---查询出所有部门,以及部门下的员工信息。【外连接】
select *
from emp e right join dept d
on e.deptno=d.deptno;
---查询所有员工信息,以及员工所属部门
select *
from emp e left join dept d
on e.deptno=d.deptno;
---oracle中专用外连接
select *
from emp e, dept d
where e.deptno(+) = d.deptno;

  使用(+)表示左连接或者右连接,当(+)在左边表的关联条件字段上时是右连接,如果是在右边表的关联条件字段上就是左连接。

  自连接查询

select * from emp;
---查询出员工姓名,员工领导姓名
---自连接:自连接其实就是站在不同的角度把一张表看成多张表。
select e1.ename, e2.ename
from emp e1, emp e2
where e1.mgr = e2.empno;
------查询出员工姓名,员工部门名称,员工领导姓名,员工领导部门名称
select e1.ename, d1.dname, e2.ename, d2.dname
from emp e1, emp e2, dept d1, dept d2
where e1.mgr = e2.empno
and e1.deptno=d1.deptno
and e2.deptno=d2.deptno;

子查询:

---子查询
---子查询返回一个值
---查询出工资和SCOTT一样的员工信息
select * from emp where sal in
(select sal from emp where ename = 'SCOTT')
---子查询返回一个集合
---查询出工资和10号部门任意员工一样的员工信息
select * from emp where sal in
(select sal from emp where deptno = 10);
---子查询返回一张表
---查询出每个部门最低工资,和最低工资员工姓名,和该员工所在部门名称
---1,先查询出每个部门最低工资
select deptno, min(sal) msal
from emp 
group by deptno;
---2,三表联查,得到最终结果。
select t.deptno, t.msal, e.ename, d.dname
from (select deptno, min(sal) msal
      from emp 
      group by deptno) t, emp e, dept d
where t.deptno = e.deptno
and t.msal = e.sal
and e.deptno = d.deptno;

Rownum 与分页查询:

  使用 分析函数 或者 minus运算符 实现分页更加简单:见 https://www.cnblogs.com/roadlandscape/p/12342458.html

  ROWNUM:表示行号,实际上是一个列,但是这个列是一个伪列,此列可以在每张表中出现,所以不可以用 表名.rownum 来使用,但该列可以起别名,通过别名使用。

----oracle中的分页
---rownum行号:当我们做select操作的时候,
--每查询出一行记录,就会在该行上加上一个行号,
--行号从1开始,依次递增,不能跳着走。

----排序操作会影响rownum的顺序
select rownum, e.* from emp e order by e.sal desc
----如果涉及到排序,但是还要使用rownum的话,我们可以再次嵌套查询。
select rownum, t.* from(
select rownum, e.* from emp e order by e.sal desc) t;


----emp表工资倒叙排列后,每页五条记录,查询第二页。
----rownum行号不能写大于等于一个正数。
select * from(
    select rownum rn, tt.* from(
          select * from emp order by sal desc
    ) tt where rownum<11
) where rn>5

免责声明:文章转载自《oracle分组统计、多表查询、子查询和分页查询》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python爬虫入门01:教你在 Chrome 浏览器轻松抓包rabbitmq trace 日志的使用以及其疑惑之处下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

浅谈Python-IO多路复用(select、poll、epoll模式)

1. 什么是IO多路复用   在传统socket通信中,存在两种基本的模式,   第一种是同步阻塞IO,其线程在遇到IO操作时会被挂起,直到数据从内核空间复制到用户空间才会停止,因为对CPython来说,很多socket相关函数均是与内核函数(系统调用)密切相关的,比如fctl与ioctl,那么采用这种模式就会存在CPU资源利用率变低,具体的模式图如下:...

【Oracle】CentOS7/CentOS8命令行重启Oracle 11G R2

写在前面 按照读者朋友的要求写了一篇《【Oracle】CentOS7/CentOS8命令行安装Oracle 11G R2》,由于读者完全是按照我的安装方式安装的Oracle数据库,也是将Oracle数据库安装在了CentOS 8虚拟机中,安装成功后,便关闭了虚拟机,等重新开启虚拟机时,Oracle数据库并没有自动启动,此时,需要我们重新启动Oracle数据...

Spring配置JDBC连接Orcale、MySql、sqlserver

阅读指南:本文章主要讲述如何在Spring框架中配置JDBC连接方式连接Oracle、Mysql、SqlServer。 原理如下: 一、导包 连接oracle11g所需的jar包:ojdbc6.jar连接mysql5.1所需的jar包:mysql-connector-java-5.1.12-bin.jar连接sqlserver2008所需的jar包:sql...

IDEA创建SpringBoot项目整合JPA,连接Oracle数据库,使用Swagger进行测试

一、信息 IDEA  2019.1 jdk   1.8 Oracle  11.2.0.1.0 二、创建Spring Boot项目 1、选择JDK 2、根据你的公司名填写Group名,Artifact名不能包含大写,IDEA会报告含有非法字符,这一点挺奇怪的 3、选择依赖,这里我们选择Spring Data JPA和Spring Web,点击next 4...

oracle11g-rac安装部署

网上11g rac安装文档大多不详细,今天来一个详细的! 纯操作文档,不喜勿喷!! 环境:   系统:rhel5.5   oracle:11.2.03   双网卡   共享磁盘 ip地址和主机名规划:   #节点1 主机名:rac1   #节点2 主机名:rac2   192.168.56.11   rac1  192.168.56.22   rac2  ...

Oracle 删除数据后释放数据文件所占磁盘空间

. . . . . 测试的时候向数据库中插入了大量的数据,测试完成后删除了测试用户以及其全部数据,但是数据文件却没有缩小。经查阅资料之后发现这是 Oracle “高水位”所致,那么怎么把这些数据文件的大小降下来呢?解决办法如下: 概念: 表空间的相关知识请见这里,详细的介绍了 Oracle 数据库的存储结构。 高水位:High Water Mark (HW...