事实上,AND协调的过滤机制是同时满足。细致来讲,AND会将前后连接的过滤要求合并为一个整体,只有同时满足的行才会被返回并显示。
也就是说,当MySQL在执行“WHERE color='黑'AND status='鸭嘴';”时,它会对整张Spice表中的数据进行两次过滤,并且对两次过滤效果进行叠加。第一次过滤是根据“color='黑'”进行的,将颜色为黑色的品类全部挑选出来。
而第二次过滤则是在第一次过滤的基础上,再根据“status='鸭嘴'”进行的。所以最终锁定的结果就是颜色为黑色且形态呈鸭嘴形的优质巴尔干甜豆。
读到这里,同学们就会清楚:AND会在前一个过滤结果的基础上再进行后续的过滤操作。这也正是AND机制更加严格的原因。
至于OR,它实际上是将例句(3)拆分成了A、B两条检索语句。同学们可以看到,这两条检索语句都只含有一个过滤要求:
接着,MySQL会让A、B两句独立执行,再将两项过滤结果合并并返回。事实上,这正是例句(3)返回更多信息的原因所在:
A句返回的结果
B句返回的结果
合并结果(去重后)
现在请同学们注意观察合并结果(例句(3)的返回结果)。事实上,A句的返回结果正是被标注为绿色的行,而B句的返回结果则是被标注为红色的行。大家可以看到,A句只管把颜色为黑色的品类给找出来,至于它们的形态是什么,它并不关心;而B句则刚好与A句相反,它在乎的只是形态,也就是说,B句只管找出鸭嘴形的品类,至于该品类是什么颜色的,它可不在乎。所以,读到这里,同学们就会清楚,AND协调的过滤机制是同时满足,而OR协调的过滤机制则是分别满足。
除此以外,相信同学们都注意到了,A句返回了4行信息,B句返回了2行信息,请注意观察返回信息对应的No.列主键位。而在合并结果中,却只有5行信息。没错,这是因为A、B两句的过滤结果都包含No.为107的这行信息,且这行信息同时满足A、B两句的过滤要求(使用AND返回的行)。所以,在合并结果中它仅需出现一次。也就是说,MySQL会在合并结果返回前,对同时满足过滤要求的重复行进行去重。这也是使用OR的一个特点。