MySql_Some、Any、All的用法

  1. 一、介绍
    1. 1.1 All
    2. 1.2 Some/Any
    3. 1.3 其他
      1. 1.3.1 “=ANY”与”IN”相同
      2. 1.3.2 “<>ALL”与”NOT IN”相同

一、介绍

他们都需要配合=、>、<、<=、>=、<>来联合使用。

因此为了更好介绍,需要提前准备好测试数据。

create table master_table (
num int
);

create table test_table (
num int
);
insert into master_table values (1), (2), (3), (4), (5);
insert into test_table values (2), (3), (4);

数据如下:

+------+
| 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

SomeAny相同,与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无法满足条件,因为从库中的任意一项都比他们大。

1.3 其他

1.3.1 “=ANY”与”IN”相同
1.3.2 “<>ALL”与”NOT IN”相同