数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用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中,返回的结果集是相同的。
相关推荐
总结一下,`ON` 和 `WHERE` 在 `LEFT JOIN` 中的主要区别在于: 1. `ON` 用于在生成临时表时定义连接条件,无论条件是否满足,都会返回左表的所有行。 2. `WHERE` 在临时表生成后进行过滤,如果它包含了连接条件,...
MySQL中的LEFT JOIN和RIGHT JOIN是进行表连接查询的两种常见方式,它们用于在两个表之间根据一定的条件进行数据匹配。LEFT JOIN称为左连接,它会返回左表(即第一个表)的所有记录,以及右表(即第二个表)匹配的...
ON 子句与 WHERE 子句的不同 一种更好地理解带有 WHERE … IS NULL 子句的复杂匹配条件的简单方法 Matching-Conditions 与 Where-conditions 的不同 关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒 ON 条件(...
Mysql 之 inner join、left join、right join 详解 Mysql 中的连接查询是指从多个表中检索数据,并将它们组合成一个结果集。inner join、left join 和 right join 是 Mysql 中三种最常用的连接查询方式。 inner ...
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 LEFT JOIN 关键字语法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1....
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操作用于将一个表(称为左表)的所有记录与另一个表(称为右表)中匹配的记录组合在一起。如果右表中没有匹配的记录,结果集将包含左表的所有记录,但右表对应列的值将为NULL。当我们设置LEFT ...
MySQL数据库中Join操作的使用及优化是一项重要的技能,它涉及到数据库中表与表之间的关联查询。在执行Join操作时,数据库管理系统需要按照某种算法将多个表中的数据记录联合起来,并返回查询结果。Join操作的主要...
与LEFT JOIN相反,RIGHT JOIN会返回右表的所有记录,即使在左表中没有匹配的记录。在上述文章和用户表的例子中,如果我们想要列出所有用户,以及他们可能拥有的文章,即使某些用户没有发表过文章,可以使用RIGHT ...
MySQL的LEFT JOIN是一种关联查询操作,它用于合并两个或多个表的数据,并且返回所有左表(也就是在JOIN语句中位于LEFT关键字之后的表)的记录,即使在右表中没有匹配的记录。这个概念是数据库关系查询中的关键部分,...
在MySQL数据库操作中,高效的多表联查是提高数据处理效率的关键。本示例主要探讨了如何使用`UNION ALL`和`LEFT JOIN`来实现这一目标,特别适合PHP开发者在构建内容管理系统(CMS)模板时自定义数据库数据的调用。...
WHERE和HAVING子句通常与JOIN条件一起优化,但如果WHERE条件排除了LEFT JOIN生成的NULL行,可以转换为等值JOIN,从而提高效率。 RIGHT JOIN 与LEFT JOIN类似,只是角色互换,返回右表的所有行。转换规则与LEFT JOIN...
从内容中可以看出,RIGHT JOIN的使用方法与LEFT JOIN类似,只不过是从右表获取所有数据:SELECT a.*, b.* FROM employee_table a RIGHT JOIN issue b ON a.id = b.id。 FULL JOIN:虽然上述内容中提到MySQL不支持...
SELECT A.*, B.* FROM B LEFT JOIN A ON A.ID = B.ID WHERE A.ID IS NULL ``` 在MySQL中,`JOIN`操作通常用于联接具有相关数据的多个表,以便在一个查询中获取全面的信息。`JOIN`的语法结构允许指定多个表以及...