在学习高级查询之前,我们先了解一下怎样查看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. [DeeplearningAI笔记]ML strategy_2_4端到端学习

    机器学习策略-端到端学习 End-to-end deeplearning 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.9 什么是端到端学习-What is End-to-end dee ...

  2. RPC 调用简述

    首先了解什么叫RPC,为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网 ...

  3. [译]ASP.NET Core 2.0 视图组件

    问题 如何在ASP.NET Core 2.0中使用视图组件? 答案 新建一个空项目,修改Startup类并添加MVC服务和中间件: public void ConfigureServices(ISer ...

  4. Java多线程synchronized关键字

    synchronized关键字代表着同步的意思,在Java中被synchronized修饰的有三种情况 1.同步代码块 //锁为objsynchronized(obj){ while(true){ i ...

  5. ASP.NET Core中的OWASP Top 10 十大风险-失效的访问控制与Session管理

    不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...

  6. mac下selenium+python环境搭建

    selenium2+python的环境搭建主要需要python和selenium 1.python mac下自带了python,可以查看版本.当然可以选择安装其它版本的python. 2.seleni ...

  7. Set的常用方法(java)

    一.新增:重复新增的值会被覆盖 代码: Set<String> ss=new HashSet<String>(); ss.add("a");ss.add(& ...

  8. springMVC+spring+MyBatis(SSM)的简单配置

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中: Spring是一 ...

  9. CTF 文件包含与伪协议

    正巧在写代码审计的文章,无意间看到了一篇CTF的代码审计,CTF题目很好,用的姿势正如标题,文件包含和伪协议. 先放出原文链接(http://www.freebuf.com/column/150028 ...

  10. Java多线程之线程池详解

    前言 在认识线程池之前,我们需要使用线程就去创建一个线程,但是我们会发现有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因 ...