トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

2-2-13 any述語とall述語の使い道


SQL

select a,b,c,d,
case when a  = all(b,c,d) then 1 else 0 end as "all",
case when a != any(b,c,d) then 1 else 0 end as "any"
from (select 0 as a,0 as b,0 as c,0 as d from dual
union select 0,0,0,1 as d from dual
union select 0,0,1,0 as d from dual
union select 0,0,1,1 as d from dual
union select 0,1,0,0 as d from dual
union select 0,1,0,1 as d from dual
union select 0,1,1,0 as d from dual
union select 0,1,1,1 as d from dual
union select 1,0,0,0 as d from dual
union select 1,0,0,1 as d from dual
union select 1,0,1,0 as d from dual
union select 1,0,1,1 as d from dual
union select 1,1,0,0 as d from dual
union select 1,1,0,1 as d from dual
union select 1,1,1,0 as d from dual
union select 1,1,1,1 as d from dual);


解説

a = all(b,c,d)
というall述語の使い方は、
SQLを短くできることが結構あります。

■■■■■■■■■■■■■■■■■■■■■■■■■
他の使用例その1

ColA= 10 and ColB = 10 and ColC = 10
を下記に変形
10 = all(ColA,ColB,ColC)

■■■■■■■■■■■■■■■■■■■■■■■■■
他の使用例その2

ColA < 20 and ColB < 20 and ColC < 20
を下記に変形
20 > all(ColA,ColB,ColC)

■■■■■■■■■■■■■■■■■■■■■■■■■
他の使用例その3

ColA < 30 or ColB < 30 or ColC < 30
を下記に変形
30 > any(ColA,ColB,ColC)