数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用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中,返回的结果集是相同的。
REFS:https://blog.csdn.net/u010368749/article/details/59482870
相关推荐
当我们涉及到LEFT JOIN时,可能会遇到使用ON和WHERE子句的情况,两者虽然都可以用来指定条件,但在语义上有所区别。 首先,ON子句是在生成联接结果集(临时表)时应用的条件。无论ON条件是否为真,都会返回左表的...
### left join 过滤条件写在on后面和写在where 后面的区别 在SQL查询语句中,连接(JOIN)是一种非常重要的操作,用于从两个或多个表中获取数据。其中,`LEFT JOIN`是一种常用的连接类型,它返回左表的所有记录以及...
然而,在使用`LEFT JOIN`时,我们可以在`ON`子句和`WHERE`子句中放置条件,这两者之间存在一些关键区别。 首先,我们要理解`ON`和`WHERE`的优先级。`ON`的优先级高于`WHERE`。在执行`LEFT JOIN`时,数据库会先根据`...
当我们设置LEFT JOIN的条件时,可以在ON和WHERE子句中指定,但它们之间存在一些关键区别。 首先,理解ON子句的作用至关重要。ON子句中的条件是在连接左右两表时使用的,它定义了两个表之间的关系。在这个例子中,`...
在SQL查询中,`ON` 和 `WHERE` 子句都是用于设置筛选条件,但它们在`JOIN`操作中有着不同的作用和位置。理解这两者的区别对于编写高效的SQL语句至关重要,尤其是在处理复杂的多表查询时。 首先,我们来看一下MySQL...
在LEFT JOIN中,ON和WHERE的差异在于ON的条件影响的是连接的逻辑,而WHERE的条件则是在连接后对结果集进行过滤。 接下来,让我们看看INNER JOIN。INNER JOIN只返回那些在左右两个表中都有匹配记录的行。对于SQL语句...
关于JOIN条件的放置,JOIN语句通常包含ON子句来定义连接条件,而WHERE子句用于过滤结果。当JOIN包含多个等值匹配条件时,理论上所有条件都可以写在ON子句内,这样做可以更清晰地表明连接逻辑。然而,将某些条件移到...
此外,优化JOIN操作对于提高查询性能也至关重要,比如通过使用索引、避免全表扫描和合理设计JOIN条件等方法。在PL/SQL Developer这样的开发环境中,可以方便地测试和比较不同的JOIN类型,以便更好地理解和利用它们的...
在SQL查询中,ON和WHERE子句都可以放置匹配条件,但它们的作用有所不同。ON用于指定JOIN操作的条件,而WHERE则过滤最终结果集。在JOIN操作中,最佳实践是将所有的JOIN条件写在ON子句中,而WHERE用于处理不涉及JOIN的...
- `WHERE`子句的放置位置很重要,当`WHERE`条件放在`ON`之后,它会应用于已经联接后的结果,而不是原始的表。 - 在实际应用中,应根据查询需求选择合适的连接类型,以获取最准确和最相关的结果。 通过理解内连接...
在这个案例中,问题在于过滤条件没有正确地放在外连接的ON子句中,而是被放在了主查询的WHERE子句里,这导致了查询效率降低,从而影响了网页加载速度。 正确的做法是将与外连接相关的过滤条件移到ON子句中。例如,...
ON子句用于设置连接条件,当两张表之间没有共享的列时,可以使用ON子句来定义连接条件。 ```sql SELECT * FROM emp e JOIN salgrades s ON (e.sal BETWEEN s.losal AND s.hisal); ``` #### 二、外连接 外连接是指在...
### 支付宝Java工程师笔试题解析 #### 智力部分 1. **烧绳问题** **题目:** 烧一根不均匀的绳子需要一个小时,如何利用这... 这种方式利用了索引加速连接操作,并通过`LEFT JOIN`和`WHERE`条件有效地过滤出了结果。
ON、WHERE、HAVING条件的放置顺序也有讲究,应将过滤效果最好的条件放在前面。主键相关条件应置于WHERE条件前列,然后按照=, <, >, , LIKE, IN的顺序排列。ORDER BY应根据索引字段进行,否则需要在程序中进行排序。...
以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。 ------------------------------------------------------------- Recordset属性 adOpenForwardOnly adOpenKeyset ...
- 外联接(OUTER JOIN):分为左外联接(LEFT OUTER JOIN)、右外联接(RIGHT OUTER JOIN)和全外联接(FULL OUTER JOIN),分别返回左侧表、右侧表以及两个表的所有行。 - 交叉联接(CROSS JOIN):返回两个表的笛卡尔积。 ...
- 将连接条件放置在ON子句中,筛选条件放在WHERE子句中,有助于区分逻辑。 - GROUP BY和HAVING用于分组和筛选分组后的结果,常用于统计分析。 - ORDER BY用于对查询结果进行排序。 例如,查询部门员工数量超过3的...
FROM 表名1 [INNER|LEFT|RIGHT|FULL JOIN 表名2 ON 条件] [WHERE 条件];` - **示例**: 查询`employees`表与`departments`表中的相关信息。 ```sql SELECT e.first_name, e.last_name, d.department_name FROM ...