软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
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
生肖星座解梦 人民的名义 人民的名义在线看 三沣玩客 拍拍 视频 开发 Android开发 站长 古典小说 网文精选 搜图网 天下美图
中国文化英文 多播视频 装修知识库
2017-7-22 4:48:42
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --