有这样的一个问题mySQL查询使用MysqL中left(right)join筛选条件在on与where查询出的数据是否有差异。
可能只看着两个关键字看不出任何的问题。那我们使用实际的例子来说到底有没有差异。
有这样的一个问题mySQL查询使用MysqL中left(right)join筛选条件在on与where查询出的数据是否有差异。
可能只看着两个关键字看不出任何的问题。那我们使用实际的例子来说到底有没有差异。
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">语句二的查询结果为:
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">发现两个查询存在差异。
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">为什么会存在差异,这和on与where查询顺序有关。
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">我们知道标准查询关键字执行顺序为 from->where->group by->having->order by[记得不是很清楚呢]
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">left join 是在from范围类所以 先on条件筛选表,然后两表再做left join。
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">而对于where来说在left join结果再次筛选。
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">第一sql语句查询过程如下等价于:
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">也就是我们上面看到的结果。
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">第二sql语句查询过程如下等价于:
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
挺诧异的吧和我们期望的结果不一样,并为筛选出AID=3的数据。
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">但是我们也发现 AID 与 中AID 1 于2对应的值为NULL,关联表只取了满足A表筛刷选条件的值。
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">即主表条件在on后面时附表只取满足主表帅选条件的值、而主表还是取整表。
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">查询后才连接应该把查询件
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
ottOM: 0px; MARGIN-TOP: 0px; MARGIN-BottOM: 0px; PADDING-TOP: 0px">
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。