广告
返回顶部
首页 > 资讯 > 数据库 >sql连接查询语句中on、where筛选的区别是什么
  • 965
分享到

sql连接查询语句中on、where筛选的区别是什么

2024-04-02 19:04:59 965人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关sql连接查询语句中on、where筛选的区别是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。来看一个示例,有两张数据表,结构和

这篇文章将为大家详细讲解有关sql连接查询语句中on、where筛选的区别是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

来看一个示例,有两张数据表,结构和数据如图所示

表main

sql连接查询语句中on、where筛选的区别是什么

表ext

sql连接查询语句中on、where筛选的区别是什么

可以把这两张表看作是用来存放用户信息的, main放置主要信息,ext表放置附加信息,两张表的关系是1对1的,以id字符作为对应关系键。现在我们需要将地址不为杭州的所有用户信息筛选出来,结果中需要包含main表和ext表的所有字段数据。

select * from main left JOIN exton main.id = ext.id and address <> '杭州'

闭上眼睛, 请用大脑人肉运行一下这段SQL, 想象一下是什么结果。

sql连接查询语句中on、where筛选的区别是什么

当把address <> '杭州'这个筛选条件放在on之后,查询得到的结果似乎跟我们预料中的不同,从结果中能看出,这个筛选条件好像只过滤掉了ext表中对应的记录,而main表中的记录并没有被过滤掉,也就是上图中标记为红色的那条记录。outer join相对于inner join的一个主要特性就是以一侧的表为基础,但是在这里以左表为基这一点却可以无视筛选条件,这未免也太霸道了一些。

把查询语句稍微改动一下,将地址的筛选条件从on转移至where

select * from main left JOIN ext on main.id = ext.id where address <> '杭州'

结果就如我们预期的那样了

sql连接查询语句中on、where筛选的区别是什么

造成这种结果上的差异要从outer join查询的逻辑查询的各个阶段说起。

总的来说,outer join 的执行过程分为4步

      1、先对两个表执行交叉连接(笛卡尔积)

      2、应用on筛选器

      3、添加外部行

      4、应用where筛选器

就拿上面不使用where筛选器的sql来说,执行的整个详细过程如下

第一步,对两个表执行交叉连接,结果如下,这一步会产生36条记录(此图显示不全)

sql连接查询语句中on、where筛选的区别是什么

第二步,应用on筛选器。筛选器中有两个条件,main.id = ext.id and address<> '杭州',符合要求的记录如下

sql连接查询语句中on、where筛选的区别是什么

这似乎正是我们期望中查询的结果,然而在接下来的步骤中这个结果会被打乱

第三步,添加外部行。outer join有一个特点就是以一侧的表为基,假如另一侧的表没有符合on筛选条件的记录,则以null替代。在这次的查询中,这一步的作用就是将那条原本应该被过滤掉的记录给添加了回来

sql连接查询语句中on、where筛选的区别是什么

是不是不种画蛇添足的感觉, 结果就成了这样

sql连接查询语句中on、where筛选的区别是什么

第四步,应用where筛选器

在这条问题sql中,因为没有where筛选器,所以上一步的结果就是最终的结果了。

而对于那条地址筛选在where条件中的sql,这一步便起到了作用,将所有地址不属于杭州的记录筛选了出来

sql连接查询语句中on、where筛选的区别是什么

通过上面的讲解,已经能反应出在outer join中的筛选条件在on中和where中的区别,开发人员如能详细了解之中差别,能规避很多在编写sql过程中出现的莫名其妙的错误。

关于“sql连接查询语句中on、where筛选的区别是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: sql连接查询语句中on、where筛选的区别是什么

本文链接: https://www.lsjlt.com/news/56021.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sql连接查询语句中on、where筛选的区别是什么
    这篇文章将为大家详细讲解有关sql连接查询语句中on、where筛选的区别是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。来看一个示例,有两张数据表,结构和...
    99+
    2022-10-18
  • sql连接查询中on筛选与where筛选的区别
    sql查询这个东西, 要说它简单, 可以很简单, 通常情况下只需使用增删查改配合编程语言的逻辑表达能力,就能实现所有功能。 但是增删查改并不能代表sql语句的所有, 完整的sql功能会另人望而生畏。 就拿比...
    99+
    2022-10-18
  • mysql连接查询中and与where的区别是什么
    小编给大家分享一下mysql连接查询中and与where的区别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 建表CREATE TA...
    99+
    2023-06-20
  • MySQL查询条件中on和where的区别是什么
    今天就跟大家聊聊有关MySQL查询条件中on和where的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MySQL 语句执行顺序...
    99+
    2022-10-18
  • sql语句中where和having的区别是什么
    这篇文章主要介绍“sql语句中where和having的区别是什么”,在日常操作中,相信很多人在sql语句中where和having的区别是什么问题上存在疑惑,小编查...
    99+
    2022-10-18
  • SQL语句中LEFTJOIN的ON和WHERE有什么区别
    目录阐述left join的on和where的条件区别第一条SQL的过程第二条SQL的过程阐述 写SQL时本想通过 A left B join on and 后面的条件查出...
    99+
    2022-12-16
    SQL LEFT JOIN SQL LEFT JOIN ON SQL LEFT JOIN WHERE
  • SQL语句中LEFT JOIN的ON和WHERE有什么区别
    目录阐述left join的on和where的条件区别第一条SQL的过程第二条SQL的过程阐述 写SQL时本想通过 A left B join on and 后面的条件查出的两条记录变成一条,奈何发现还是有两条...
    99+
    2022-12-16
    SQLLEFTJOIN SQLLEFTJOINON SQLLEFTJOINWHERE
  • sql多表内连接查询使用的语句是什么
    这篇文章主要讲解了“sql多表内连接查询使用的语句是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“sql多表内连接查询使用的语句是什么”吧! ...
    99+
    2022-10-18
  • sql查询语句中用于实现选择运算的语法关键词是什么
    这篇文章主要介绍了sql查询语句中用于实现选择运算的语法关键词是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在sql的selec...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作