`

where 和on 的区别

    博客分类:
  • 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中,返回的结果集是相同的

 

 

 

 

 

 

分享到:
评论

相关推荐

    sql语句join中on和where的区别

    ### SQL语句JOIN中ON和WHERE的区别 #### 引言 在SQL中,JOIN操作用于合并两个或多个表中的行。正确理解`ON`和`WHERE`子句的区别对于高效地编写查询至关重要。本文将详细解释这两者的不同,并通过具体的例子来加深...

    left_join_on_and与left_join_on_where的区别

    left_join_on_and与left_join_on_where的区别

    SQL中on条件与where条件的区别

    SQL中on条件与where条件的区别基础知识

    深入解析on where谓词的区别

    这篇博文“深入解析on where谓词的区别”旨在帮助我们理解这两个关键字在联接(JOIN)操作和简单查询中的不同作用。 首先,让我们来看看`WHERE`子句。在SQL中,`WHERE`主要用于基本的单表查询,它在`SELECT`语句...

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

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

    sql查询左连接on与where的区别(2).pdf

    而on和where是用于指定连接条件和过滤结果集的关键字,在Left Join中它们的使用方法和时机对最终查询结果会产生重大影响。 在Left Join的语句中,on关键字用于指定连接条件,它定义了两张表之间如何关联,确保了...

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

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

    SQL中过滤条件放on和where中的区别详解

    在SQL查询中,`ON` 和 `WHERE` 都用于设置过滤条件,但它们在不同类型的查询中扮演的角色和产生的效果是有区别的。本篇文章将深入探讨`ON`和`WHERE`在`JOIN`操作中的具体差异,并通过实例来帮助理解。 首先,`JOIN`...

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

    现在,我们重点讨论`ON`和`WHERE`在`LEFT JOIN`中的区别。`LEFT JOIN`(左连接)保留左表(通常是主查询的表)的所有行,即使在右表中没有匹配的行。如果将条件放在`ON`中,这些条件会在连接阶段应用,而如果放在`...

    on与where、group by的用法

    ### SQL中ON条件与WHERE条件的区别 在进行数据库操作时,理解`ON`与`WHERE`条件的区别至关重要,尤其是在处理表连接(如`LEFT JOIN`、`INNER JOIN`等)时更为关键。这两种条件虽然都能用于限制结果集,但它们在执行...

    SQL _join on 和where的执行顺序1

    总结,ON和WHERE子句在JOIN操作中的作用不同:ON定义了表间连接的基础,而WHERE则对最终结果进行过滤。对于LEFT JOIN、RIGHT JOIN和FULL JOIN,ON条件的过滤是在生成中间表时进行的,而WHERE是在中间表生成后应用。...

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

    总结一下,`ON` 和 `WHERE` 在 `LEFT JOIN` 中的主要区别在于: 1. `ON` 用于在生成临时表时定义连接条件,无论条件是否满足,都会返回左表的所有行。 2. `WHERE` 在临时表生成后进行过滤,如果它包含了连接条件,...

    DBTwin数据库集群与AlwaysOn的比较

    本文将从多个方面比较DBTwin数据库集群和AlwaysOn,包括负载均衡和读写分离、数据同步时的延迟问题、安装和维护的简易程度、很权病毒和木马、其他功能、技术服务等方面。 1. 负载均衡和读写分离 DBTwin数据库集群...

    SQL where条件和jion on条件的详解及区别

    本篇将详细解释`WHERE`和`JOIN ON`的区别,并通过实例来帮助理解。 首先,`WHERE`子句是用于筛选基本表或查询结果中的行。它在SQL查询的最后执行,基于指定的条件过滤出满足要求的记录。例如,以下查询从`TBL_...

    sql中的left join及on、where条件关键字的区别详解

    在SQL查询中,JOIN操作是连接两个或多个表格的关键字,用于从多个表格中合并数据。LEFT JOIN(在某些数据库中称为LEFT ...理解这三个关键字的区别和用法是SQL查询中的基本技能,对于处理复杂的数据关联问题至关重要。

    sql连接查询语句中on、where筛选的区别总结

    连接查询涉及到`ON`和`WHERE`子句,它们在筛选条件的处理上有所不同,尤其是在处理`OUTER JOIN`时,这两者之间的区别尤为明显。 首先,`ON`子句在连接查询中定义了连接条件,即哪些列是相关联的,通常用来匹配两个...

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

    ON和WHERE子句在JOIN操作中都有其特定的作用,但它们在逻辑上有所不同。 LEFT JOIN(左连接)保留了左表(在JOIN语句之前指定的表)的所有记录,即使在右表中没有匹配的记录。如果在ON子句中设置条件,这些条件将在...

Global site tag (gtag.js) - Google Analytics