在学习高级查询之前,我们先了解一下怎样查看Oracle数据库中的全部表。由于我们要使用到Oracle数据库中SCOTT用户下的几张表(这些表是Oracle数据库自带的表)。



  • 分组查询
    • 分组函数的概念:分组函数作用于一组数据,并对一组数据返回一个值。

      • 经常使用的分组函数:AVG、SUM、MIN、MAX、COUNT、WM_CONCAT(行转列)
    • 语法:

    • 分组函数的使用

      • AVG(平均值)和SUM(合计)函数

1、求出员工的平均工资和工资的总额

                                select avg(sal),sum(sal) from emp;
  • MIN(最小值)和MAX(最大值)函数

2、求出员工工资的最大值和最小值

                                select max(sal),min(sal) from emp;
  • COUNT(计数)函数

3、求出员工的总人数

                                select count(*) from emp;
                                select count(empno) from emp;

  • DISTINCE(distinct)keyword(DISTINCT用于去掉反复的记录)

4、求出部门数

                                  select count(deptno) from emp;
                                  select deptno from emp;
                                  select count(distinct deptno) from emp;

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

  • WM_CONCAT:行转列

演示样例:select deptno,wm_concat(ename) from emp group by deptno;


上面显示的样式非常不好看。我们首先用host cls命令清屏,然后运行以下命令。格式化显示的格式
                                set linesize 200
                                col 部门中员工的姓名 for a60
                                select deptno 部门号,wm_concat(ename) 部门中员工的姓名 from emp group by deptno;

  • 分组函数与空值

1、统计员工的平均工资

                                select sum(sal)/count(*) 一,sum(sal)/count(sal) 二,avg(sal) 三 from emp;

                                2、统计员工的平均奖金
                                select sum(comm)/count(*)  一,sum(comm)/count(comm) 二,avg(comm) 三 from emp;
                                select count(*),count(comm) from emp;

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

                               总结:分组函数会自己主动忽略空值,仅仅会统计非空的个数
  • 在分组函数中使用NVL函数

注意:NVL函数使用分组函数无法忽略空值

                                select count(*),count(nvl(comm,0)) from emp;

  • 使用GROUP BY子句数据分组(GROUP BY能够作用在一个列上,也能够作用在多个列上)

    • group by子句的使用

      • 使用单个列分组

演示样例:求每一个部门的平均工资,要求显示:部门号,部门的平均工资

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


                                抽象:Oracle中语法的规定
                                select a,组函数(x) from table group by a;
                                select a,b,c,组函数(x) from table group by a,b,c;
                                注意:在SELECT列表中全部未包括在组函数中的列都应该包括在GROUP BY子句中。包括在GROUP BY子句中的列不必包括在SELECT列表中
                                演示样例:求每一个部门的平均工资,要求显示:部门的平均工资
                                select avg(sal) from emp group by deptno;

  • 使用多个列分组

演示样例:按部门、不同的职位,统计员工的工资总额

                                    select deptno,job,sum(sal) from emp group by deptno,job;
                                    select deptno,job,sum(sal) from emp group by deptno,job order by deptno;
非法使用组函数:
改动:

  • 使用HAVING子句过滤分组结果集

    • 求平均工资大于2000的部门,要求显示:部门号,平均工资

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



  • where与having的差别

    • 同样点:都是过滤结果集
    • 不同点:

不能再WHERE子句中使用组函数(注意)。

                                                    能够在HAVING子句中使用组函数。

  • where与having通用的情况

select deptno,avg(sal) from emp group by deptno having deptno=10;

                                select deptno,avg(sal) from emp where deptno=10 group by deptno;
                                having 先分组 后过滤
                                where  先过滤 后分组
                                where使得分组记录数大大减少,从而提高效率
                                注意:where子句中不能使用组函数
  • 在分组查询中使用order by字句

    • 演示样例:求每一个部门的平均工资,要求显示:部门号,部门的平均工资而且依照工资升序排列

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

                                  select deptno,avg(sal) 平均工资 from emp group by deptno order by
平均工资;
                                  select
deptno,avg(sal) 平均工资 from emp group by deptno order by 2;

    • 能够依照:列,别名,表达式,序号进行排序




错误演示:


  • 分组函数的嵌套

    • 演示样例:求部门平均工资的最大值

1、通过AVG函数求出每一个部门的平均工资

                            2、嵌套MAX函数求出部门平均工资的最大值
                               select max(avg(sal)) from emp group by deptno;

  • group by语句的增强

break on deptno   2 同样部门号的值仅仅显示一次,不同的部门号之间跳过两行

                            set pagesize 30   每页显示30条记录

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


  • SQL*Plus的报表功能

报表包含:标题,页码,别名等


watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

Oracle学习笔记(7)——高级查询(1)的更多相关文章

  1. Oracle学习笔记_07_模糊查询

    附录:参考资料 1.Oracle sql语言模糊查询--like后面的通配符 2.oracle sql语言模糊查询--通配符like的使用教程

  2. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  3. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  4. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  5. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  6. Hadoop学习笔记(7) ——高级编程

    Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...

  7. MyBatis:学习笔记(3)——关联查询

    MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...

  8. Oracle学习笔记——点滴汇总

    Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster

  9. Oracle学习笔记—数据字典和常用命令(转载)

    转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...

  10. mybatis学习笔记(10)-一对一查询

    mybatis学习笔记(10)-一对一查询 标签: mybatis mybatis学习笔记10-一对一查询 resultType实现 resultMap实现 resultType和resultMap实 ...

随机推荐

  1. jQuery选择器(基本过滤选择器)第三节

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  2. windows查看端口占用命令

    开始--运行--cmd 进入命令提示符 输入netstat -aon 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选&qu ...

  3. 一款超好用轻量级JS框架——Zepto.js(下)

       前   言 絮叨絮叨 前面和大家分享了Zepto的原型方法,相信大家也对这个框架有了一定的了解,那么今天再和大家分享一下它的对象方法吧! 1add() 支持一到二个参数,第一个为选择器,与$() ...

  4. 第一章 Linux系统介绍与环境搭建准备

    1.操作系统: Operating System,简称OS,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心. 操作系统就是处于用户与计算机系统硬件之间用于传递信息的系统程序软件. ...

  5. PLSQL锁表之后改如何操作

    (1)查看哪个表被锁select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects ...

  6. Asp.Net MVC 中的 Cookie(译)

    Asp.Net MVC 中的 Cookie(译) Cookie Cookie是请求服务器或访问Web页面时携带的一个小的文本信息. Cookie为Web应用程序中提供了一种存储特定用户信息的方法.Co ...

  7. [转载] java多线程学习-java.util.concurrent详解(二)Semaphore/FutureTask/Exchanger

    转载自http://janeky.iteye.com/blog/770393 ------------------------------------------------------------- ...

  8. [转]Oracle 重建索引的必要性

    http://blog.csdn.net/leshami/article/details/23763963 索引重建是一个争论不休被不断热烈讨论的议题.当然Oracle官方也有自己的观点,我们很多DB ...

  9. 用JAVA中BufferedImage画出漂亮的验证码点击变化

    如果我们想用JAVA中BufferedImage画出漂亮的验证码点击变化怎么实现呢,类似这样: 点击变化,以下是实现过程,直接上代码: 首先前台:<i><img style=&quo ...

  10. Nuxt框架实践

    前言 今天抽空过了遍nuxt文档,写了个实践demo,关于nuxt我已经断断续续看了好几遍了,自我感觉也算是入门了吧,从开发到上线心里都有底.后期打算在项目用起来的是nuxt框架,一些函数工具库,比如 ...