软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 数据库 -> Oracle学习笔记(7)——高级查询(1) -> 正文阅读

[数据库]Oracle学习笔记(7)——高级查询(1)


在学习高级查询之前,我们先了解一下如何查看Oracle数据库中的所有表。因为我们要使用到Oracle数据库中SCOTT用户下的几张表(这些表是Oracle数据库自带的表)。
[img]http://img.blog.csdn.net/20160402153131009?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center


  • 分组查询
    • 分组函数的概念:分组函数作用于一组数据,并对一组数据返回一个值。
      • 常用的分组函数:AVG、SUM、MIN、MAX、COUNT、WM_CONCAT(行转列)
    • 语法:
[img]http://img.blog.csdn.net/20160402155038345?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
    • 分组函数的使用
      • 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;
[img]http://img.blog.csdn.net/20160402153905090?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  • DISTINCE(distinct)关键字(DISTINCT用于去掉重复的记录)
                                4、求出部门数
                                  select count(deptno) from emp;
                                  select deptno from emp;
                                  select count(distinct deptno) from emp;
[img]http://img.blog.csdn.net/20160402154200076?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  • WM_CONCAT:行转列
                                示例:select deptno,wm_concat(ename) from emp group by deptno;
[img]http://img.blog.csdn.net/20160402154827813?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
上面显示的样式很不好看,我们首先用host cls命令清屏,然后执行下面命令,格式化显示的格式
                                set linesize 200
                                col 部门中员工的姓名 for a60
                                select deptno 部门号,wm_concat(ename) 部门中员工的姓名 from emp group by deptno;
[img]http://img.blog.csdn.net/20160402154922829?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  • 分组函数与空值
                                1、统计员工的平均工资
                                select sum(sal)/count(*) 一,sum(sal)/count(sal) 二,avg(sal) 三 from emp;
[img]http://img.blog.csdn.net/20160402160012364?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
                                2、统计员工的平均奖金
                                select sum(comm)/count(*)  一,sum(comm)/count(comm) 二,avg(comm) 三 from emp;
                                select count(*),count(comm) from emp;
[img]http://img.blog.csdn.net/20160402160024067?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
                               总结:分组函数会自动忽略空值,只会统计非空的个数
  • 在分组函数中使用NVL函数
                                注意:NVL函数使用分组函数无法忽略空值
                                select count(*),count(nvl(comm,0)) from emp;
[img]http://img.blog.csdn.net/20160402160405944?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  • 使用GROUP BY子句数据分组(GROUP BY可以作用在一个列上,也可以作用在多个列上)
    • group by子句的使用
      • 使用单个列分组
                                示例:求每个部门的平均工资,要求显示:部门号,部门的平均工资
                                select deptno,avg(sal) from emp group by deptno;
[img]http://img.blog.csdn.net/20160402160518382?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://img.blog.csdn.net/20160402160656601?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
                                抽象: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;
[img]http://img.blog.csdn.net/20160402160754523?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  • 使用多个列分组
                                    示例:按部门、不同的职位,统计员工的工资总额
                                    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;
[img]http://img.blog.csdn.net/20160402161109603?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
非法使用组函数:
[img]http://img.blog.csdn.net/20160402161623792?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
修改:
[img]http://img.blog.csdn.net/20160402161716511?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  • 使用HAVING子句过滤分组结果集
[img]http://img.blog.csdn.net/20160402161809074?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
    • 求平均工资大于2000的部门,要求显示:部门号,平均工资
                        select deptno,avg(sal) from emp group by deptno having avg(sal)>2000
[img]http://img.blog.csdn.net/20160402162704452?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

[img]http://img.blog.csdn.net/20160402162717984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

  • where与having的区别
    • 相同点:都是过滤结果集
    • 不同点:
                                                    不能再WHERE子句中使用组函数(注意)
                                                    可以在HAVING子句中使用组函数。
[img]http://img.blog.csdn.net/20160402163100063?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  • 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;
    • 可以按照:列,别名,表达式,序号进行排序
[img]http://img.blog.csdn.net/20160402163407690?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center



[img]http://img.blog.csdn.net/20160402164136380?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

错误演示:
[img]http://img.blog.csdn.net/20160402163717331?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

[img]http://img.blog.csdn.net/20160402163730269?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

  • 分组函数的嵌套
    • 示例:求部门平均工资的最大值
                            1、通过AVG函数求出每个部门的平均工资
                            2、嵌套MAX函数求出部门平均工资的最大值
                               select max(avg(sal)) from emp group by deptno;
[img]http://img.blog.csdn.net/20160402164243630?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  • group by语句的增强
                            break on deptno   2 相同部门号的值只显示一次,不同的部门号之间跳过两行
                            set pagesize 30   每页显示30条记录
[img]http://img.blog.csdn.net/20160402164421522?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://img.blog.csdn.net/20160402164436709?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://img.blog.csdn.net/20160402164522334?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://img.blog.csdn.net/20160402164540663?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://img.blog.csdn.net/20160402165042508?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://img.blog.csdn.net/20160402165254931?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  • SQL*Plus的报表功能
                            报表包括:标题,页码,别名等
[img]http://img.blog.csdn.net/20160402170103184?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://img.blog.csdn.net/20160402170115466?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://img.blog.csdn.net/20160402170152575?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-02 21:00:00  
数据库 最新文章
Python&MySQL&PyQt
最新用python来操作mysql完全解析
mongodb的安装详解
1.PDO简介
《MySQL必知必会学习笔记》:高级联结
【翻译自mos文章】怎么对Microsoft(Office)
MyCAT全局表描述及示例
ocp
关于SQL数据表存储过程表名前缀换成dbo代码
数据库调优教程(二)慢查询数据准备
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-16 17:20:19
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --