oracle之数据限定与排序
数据限定与排序
6.1 简单查询语句执行顺序
from, where, group by, having, order by, select
where限定from后面的表或视图,限定的选项只能是表的列或列单行函数或列表达式,where后不可以直接使用分组函数
SQL> select empno,job from emp where sal>2000;
SQL> select empno,job from emp where length(job)>5;
SQL> select empno,job from emp where sal+comm>2000;
having限定group by的结果,限定的选项必须是group by后的聚合函数或分组列,不可以直接使用where后的限定选项。
SQL> select sum(sal) from emp group by deptno having deptno=10;
SQL> select deptno,sum(sal) from emp group by deptno having sum(sal)>9000;
如果要使用group by及having,有条件的话先使用where筛选。
6.2 排序(order by)
1)位置:order by语句总是在一个select语句的最后面。
2)排序可以使用列名,列表达式,列函数,列别名,列位置编号等都没有限制,select的投影列可不包括排序列,除指定的列位置标号外。
3)升序和降序,升序ASC(默认), 降序DESC。有空值的列的排序,缺省(ASC升序)时 null排在最后面(考点)。
4)混合排序,使用多个列进行排序,多列使用逗号隔开,可以分别在各列后面加升降序。
SQL> select ename,sal from emp order by sal;
SQL> select ename,sal as salary from emp order by salary;
SQL> select ename,sal as salary from emp order by 2;
SQL> select ename,sal,sal+100 from emp order by sal+comm;
SQL> select deptno,avg(sal) from emp group by deptno order by avg(sal) desc;
SQL> select ename,job,sal+comm from emp order by 3 nulls first;
SQL> select ename,deptno,job from emp order by deptno asc,job desc;
6.3 空值(null)
空值既不是数值0,也不是字符" ", null表示不确定。
6.3.1 空值参与运算或比较时要注意几点:
1)空值(null)的数据行将对算数表达式返回空值
SQL> select ename,sal,comm,sal+comm from emp;
ENAME SAL COMM SAL+COMM
---------- ---------- ---------- ----------
SMITH 800
ALLEN 1600 300 1900
WARD 1250 500 1750
JONES 2975
MARTIN 1250 1400 2650
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
TURNER 1500 0 1500
ADAMS 1100
JAMES 950
FORD 3000
MILLER 1300
已选择14行。
2)分组函数忽略空值
SQL> select sum(sal),sum(sal+comm) from emp; //为什么sal+comm的求和小于sal的求和?
SUM(SAL) SUM(SAL+COMM)
---------- -------------
29025 7800
3)比较表达式选择有空值(null)的数据行时,表达式返回为“假”, 结果返回空行。
SQL> select ename,sal,comm from emp where sal>=comm;
ENAME SAL COMM
---------- ---------- ----------
ALLEN 1600 300
WARD 1250 500
TURNER 1500 0
4)非空字段与空值字段做"||"时, null值转字符型"",合并列的数据类型为varchar2。
SQL> select ename, sal||comm from emp;
ENAME SAL||COMM
---------- --------------------------------------------------------------------------------
SMITH 800
ALLEN 1600300
WARD 1250500
JONES 2975
MARTIN 12501400
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
TURNER 15000
ADAMS 1100
JAMES 950
FORD 3000
MILLER 1300
已选择14行。
5)not in 在子查询中的空值问题(见第八章)
6)外键值可以为null,唯一约束中,null值可以不唯一(见十二章)
7)空值在where子句里使用“is null”或“is not null”
SQL> select ename,mgr from emp where mgr is null;
SQL> select ename,mgr from emp where mgr is not null;
8)空值在update语句和insert语句可以直接使用“=null” 赋值
SQL> update emp set comm=null where empno=7788;
6.3.2 处理空值的几种函数方法:
1)nvl(expr1,expr2)
当第一个参数不为空时取第一个值,当第一个值为NULL时,取第二个参数的值。
SQL>select nvl(1,2) from dual;
NVL(1,2)
----------
1
SQL> select nvl(null,2) from dual;
NVL(NULL,2)
-----------
2
*考点:nvl函数可以作用于数值类型,字符类型,日期类型,但数据类型尽量匹配。
NVL(comm,0)
NVL(hiredate,'1970-01-01')
NVL(ename,'no manager')
2)nvl2(expr1,expr2,expr3)
当第一个参数不为NULL,取第二个参数的值,当第一个参数为NULL,取第三个数的值。
SQL> select nvl2(1,2,3) from dual;
NVL2(1,2,3)
-----------
2
SQL> select nvl2(null,2,3) from dual;
NVL2(NULL,2,3)
--------------
3
SQL> select ename,sal,comm,nvl2(comm,SAL+COMM,SAL) income,deptno from emp where deptno in (10,30);
ENAME SAL COMM INCOME DEPTNO
---------- ---------- ---------- ---------- ----------
ALLEN 1600 300 1900 30
WARD 1250 500 1750 30
MARTIN 1250 1400 2650 30
BLAKE 2850 2850 30
CLARK 2450 2450 10
KING 5000 5000 10
TURNER 1500 0 1500 30
JAMES 950 950 30
MILLER 1300 1300 10
*考点: nvl和nvl2中的第二个参数不是一回事。
3)NULLIF(expr1,expr2) /*比对两个值是否一样,一样就返回为空,否则不会为空*/
当第一个参数和第二个参数相同时,返回为空,当第一个参数和第二个数不同时,返回第一个参数值,第一个参数值不允许为null
SQL> select nullif(2,2) from dual;
NULLIF(2,2)
-----------
SQL> select nullif(1,2) from dual;
NULLIF(1,2)
-----------
1
4)coalesce(expr1,expr2........) 返回从左起始第一个不为空的值,如果所有参数都为空,那么返回空值。
SQL> select coalesce(1,2,3,4) from dual;
COALESCE(1,2,3,4)
-----------------
1
SQL> select coalesce(null,2,null,4) from dual;
COALESCE(NULL,2,3,4)
--------------------
2
oracle之数据限定与排序的更多相关文章
- Oracle索引梳理系列(一)- Oracle访问数据的方法
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- Oracle Where查询语句与排序语句
SQL限制和排序数据 1.Oracle的Where条件值,字符串和日期都必须以单引号括起来. 模糊查询: like 'S%' 以S开头的任意字符 like 'S_' 以S开头的任意字符结尾的两个字符 ...
- sqoop工具从oracle导入数据2
sqoop工具从oracle导入数据 sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 ...
- SSIS 从oracle 转数据回MS SQL
SSIS 从oracle 转数据回MS SQL,转每月的销售记录,大概15000以内,在开发机器上没问题,部署到生产环境出现各种状况“ SSIS 无法从连接伺服器的OLE DB提供者BULK 提取资料 ...
- 关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法
在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 ...
- 使用JDBC处理Oracle大数据
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- [转]oracle 10g数据泵之impdp-同时导入多个文件
要了解impdp,请先了解导出,我之前作过导出的笔记:oracle 10g数据泵之expdp.这两个笔记也许只对程序员有用,通常用于把正式区的数据导入到测试区,对数据库管理员也许帮助不大,他们使用这些 ...
- 利用jdbc处理oracle大数据---大文件和二进制文件
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- Oracle 删除数据后释放数据文件所占磁盘空间
测试的时候向数据库中插入了大量的数据,测试完成后删除了测试用户以及其全部数据,但是数据文件却没有缩小.经查阅资料之后发现这是 Oracle “高水位”所致,那么怎么把这些数据文件的大小降下来呢?解决办 ...
随机推荐
- go微服务系列(四) - gRPC入门
1. 前言 2. gRPC与Protobuf简介 3. 安装 4. 中间文件演示 4.1 编写中间文件 4.2 运行protoc命令编译成go中间文件 5. 创建gRPC服务端 5.1 新建Produ ...
- 大侠稍等!URL 中为何出现奇怪的字符
为什么中文名称的图片打开后网址是一串乱码?为什么好好的短网址复制粘贴就变长了一大长串?罪魁祸首居然是-- 杭州终于出梅了!二狗子看到气象台发布的消息,开心的不得了.杭州的雨从五月底一直下,每天除了雨还 ...
- python设计模式之模型-视图-控制器模式
python设计模式之模型-视图-控制器模式 关注点分离( Separation of Concerns, SoC)原则是软件工程相关的设计原则之一. SoC原则背后的思想是将一个应用切分成不同的部分 ...
- 虚拟化技术之kvm管理工具virsh常用基础命令(二)
上一篇博客我们主要聊了下virsh 管理kvm虚拟机的命令相关用法和说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13508231.html:今天我们来继 ...
- Fiddler+模拟器+APP抓包HTTPS 为什么有时候抓不到?
抓包的原理是什么? 代理 客户端请求 -> 经过代理 -> 到达服务端 服务端返回 -> 经过代理 -> 到达客户端 任何Https的App都能抓到包么? Android7.0 ...
- 微信小程序内置组件web-view的缓存问题探讨
前言:博客或者论坛上面,还有自习亲身经历,发现微信小程序的webview组件的页面缓存问题相当严重,对开发H5的小童鞋来说应该困扰了不少.很多小童鞋硬是抓破脑袋也没有办法解决这个问题,那我们今天就来探 ...
- 记写 android 微信登录的demo历程
前言 首先看一条链接: https://github.com/Tencent/WeDemo 腾讯给了一个wedemo,微信第三方登录的例子.里面是php和ios,ios是object写的,php还是原 ...
- Eclipse中构建maven项目的两种方式
Eclipse中构建maven项目的两种方式 方式一: 1.构建maven项目 1.1 新建meven项目,可在Other中找到maven文件夹 1.2 进入maven项目后,点击next 1.3 在 ...
- Dubbo直连方式
目录 一.dubbo概述 1. 基本架构 2. dubbo 支持的协议 二.直连方法 三.创建服务提供者 1. 思路 1. 创建maven web 2. pom.xml 3. 创建实体 4. 创建服务 ...
- ping通网关 ping不通dns
一.Request Timed Out 当Ping指定的对象时,出现“Request Timed Out”提示信息的频率非常高,这说明对方无法接受发送过来的数据.当然这种情况下,很可能就是网络出现了故 ...