在学习高级查询之前,我们先了解一下怎样查看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. Problem E: 动物爱好者

    Problem E: 动物爱好者 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 882  Solved: 699[Submit][Status][Web ...

  2. UNIX标准及实现

    UNIX标准及实现 引言     在UNIX编程环境和C程序设计语言的标准化方面已经做了很多工作.虽然UNIX应用程序在不同的UNIX操作系统版本之间进行移植相当容易,但是20世纪80年代UNIX版本 ...

  3. IIS解决CPU和内存占用率过高的问题

    发现进程中的w3wp占用率过高. 经过查询,发现如下: w3wp.exe是在IIS(因特网信息服务器)与应用程序池相关联的一个进程,如果你有多个应用程序池,就会有对应的多个w3wp.exe的进程实例运 ...

  4. Postman+newman+jenkins构建

      最近忙着项目接口测试,经过不同工具的对比,发现postman使用起来挺顺手的,所以马上决定使用这个工具进行接口测试工作.刚开始的时候,了解了下接口测试的相关信息,直接着手编写接口测试的测试用例信息 ...

  5. 用JavaScript实现表格编辑器

    实现效果: htm l代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  6. DNS:域名系统

    概述: DNS的作用在于将域名转换为对应的IP地址. DNS名字空间和UNIX文件系统相似,也是树形结构.以"."结尾的域名称为FQDN(Full Qualified Domain ...

  7. 一步步搭建最简单oauth2.0认证和授权

    oauth2.0 最早接触这个概念是在做微信订阅号开发.当时还被深深的绕进去,关于oauth2.0的解释网上有好多,而且都讲解的比较详细,下面给大家价格参考资料. http://owin.org/ h ...

  8. 九、VueJs 填坑日记之在项目中使用jQuery

    很多人学习 js 都是从 jQuery 开始的,我也不例外.有时候进行一些操作的时候,还是感觉 jQuery 比较好用,那么,我们如何在项目中使用 jQuery 呢?这篇博文带你实践. 引用 jQue ...

  9. mysql步骤详解

    一.配置MySQL数据库 1.解压绿色版mysql,并改名为mysql5.7,如下图 对比一下下图5.6以前的版本,少data目录(存放数据)和my-default.ini文件(配置信息) 二.安装服 ...

  10. c语言的extern与static与递归

    知识点: 外部函数:定义的函数能被本文件和其他文件访问 1> 默认情况下所有函数都是外部函数 2> 不允许有同名的外部函数 内部函数:定义的函数只能被本文件访问,其他文件不能访问 1> ...