今天是晴转雨的星期二,是阿拉丁豆子铺进货的日子。满满一箩筐豆子通过马车运送而来。按照常理来讲,一般只需要卸货、验货,然后安德鲁(Andrew)和奥兰多(Orlando)就可以早早下班了。不过今天可不行。
“山里雨下得太大,马车在约瑟夫种植园差点栽了跟头!幸亏老约瑟夫及时拽住了缰绳,不然货就全完了!”马车夫韦恩比先生一边擦拭身上的雨水,一边诉说当时的情况,“放心吧,小伙子们,豆子没有受损,只是箩筐里混进了一些弗士多订购的香料。”
“看来我们有活儿干了,老兄。”奥兰多仔细瞧了瞧箩筐里的货物,摊开手表示。
“是啊,明天一早蜂蜜公爵的伙计就会上门来取巴尔干甜豆,所以最好今天就把它们挑拣出来。”安德鲁顺手从箩筐里挑出一枚胡桃大小的豆子塞给奥兰多,“你瞧,优质的巴尔干甜豆必须同时满足两个条件:首先是颜色呈黑色,越深越好;其次是形态呈鸭嘴形。蜂蜜公爵只要这种上等的甜豆。”
“这我知道,安德鲁。黑色仅代表豆子处于成熟期,只有糖分积累到了一定程度,它们才会变成鸭嘴形。”奥兰多回答道。
“没错,但可别把罗蒙水产的甜豆拿给他们。那种水培的豆子只能晒干以后碾磨当染料。”安德鲁一边说,一边撸起袖子,看样子他很赶时间,“今晚的舞会我可不能迟到,丹妮尔会不高兴。所以最迟七点半,我就要到小广场和她碰面。”
“天啊!瞧瞧这一大箩筐豆子,要是我会魔法就好了。念一条咒语,再挥舞一下魔杖,豆子就齐刷刷地蹦出来!”奥兰多憧憬地望着地上掉落的几根扫帚枝说。
“是啊,它们最好还能跳着踢踏舞自己走进蜂蜜公爵家的大门。”安德鲁打趣地说。
“明天我去找彭派特打听一下‘快速念咒’的函授课程,他们的广告看起来还挺像一回事的。”说完,奥兰多就把手伸进了箩筐……
相信很多人都有过类似的幻想,念一条不那么冗长的咒语,再优雅地挥舞一下魔杖,就能实现手起刀落、立竿见影的效果。事实上,这种操作方式并不只是幻想。只要大家有想象力就会发现,其实我们学习SQL就是在做这样的事情,不信就接着往下看。
现在我们已经把箩筐里的所有豆子信息,整理到了一张名叫“Spice”的表中。当然了,箩筐里还混入了少量香料。第一步,我们要检索出整张表中含有的全部信息:
大家可以看到,表中记录的主要信息包括序号(No.)、名称(name)、颜色(color)、形态(status)和供应商(supplier)。
想必同学们都还记得,安德鲁和奥兰多现在只准备挑选出优质的巴尔干甜豆,而优质的巴尔干甜豆必须同时满足两个条件:颜色为黑色,形态为鸭嘴形。所以,在书写WHERE从句时,它们会对应两个过滤要求:color='黑'、status='鸭嘴'。
此时的WHERE从句还不完整,事实上,其中还缺少一个用来协调两个过滤要求的逻辑操作符。那么现在,我们将分别使用AND和OR,查看安德鲁和奥兰多各自的挑选结果:
瞧,只有安德鲁在按照要求挑选,而奥兰多似乎还沉浸在成为魔法师的幻想中。因为在同样的过滤要求下,奥兰多挑选出了更多的品类。
没错,其实单从这一点来看,我们就可以判断出:AND协调的过滤机制更加严格(返回的信息更少),而OR则较为宽松(返回的信息更多)。
正是如此!我们不妨在此先假设一个情景,简单地为大家讲解AND和OR之间的区别。
如果AND和OR两兄弟一起去大都汇服装店买衣服,且他们的挑选要求都为“蓝色”和“套头衫”。那么生性节俭的AND的挑选结果就只会是“蓝色的套头衫”,而OR可不会这样谨慎,因为他会更加招摇地挥舞着支票,一边把“蓝色”的衣服全都挑选出来,另一边把款式为“套头衫”的衣服照单全收。