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

3.1.1 初识WHERE从句

今天是如约而至的星期六,李乔丹一大早就从床上跳了起来。对于满怀期待的人来讲,做到这一点可不需要闹钟的帮助,而李乔丹的期待就装在他的电子邮箱中。

不过这位年轻人还不知道,此时有一个坏消息和两个好消息在等着他。第一个好消息是,那位名叫Zoe的女孩回复他了,而坏消息和另一个好消息都在Zoe回复的邮件里。下面,就让我们看看Zoe在邮件中都说了些什么。

瞧,Zoe表示她没法和李乔丹一起去看电影了,因为她要去参加一个海滩派对。不过李乔丹的运气也不算太差,因为另一位名叫“Grace”的女孩正满怀期待地等待着他的邀请。而且据说她酷似苏菲·玛索,这让李乔丹神往不已!没错,这就是敢于尝试的收获!

可是现在有一个问题摆在李乔丹的面前,他要怎样做才能准确找到这位Grace的联系方式呢?要知道,这可是浪漫约会的起点啊!

没办法,我貌似只能逐条寻找。不过好在表中的数据并不是太多。我想这一定是爱情对我的考验,伙计,你说呢?

要我说,这可不是什么好方法。请大家想象一下,如果联络清单中有成千上万行数据,那么逐一查看未免显得有些笨拙。这就好比不使用目录去查阅字典。也许等李乔丹找到Grace的联系方式以后,她已经被别人“捷足先登”了,毕竟酷似苏菲·玛索的女孩可不会缺少约会对象。

在这种情况下,为了抓紧时间,我们就需要对表中的数据进行过滤。事实上,在SQL语句的日常使用中,数据过滤的使用频率几乎仅次于信息检索。在大部分检索语句中,我们都会事先对表中的数据进行过滤。话说回来,数据过滤究竟是怎么一回事呢?

事实上,如果我们把拍摄一张照片理解为按下相机快门去捕捉光影,那么数据过滤就是事先对符合条件的目标行进行捕捉。下面我们来看看李乔丹的问题该如何解决。前面提过,MySQL并不区分大小写,所以这里我们先以名字“Grace”为条件进行过滤。至于如何能按照大小写精准过滤,我们先留个悬念。

瞧好了,一年级新生,数据过滤的指令一般通过关键词WHERE发出——WHERE name='Grace'。它就像一张网,能够迅速完成对目标行的捕捉!事实上,例句(1)传递给我的指令是,在name列中,找到限定词Grace,然后返回它所在的整行信息。

通过MagicSQL的讲解,相信同学们可以感受到,虽然从表面上看,WHERE从句WHERE name='Grace'的捕捉对象是'Grace'这样一个字段,但它的实际捕捉对象是字段所在的整行信息。也就是说,'Grace'只是一个用来定位的标记。

没错,这也是我们在SELECT后使用通配符“*”的原因,就是为了让同学们可以看到完整的过滤结果:MySQL将Contact表中不符合条件的行过滤掉了,符合条件的行自然就留在了“网”中。所以,这是一种通过过滤实现的筛选操作。

那么读到这里,同学们就会知道,其实所谓的数据过滤,就是一个赶在检索之前对整张表进行信息筛选的操作。而且它的操作对象同样是行,这与第2章学习的ORDER BY、LIMIT和DISTINCT类似。但是请大家注意,ORDER BY、LIMIT和DISTINCT,它们的操作对象是输出行,因为它们的执行顺位均在SELECT之后。然而,WHERE的操作对象一般是表中的完整行,因为WHERE的执行顺位先于SELECT。准确来讲,MySQL执行WHERE从句的时机,是在FROM之后、SELECT之前。因此,目前已知关键词的执行顺序为:

至于WHERE从句本身,它只是我们用来传达过滤要求的载体而已,也就是一条传递过滤要求的指令,或者说是一个条件表达式:

细致来看,过滤要求一般由过滤条件、列名和比较运算符组成,它们三者都非常重要,只有同时书写无误才能实现准确筛选。

在这个案例中,“Grace”就是过滤条件。事实上,一个过滤条件就是一个限定词,或者说是一个定位标记。如果我们错误地写成WHERE name='Garce',那就可能返回其他女孩的个人信息(碰巧有人叫这个名字),或者不返回信息(这个名字无人认领)。

接着,“name”是过滤条件所属列的列名,如果我们进行了错误的归类,例如WHERE age='Grace',那么将不会有信息返回,因为age列记录的是年龄,其中不含有“Grace”这类姓名信息。

而“=”则是一个比较运算符,它的匹配逻辑是“符合”。事实上,“=”几乎是使用最为频繁的比较运算符。如果我们把过滤条件和列名的作用定义为“找什么”及“在哪里找”,那么比较运算符的作用就是定义“通过何种方式来找”,即定义过滤的方式。

好了,现在就请大家自己动手执行例句(1)。当然,你也可以变换花样来寻找你心仪的女孩。 4BPqTj5InaBCuCizs9zPXm3YXqgaHb6cPLdAEe86ZMEWGvMAs8MUDS3uvsjzI6SO

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