分组函数:

六个常用的分组函数:

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. LVS集群ipvsadm命令和调度算法(6)

    一.ipvsadm命令参考 为了更好的让大家理解这份命令手册,将手册里面用到的几个术语先简单的介绍一下: 术语解释: 1.virtual-service-address:是指虚拟服务器的ip地址2.r ...

  2. CCS入门基础

      1.CSS概念 全称为Cascading Style Sheets(层叠样式表),支持专有的文件 - 扩展名为".css" 作用:将HTML的结构(HTML标签即html)与样 ...

  3. Pandas系列之入门篇——HDF5

    Pandas系列之入门篇--HDF5 简介 HDF5(层次性数据格式)作用于大数据存储,其高效的压缩方式节约了不少硬盘空间,同时也给查询效率带来了一定的影响, 压缩效率越高,查询效率越低.pandas ...

  4. 栈的存储结构的实现(C/C++实现)

    存档 #include "iostream.h" #include <stdlib.h> #define max 20 typedef char elemtype; # ...

  5. April Fools Contest 2017 题解&源码(A,数学 B,数学 C,数学 D,字符串 E,数字逻辑 F,排序,卡时间,G,数学)

    A. Numbers Joke time limit per test:2 seconds memory limit per test:64 megabytes input:standard inpu ...

  6. vijos 1942 [AH 2005] 小岛

    描述 西伯利亚北部的寒地,坐落着由 N 个小岛组成的岛屿群,我们把这些小岛依次编号为 1 到 N . 起初,岛屿之间没有任何的航线.后来随着交通的发展,逐渐出现了一些连通两座小岛的航线.例如增加一条在 ...

  7. HDU 1010 Tempter of the Bone【DFS经典题+奇偶剪枝详解】

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  8. python爬取拉勾网职位数据

    今天写的这篇文章是关于python爬虫简单的一个使用,选取的爬取对象是著名的招聘网站--拉钩网,由于和大家的职业息息相关,所以爬取拉钩的数据进行分析,对于职业规划和求职时的信息提供有很大的帮助. 完成 ...

  9. C++ enum用法小技巧

    enum DeviceDataType :int    {        None = 0,              SourceRGBA32 = 1,               Keying = ...

  10. union 时只能查出一个表中的信息,另一个表只能查出字段

    原因:news表中title字段的编码,与brand表中的编码不一致导致 y