oracle 中start with 的用法

oracle 中start with 的用法

发表于2013/3/3 23:29:35  40191人阅读

分类: Oracle

oracle 提供了start with connect by 语法结构可以实现递归查询。

1. 一个简单举例:

SQL> select *  from test;

BILL_MONTH           DAY_NUMBER MSISDN

-------------------- ---------- --------------------

200803                        1 13800

200803                        3 13800

200803                        2 13800

200803                        2 13801

200803                        4 13804

200803                        5 13804

200803                        7 13804

200803                        8 13804

200803                        6 13802

200803                        6 13801

200803                        7 13801

200803                        8 13801

12 rows selected

SQL>

SQL> select * from test

2       start with day_number=1

3       connect by  prior day_number=day_number-1 and prior msisdn= msisdn

4      ;

BILL_MONTH           DAY_NUMBER MSISDN

-------------------- ---------- --------------------

200803                        1 13800

200803                        2 13800

200803                        3 13800

SQL>

上面的语句查找出了从1开始,并且day_number 逐渐+1 递增的,并且 msisdn 相同的哪些个数据.

2. start with  connect by 语法结构

如上面说看到的 例子, 其语法结构为  start with condition  connect by  condition (含 prior 关键字)

start with conditon 给出的seed 数据的范围, connect by  后面给出了递归查询的条件,prior 关键字表示父数据,prior 条件表示子数据需要满足父数据的什么条件。

在下面的这个start with connect by 结构中,就表示 查找出了从1开始,父数据的day_number等于子数据的day_number-1而且父数据的msisdn=子数据的msisdn.

start with day_number=1

connect by  prior day_number=day_number-1 and prior msisdn= msisdn

原文地址:https://www.cnblogs.com/anyiz/p/10737333.html

时间: 2024-10-14 12:54:55

oracle 中start with 的用法的相关文章

Oracle中常用的to_Char用法详解

Oracle中常用的to_Char用法详解(有FMT的详细列表) The following are number examples for the to_char function. to_char(1210.73, '9999.9') would return '1210.7' to_char(1210.73, '9,999.99') would return '1,210.73' to_char(1210.73, '$9,999.00') would return '$1,210.73'

oracle中insert all的用法

oracle中insert all的用法 现在有个需求:将数据插入多个表中.怎么做呢?可以使用insert into语句进行分别插入,但是在oracle中有一个更好的实现方式:使用insert all语句. insert all语句是oracle中用于批量写数据的 .insert all分又为无条件插入和有条件插入. 一.表和数据准备 --创建表 CREATE TABLE stu( ID NUMBER(3), NAME VARCHAR2(30), sex VARCHAR2(2) ); --删除表

Oracle中的时间函数用法(to_date、to_char) (总结)

一.24小时的形式显示出来要用HH24 select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual; select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual; 二.to_date() function 1.日期格式参数含义说明 D一周中的星期几 DAY天的名字,使用空格填充到9个字符 DD月中的第几天 DDD年中的第几天 DY天的简写名 IW ISO标准

【Oracle】Oracle中dump函数的用法

一.函数标准格式: DUMP(expr[,return_fmt[,start_position][,length]]) 基本参数时4个,最少可以填的参数是0个.当完全没有参数时,直接返回null.另外3个参数也都有各自的默认值: expr:这个参数是要进行分析的表达式(数字或字符串等,可以是各个类型的值) return_fmt:指返回参数的格式,有5种用法: 1)8:以8进制返回结果的值 2)10:以10进制返回结果的值(默认) 3)16:以16进制返回结果的值 4)17:以单字符的形式返回结果

Oracle 中 流程控制函数 decode用法

函数介绍 DECODE函数是ORACLE PL/SQL的功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能. DECODE有什么用途呢?先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在8000元以下的加20%:工资在8000元或以上的加15%. 通常的做法是,先选出记录中的工资字段值? select salary into var-salary from employee,然后对变量var-salary用if-then-else

Oracle 中的Pivoting Insert用法

1.标准Insert --单表单行插入 语法: INSERT INTO table [(column1,column2,...)] VALUE (value1,value2,...) 例子: insert into dep (dep_id,dep_name) values(1,'技术部'); 备注:使用标准语法只能插入一条数据,且只能在一张表中插入数据 2, 无条件 Insert all --多表多行插入 语法: INSERT [ALL] [condition_insert_clause] [i

oracle 中GROUP BY的用法

转自:http://blog.csdn.net/basenet855x/article/details/6694150 问题: select item.itemnum,item.in1,item.in4,inventory.location from item,inventory where item.itemnum=inventory.itemnum and inventory.location='DYB' and item.in1='D/MTD/MRM' GROUP BY ITEM.ITEM

oracle中 merge into 的用法

很多时候我们需要通过筛选条件同时对表进行 更新,插入,删除 等操作.这样如果我们单一的去操作表会显得很麻烦,下面会说到这个merge  into 的用法会极大的优化我们操作表的时间和代码量. 举例,先新建2个表: create table book( id number, name varchar(64), price number, primary key(id) ) create table pbook as select * from book delete pbook 这里create

Oracle 中MERGE语句的用法(转载)

原文章出处(http://blog.csdn.net/lichkui/article/details/4306299) MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT.这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE. //表1create table subs(msid number(9),