MySQL 多表Join条件在ON AND 和 Where的写法差异

在MySQL中,多表Join是一种常见的操作,它允许从多个表中根据相关联的列,来组合提取数据。MySQL中多表关联也是支持,多种方式.。比如内连接,左链接,右链接,笛卡尔积等方式。特别是在左右链接下,不同的写法颠覆了对SQL语句处理的理解。

示例分析:
两张表s1 和 s2,LEFT JOIN下s1.name IN(‘a’,‘c’)条件使用在AND 和 WHERE 下得到的结果集不一样。

mysql> CREATE TABLE s1(id int ,name varchar(20)); CREATE TABLE s2(id int); INSERT INTO s1 VALUES(1,'a'),(2,'b'),(3,'c'); INSERT INTO s2 VALUES(1),(2); #第一种方式:LEFT JOIN ON AND关联 mysql> SELECT s1.id,s1.name,s2.id FROM s1 LEFT JOIN s2 ON s1.id=s2.id AND s1.name IN('a','c'); #第二种方式:LEFT JOIN ON WHERE关联 mysql> SELECT s1.id,s1.name,s2.id FROM s1 LEFT JOIN s2 ON s1.id=s2.id WHERE s1.name IN('a','c');