Oracle中的操作符
算术操作符:
无论是在sqlserver,或者是java中,每种语言它都有算术操作符,大同小异。

Oracle中算术操作符(+)(-)(*)(/) 值得注意的是:/ 在oracle中就相当于显示中的除法 5/2 = 2.5

比较操作符:

其中等号可以换成其他运算符:(后面为该操作符的单条件查询样例)

!= 不等于 select empno,ename,job from scott.emp where job!='manager'

    ^= 不等于 select empno,ename,job from scott.emp where job^='manager'

    <>不等于  select empno,ename,job from scott.emp where job<>'manager'

    <小于  select sal from scott.emp where sal<1000

    >大于 select sal from scott.emp where sal>1000

    <=小于等于 select sal from scott.emp where sal<=1000

    >=大于等于  select sal from scott.emp where sal>=1000

    in 在列表  select sal from scott.emp where sal in(1000,2000)
    时间的查询可以使用in 例如  select * from student where time in (’06-3月-09’,’08-5月-09’); 

    not in 不在列表 select sal from scott.emp where sal not in(1000,2000)

    between...and 介于..与..间

select sal from scott.emp where sal  between 1000 and 2000

not between...and 不介于..与..之间

select sal from scott.emp where sal not between 1000 and 2000

    like 模式匹配  select ename from scott.emp where ename like 'M%' (%表示任意长度的长度串)
                   select ename from scott.emp where ename like 'M_' (_表示一个任意的字符)

    is null 是否为空  select ename from scott.emp where ename is null

    is not null 不为空 select ename from scott.emp where ename is not null

逻辑操作符:

or(或)  select ename from scott.emp where ename='joke' or ename='jacky'

    and(与) select ename from scott.emp where ename='and' or ename='jacky'

    not(非) select ename from scott.emp where not ename='and' or ename='jacky'
 
集合操作符:

union(并集)       union连接两句sql语句, 两句sql语句的和 去掉重复的记录。

(select deptno from scott.emp) union (select deptno from scott.dept)

union all(并集)   接两句sql语句,两句sql语句的和不用去掉重复的记录。

(select deptno from scott.emp) union all (select deptno from scott.dept)

intersect (交集)  Intersect连接两句sql语句 取查询出来的两个集合的 共同部分。

(select deptno from scott.emp) intersect (select deptno from scott.dept)

minus (补集)      Minus 连接两句sql 语句,取查询出来的两个集合的差。
                        (select deptno from scott.emp) minus (select deptno from scott.dept)

连接操作符: (||) 用来连接连个字段,或者将多个字符串连接起来。

操作符的优先级别:算术》连接》比较》逻辑(not and or)

 
 
 
分析函数
Oracle中的分析函数

(1)sum函数,统计总和
按照月份,统计每个地区的总收入

(2)rank() over开窗函数
按照月份、地区,打工收入排序

(3)关于Row_number()  Rank()  Dense_rank()规则

解析:通用语法 over(partition  by A,B  order by C,d)

区别:Row_number() over(partition  by A,B  order by C,d) 本条记录所有列都相同的时候,编号列如下  (1  2  3)没有并列第二

rank() over(partition  by A,B  order by C,d) 本条记录所有列都相同的时候,编号列如下  (1  1  3)有并列第一的情况,中间有断裂情况

评级函数

常见评级函数如下:

  • RANK():返回数据项在分组中的排名,在排名相等时会在名次中留下空位,造成排名不连续。
  • DENSE_RANK():同样返回数据项在分组中排名,不过在排名相等时不会留下名位空位。
  • CUME_DIST():返回特定值相对于一组值的位置,是累积分布(cumulative distribution)的简写。
  • PERCENT_RANK():返回某个值相对于一组值的百分比排名。
  • NTILE():返回n分片后的值,如三分片、四分片等。
  • ROW_NUMBER():为每一条分组记录返回一个数字,注意不同于rownum伪列。

RANK()和DENSE_RANK()

rank()和dense_rank()函数都可用于计算数据项在分组中(在不使用partition by时以所有数据为一个分组)的排名。它们的区别在于rank()在排名相等时,如:有3个第1名时,则下一个排名为第4名,没有2、3名;而dense_rank()则在有3个第1名时,下一个排名为第2名。即,rank()会出现排名间隔,而dense_rank()则不会出现排名间隔。

这两个函数多用于select子句中,在不进行分组的情况下,可以不使用partition by子句。其使用举例如,找出公司所有人工资排名:

select ename,

rank() over (order by sal desc) rank,

dense_rank() over (order by sal desc) dense_rank

from emp;

从语句中可以看出,rank()函数需要有关键字over和order by。而且rank()是一个单值函数,而不是聚合函数。若需要找出每种工作的最高工资在所有工作最高工资中的排名:

select job,

rank() over (order by max(sal) desc) rank,

dense_rank() over (order by max(sal) desc) dense_rank

from emp

group by job;

在排名中,会出现NULL值在前在后的问题,可以在ORDER BY子句之后使用关键字NULLS FIRST/LAST来控制。

PARTITION BY子句

当需要进行获得分组后各组内的排名,则需要使用partition by子句。它不同于group by的分组,这种分组不“合并聚合”,它相当于把值分组后计算,然后重复每个值。

最常见的例子如:在table表中有name(姓名)、class(班级)和score(分数)三个字段,求每个班级里前三名姓名、班级及分数,SQL语句为:

select name,class,score

from (select name,

class,

score,

rank() over(partition by class order by score desc) rank

from table)

where rank <= 3;

在SCOTT用户中测试,求每个部门工资前3名的人姓名、部门、工作和工资,如:

select *

from (select ename,

deptno,

job,

sal,

dense_rank() over(partition by deptno order by sal desc) rank

from emp)

where rank <= 3;

ROW_NUMBER()

row_number为每一行返回一个数字,在分组中较常用(rownum在非分组中常用)。如,给emp表中每种工作工资由高到低进行排序:

select ename,job,sal,row_number() over (partition by job order by sal desc) from emp;

Desen_rank() over(partition  by A,B  order by C,d) 本条记录所有列都相同的时候,编号列如下  (1  1  2) 有并列第一的情况,但是没有断裂

Oracle中的sql操作符 和分析函数的更多相关文章

  1. Oracle中PL/SQL的执行部分和各种流程控制

    Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...

  2. Oracle中PL/SQL简介、基本语法以及数据类型

    Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...

  3. 在Oracle中使用sql获取数据库名称

    在Oracle中使用sql获取当前数据库名称 select name from v$database;

  4. Oracle中的SQL分页查询原理和方法详解

    Oracle中的SQL分页查询原理和方法详解 分析得不错! http://blog.csdn.net/anxpp/article/details/51534006

  5. Oracle中动态SQL详解(EXECUTE IMMEDIATE)

    Oracle中动态SQL详解(EXECUTE IMMEDIATE) 2017年05月02日 18:35:48 悠悠倾我心 阅读数:744 标签: oracle动态sqloracle 更多 个人分类:  ...

  6. oracle中的SQL优化

    一.SQL语言的使用1.IN 操作符    用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.    但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...

  7. oracle中动态SQL详解

    部分内容参考网上资料 1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情 ...

  8. oracle中动态SQL使用详细介绍

    Oracle编译PL/SQL程序块分为两个种:通常静态SQL采用前一种编译方式,而动态SQL采用后一种编译方式,需要了解的朋友可以参考下     1.静态SQLSQL与动态SQL Oracle编译PL ...

  9. (转)Oracle中动态SQL详解

    本文转载自:http://www.cnblogs.com/gaolonglong/archive/2011/05/31/2064790.html 1.静态SQLSQL与动态SQL Oracle编译PL ...

随机推荐

  1. Laravel学习笔记(二)Laravel 应用程序的体系结构

    在一切环境就绪了,当然就要开始了解框架了. 站在巨人的肩膀上,学东西会事半功倍.我在网上找到一篇好文章,正好可以让我轻松了解Laravel应用程序的体系结构.因此借来直接用了. 该章节内容翻译自< ...

  2. expr 命令

    求表达式变量的值.expr 命令读入 Expression 参数,计算它的值,然后将结果写入到标准输出. 用法:expr Expression Expression 参数规则: 用空格隔开每个项. 用 ...

  3. system verilog中的跳转操作

    在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...

  4. 从 A/Looper: Could not create epoll instance. errno=24 错误浅谈解决各种 bug 的思路

    今天代码写着写着就莫名闪退了,手机也没有“程序停止运行”的提示,logcat也没有看到蓝色的调用栈log,这样的闪退最是蛋疼了,还好必现.复现几次之后,终于从logcat中看到了一行可疑的log: A ...

  5. Dell_R710 centos5.4 网卡(BCM5709)中断故障解决

    环境:Dell R710   Centos 5.4 i386 现象:正常运行中无故断网,没有规律 原因:RedHat As5.X 版本中的Broadcom NetXtreme II BCM 5709 ...

  6. The source attachment does not contain the source for the file  ActionSupport.class 错误

    报错  Syntax error, insert ";" to complete FieldDeclaration 报错   The source attachment does ...

  7. OC中property的有关属性

    property的有关属性: (1)readwrite是可读可写特征:需要生成getter方法和setter方法: (2)readonly是只读特性只会生成getter方法不会生成setter方法: ...

  8. js的原型模式

    以下内容来自<JavaScript高级程序设计>第三版 我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所 ...

  9. Redis的介绍和常用数据类型结构命令的总结

    我们先来看一下redis的一个定义,来自官方的: Redis is an open source, BSD licensed, advanced key-value store. It is ofte ...

  10. Java基础常见英语词汇

    Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的                             ['prəʊɡræmɪŋ]编程 OO: object ...