Oracle LEFT JOIN中ON条件与WHERE条件的区别
JOIN中的ON条件与WHERE条件是一样的,而LEFT JOIN却不一样
SQL> create table t1 as select * from scott.emp;
表已创建。
SQL> create table t2 as select * from scott.dept;
表已创建。
SQL> delete t2 where deptno=30;
已删除 1 行。
以下为使用where的查询结果与执行计划
以下为使用on条件的查询结果与执行计划
oracle 对谓词and t1.job='CLERK'(on 后面的),where t1.job='CLERK'的解析是不一样的。
使用where t1.job='CLERK':
1 - access("T1"."DEPTNO"="T2"."DEPTNO"(+))
2 - filter("T1"."JOB"='CLERK')
Oracle 先根据"T1"."JOB"='CLERK'对T1表进行过滤,然后与T2表进行左外连接
Oracle解析的谓词and t1.job='CLERK'(on 后面的)为:
1 - access("T1"."DEPTNO"="T2"."DEPTNO"(+) AND "T1"."JOB"=CASE WHEN
("T2"."DEPTNO"(+) IS NOT NULL) THEN 'CLERK' ELSE 'CLERK' END )
代表什么意思呢?
oracle 对t1,t2进行全表扫描,之后进行左外连接(也可能是在扫描过程中进行连接),而and t1.job='CLERK'对连接之后的记录总数没有影响,只是对不符合and t1.job='CLERK'的记录中的部门名称置为空
不知道我的理解对不?
有关这方面的一篇文章http://lvyunheng.javaeye.com/blog/708687
分享到:
相关推荐
当我们涉及到LEFT JOIN时,可能会遇到使用ON和WHERE子句的情况,两者虽然都可以用来指定条件,但在语义上有所区别。 首先,ON子句是在生成联接结果集(临时表)时应用的条件。无论ON条件是否为真,都会返回左表的...
本文将重点讨论`LEFT JOIN`中过滤条件放置位置的不同——放在`ON`子句后与放在`WHERE`子句后——及其带来的差异。 #### SQL JOIN基本概念回顾 在深入讨论之前,我们先简要回顾一下SQL JOIN的基本概念: - **INNER...
在Oracle数据库中,优化器是决定查询执行计划的关键组件,其目标是最小化资源消耗并最大化查询性能。Oracle提供了三种主要的优化器模式:基于规则(RULE)、基于成本(COST)以及选择性(CHOOSE)。 1. **基于规则...
在LEFT JOIN中,通常建议将所有过滤条件都放在ON子句内,以确保正确处理NULL值。 3. **数据过滤**: - `gu.f_expectenddate > (select trunc(sysdate,’Y’)FROM DUAL)` 这个条件用于过滤`t_base_succprouser`表中...
ORACLE 与 SQL SERVER 中的语法区别 在数据库管理系统中,ORACLE 和 SQL Server 是两个常用的关系数据库管理系统。虽然它们都使用 SQL 语言,但是它们之间存在一些语法上的区别。这篇文章将详细介绍 ORACLE 和 SQL ...
- RIGHT JOIN (或 RIGHT OUTER JOIN):与LEFT JOIN相反,返回右表的所有行,左表中没有匹配的行以NULL填充。 - FULL JOIN (或 FULL OUTER JOIN):返回所有左右表的行,即使在其中一个表中没有匹配的行。没有匹配的行...
本文将详细介绍Oracle中常见的几种表连接方式及其应用场景,包括内连接(Inner Join)、外连接(Outer Join)、左连接(Left Join)、右连接(Right Join)等,并通过具体的例子来帮助理解每种连接的特点与区别。...
RIGHT JOIN 与 LEFT JOIN 相反,它以右表为基础,即使左表中没有对应的记录,也会显示右表的所有记录,并且左表中对应的列显示为 NULL。 #### 八、总结 本文详细介绍了 SQL 中 INNER JOIN 的基本概念、语法结构...
Oracle数据库中的外连接过滤是一个重要的查询优化技巧,它涉及到如何有效地使用外连接(LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN)以及WHERE子句和AND条件来筛选数据。在外连接中,不同类型的连接允许...
在Oracle数据库系统中,外连接(Outer Join)是一种高级的SQL联接操作,它扩展了标准的内连接(Inner Join)概念,允许我们查询不匹配的数据。外连接分为三种类型:左外连接(Left Outer Join)、右外连接(Right ...
Oracle 数据库表连接(Join)是指从两个或多个表中检索数据,并且将它们组合成一个结果集的操作。连接操作可以大大提高数据库查询的效率,特别是在需要访问多个表中的字段时。 连接的基本结构 连接的基本结构是一...
假设TableA中有四条记录,TableB中也有四条记录,使用CROSS JOIN后,结果集中将包含16条记录,每条记录都是TableA与TableB记录的组合。 #### 四、示例代码 下面是一些关于连接查询的实际代码示例: **示例1:内...
本篇文章将深入探讨Oracle中的左连接(LEFT JOIN)和右连接(RIGHT JOIN),这两种连接方式都是为了在不同表之间建立联系,特别是在数据不完全匹配的情况下。 首先,我们来看一下左连接(LEFT JOIN)。左连接返回左...
2. LEFT JOIN(或LEFT OUTER JOIN):返回左表的所有记录,以及右表中与左表匹配的记录。如果右表没有匹配,则结果为NULL。例如,`SELECT * FROM table1 LEFT JOIN table2 ON table1.key = table2.key;` 3. RIGHT ...
本文主要介绍Oracle与SQL Server在SQL语言层面的异同之处,重点在于Transact-SQL(T-SQL)与PL/SQL之间的区别,并提供了一些迁移策略。对于希望将现有的Oracle数据库系统迁移至SQL Server平台的用户来说,这些知识尤...
在此示例中,使用左外连接 (`LEFT JOIN`),即使 `dept_hiloo` 表中没有与 `emp_hiloo` 表中的 `deptno` 匹配的记录,`emp_hiloo` 表中的所有记录仍将出现在结果集中,未匹配的部门名称将显示为NULL。 ### 三、自...
oracle中sql语句(+)符号代表连接 (+)在=前边为右连接 (+)在=后边为左连接 SELECT a.*, b.* from a(+) = b就是一个右连接,等同于select a.*, b.* from a right join b SELECT a.*, b.* from a = b(+)就是一个左连接...
在PL/SQL(Oracle数据库的编程语言)中,JOIN语法尤其重要,因为它是处理复杂查询的基础。以下是PL/SQL中不同类型的JOIN及其特点的详细分析: 1. **左连接(LEFT JOIN)**: 左连接返回左表(Aa)的所有行,即使在...
LEFT JOIN T_CUS_PRODUCT ON c.PRODUCTID = P_ID WHERE userid = 200 ORDER BY contractid; ``` #### 四、查询DUAL表差异 - **Oracle数据库**:提供了一个特殊的表`DUAL`,通常用于测试或返回单个值的场景。 ...