`

left join (on 和 where条件放置的区别) !!!!

    博客分类:
  • sql
 
阅读更多

   数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

      在使用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中,返回的结果集是相同的。

 

 

REFS:https://blog.csdn.net/u010368749/article/details/59482870

分享到:
评论

相关推荐

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

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

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

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

    MySQL left join操作中on和where放置条件的区别介绍

    然而,在使用`LEFT JOIN`时,我们可以在`ON`子句和`WHERE`子句中放置条件,这两者之间存在一些关键区别。 首先,我们要理解`ON`和`WHERE`的优先级。`ON`的优先级高于`WHERE`。在执行`LEFT JOIN`时,数据库会先根据`...

    mysql中left join设置条件在on与where时的用法区别分析

    当我们设置LEFT JOIN的条件时,可以在ON和WHERE子句中指定,但它们之间存在一些关键区别。 首先,理解ON子句的作用至关重要。ON子句中的条件是在连接左右两表时使用的,它定义了两个表之间的关系。在这个例子中,`...

    MySQL查询条件中放置on和where的区别分析

    在SQL查询中,`ON` 和 `WHERE` 子句都是用于设置筛选条件,但它们在`JOIN`操作中有着不同的作用和位置。理解这两者的区别对于编写高效的SQL语句至关重要,尤其是在处理复杂的多表查询时。 首先,我们来看一下MySQL...

    解析sql语句中left_join、inner_join中的on与where的区别

    在LEFT JOIN中,ON和WHERE的差异在于ON的条件影响的是连接的逻辑,而WHERE的条件则是在连接后对结果集进行过滤。 接下来,让我们看看INNER JOIN。INNER JOIN只返回那些在左右两个表中都有匹配记录的行。对于SQL语句...

    44.答疑文章(三):说一说这些好问题1

    关于JOIN条件的放置,JOIN语句通常包含ON子句来定义连接条件,而WHERE子句用于过滤结果。当JOIN包含多个等值匹配条件时,理论上所有条件都可以写在ON子句内,这样做可以更清晰地表明连接逻辑。然而,将某些条件移到...

    PL/SQL Join实例分析

    此外,优化JOIN操作对于提高查询性能也至关重要,比如通过使用索引、避免全表扫描和合理设计JOIN条件等方法。在PL/SQL Developer这样的开发环境中,可以方便地测试和比较不同的JOIN类型,以便更好地理解和利用它们的...

    Mysql join联表及id自增实例解析

    在SQL查询中,ON和WHERE子句都可以放置匹配条件,但它们的作用有所不同。ON用于指定JOIN操作的条件,而WHERE则过滤最终结果集。在JOIN操作中,最佳实践是将所有的JOIN条件写在ON子句中,而WHERE用于处理不涉及JOIN的...

    SQL内连接与外连接.pdf

    - `WHERE`子句的放置位置很重要,当`WHERE`条件放在`ON`之后,它会应用于已经联接后的结果,而不是原始的表。 - 在实际应用中,应根据查询需求选择合适的连接类型,以获取最准确和最相关的结果。 通过理解内连接...

    SQL有外连接的时候注意过滤条件位置否则会导致网页慢

    在这个案例中,问题在于过滤条件没有正确地放在外连接的ON子句中,而是被放在了主查询的WHERE子句里,这导致了查询效率降低,从而影响了网页加载速度。 正确的做法是将与外连接相关的过滤条件移到ON子句中。例如,...

    视频教程读书笔记之oracle从入门到精通

    ON子句用于设置连接条件,当两张表之间没有共享的列时,可以使用ON子句来定义连接条件。 ```sql SELECT * FROM emp e JOIN salgrades s ON (e.sal BETWEEN s.losal AND s.hisal); ``` #### 二、外连接 外连接是指在...

    支付宝Java工程师笔试题

    ### 支付宝Java工程师笔试题解析 #### 智力部分 1. **烧绳问题** **题目:** 烧一根不均匀的绳子需要一个小时,如何利用这... 这种方式利用了索引加速连接操作,并通过`LEFT JOIN`和`WHERE`条件有效地过滤出了结果。

    Abap效率.docx

    ON、WHERE、HAVING条件的放置顺序也有讲究,应将过滤效果最好的条件放在前面。主键相关条件应置于WHERE条件前列,然后按照=, <, >, , LIKE, IN的顺序排列。ORDER BY应根据索引字段进行,否则需要在程序中进行排序。...

    SQL语法大全

    以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。 ------------------------------------------------------------- Recordset属性 adOpenForwardOnly adOpenKeyset ...

    T-SQL语法大全

    - 外联接(OUTER JOIN):分为左外联接(LEFT OUTER JOIN)、右外联接(RIGHT OUTER JOIN)和全外联接(FULL OUTER JOIN),分别返回左侧表、右侧表以及两个表的所有行。 - 交叉联接(CROSS JOIN):返回两个表的笛卡尔积。 ...

    MySQL多表查询详解下

    - 将连接条件放置在ON子句中,筛选条件放在WHERE子句中,有助于区分逻辑。 - GROUP BY和HAVING用于分组和筛选分组后的结果,常用于统计分析。 - ORDER BY用于对查询结果进行排序。 例如,查询部门员工数量超过3的...

    oracle学习文档

    FROM 表名1 [INNER|LEFT|RIGHT|FULL JOIN 表名2 ON 条件] [WHERE 条件];` - **示例**: 查询`employees`表与`departments`表中的相关信息。 ```sql SELECT e.first_name, e.last_name, d.department_name FROM ...

Global site tag (gtag.js) - Google Analytics