购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3.1 模糊查询的适用场景

通过学习前面的内容,相信同学们会感受到:实现精确过滤的前提是提供一个准确的过滤条件。例如,如果我们想从Spice表中筛选出与香草荚有关的信息,那么对应的SQL语句就是这样的:

没错,过滤条件在我眼中就是一个标记,它会告诉我该匹配什么样的关键词,进而定位到它所在的行。可如果你无法给我一个准确的过滤条件,还想让我去表中翻箱倒柜找点东西出来的话,那么你就该学习一下模糊查询了,否则我可弄不明白你究竟在说些什么。事实上,通过以下3个场景,你就会知道这种情况并不在少数……

场景一

阿里巴巴在解决掉四十大盗以后,已经累得精疲力竭。然而和大部分普通人一样,这位瘦弱的阿拉伯少年在巨大财富的诱惑下被逼成了一个巨人。于是他走进马厩,唤醒了那头客居于此的驴子,连夜赶往隐匿在沙漠中的“中央银行”。没错,到时候他只需要说出口令(你我都知道的口令)就能肆意享受荣华富贵了。然而上天似乎存心要跟他开个玩笑,因为阿里巴巴突然忘记了完整的口令,他只依稀记得一句“芝……开门”。

瞧,其实阿里巴巴渴望回忆起的口令就好比一个过滤条件,而那扇等待有缘人开启的石门就好比MySQL。不过根据目前的情况来看,口令既可以是“芝麻开门”也可以是“芝士开门”。但无论怎样,阿里巴巴一定希望仅通过这句模棱两可的口令就博得石门的同情。

同样的道理,假如我们不记得“香草荚”的全名,而只记得其中含有的部分字段,比如“香草”或“荚”,我们也会希望MySQL通过这些字段就能返回相关信息。

场景二

伴随着温暖洋流的到来,大批沙丁鱼像往年一样再次涌入了东南海域。船长爱德华兹和其他的渔民一样,必须抓紧时间,争取在鱼汛期捕获更多的“银行卡余额”。然而爱德华兹驾驶的“沐光之城”号却给他下了绊子。事实上,这艘老式渔船看起来更像一台陈列在博物馆里的时光机。现在已经是上午十点了,“沐光之城”才磕磕绊绊地驶出昆卡港。此时爱德华兹望着平静的海面感慨道:“我真希望就在这里把沙丁鱼一网打尽,而不用再跑到远处的角落去逐一撒网……”

无独有偶,有时我们的目标信息就像游离状态的沙丁鱼,它们躲藏在各个角落,等待着被一网打尽。举个例子来讲,'monkey'、'comonomer'和'almon'是3个独立的字符串,可以看到,它们含有共同字段'mon'。根据之前所学,大家会知道,如果我们要同时检索出这3个字符串对应的行,就要使用操作符OR:

也就是说,我们要把这3个字符串都当作过滤条件才能返回相应的信息。然而这样的查询方式很麻烦。在这种情况下,我们就可以使用模糊查询,且只需使用共同字段'mon'进行过滤即可。

场景三

今天是百无聊赖的星期六,理查德·布克抱着“看看也无妨”的心态去参观了一次年度车展。展厅里那些搭载V8和W12引擎的跑车让理查德感到头晕目眩,这也为他提供了做梦的素材:“究竟哪一辆更适合我呢?”

我相信在理查德的内心深处,他一定拒绝做出选择,因为那会限制他的想象空间。同样的道理,其实在有些情况下,我们也许根本不希望指定过于明确的过滤条件,并执行严格的筛选操作。因为多一些返回信息,我们就会多一些选择和参考。也就是说,检索信息并不总是要以精确过滤(选择)为前提的。

通过以上3个场景,相信同学们可以感受到,若无法给MySQL一个准确的过滤条件,不管是出于无意还是有意,都与我们当时所处的情况及查询信息的目的有关。因此,掌握模糊查询就显得尤为重要。其实简单来讲,模糊查询就是利用“信息片段”进行过滤,也就是将“信息片段”加工成过滤条件来使用。

接下来,我们将为大家介绍两个用来引导模糊查询的关键词LIKE和REGEXP,以及它们的相关用法。 U/WCnBE82Emw5UsaHYabWhzBat1lxf/wV1lK2DB2UoQXtka2MxzOG5/wwuQbJm1L

点击中间区域
呼出菜单
上一章
目录
下一章
×