分组函数:

六个常用的分组函数:

AVG,SUM,MIN,MAX,COUNT,WM_CONCAT: 行转列

PS:分组函数默认会自动过滤控制,可以使用NVL函数使分组函数无法忽略空值:

未使用NVL函数: select sum(comm)/count(*) 一,sum(comm)/count(comm) 二,avg(comm) 三 from emp; --若有空记录,第一个结果和二三结果的不同
使用NVL函数: select count(*) 一, count(nvl(comm,0)) 二 from emp;

分组函数的语法格式 :

PS:未包含在分组函数的列,必须要在group by子句后面

select a,b,c ,分组函数(d) from emp group by a,b,c;

如何过滤分组数据: having

PS: having与where的区别: where子句中不能使用分组函数,having必须和group by联用

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

order by

select deptno,avg(sal) from emp group by deptno order by avg(sal)

分组函数的嵌套:

select   max(avg(sal)) from emp group by  deptno;

group by增强:

PS: group by rollup(a,b) 等价于  group by a,b +group by a, group by null

select deptno,job,sum(sal) from emp group by rollup(deptno,job);

查询结果如下:

10    CLERK        2689.2
10 MANAGER 4807.96
10 PRESIDENT 6084.64
10 13581.8
20 CLERK 5456.11
20 ANALYST 6736.6
20 MANAGER 5093.17
20 17285.88
30 CLERK 2728.04
30 MANAGER 5025.26
30 SALESMAN 11261.79
30 19015.09
49882.77

多表查询:

笛卡尔积的概念:笛卡尔积就是列数相加,行数相乘

例如两张表emp,dept的数据如下是:

笛卡尔积的数据的sql如下

select * from emp,dept

结果如下:共56行数据

连接类型:

  等值连接: e.deptno = d.deptno
  不等值连接 : from emp e, salgrade s where e.sal > s.losal and e.sal < s.hisal
  外链接 : 通过外链接,把对于连接条件不成立的记录,任然包含在最后的结果中
    左外链接:=(+)
    右外连接: (+)=     : 下方的例子若不用右连接则查不出来两边表中不存在的deptno的记录

右连接的作用: select d.deptno 部门号,d.dname 部门名称,count(e.empno) 人数
from emp e, dept d
where e.deptno (+)=d.deptno
group by d.deptno,d.dname;

    查询结果如下:

    若是不用右连接,sql语句中少了"(+)",则查询结果如下:

  自连接:通过别名,将同一张表视为多张表

select e.ename 员工姓名, b.ename 老板姓名
from emp e ,emp b
where e.mgr = b.empno

    查询结果如下:

    自连接缺点:不适合操作大表,一张表做一次自连接 笛卡尔积会是记录的平方;做两次自连接笛卡尔积是记录的立方

    解决方法:层次查询   

--上一层的员工号(prior empno)是当前层的老板号(mgr) 

--level 伪列字段:表中不存在的字段 代表当前记录的的层级
select level,empno,ename,sal,mgr
from emp
connect by prior empno = mgr
start with empno = 7839
order by 1;

    查询结果如下:

      1)自连接优点:是单表查询,不会产生笛卡尔积
      2)自连接缺点:结果不直观

    自连接与层级查询对比的优点:结果比较直观

oracle的分组查询和连接查询的更多相关文章

  1. 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...

  2. Mysql的查询语句(联合查询、连接查询、子查询等)

    Mysql的各个查询语句(联合查询.连接查询.子查询等) 一.联合查询 关键字:union 语法形式 select语句1 union[union选项] select 语句2 union[union选项 ...

  3. mysql查询、子查询、连接查询

    mysql查询.子查询.连接查询 一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.gr ...

  4. mysql 子句、子查询、连接查询

    一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count( ...

  5. 【知识库】-数据库_MySQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    简书作者:seay 文章出处: 关系数据库SQL之高级数据查询:去重复.组合查询.连接查询.虚拟表 回顾:[知识库]-数据库_MySQL之基本数据查询:子查询.分组查询.模糊查询 Learn [已经过 ...

  6. MSSQLServer基础05(联合查询,连接查询)

    联合结果集union(集合运算符) 集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定.(可以用来连接多个 ...

  7. 图解SQLSERVER联合查询和连接查询的区别

      相信很多人都会用SQLSERVER联合查询和连接查询,但是用起来不一定都得心应手,对于其中的原理可能就模糊不清了,要想很牢固地掌握和运用SQL联合查询和连接查询机制,必须对其根本原理有很清晰认识, ...

  8. MySQL分组查询与连接查询

    一,分组查询 使用ORDER BY子句将表中的数据分成若干组(还是按行显示) 语法: SELECT 字段名[,聚集函数] FROM 表名 [WHERE子句] GROUP BY 要分组的字段名 [ORD ...

  9. ORACLE复杂查询之连接查询

    一.传统的连接查询 1.交叉连接:返回笛卡尔积 WHERE中限定查询条件,可以预先过滤掉掉不符合条件的记录,返回的只是两个表中剩余记录(符合条件的记录)的笛卡尔积. 2.内连接:参与连接的表地位平等, ...

  10. mysql的查询、子查询及连接查询

    >>>>>>>>>> 一.mysql查询的五种子句         where(条件查询).having(筛选).group by(分组). ...

随机推荐

  1. BZOJ 3668: [Noi2014]起床困难综合症【贪心】

    3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2326  Solved: 1305[Submit][St ...

  2. bzoj:3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛

    Description     约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡 ...

  3. Sublime Text 使用介绍、全套快捷键及插件推荐

    开篇:如果说Notepad++是一款不错Code神器,那么Sublime Text应当称得上是神器滴哥.Sublime Text最大的优点就是跨平台,Mac和Windows均可完美使用:其次是强大的插 ...

  4. 关于将dede织梦data目录迁移出web目录

    关于将dede织梦data目录迁移出web目录织梦官方提供了一个教程,但是如果你是按照他们提供的教程做的话会出现很多问题.比如验证码问题,图片显示问题等等一大堆.织梦官方这种是很不负责任的,因为那个教 ...

  5. PHPMailer发送邮件中文附件名是乱码

    可能使用了PHPMailer发送邮件的朋友带中文附件名时会出现乱码,下面我来介绍一个解决办法. 比如我们要发送的附件是"测试.txt",如果在添加附件的时候强制使用指定文件名的方式 ...

  6. 关于Vue的路由、脚手架笔记

    在页面引入vue-router.js文件,开始配置路由 <div id="box"> <ul><li> <a v-link="{ ...

  7. <script>的用法

    <script> </script> 是指 在 HTML 页面中插入一段 JavaScript

  8. mybatis_SQL映射(4)鉴别器

    摘录自:http://blog.csdn.net/y172158950/article/details/17505739 鉴别器:有时一个单独的数据库查询也许返回很多不同(但是希望有些关联)数据类型的 ...

  9. 监控服务器ssh登录,并发送报警邮件

    最近想监控下云主机的ssh登录情况,所以开始写ssh登录报警监控.实现方式并不难. 一:邮箱申请开启SMTP 在邮箱中选择“设置”----->“账户” 在如下图处开启POP3/SMTP服务,并生 ...

  10. 2018/1/28 每日一学 单源最短路的SPFA算法以及其他三大最短路算法比较总结

    刚刚AC的pj普及组第四题就是一种单源最短路. 我们知道当一个图存在负权边时像Dijkstra等算法便无法实现: 而Bellman-Ford算法的复杂度又过高O(V*E),SPFA算法便派上用场了. ...