将条件加在inner join on后面和将条件加在where 后面,谁的效率会快一点
时间: 2023-08-17 20:14:25 浏览: 131
在一般情况下,将条件加在 inner join on 后面和将条件加在 where 后面不会对查询的效率产生明显的影响,因为数据库优化器会自动调整查询计划以获得最优性能。
然而,当涉及到外连接(outer join)时,inner join on 和 where 的使用方式会产生不同的结果。在使用 outer join 时,将条件加在 inner join on 后面会影响到连接的结果集,而将条件加在 where 后面则不会。
例如,假设我们有两个表 A 和 B,我们想要查询 A 表中所有的记录以及与之匹配的 B 表中的记录,同时也要包括 A 表中没有匹配的记录。在这种情况下,我们可以使用左外连接(left outer join):
```
SELECT *
FROM A
LEFT OUTER JOIN B
ON A.id = B.id
WHERE B.name = 'John';
```
在这个查询中,将条件加在 inner join on 后面会过滤掉 B 表中空值的记录,因为与 A 表中的记录没有匹配的 B 表的记录在连接后会变成空值。但是,将条件加在 where 后面则不会过滤掉空值的记录,因为 where 条件是在连接后应用的。
因此,如果涉及到 outer join,建议将条件加在 inner join on 后面,以确保查询结果的正确性。
相关问题
inner join on 加条件和where加条件
内连接(inner join)是通过匹配两个表中的共同字段来合并它们的行。当你使用 inner join 时,你可以使用 on 来添加条件,也可以使用 where 来添加条件。这两种方法都可以用来过滤结果集,但它们的使用方式略有不同。
使用 on 条件的内连接语法如下:
```
SELECT *
FROM table1
INNER JOIN table2
ON table1.column = table2.column
WHERE condition;
```
在这个语法中,on 条件用于指定两个表之间的关系,而 where 条件则用于对结果集进行过滤。on 条件必须在 inner join 后面指定,而 where 条件可以在查询的任何地方指定。
下面是使用 where 条件的内连接语法:
```
SELECT *
FROM table1
INNER JOIN table2
WHERE table1.column = table2.column
AND condition;
```
在这个语法中,where 条件用于指定两个表之间的关系和对结果集进行过滤。where 条件必须在 inner join 和表之间指定。
总的来说,使用 on 条件更加明确和易读,特别是当你需要同时使用多个连接时。但是,在某些情况下,使用 where 条件可能更加方便,特别是当你需要对连接条件进行复杂的逻辑运算时。
left join on后面加条件和逗号条件有什么区别
LEFT JOIN 后面加条件和逗号条件在使用时有一些区别。
1. LEFT JOIN 后面加条件:
在 LEFT JOIN 后面加条件是指在 ON 子句中使用额外的条件来筛选连接的结果。这样做的效果是先进行表连接,然后再根据条件过滤结果集。例如:
```
SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.id
WHERE table2.column = 'value';
```
这样的查询将首先进行表连接,然后再根据条件 `table2.column = 'value'` 来过滤结果集。只有满足条件的结果才会被返回。
2. 逗号条件:
使用逗号将多个表名直接列出来,不使用 ON 子句和额外的条件来进行连接。这种方式是隐式连接,相当于进行了内连接(INNER JOIN),连接的结果集是两个表中符合连接条件的行。例如:
```
SELECT *
FROM table1, table2
WHERE table1.id = table2.id;
```
这样的查询将直接对两个表进行内连接,只返回满足条件 `table1.id = table2.id` 的结果。
总体上说,LEFT JOIN 后面加条件可以实现更灵活的连接,可以根据需要对连接的结果进行进一步的筛选和过滤;而逗号条件只能进行简单的内连接,无法添加额外的筛选条件。
阅读全文