一、介绍
他们都需要配合=、>、<、<=、>=、<>
来联合使用。
因此为了更好介绍,需要提前准备好测试数据。
|
数据如下:+------+
| num |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
+------+
| num |
+------+
| 2 |
| 3 |
| 4 |
+------+
1.1 All
使用在查询过程中where
之后使用,完成主表中每项数据在从表中所有的数据进行对比,对比成功则为true
。
看看sql:select * from master_table WHERE num > all (select * from test_table);
+------+
| num |
+------+
| 5 |
+------+
先分析,主表第一项1
与从表中的每一项(All)进行比较,并且每一项都必须满足OP(=、>、<、<=、>=、<>
),满足后则该项1
判断为true
;相反,如果从表中有一项无法满足,则返回该项判断为false
。
那么这里的第一项1
,与从表中每一项对比,都是小于2、3、4
,所以该项判断为false
;再来看4
,虽然4
大于1、2、3
,但是在对比4、5
的时候无法满足,因此也判断为false
;最后只有5
比从表中所有项都大,因此通过判断为true
。返回为5
。
作为对比,看看下面的sql:select * from master_table WHERE num < all (select * from test_table);
+------+
| num |
+------+
| 1 |
+------+
根据上面的分析不难看出,只有1
才能满足小于从表中所有数据。
1.2 Some/Any
Some
和Any
相同,与All
相反,大致过程是在和从库中的数据开始一一对比的过程中,只要从库中有一项满足了对比条件,就返回true
;否则返回false
。
看看sql:select * from master_table WHERE num > some (select num from test_table);
select * from master_table WHERE num > any (select num from test_table);
+------+
| num |
+------+
| 3 |
| 4 |
| 5 |
+------+
对比过程中,主库的1、2
无法满足条件,因为从库中的任意一项都比他们大。