`
z_kanhai
  • 浏览: 51524 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle的left join中on和where的区别

阅读更多
Oracle的left join中on和where的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

      在使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

       假设有两张表:

表1 tab1:

id size

1 10

2 20

3 30

表2 tab2:

size name

10 AAA

20 BBB

20 CCC


两条SQL:
1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)

第一条SQL的过程:

1、中间表
on条件:
tab1.size = tab2.size

tab1.id    tab1.size    tab2.size     tab2.name

1               10                   10               AAA

2              20                     20             BBB

2             20                      20               CCC

3             30                    (null)              (null)

2、再对中间表过滤
where 条件:
tab2.name=’AAA’

tab1.id       tab1.size        tab2.size     tab2.name

1                  10                  10              AAA


第二条SQL的过程:

1、中间表
on条件:
tab1.size = tab2.size and tab2.name=’AAA’
(条件不为真也会返回左表中的记录)

tab1.id      tab1.size         tab2.size       tab2.name

1               10                     10                   AAA

2               20                   (null)               (null)

3               30                    (null)                 (null)

     其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的
分享到:
评论

相关推荐

    深入Oracle的left join中on和where的区别详解

    当我们涉及到LEFT JOIN时,可能会遇到使用ON和WHERE子句的情况,两者虽然都可以用来指定条件,但在语义上有所区别。 首先,ON子句是在生成联接结果集(临时表)时应用的条件。无论ON条件是否为真,都会返回左表的...

    left join 过滤条件写在on后面和写在where 后面的区别

    ### left join 过滤条件写在on后面和写在where 后面的区别 在SQL查询语句中,连接(JOIN)是一种非常重要的操作,用于从两个或多个表中获取数据。其中,`LEFT JOIN`是一种常用的连接类型,它返回左表的所有记录以及...

    oracle性能优化技巧

    在Oracle数据库中,优化器是决定查询执行计划的关键组件,其目标是最小化资源消耗并最大化查询性能。Oracle提供了三种主要的优化器模式:基于规则(RULE)、基于成本(COST)以及选择性(CHOOSE)。 1. **基于规则...

    oracle join on 数据过滤问题

    - 将过滤条件从外层WHERE子句移到ON子句中可以改变连接的顺序和执行计划,可能会提高性能,因为数据库可以更早地应用过滤条件。 - 使用并行执行提示(如`/*+parallel(gu,4)*/`)可以利用多核处理器的优势,加速...

    ORACLE与SQLSERVER中的语法区别

    在 ORACLE 中,使用 `FROM` 语句和 `WHERE` 语句来实现 JOIN 操作,而在 SQL Server 中,使用 `JOIN` 语句。例如: SQL Server: `SELECT A.*, B.* FROM A LEFT JOIN B ON A.bh=B.bh` ORACLE: `SELECT A.*, B.* FROM...

    ORACLE和SQL Server的语法区别

    ### ORACLE和SQL Server的语法区别 #### 一、概述 本文主要介绍Oracle与SQL Server在SQL语言层面的异同之处,重点在于Transact-SQL(T-SQL)与PL/SQL之间的区别,并提供了一些迁移策略。对于希望将现有的Oracle...

    Oracle中的几种表连接区别

    本文将详细介绍Oracle中常见的几种表连接方式及其应用场景,包括内连接(Inner Join)、外连接(Outer Join)、左连接(Left Join)、右连接(Right Join)等,并通过具体的例子来帮助理解每种连接的特点与区别。...

    oracle 资料

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的数据操作和管理功能。在Oracle中,JOIN操作是连接不同...在实际工作中,应根据具体需求选择合适的JOIN类型,并合理利用ON和WHERE子句来定制查询结果。

    理解oracle中的外连接

    在Oracle数据库系统中,外连接(Outer Join)是一种高级的SQL联接操作,它扩展了标准的内连接(Inner Join)概念,允许我们查询不匹配的数据。外连接分为三种类型:左外连接(Left Outer Join)、右外连接(Right ...

    关于SQL 中的inner join的使用

    RIGHT JOIN 与 LEFT JOIN 相反,它以右表为基础,即使左表中没有对应的记录,也会显示右表的所有记录,并且左表中对应的列显示为 NULL。 #### 八、总结 本文详细介绍了 SQL 中 INNER JOIN 的基本概念、语法结构...

    Oracle 左连接、右连接

    本篇文章将深入探讨Oracle中的左连接(LEFT JOIN)和右连接(RIGHT JOIN),这两种连接方式都是为了在不同表之间建立联系,特别是在数据不完全匹配的情况下。 首先,我们来看一下左连接(LEFT JOIN)。左连接返回左...

    达梦和oracle的差异说明

    LEFT JOIN T_CUS_PRODUCT ON c.PRODUCTID = P_ID WHERE userid = 200 ORDER BY contractid; ``` #### 四、查询DUAL表差异 - **Oracle数据库**:提供了一个特殊的表`DUAL`,通常用于测试或返回单个值的场景。 ...

    oracle笔试和面试题

    * Left Join: Left Join 用于连接两个表,并返回左表中的所有记录,即使右表中没有匹配的记录。 * Outer Join: Outer Join 用于连接两个表,并返回两个表中的所有记录,包括左表和右表中的记录。 * Full Join: ...

    简述Oracle中in和exists的不同

    且看接下来的具体分析:in其实是将外表和内表进行hash join,exists是先对外表进行loop操作,然后每次loop后再对内表进行查询。 如果两张表大小差不多,那么exists和in的效率差不多。 例如: 一张大表为A,一张小表B...

    Oracle中sql语句(+)符号代表连接的使用讲解

    oracle中sql语句(+)符号代表连接 (+)在=前边为右连接 (+)在=后边为左连接 SELECT a.*, b.* from a(+) = b就是一个右连接,等同于select a.*, b.* from a right join b SELECT a.*, b.* from a = b(+)就是一个左连接...

    oracle简单教学

    2. LEFT JOIN(或LEFT OUTER JOIN):返回左表的所有记录,以及右表中与左表匹配的记录。如果右表没有匹配,则结果为NULL。例如,`SELECT * FROM table1 LEFT JOIN table2 ON table1.key = table2.key;` 3. RIGHT ...

    Oracle数据库中表的四种连接方式讲解

    在Oracle 9i及以后版本,可以使用`LEFT JOIN`和`RIGHT JOIN`语法代替`(+)`符号。 3. 不等连接(Non-equal Join) 不等连接基于两个表中相关列的不等关系,如大于、小于、在一定范围内的比较。例如,`SALGRADE`表...

    Oracle SQL连接查询总结.docx

    根据连接的方式不同,可以分为内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)以及全连接(FULL JOIN)等几种类型。 #### 二、连接查询类型详解 ##### 1. INNER JOIN (内连接) 内连接是最常用...

    Oracle专题——外连接过滤.pdf

    Oracle数据库中的外连接过滤是一个重要的查询优化技巧,它涉及到如何有效地使用外连接(LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN)以及WHERE子句和AND条件来筛选数据。在外连接中,不同类型的连接允许...

Global site tag (gtag.js) - Google Analytics