`

mysql left join on and与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中,返回的结果集是相同的。

分享到:
评论

相关推荐

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

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

    解析mysql left( right ) join使用on与where筛选的差异

    MySQL中的LEFT JOIN和RIGHT JOIN是进行表连接查询的两种常见方式,它们用于在两个表之间根据一定的条件进行数据匹配。LEFT JOIN称为左连接,它会返回左表(即第一个表)的所有记录,以及右表(即第二个表)匹配的...

    深入理解mysql之left join 使用详解

    ON 子句与 WHERE 子句的不同 一种更好地理解带有 WHERE … IS NULL 子句的复杂匹配条件的简单方法 Matching-Conditions 与 Where-conditions 的不同 关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒 ON 条件(...

    Mysql之innerjoin,leftjoin,rightjoin详解.pdf

    Mysql 之 inner join、left join、right join 详解 Mysql 中的连接查询是指从多个表中检索数据,并将它们组合成一个结果集。inner join、left join 和 right join 是 Mysql 中三种最常用的连接查询方式。 inner ...

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

    LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 LEFT JOIN 关键字语法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1....

    mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录

    SELECT COUNT(*) FROM A LEFT JOIN B ON A.a = B.a WHERE B.a IS NULL ``` 3. `NOT EXISTS` 语句: ```sql SELECT COUNT(*) FROM A WHERE NOT EXISTS (SELECT a FROM B WHERE A.a = B.a) ``` 虽然这三条语句在逻辑...

    mysql多个left join连接查询用法分析

    MySQL中的LEFT JOIN是一种关联多个表的方法,用于返回左表的所有记录以及右表匹配的记录。在某些场景下,我们可能需要连接多个表来获取全面的数据信息。本篇文章将深入探讨MySQL多个LEFT JOIN连接查询的用法,通过...

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

    在MySQL中,LEFT JOIN操作用于将一个表(称为左表)的所有记录与另一个表(称为右表)中匹配的记录组合在一起。如果右表中没有匹配的记录,结果集将包含左表的所有记录,但右表对应列的值将为NULL。当我们设置LEFT ...

    mysql Join使用以及优化

    MySQL数据库中Join操作的使用及优化是一项重要的技能,它涉及到数据库中表与表之间的关联查询。在执行Join操作时,数据库管理系统需要按照某种算法将多个表中的数据记录联合起来,并返回查询结果。Join操作的主要...

    MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

    与LEFT JOIN相反,RIGHT JOIN会返回右表的所有记录,即使在左表中没有匹配的记录。在上述文章和用户表的例子中,如果我们想要列出所有用户,以及他们可能拥有的文章,即使某些用户没有发表过文章,可以使用RIGHT ...

    MySQL的LEFT JOIN表连接的进阶学习教程

    MySQL的LEFT JOIN是一种关联查询操作,它用于合并两个或多个表的数据,并且返回所有左表(也就是在JOIN语句中位于LEFT关键字之后的表)的记录,即使在右表中没有匹配的记录。这个概念是数据库关系查询中的关键部分,...

    mysql_adv_select.rar_any left join_union

    在MySQL数据库操作中,高效的多表联查是提高数据处理效率的关键。本示例主要探讨了如何使用`UNION ALL`和`LEFT JOIN`来实现这一目标,特别适合PHP开发者在构建内容管理系统(CMS)模板时自定义数据库数据的调用。...

    SQL语句优化之JOIN和LEFT JOIN 和 RIGHT JOIN语句的优化

    WHERE和HAVING子句通常与JOIN条件一起优化,但如果WHERE条件排除了LEFT JOIN生成的NULL行,可以转换为等值JOIN,从而提高效率。 RIGHT JOIN 与LEFT JOIN类似,只是角色互换,返回右表的所有行。转换规则与LEFT JOIN...

    mysql join所有方法总结

    从内容中可以看出,RIGHT JOIN的使用方法与LEFT JOIN类似,只不过是从右表获取所有数据:SELECT a.*, b.* FROM employee_table a RIGHT JOIN issue b ON a.id = b.id。 FULL JOIN:虽然上述内容中提到MySQL不支持...

    Join on 连接

    SELECT A.*, B.* FROM B LEFT JOIN A ON A.ID = B.ID WHERE A.ID IS NULL ``` 在MySQL中,`JOIN`操作通常用于联接具有相关数据的多个表,以便在一个查询中获取全面的信息。`JOIN`的语法结构允许指定多个表以及...

Global site tag (gtag.js) - Google Analytics