MySQL中条件放在where后面与放在on后面的区别

Posted Acode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL中条件放在where后面与放在on后面的区别相关的知识,希望对你有一定的参考价值。

假设有两种表:test_on_position表和address表,address表存放地址,test_on_position存放会员及其常用的地址,数据如下:

address表:

test_on_position表:

1. left join

条件在where后面

SELECT
	*
FROM
	test_on_position
LEFT JOIN address ON test_on_position.address = address.id
WHERE
	test_on_position.address IS NOT NULL

运行结果:

条件在on后面

SELECT
	*
FROM
	test_on_position
LEFT JOIN address ON test_on_position.address = address.id AND test_on_position.address IS NOT NULL

运行结果:

结果分析

当条件放在on后面时,无论on条件的真假,都会返回左表的值;

当条件放在where后面时,只有满足条件的记录会返回。

inner join

条件在on后面

SELECT
	*
FROM
	test_on_position
INNER JOIN address ON test_on_position.address = address.id AND test_on_position.address IS NOT NULL

运行结果:

条件在where后面

SELECT
	*
FROM
	test_on_position
INNER JOIN address ON test_on_position.address = address.id
WHERE
	test_on_position.address IS NOT NULL

运行结果:

结果分析

无论条件放在哪里,都只会返回满足条件的结果。

以上是关于MySQL中条件放在where后面与放在on后面的区别的主要内容,如果未能解决你的问题,请参考以下文章

mysql左连接

为啥聚合函数不能放在where后面?

为啥sql查询语句中的count(*)等聚合函数可以放在having后面,而不能放在where后面?

mysql SQL语句如何将sum()放在where后面做条件怎么写呢?

SQL 查询条件放在LEFT OUTER JOIN 的ON语句后与放在WHERE中的区别

SQL 左外连接后还能加where不