- 浏览: 91075 次
文章分类
最新评论
12、oracle--查询/连接/层次查询
- 博客分类:
- DB
实例;http://www.1keydata.com/cn/sql/sql-truncate.php
会话隔离:
备份表
create table table_name1 as select * from emp;
最常用的SELECT:
SELECT的基本构成
DUAL
查询( query)和子查询( subquery)
层次查询
集合
连接
WITH语句
理解SELECT语法图
执行顺序:
where最新执行
group by
order by
详细顺序:
from:对from子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1
on:对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。
outer(join):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。
where:对VT3应用WHERE筛选器。只有使<where_condition>为true的行才被插入VT4.
group by:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.
CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.
having:对VT6应用HAVING筛选器。只有使<having_condition>为true的组才会被插入VT7.
select:处理SELECT列表,产生VT8.
distinct:将重复的行从VT8中移除,产生VT9.
order by:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).
top:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。
count(*)是计算有多少列
sum(salary)是计算salary列的总合
DML异常:
ORA-00979 不是 GROUP BY 表达式错误的解释
err ;select deptno,job,avg(sal) from emp group by deptno;
right:select deptno,job,avg(sal) from emp group by deptno,job;
因为在select 列表像中出现了像deptno和job,而在group by中并没有出现的缘故。
子查询( subquery)
一个查询嵌套在另外的SQL语句中,该查询称为子查询( subquery)
子查询不仅仅会出现在SELECT中
select empno, ename from emp where mgr in (select empno from emp where job='MANAGER');
select * from emp where sal > 1.4*(select avg(sal) from emp);
insert into dept(deptno, dname, loc) select 50, 'TRAINING', 'PEKING' from dual;
exists是判断是否存在,和in类似,但效率要比in高
update emp set sal=sal*1.2 where exists (select 1 from dept where deptno=emp.deptno and loc='DALLAS');
update emp set sal=sal*1.2 where in (select deptno from dept where loc='DALLAS');
注意exists的使用,一定要带表的别名
Set:
数学上的集合
集合的概念
一个集合就是将数个对象归类而分成为一个或数个形态各异的大小整体。
一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集。
构成集合的事物或对象称作元素或是成员。
集合的特性
唯一性
无序性
确定性
计算机上的集合
列表:数据项的顺序是确定的,也可以存在多个相同的数据项。
队列、堆栈
集:数据项是无序的,也不允许存在相同数据项。
多重集:类似于集,其中数据项是无序的。但在多重集中,可以存在相同的数据项。
关联数组:和字典相似,为键输入提供一个值输出,即Key-Value
树:“根”节点与一定数量的数据项以亲-子关系联系起来,而其子数据项也与另外的数据项
以同样的方式联系。
图:每个数据项都可以与一个或多个其它数据项联系起来,其中每个节点都是平等的,类似于
无根节点、无亲-子关系的树。
Oracle的结果集( ResultSet)
结果集的概念
一个查询(包括子查询)的结果,称为结果集。
结果集的特性
不唯一性
无序性
确定性
Oracle中的集合操作
并集
UNION:集
UNION ALL:集或多重集
交集
INTERSECT:集
差集(补集)
MINUS:集
操作符( UNION [ALL], INTERSECT, MINUS)
拥有同样的优先级
括号可以改变运算顺序
query1 minus (query2 union query3)
contect:
连接定义
从两张或更多张表/视图中做的查询称为连接
只要FROM后面出现多个表/视图, Oracle总会去执行连接操作
如果某列的名称在多个表/视图中出现,那么为避免模棱两可必须在列前加上表/视图的名或别名
连接条件
通常多表连接都会至少有一个连接条件
无连接条件的连接结果集称为笛卡尔积( Cartesian Products)
连接条件两端的字段必然来自不同的两张表/视图
多表连接时,除了连接条件,还可以有单表数据过滤条件
连接类型: 等值连接、自连接、笛卡尔积、内连接(简单连接/连接)、外连接、反连接、半连接
等值连接 [ = ] (笛卡尔积受制于where条件)
自连接 from emp a, emp b
内连接 from emp inner join salgrade on
反连接 not in
半连接 where exists 相当于 and (没有生成笛卡尔积,故快速)
select * from emp a where exists (select 1 from dept b where loc='NEW YORK' and a.deptno=b.deptno);
外连接 (+)过时但可用,替代:left outer join, right outer join和full outer join
from dept b left join emp a on
from emp a right join dept b on
from emp a right outer join dept b on
左连接和左外连接的区别:
两者是一样的,只是写法不同,相同的概念。
层次查询Hierarchical Query
select empno, ename, job, mgr, deptno, level from emp start with job='PRESIDENT'connect by prior empno= mgr;
CONNECT BY rownum <= length(p_str))对输入的字符串进行逐个遍历
select * from dual connect by rownum<5
会话隔离:
备份表
create table table_name1 as select * from emp;
最常用的SELECT:
SELECT的基本构成
DUAL
查询( query)和子查询( subquery)
层次查询
集合
连接
WITH语句
理解SELECT语法图
执行顺序:
where最新执行
group by
order by
详细顺序:
from:对from子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1
on:对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。
outer(join):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。
where:对VT3应用WHERE筛选器。只有使<where_condition>为true的行才被插入VT4.
group by:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.
CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.
having:对VT6应用HAVING筛选器。只有使<having_condition>为true的组才会被插入VT7.
select:处理SELECT列表,产生VT8.
distinct:将重复的行从VT8中移除,产生VT9.
order by:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).
top:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。
count(*)是计算有多少列
sum(salary)是计算salary列的总合
DML异常:
ORA-00979 不是 GROUP BY 表达式错误的解释
err ;select deptno,job,avg(sal) from emp group by deptno;
right:select deptno,job,avg(sal) from emp group by deptno,job;
因为在select 列表像中出现了像deptno和job,而在group by中并没有出现的缘故。
子查询( subquery)
一个查询嵌套在另外的SQL语句中,该查询称为子查询( subquery)
子查询不仅仅会出现在SELECT中
select empno, ename from emp where mgr in (select empno from emp where job='MANAGER');
select * from emp where sal > 1.4*(select avg(sal) from emp);
insert into dept(deptno, dname, loc) select 50, 'TRAINING', 'PEKING' from dual;
exists是判断是否存在,和in类似,但效率要比in高
update emp set sal=sal*1.2 where exists (select 1 from dept where deptno=emp.deptno and loc='DALLAS');
update emp set sal=sal*1.2 where in (select deptno from dept where loc='DALLAS');
注意exists的使用,一定要带表的别名
Set:
数学上的集合
集合的概念
一个集合就是将数个对象归类而分成为一个或数个形态各异的大小整体。
一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集。
构成集合的事物或对象称作元素或是成员。
集合的特性
唯一性
无序性
确定性
计算机上的集合
列表:数据项的顺序是确定的,也可以存在多个相同的数据项。
队列、堆栈
集:数据项是无序的,也不允许存在相同数据项。
多重集:类似于集,其中数据项是无序的。但在多重集中,可以存在相同的数据项。
关联数组:和字典相似,为键输入提供一个值输出,即Key-Value
树:“根”节点与一定数量的数据项以亲-子关系联系起来,而其子数据项也与另外的数据项
以同样的方式联系。
图:每个数据项都可以与一个或多个其它数据项联系起来,其中每个节点都是平等的,类似于
无根节点、无亲-子关系的树。
Oracle的结果集( ResultSet)
结果集的概念
一个查询(包括子查询)的结果,称为结果集。
结果集的特性
不唯一性
无序性
确定性
Oracle中的集合操作
并集
UNION:集
UNION ALL:集或多重集
交集
INTERSECT:集
差集(补集)
MINUS:集
操作符( UNION [ALL], INTERSECT, MINUS)
拥有同样的优先级
括号可以改变运算顺序
query1 minus (query2 union query3)
contect:
连接定义
从两张或更多张表/视图中做的查询称为连接
只要FROM后面出现多个表/视图, Oracle总会去执行连接操作
如果某列的名称在多个表/视图中出现,那么为避免模棱两可必须在列前加上表/视图的名或别名
连接条件
通常多表连接都会至少有一个连接条件
无连接条件的连接结果集称为笛卡尔积( Cartesian Products)
连接条件两端的字段必然来自不同的两张表/视图
多表连接时,除了连接条件,还可以有单表数据过滤条件
连接类型: 等值连接、自连接、笛卡尔积、内连接(简单连接/连接)、外连接、反连接、半连接
等值连接 [ = ] (笛卡尔积受制于where条件)
自连接 from emp a, emp b
内连接 from emp inner join salgrade on
反连接 not in
半连接 where exists 相当于 and (没有生成笛卡尔积,故快速)
select * from emp a where exists (select 1 from dept b where loc='NEW YORK' and a.deptno=b.deptno);
外连接 (+)过时但可用,替代:left outer join, right outer join和full outer join
from dept b left join emp a on
from emp a right join dept b on
from emp a right outer join dept b on
左连接和左外连接的区别:
两者是一样的,只是写法不同,相同的概念。
层次查询Hierarchical Query
select empno, ename, job, mgr, deptno, level from emp start with job='PRESIDENT'connect by prior empno= mgr;
CONNECT BY rownum <= length(p_str))对输入的字符串进行逐个遍历
select * from dual connect by rownum<5
发表评论
-
17、nosql -- redis(一)简介
2015-04-01 11:09 483数据库发展史 --> 无库时代--> 层次状数据库 ... -
16、ER设计工具--powerdesigner
2015-03-30 14:09 1433entity-relationShip 1. 概念数据模型 ... -
15、pl/sql高级应用
2015-03-30 11:40 532now is null now is null now is ... -
14、oracle --sql 排名/相邻/统计函数
2015-03-30 09:49 12411、排名函数 排名的几个分析函数 row_number ... -
13、oracle--sql 数字/日期/字符串/过滤函数
2015-03-30 00:08 1073常用的数据类型:数字(number|float)、日期(d ... -
11、oracle--pl/sql
2015-03-28 00:16 550JDBC, 全称为Java DataBase Con ... -
11、深入学习Oracle
2015-03-22 14:24 0Oracle是个高并发的软件; -
11、oracle用户/权限管理
2015-03-14 21:25 0create user c##2015 identified ... -
10、oracle的卸载与安装
2015-03-15 20:10 684安装了oracle发现编码不对,想找/Home0注册表也没找到 ... -
9、实现行列转换
2015-03-15 20:10 426行转列: 1、通过Oracle数据库自带的wm_c ... -
8、concat(str1,str2)连接多个数据
2015-03-15 20:10 537ex ; select concat(region_na ... -
7、union并/intersect交
2015-03-15 20:10 496union 跟 jion 有些许类似,因为这两个指令都可 ... -
6、查询消除重复数据distinct
2015-03-15 20:09 603ex: select distinct name,id fr ... -
5、外联查询
2015-03-14 10:33 6261、左联 left join a.name = b.name ... -
4、truncate清空表保留表结构
2015-03-14 10:08 887ex: truncate table test 这是个d ... -
3、简单的crud语句
2015-03-14 10:00 3271、update ex: update repeat ... -
2、in的用法
2015-03-14 09:59 494select t.* from repeat t where ... -
###.什么是持久化?
2015-03-11 13:08 0<转>http://cuisuqiang.it ... -
lll数据异常
2015-03-04 17:06 0Duplicate column name 'cat_id' ... -
lll.mysql建表设置utf-8
2015-03-04 16:15 0CREATE TABLE message( id int(10 ...
相关推荐
### Oracle -- PlSql 教程知识点详述 ...这些内容覆盖了SQL的基础概念、查询语句的使用、函数的应用、子查询的操作、数据的操作以及表和视图的创建等多个方面,为学习Oracle PL/SQL提供了全面的指导。
在Oracle数据库系统中,多表查询是日常数据处理的关键技能,尤其对于大型企业级应用来说,数据往往分散在多个关联的表中。本篇将深入探讨Oracle中的多表查询技术,包括基本概念、联接类型、子查询以及高级查询技巧。...
Oracle SQL 是一种强大的数据库查询语言,用于在Oracle数据库中检索、操作和管理数据。本篇主要探讨了SQL的简单查询语句,特别是针对Oracle数据库的使用。 数据处理是计算机科学中的核心概念,它涵盖数据的收集、...
`LISTAGG()`是Oracle 11g引入的一个聚合函数,用于将多行数据合并为一个字符串,特别适合于分组查询。它允许指定分隔符: ```sql SELECT column1, LISTAGG(column2, ', ') WITHIN GROUP (ORDER BY column2) FROM...
Oracle数据库系统在处理层次数据或树形结构时,提供了强大的工具——递归查询。递归查询允许我们在数据表中处理嵌套级别的数据,这在权限查询、组织结构、产品分类等场景中尤其常见。本文将深入探讨Oracle中的树状...
在Oracle数据库中,树结构查询是一种常见的数据操作方式,特别是在处理层次关系的数据时。Oracle提供了一种称为“连接查询”(Connect By)的特有语法,使得我们可以方便地对具有层级关系的数据进行检索。本资料...
- **2002/12**:版本2.0,全面调整了内容结构,并增加了Oracle9i的安装配置、OCI开发、MySQL安装配置开发等新章节。 通过以上总结可以看出,《Oracle傻瓜手册》是一本非常实用的指南书,不仅覆盖了Oracle数据库的...
"oracle-use.rar_Oracle drop use_oracle"这个压缩包包含了与Oracle数据库使用相关的多个文档,包括查询、操作、PL/SQL语法、数据导入导出、连接配置以及备份恢复等方面的知识。 首先,我们来关注"插入数据"这一...
根据提供的信息,我们可以总结出关于Oracle 11g安装与配置的重要知识点,这些知识点将涵盖安装前的准备工作、具体的安装步骤以及安装后的一些必要设置。 ### Oracle 11g安装与配置关键知识点 #### 一、Oracle 11g...
Oracle SQL在连接数据库和处理层次数据方面提供了多种特殊用法,尤其在Oracle 9i及后续版本中,这些功能得到了显著增强。以下是针对【标题】"oracle-sql"和【描述】"oracle-sql connect 特殊用法"中涉及的知识点的...
12. **数据库链接**:数据库链接允许在不同数据库之间进行连接和通信,支持分布式数据库系统。 13. ** flashback技术**:包括闪回查询、闪回事务回退和闪回表,允许用户恢复到数据库的某个历史状态,增强了数据库的...
在处理Oracle数据库连接时,cx_Oracle模块是Python的Oracle API,由Computronix公司提供。cx_Oracle允许用户在Python中直接操作Oracle数据库,并保持与Python数据库API规范v2.0的兼容性。这个规范统一了访问不同...
工作流管理员可以在工作流管理“开发员工作室”TAB页中查询出系统所有的“工作流类型”,选择具体需设置的工作流,点击“运行”打开该工作流的“属性”设置界面。工作流管理员也可以在工作流管理“状态监控程序”TAB...
- **Materialized Path**和**Nested Table**:处理层次结构数据的特殊方式。 8. **故障排查**: - **V$视图**:用于监控数据库性能和状态。 - **AWR**(Automatic Workload Repository)和**ASH**(Active ...
"oracle中文乱码.doc"可能包含了更详细的步骤和案例分析,包括如何查询数据库字符集、修改数据库字符集、调整JDBC连接配置等。而"www.pudn.com.txt"可能是从论坛或其他资源网站收集的相关技术讨论或解决方案。 总的...
Oracle 基于树结构查询详解 Oracle 基于树结构查询是一种高效的查询方式,特别在处理树型结构数据时。树结构查询可以快速地检索树型结构数据,并且可以根据实际需求进行查询优化。 树结构查询的基本概念: 树结构...
- **层次查询**: 使用`CONNECT BY`和`START WITH`子句实现层级结构的查询。 - **合并查询**: 使用`UNION`、`INTERSECT`和`MINUS`等操作符将多个查询的结果集合并。 **4.2 使用DML语句** - **INSERT**: 向表中插入...
总的来说,Oracle数据库的管理和操作涉及多个层次,包括数据库实例的生命周期管理、用户权限控制以及使用图形化工具进行系统监控和维护。熟练掌握这些操作对于Oracle数据库的日常管理和问题解决至关重要。
《基于Oracle的层次树查询功能及实例分析》 在关系型数据库中,处理具有层次结构的数据通常需要复杂的迭代编程,而Oracle的层次树查询功能提供了一种高效且简洁的解决方案。本文将深入探讨Oracle的层次树查询技术,...