Any演算子とAll演算子

 AccessにはIn演算子というものがあり、値がリスト内のいずれかに当てはまるかどうかを判定することができます(参考:Access演算子一覧)。これと似たようなはたらきをするものとしてAnyとAllがあります。他の演算子(>や<=など)と共に用いて、サブクエリが返す値のいずれか(Any)またはすべて(All)について条件を満たすかどうかを判定することができます。
 クエリの式ビルダ―などでも出てきませんし、使える場合でも普通は他の方法で済みますのであまり使う機会はありませんが、具体例を紹介します。

f:id:accs2014:20180121100132p:plain:right:w400

 例としてこのようなテーブルを用います。


f:id:accs2014:20180121100120p:plain:right:w500

 クエリのデザインビューです。
 年俸列の抽出条件欄に、次のように記入します。



>Any (SELECT 年俸 FROM 選手テーブル)

 Anyは、サブクエリ内が返す値のいずれかが、比較演算子(>)の条件を満たすかどうかを判定します。
 つまりこの抽出条件は「年俸が、テーブル内のいずれかの選手よりも大きい」ことを表しています。言い換えれば「年俸が最も低い選手を除く」ということになります。


f:id:accs2014:20180121100116p:plain:right:w400

 データシートビューです。年俸が最も低い者(選手番号4、年俸400000)が除かれているのが分かります。


f:id:accs2014:20180121100112p:plain:right:w500

 次に、年俸列の抽出条件欄に次のように記入します。



>=All (SELECT 年俸 FROM 選手テーブル)

 Allは、サブクエリ内が返す値のすべてが、比較演算子(>=)の条件を満たすかどうかを判定します。
 つまりこの抽出条件は「年俸が、テーブル内のすべての選手以上である」ことを表しています。言い換えれば「年俸が最も高い選手」ということになります。


f:id:accs2014:20180121100105p:plain:right:w400

 データシートビューです。年俸が最も高い(24000000)者のみが抽出されています。


 さて、どうしてもAnyやAllでないとダメというような使用例は恐らくありませんので知らなくても困りませんが、難しいものでもありませんので覚えておいて損はないと思います。
 ところで、Inは「In(100,400,700)」といったようにカッコ内にカンマ区切りリストを記入して用いることができましたが、AnyとAllではできません。カッコ内に記入できるのはサブクエリだけなので注意が必要です。