`

Oracle笔记:层次查询(Select)

 
阅读更多

基于树状结构的数据查询成为层次查询。

层次化查询的基本语法

 

select 列名1,列名2 from 表名 start with 开始条件 connect by 递归条件

如上图mark表,使用market_Id和parent_Market_Id将平行的数据变成了树状型。

 

eg:查询表中所有亚洲的市场信息表。

 

select market_Id,market_Name from market start with market_Name = '亚洲' connect by prior market_Id = parent_Market_Id;
//start with market_Name = '亚洲'指查询的起始点为market = '亚洲',
//connect by prior market_id = paret_market_Id指前一条记录的market_Id等于后一条记录的parent_Market_Id;
//prior指定树的生成方式(后面详说)。
//查询的结果就为:亚洲,中国,韩国,朝鲜,北京。 

层次化查询的相关函数

sys_connect_by_path(列名,分隔符):层次化查询总是以某条记录作为起始点,根据connect by指定的条件递归获得集合。此函数可对所查询的结果集进行聚合操作(仅限于字符串)。列名指定对那个列进行合并,分隔符则指定字符拼接在一起用的符号。

 

select market_Id,market_Name sys_connect_by_path(market_Name,'/') market_path from market start with market_Name = "北京" connect by prior parent_Market_Id = market_Id;
//prior很重要,如果没有这个字段,则只会显示第一条查询的内容,后面的不会显示了。


查询结果如下:

 

max():获得最完整的路径:

 

select max(sys_connect_by_path(market_Name,'/')) market_path from market start with market_Name = "北京" connect by prior parent_Market_Id = market_Id;
//查询出的结果为上图第四条,也就是/北京/中国/亚洲/全球。

 

二进制转十进制:

实质就是从最后一位开始算,依次列为第0、1、2...位第n位的数(0或1)乘以2的n次方。

如101,转换就是1*2的0次方+0*2的1次方+1*2的二次方=5.

oralce自带函数bin_to_number();

 

select bin_to_num(1,0,1) a,bin_to_num(1,0) b from dual;

SQL:

select sum(data) from (select substr('101',rownum,1) * power(2,length('101') - rownum) data from dual connect by rownum <= length('101')) ;
//substr(String , start_position,length) 取得字符串中指定起始位置和长度的字符串
//power(m,n) m的n次方
第一次循环括号里的时候,rownum=1,substr()函数取到得是1,power()取到的是4,所以整个select为4,第二次循环同上,为0,第三次为1,求sum为7。

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Oracle 入门文档2

    Oracle笔记 三、function 、select Oracle笔记 四、增删改、事务 Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间 Oracle笔记 六、PL/SQL简单语句块、变量定义 Oracle笔记 七、PL/SQL 异常处理 ...

    Oracle 入门文档

    Oracle笔记 三、function 、select Oracle笔记 四、增删改、事务 Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间 Oracle笔记 六、PL/SQL简单语句块、变量定义 Oracle笔记 七、PL/SQL 异常处理 ...

    李兴华Oracle数据库全套课堂笔记

    《李兴华Oracle数据库课堂笔记》 例:查询出所有不领取佣金的雇员。 SELECT*FROM emp WHERE comm IS NULL; 例:查询出所有领取佣金的雇员。 SELECT*FROM emp WHERE comm IS NOT NULL; SELECT*FROM emp WHERE ...

    Oracle 认证学习笔记

    oracle 9i dba 认证教程学习笔记 第一章 oracle 数据库体系结构基础 1、oracle 数据库系统:为具有管理oracle数据库功能的计算机系统。 2、系统全局区(system global area):在数据库服务器上启动一数据库时的...

    韩顺平oracle学习笔记

    韩顺平oracle学习笔记 第0讲:如何学习oracle 一、如何学习oracle Oracle目前最流行的数据库之一,功能强大,性能卓越。学习oracle需要具备一定基础: 1.学习过一门编程语言(如:java ,c) 2.最好学习过一门别的...

    oracle笔记,入门体验篇,基本的SQL-SELECT语句

    oracle笔记,入门体验篇,基本的SQL-SELECT语句,简单入门,有具体的案例代码!

    ORACLE笔记(数据库)

    第一课:客户端 1. Sql Plus(客户端),命令行直接输入:sqlplus,... 2. 从开始程序运行:sqlplus,是图形版的sqlplus. 3.... Toad:管理, PlSql Developer: ... 1.... 2.... 1.... 2. select * from 表名 第四课:select 语句:

    尚学堂视频笔记-oracle

    文档部分内容如下, 全部是尚学堂课堂原笔记.. 第一课:客户端 1. Sql Plus(客户端),命令行直接输入:sqlplus,然后按提示输入用户名,密码。 2. 从开始程序运行:sqlplus,是图形版的sqlplus. 3. ...

    oracle 笔记.txt

    select(数据的查询),投影,过滤(选择)查寻,关联查寻(表连接)。 sqlplus 访问数据库命令(本地访问/远程访问),和数据库建立连接的命令,是数据库操作的环境 sqlplus 用户名/密码 show user 显示当前...

    oracle10Gselect语句自学笔记.chm

    oracle10Gselect语句自学笔记.chmoracle10Gselect语句自学笔记.chm

    oracle数据库学习笔记总结

    二、常用SQL: ... SQL Server的: IF EXISTS (SELECT name FROM sysobjects WHERE name = '表名' AND type = 'U') DROP TABLE 表名; Oracle的: create or replace table 表名 ...; -- 直接写建表语句

    oracle精华笔记

    oracle精华文档,内容详实, SQL(结构化查询语言) Select 字段(*) from 表名 where ...group by ...having ...order by DDL(数据定义语言) Create table 表名 Drop table 表名 Alter table 表名 add 列名 数据...

    Oracle学习笔记(一)

    2“AS”符号oracle:select 列名 as 新列名 from 表名 (空格,不能有as)新表名sql:select 列名 as 新列名 from 表名T as(as可有可无) 新表名 二.数据排序与数据过滤查询与sql相同 in ,like, is null,between ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    oracle学习笔记

    oracle day3 笔记 外连接: 查找每个员工的经理ID select e.first_name "Employee",m.first_name "Manager" from s_emp e,s_emp m where e.manager_id=m.id(+); 一、组函数 group 组 group by 分组子句,...

    Oracle数据库学习笔记

    向你介绍我的Oracle数据库学习笔记 1.SQL命令: SQL 支持4大类型命令: 数据定义语言(DDL): Create(创建), Alter(更改), Drop(删除). 数据操纵语言(DML): Select(选择), Insert(插入), ...

    Oracle笔记

    select 执行较多,要求执行select速度要快 3.4 通用:介于在事务处理和数据仓库之间。 我们在安装时需要考虑:两条跨数据库的执行语句问题。比如:在分别对2个数据库中的表进行插入数据;从2个数据库中的表中取出...

    oracle笔记(存储过程函数触发器游标流程控制等)

    oracle知识点笔记,语法,触发器,存储过程,存储函数,流程控制,游标,异常处理,记录类型,视图,控制用户权限,高级子查询,set运算符,基本的sql_Select语句等等

    ORACLE精品脚本笔记

    找ORACLE字符集 &lt;br&gt;select * from sys.props$ where name='NLS_CHARACTERSET'; &lt;br&gt;15. 监控 MTS &lt;br&gt;select busy/(busy+idle) "shared servers busy" from v$dispatcher; &lt;br&gt;此值大于0.5时,...

Global site tag (gtag.js) - Google Analytics