SQL中过滤条件放在on和where中的区别

13 篇文章 2 订阅
4 篇文章 0 订阅

转自:https://blog.csdn.net/u013468917/article/details/61933994

join过程可以这样理解:首先两个表做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步的临时表再进行过滤。下面看实验:

1.  先执行inner join:

select * from person p inner join account a on p.id=a.id and p.id!=4 and a.id!=4;

select * from person p inner join account a on p.id=a.id where p.id!=4 and a.id!=4;

结果没有区别,前者是先求笛卡尔积然后按照on后面的条件进行过滤,后者是先用on后面的条件过滤,再用where的条件过滤。

2. 再看看左连接left join

select * from person p left join account a on p.id=a.id and p.id!=4 and a.id!=4;

这下看出来不对了,id为4的记录还在,这是由left join的特性决定的,使用left join时on后面的条件只对右表有效(可以看到右表的id=4的记录没了

select * from person p left join account a on p.id=a.id where p.id!=4 and a.id!=4;

where的过滤作用就出来了。。。

结果的关键原因就是 left join,right join,full join 的特殊性。

不管 on 上的条件是否为真都会返回 left 或 right 表中的记录,full 则具有 left 和 right 的特性的并集。

而 inner jion 没这个特殊性,则条件放在 on 中和 where 中,返回的结果集是相同的。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在SQL语句,`WHERE` 和 `ON` 都是用于过滤查询结果的条件语句。但它们两个的使用场景不同,在不同的情况下应该使用不同的语句。 `WHERE` 语句用于过滤单表查询的结果,即从单个表筛选数据。例如: ``` SELECT * FROM table_name WHERE column_name = value; ``` `ON` 语句则是在使用连接查询(如 `INNER JOIN` 或 `LEFT JOIN`)时使用的条件语句,用于确定哪些行在两个表之间进行连接。例如: ``` SELECT * FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name; ``` 因此,总的来说,`WHERE` 语句适用于过滤单表查询的结果,而 `ON` 语句则是在使用连接查询时用于确定连接行的条件语句。 ### 回答2: 在SQL,WHERE 和 ON 都是用来在查询过滤数据的关键字,但它们的使用场景和功能有所不同。 WHERE: WHERE子句用于在SELECT、UPDATE和DELETE语句,通过逻辑条件过滤出满足要求的数据行。它通常在FROM子句之后、GROUP BY子句之前使用。WHERE条件用于从表选择具有特定属性或满足特定条件的行。在WHERE子句,可以使用比较运算符、逻辑运算符和其他条件来定义过滤规则。 示例:SELECT * FROM 表名 WHERE 条件; ON:ON子句主要用于连接两个或多个表进行联接查询。它通常在FROM子句之后、JOIN子句之前使用。ON条件指定了表与表之间的关联条件,用于在连接操作时指定如何将两个表关联在一起。ON条件是在JOIN操作使用的,并指定连接操作所基于的列。 示例:SELECT * FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名; 总结: - WHERE子句用于在查询结果过滤行,取决于表的数据; - ON子句用于在连接操作指定关联条件,连接两个或多个表。 这两者的不同之处在于: - WHERE 是对从单个表选择行进行过滤; - ON 则是在连接操作时,将多个表的数据进行关联。 通过这两个关键字,我们可以有效地查询和过滤出我们所需的数据。 ### 回答3: 在SQL,"WHERE"和"ON"是用来过滤或连接数据的两种关键字,它们具有不同的作用和使用场景。 "WHERE"子句用于在查询过程筛选出符合特定条件的记录。当我们需要对表的数据进行条件过滤时,使用"WHERE"来指定条件。例如,我们可以使用"WHERE"来选择特定日期范围内的销售记录或者某个状态下的订单。"WHERE"通常出现在"SELECT"语句之后,"FROM"语句之前。 "ON"子句则用于在查询过程连接两个或多个表,它通常用于"JOIN"操作。它用于指定两个表之间的连接条件,通过匹配这些条件来合并相关的行。"ON"通常出现在"JOIN"语句之后,指定连接条件。例如,我们可以使用"ON"来连接两个表的共同列,根据这些列的匹配结果获取相关的数据。 区别在于,"WHERE"是用于筛选行的,而"ON"是用于连接表的。"WHERE"用于对单个表的数据进行条件过滤,而"ON"用于连接多个表并确定它们之间的关系。"WHERE"通常使用在"SELECT"语句,而"ON"通常使用在"JOIN"操作。 总结起来,"WHERE"和"ON"在SQL查询具有不同的作用和用途。"WHERE"用于过滤行,而"ON"用于连接表。它们的区别在于它们操作的对象(行还是表)以及它们的使用位置("WHERE"在"FROM"之后,"ON"在"JOIN"之后)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值