美文网首页
SQL中联合查询条件和过滤条件的区别

SQL中联合查询条件和过滤条件的区别

作者: lokamir | 来源:发表于2021-05-18 10:11 被阅读0次

一个一直我困扰很久的问题,SQL语句中这两种写法有什么区别吗?

select * from a,b  where a.id = b.id
select * from a inner join b on a.id =b.id

查询结果是一样的
那么,连接查询join后的限制条件 on 和where又有什么区别呢?
用left join做实验比较清楚

select * from a,b where a.id between 1000 and 2000
select * form a left join b on a.id between 1000 and 2000

可以看到
第一句SQL查询了所有a表,b表查询项目仅限于1表中a.id在1000~2000之间的,on关键字筛选了a表的结果将b表连接到了与a表结果匹配的行
如果要得到等同于第一句的SQL
需要再添加where条件

select * from a,b where a.id between 1000 and 2000
select * form a left join b on a.id between 1000 and 2000 where a.id between 1000 and 2000

另外一点发现:
对于left join,不管on后面跟什么条件,左表的数据全部查出来,因此要想过滤需把条件放到where后面。
where条件是在联合条件临时表生成好后,再对临时表进行过滤的条件,如果过滤的是左连接的主表,则没有问题,如果过滤的是左连接的从表,那前面的left join 就没有了意义,查询等同于inner join;

过滤条件放在 where后面:是先连接然生成临时查询结果,然后再筛选
过滤条件放在 on后面:先根据条件过滤筛选,再连,生成临时查询结果

相关文章

  • SQL中联合查询条件和过滤条件的区别

    一个一直我困扰很久的问题,SQL语句中这两种写法有什么区别吗? 查询结果是一样的那么,连接查询join后的限制条件...

  • NSPredicate条件查询和过滤

    NSPredicate用于查询和过滤在SQL中作为查询条件通常用WHERE,但在COREDATA中作为查询条件就可...

  • [IOS开发]CoreData条件查询之NSPredicate应

    NSPredicate用于查询和过滤在SQL中作为查询条件通常用WHERE,但在COREDATA中作为查询条件就可...

  • NSPredicate用于查询和过滤

    NSPredicate用于查询和过滤 在SQL中作为查询条件通常用WHERE,但在COREDATA中作为查询条件就...

  • Condition Filtering条件过滤

    Condition Filtering条件过滤 本文主要介绍MySQL查询优化中的条件过滤(Condition F...

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

    今天接到蚂蚁金服的电面,问了sql中过滤条件放在on和where中的区别,当时满脑子是inner join,觉得没...

  • NSpredicate

    用途:谓词,可以指定过滤器的条件,用于对集合里面的元素进行筛选;也可以定义模糊查询的条件,用于模糊查询。类似SQL...

  • Flink 1.12 的bug吗?

    where 条件中 包含 OR 和 IS NULL 的 SQL 过滤会失效 。 例如: select * fr...

  • hibernateQuery

    使用Query接口 Hql 条件查询 hql与sql语句对比及查询步骤 查询全部 条件查询>索引占位符 条件查询...

  • hibernate中的查询

    HQL 查询所有 条件查询 分页查询 Criteria 查询所有 条件查询 分页查询 查询总记录 原生SQL

网友评论

      本文标题:SQL中联合查询条件和过滤条件的区别

      本文链接:https://www.haomeiwen.com/subject/edsejltx.html