关于Oracle中的some/any/all
先创建一张变并插入几条测试数据:
create table card (id number(5),money number(5));
insert into card values(1,2000);
insert into card values(2,5000);
insert into card values(3,3000);
insert into card values(4,1000);
insert into card values(5,1500);
1.some和any
一般情况下,some和any用法等同,类似于or的意思,选择结果集中的任意一个进行比较。
而不同的是some用于等值比较(=),而any可以用于不等值比较(>,<),如果用=any的话,就和用in是一样。
>any 表示比最小的还大
select * from card where money >any(6000,2000,4000);
得到的结果:
id money
2 5000
3 3000
分析:SQL的意思是查询卡中的钱比(6000,2000,4000)中最小的也就是2000还大的卡的信息。
<any 表示比最大的还小
select * from card where money <any(6000,2000,4000);
得到的结果是表中的所有数据都查询出来了。
分析:该sql也就是查询(6000,2000,4000)中比最大的值也就是6000还小的数,当然表中的所有数据money都比6000小,所以都查询出来了
=some 表示和结果集中的某一个相等
select * from card where money =some(6000,1000,4000);
select * from card where money =any(6000,1000,4000);
select * from card where money in (6000,1000,4000);
分析:这三条表示的含义一样
2.all
>all 表示大于结果集中的所有(比最大的还大)
select * from card where money >all(3000,1000,4000);
得到的结果:
id money
2 5000
分析:>all表示比(3000,1000,4000)中最大的也就是4000还大的,当然就一条数据了<all 表示比最小的还小
select * from card where money <all(3000,2000,4000);
结果:
id money
4 1000
5 1500
分析:比(3000,2000,4000)中最小的值也就是2000还小的就只有两条数据