• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL的10件事—它们也许和你预想的不一样_MySQL

mysql 搞代码 4年前 (2022-01-09) 25次浏览 已收录 0个评论

#10. 搜索一个“NULL”值

<ol class="dp-sql"><li class="alt"><span><span class="keyword"><strong><font color="#006699">SELECT</font></strong></span><span>  *  </span></span></li><li><span class="keyword"><strong><font color="#006699">FROM</font></strong></span><span>    a  </span></li><li class="alt"><span class="keyword"><strong><font color="#006699">WHERE</font></strong></span><span>   a.</span><span class="keyword"><strong><font color="#006699">column</font></strong></span><span> = </span><span class="op"><font color="#808080">NULL</font></span><span> </span></li></ol>

在SQL中,NULL什么也不等于,而且NULL也不等于NULL。这个查询不会返回任何结果的,实际上,当构建那个plan的时候,优化器会把这样的语句优化掉。

当搜索NULL值的时候,应该使用这样的查询:

<ol class="dp-sql"><li class="alt"><span><span class="keyword"><strong><font color="#006699">SELECT</font></strong></span><span>  *  </span></span></li><li><span class="keyword"><strong><font color="#006699">FROM</font></strong></span><span>    a  </span></li><li class="alt"><span class="keyword"><strong><font color="#006699">WHERE</font></strong></span><span>   a.</span><span class="keyword"><strong><font color="#006699">column</font></strong></span><span> </span><span class="keyword"><strong><font color="#006699">IS</font></strong></span><span> </span><span class="op"><font color="#808080">NULL</font></span><span> </span></li></ol>

#9. 使用附加条件的LEFT JOIN

<ol class="dp-sql"><li class="alt"><span><span class="keyword"><strong><font color="#006699">SELECT</font></strong></span><span>  *  </span></span></li><li><span class="keyword"><strong><font color="#006699">FROM</font></strong></span><span>    a  </span></li><li class="alt"><span class="func"><font color="#ff1493">LEFT</font></span><span> </span><span class="op"><font color="#808080">JOIN</font></span><span> </span></li><li><span>        b  </span></li><li class="alt"><span class="keyword"><strong><font color="#006699">ON</font></strong></span><span>      b.a = a.id  </span></li><li><span class="keyword"><strong><font color="#006699">WHERE</font></strong></span><span>   b.</span><span class="keyword"><strong><font color="#006699">column</font></strong></span><span> = </span><span class="string"><font color="#0000ff">'something'</font></span><span> </span></li></ol>

除了从a返回每个记录(至少一次),当没有真正匹配的记录的时候,用NULL值代替缺失的字段之外,LEFT JOIN和INNER JOIN都是一样的。

但是,在LEFT JOIN之后才会检查WHERE条件,所以,上面这个查询在连接之后才会检查column。就像我们刚才了解到的那样,非NULL值才可以满足相等条件,所以,在a的记录中,那些在b中没有对应的条目的记录不可避免地要被过滤掉。

从本质上来说,这个查询是一个INNER JOIN,只是效率要低一些。

为了真正地匹配满足b.column = ‘something’条件的记录(这时要返回a中的全部记录,也就是说,不过滤掉那些在b中没有对应的条目的记录),这个条件应该放在ON子句中:

<ol class="dp-sql"><li class="alt"><span><span class="keyword"><strong><font color="#006699">SELECT</font></strong></span><span> <a>本文来源gao($daima.com搞@代@#码8网^</a> *  </span></span></li><li><span class="keyword"><strong><font color="#006699">FROM</font></strong></span><span>    a  </span></li><li class="alt"><span class="func"><font color="#ff1493">LEFT</font></span><span> </span><span class="op"><font color="#808080">JOIN</font></span><span> </span></li><li><span>        b  </span></li><li class="alt"><span class="keyword"><strong><font color="#006699">ON</font></strong></span><span>      b.a = a.id  </span></li><li><span>        </span><span class="op"><font color="#808080">AND</font></span><span> b.</span><span class="keyword"><strong><font color="#006699">column</font></strong></span><span> = </span><span class="string"><font color="#0000ff">'something'</font></span><span> </span></li></ol>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL的10件事—它们也许和你预想的不一样_MySQL

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址