t1表和t2表做内连接,连接条件为on t1.c1 = t2.c2,
假设t1表做驱动表,t2表做匹配表,记录的匹配过程如下:
1、从t1表中读取第一条记录r1,若它的c1值为1
2、根据该值到t2表中查找匹配的记录,即需要遍历t2表,从t2表中的第一条记录开始,若该记录(r1)的c2列的值=1,我们就说这两条记录能够匹配上,那么t1的r1和t2的r1组合起来,作为结果集里的一条记录,否则不能组合起来,即被过滤掉。
3、按照方法2依次将t2表中所有的记录检测一遍,只要匹配就放入结果集中
4、从t1表中读取第二条记录,依次重复步骤2和3,产生最终的结果集
t1表和t2表做内连接,连接条件为on t1.c1 = t2.c2,
假设t1表做驱动表,t2表做匹配表,记录的匹配有如下三
种情况:
1、t1表中的某条记录在t2中找不到任何一条匹配的记录,那么t1表中的该记录不会出现在结果集中
2、t1表中的某条记录在t2表中只有一条匹配的记录,那么t1表中的该记录和t2表中匹配的记录组合成新记录出现在结果集中
3、t1表中的某条记录在t2表中有多条匹配的记录,那么t1表中的该记录会和t2表中每一条匹配的记录组合成新记录出现在结果集中
4、内连接的核心为任何一张表里的记录一定要在另一张表中找到匹配的记录,否则不能出现在结果集中
t1表和t2表做内连接,连接条件为on t1.c1 = t2.c2
有两种方式都能得到结果集记录
1、一种t1表做驱动表,t2表做匹配表
2、另一种t2表做驱动表,t1表做匹配表
3、无论哪种方式最终得到的结果集都一样,所不同的是效率
t1表和t2表做外连接,连接条件为
from t1 left outer join t2 on t1.c1 = t2.c2,
t1表必须做驱动表,t2表做匹配表,记录的匹配过程如下:
1、从t1表中读取第一条记录r1,若它的c1值为1
2、根据该值到t2表中查找匹配的记录,即需要遍历t2表,从t2表中的第一条记录开始,若该记录(r1)的c2列的值=1,我们就说这两条记录能够匹配上,那么t1的r1和t2的r1组合起来,作为结果集里的一条记录,否则不能组合起来,即被过滤掉。
3、按照方法2依次将t2表中所有的记录检测一遍,只要匹配就放入结果集中,若扫描完后,t1的r1记录在t2表中找不到任何匹配的记录,t2表中模拟一条null记录与t1表中r1组合起来,放入结果集中
4、从t1表中读取第二条记录,依次重复步骤2和3,产生最终的结果集
t1表和t2表做外连接,连接条件为
from t1 left outer join t2 on t1.c1 = t2.c2,
t1表必须做驱动表,t2表做匹配表,
1、外连接的结果集=内连接的结果集+t1表中匹配不上的记录和一条null记录的组合
2、外连接的核心可以将匹配不上的记录找回来,即一个都不能少
t1表和t2表做外连接,连接条件为
from t1 right outer join t2 on t1.c1 = t2.c2,
t2表必须做驱动表,t1表做匹配表,
1、外连接的结果集=内连接的结果集+t2表中匹配不上的记录和一条null记录的组合
t1表和t2表做外连接,连接条件为
from t1 full outer join t2 on t1.c1 = t2.c2,
t2表必须做驱动表,t1表做匹配表,
外连接的结果集=内连接的结果集+t2表中匹配不上的记录和一条null记录的组合+t1表中匹配不上的记录和一条null记录的组合
根据GROUP BY子句指定的表达式,将要处理的数据(若有WHERE子句即为通过条件过滤后的数据)分成若干组,每组有唯一的组标识,组内有若干条记录,根据SELECT后面的组函数对每组的记录进行计算,每组对应一个返回值
where和having的区别
WHERE子句过滤的是行(记录)
HAVING子句过滤的是分组以后的聚合结果
WHERE子句包含单行函数
HAVING子句只能包含GROUP BY后面的表达式和组函数
WHERE子句执行在前,HAVING子句执行在后
WHERE子句和HAVING子句都不允许用列别名
先执行子查询,子查询的返回结果作为主查询的条件,再执行主查询。
子查询只执行一遍
若子查询的返回结果为多个值,ORACLE会去掉重复值之后,再将结果返回给主查询
关联子查询采用的是循环(loop)的方式,执行步骤如下:
1 外部查询得到一条记录(查询先从outer表中读取数据)并将其传入到内部查询。
2 内部查询基于传入的值执行。
3 内部查询从其结果中把值传回到外部查询,外部查询使用这些值来完成其处理,若符合条件,outer表中得到的那条记录就放入结果集中,否则放弃,该记录不符合条件。
4 重复执行步骤1-3, 直到把outer表中的所有记录判断一遍。
EXISTS采用的是循环(loop)方式,判断outer表中是否存在记录只要在inner表中找到一条匹配的记录即可。
1 外部查询得到一条记录(查询先从outer表中读取数据)并将其传入到内部查询的表。
2 对inner表中的记录依次扫描,若根据条件存在一条记录与outer表中的记录匹配,立即停止扫描,返回true,将outer表中的记录放入结果集中,若扫描了全部记录,没有任何一条记录符合匹配条件,返回false ,outer表中的该记录被过滤掉,不能出现在结果集中。
3 重复执行步骤1-2, 直到把outer表中的所有记录判断一遍。
NOT EXISTS采用的是循环(loop)方式,判断在outer表中是否不存在记录,它能在inner表中能找到匹配的记录。
1 外部查询得到一条记录(查询先从outer表中读取数据)并将其传入到内部查询的表。
2 对inner表中的记录依次扫描,若根据条件存在一条记录与outer表中的记录匹配,立即停止扫描,返回false, outer表中的该记录被过滤掉,不能出现在结果集中,若扫描了全部记录,没有任何一条记录符合匹配条件,返回true,将outer表中的记录放入结果集中。
3 重复执行步骤1-2, 直到把outer表中的所有记录判断一遍。
EXISTS是用循环(loop)的方式,由outer表的记录数决定循环的次数,对于exists影响最大,所以,外表的记录数要少
IN先执行子查询,子查询的返回结果去重之后,再执行主查询,所以,子查询的返回结果越少,越适合用该方式
事务的特性:ACID
原子性(atomic):一个事务要么完全发生、要么完全不发生
一致性(consistent):事务把数据库从一个一致状态转变到另一个状态
隔离性(isolated):在事务提交之前,其他事务觉察不到事务的影响
持久性(durable):一旦事务提交,它是永久的
数据库应用程序中最常用的隔离级别
Read committed
一个事务只可以读取在事务开始之前提交的数据和本事务正
在修改的数据。
在开发多用户、数据库驱动的应用程序中,关键性的挑战之一是要使并行的访问量达到最大化,同时还要保证每一个用户可以以一致的方式读取并修改数据。
锁(lock)机制
用来管理对一个共享资源的并行访问
多版本一致读
非阻塞查询:写不阻塞读,读不阻塞写
一致读查询:在某一时刻查询产生一致结果
排他锁
如果一个对象上加了X锁,在这个锁被采用commit或rollback
释放之前,该对象上不能施加任何其他类型的锁
共享锁:
如果一个对象被加上了S锁,该对象上可以加其他类型的S锁,但
是,在该锁释放之前,该对象不能被加任何其他类型的X锁
为确保并发用户能正确使用与管理共享资源,如表中的记录,oracle引进锁机制
DML锁:用于保护数据的完整性
TX锁,即事务锁(行级锁),类型为X锁
TM锁,即意向锁(表级锁),属于一种S锁
DDL锁:用于保护数据库对象的结构(例如表、索引的结构定义)
X类型的DDL锁,这些锁定防止其他会话自己获得DDL锁定或
TM(DML)锁定。这意味着可以在DDL其间查询一个表,但不
可以以任何方式进行修改
全表扫描FTS(Full Table Scan)
高水位线:曾经包含数据的最右边的块
将扫描高水位线以下的所有数据块
通过rowid来扫描数据
Rowid:标识一条记录的物理位置
包含如下信息:
该记录属于哪张表的(哪个数据库对象):object_id
该记录在哪个数据文件里:file_id
该记录在数据文件的第几个数据块里:block_id
该记录在数据块里是第几条记录:row_id
索引使用的是B*tree结构
B*tree索引由根节点(root block)、分支块(branch block)、叶子节点(leaf block)组成
根块下面是分支块,用于导航结构,包含了索引列范围和另一索引块(可以是分支块或叶子节点)的地址
最底层为叶子节点,包含索引项(index entry),索引项由key值(被索引列的值)和相应行所对应的rowid组成
索引上叶子节点实际上是双向链接的表。一旦找到叶子节点的“开始”点(一旦找到第一个值),对值进行顺序扫描(索引范围扫描)是很容易的。不必再做结构导航,只要通过叶子节点转发就行
ROWNUM是一个伪列,对查询返回的行编号即行号,由1开始依次递增
WHERE ROWNUM <= 5的执行过程
Oracle获取第一个符合条1件的行,将它叫做第1行
有5行了吗?如果没有,oracle就再返回行,因为它要满足行号
小于等于5的条件,如果到了5行,那么,oracle就不再返回行
Oracle获取下一行,并递增行号(从2,到3,再到4,等等)
返回到第2步
关键点:Oracle的rownum数值是在获取每行之后才赋予的
WHERE ROWNUM = 5的执行过程
Oracle获取第一个符合条1件的行,将它叫做第1行
有5行了吗?如果没有,oracle就再返回行,因为它要满足行号
小于等于5的条件,如果到了5行,那么,oracle就不再返回行
Oracle获取下一行,并递增行号(从2,到3,再到4,等等)
返回到第2步
分享到:
相关推荐
以下是对标题"详细oracle笔记1"和描述中提到的知识点的详细解释: 1. **增加主键**: 主键是表中的一个或多个列,用于唯一标识每行数据。使用`ALTER TABLE`语句可以添加主键约束,例如: ```sql ALTER TABLE ...
【Oracle笔记1】这篇笔记主要介绍了Oracle数据库的基础知识,包括数据库的基本概念、发展阶段以及Oracle公司的历史,同时还涉及了Oracle的安装、常用服务、目录结构、文件后缀、数据库的使用方式以及卸载过程。...
比较全的Oracle学习笔记
这个是我学习网上的视频做的oracle笔记,对于oracle一窍不通的菜鸟可能有用吧,大家有需要可以看看
李兴华Oracle全部笔记是一份详细记录了Oracle相关知识的学习资料,涵盖了从基础概念到高级特性的全面讲解。这些笔记可能是李兴华在深入研究Oracle后的心得体会,对于想要学习或提升Oracle技能的人来说是一份宝贵的...
### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...
标题“2011Oracle笔记(李兴华视屏教程笔记)”揭示了文档的用途,它是作为2011年李兴华Oracle教学视频课程的学习笔记。这种笔记通常包括了课程中的重点概念、Oracle数据库基础知识、实际操作案例以及配合视频教程的...
这篇史上最全的Oracle笔记将为你提供全面的学习指导。 一、数据库基础 数据库(DataBase)是存储数据的系统,Oracle数据库允许用户以表格的形式组织和管理数据。在Oracle中,数据主要以表的形式存在,表是数据库中...
《MLDN最经典的ORACLE笔记》是李兴华老师倾力打造的一份全面而深入的Oracle学习资源,专为对数据库技术感兴趣的读者精心准备。Oracle作为全球广泛使用的数据库管理系统,其强大功能和复杂性使得深入理解和掌握Oracle...
### 韩顺平Oracle笔记知识点详解 #### 一、Oracle认证及与其他数据库的比较 - **Oracle认证**:Oracle提供了多种级别的认证体系,包括OCA(Oracle Certified Associate)、OCP(Oracle Certified Professional)、...
在达内的Oracle笔记中,可能会详细讲解SELECT语句用于数据检索,INSERT、UPDATE、DELETE用于数据增删改,以及CREATE、ALTER、DROP用于数据库对象管理的语法和用法。 3. **数据库设计**:良好的数据库设计是确保系统...
马士兵oracle笔记,浅显易懂。
根据提供的信息,我们可以总结出以下关于Oracle的相关知识点: ### Oracle基础知识与分类 #### DDL (Data Definition Language) 数据定义语言 - **DDL** 主要用于创建、修改或删除数据库对象,如表、索引等。 ###...
本资源“oracle笔记+资料.rar”包含了丰富的Oracle学习资料,适合不同水平的学习者,无论你是初学者还是资深DBA,都能从中受益。下面将详细解析其中可能涵盖的知识点。 1. **Oracle基础知识**:这部分内容可能会...
oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记...
Oracle学习笔记 Oracle学习笔记是李兴华老师编写的Oracle从入门到精通的学习笔记,涵盖了 Oracle 的多表查询、连接、组函数和分组统计等知识点。在本篇笔记中,李兴华老师详细介绍了多表查询的基本语法、左右连接...
在Oracle学习笔记中,我们关注的关键概念主要包括以下几个方面: 1. **数据缓冲区**:这是Oracle内存架构的重要组成部分,用于存储从磁盘数据文件中读取的数据。所有用户共享这个缓冲区,当数据被服务器进程读入后...
1. Oracle版本与特点 Oracle数据库有多个版本,每个版本都有其特定的优化和增强功能。常见的版本包括Oracle8、Oracle8i、Oracle9i、Oracle10g、Oracle11g以及Oracle12C。其中,“i”在Oracle8i中表示增加了对...