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. 3、NASA NIST Big Data Architecture

    这篇关于大数据应用的讲解太好了,直接上图.Mattmann_S1P8_ESTF2015 来自为知笔记(Wiz)

  2. linux中mysql运程连接时错误host ‘192.168.0.1’ is not allowed to connect to this MySql server

    1.改表法 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "u ...

  3. TCP/IP详解 (转)

    TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中 ...

  4. C++设计模式-Strategy策略模式

    Strategy策略模式作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. UML图: Strategy模式将逻辑(算法)封装到一个类(Cont ...

  5. tomcat源码剖析

    最近看Tomcat的源码的节奏还算是挺紧凑的,给人的感觉,tomcat的代码相对以前读的jetty的代码显得更有条理一些...当然这也是有可能是因为自己看的jetty的版本是比较老的,而看的Tomca ...

  6. 这些年正Android - 身在他乡

    “从不敢想到想去做到,做到我想的,事实证明我并不像他们想象的那样脆弱.我只是需要一盏灯,一架钢琴,一支麦克风.曾经想象过做一名医生救死扶伤,也曾想过做律师,做记者,做奥运冠军,但是都没有结果.因为我最 ...

  7. [转]:Delphi中Format的字符串格式化使用说明

    一.Format函数的用法 Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮助进行一些翻译,让它有一个完整的概貌,以供大家查询之用: 首先看它的声明: function Forma ...

  8. Android7.0 新特性

    删除了三个隐式广播 1.监听网络变化的广播 CONNECTIVITY_ACTION,在Manifest.xml中注册的 不会受到,在前台运行的程序 registerReceiver()注册的广播可以接 ...

  9. php工作笔记3-php基础加强

    1.自动加载 autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading.通常PHP5在使用一个类时 ...

  10. maven使用阿里云仓库

    1.修改maven的conf/settings.xml文件,在<mirrors></mirrors>标签里加入: <mirror> <id>nexus- ...