Microsoft Access Club >SQL入門講座 >このページ >次頁 < 前項  サイト内検索
 

比較演算子を用いて条件をまとめる - ANY句 : SQL入門講座



IN句は、複数の条件をカンマ(,)切りで並列に並べるだけでデータ抽出が行える便利な演算子ですが、データ抽出の対象となるフィールドに対して常にイコール(=)の関係になってしまう欠点があります。これを比較演算子を用いた比較的幅の広い抽出を行うには、ANY句を用い ると便利です。他の参考書では、ANY句と呼ぶ場合がありますが、全く同じ意味です。

ANY句 構文

ANY句とは、同じフィールド内に設定する条件をまとめる機能を持つWHERE句で用いるSQL構文です。IN句と機能は同じですが、比較演算子(=、<、>)を用いることができる点で異なります。

  • ANY句の条件は、サブクエリとして記述する必要があります。
サンプルテーブル

サンプルテーブル(出張管理)を下記のように用意します。

ID 社員名 出発日 帰社日 目的地 旅費額
2 橘 修平 2004/07/04 2004/07/05 京都支店 ¥28,400
4 柴田 喜一 2004/07/17 2004/07/21 東京支店 ¥78,310
1 正道 良一 2004/07/02 2004/07/05 広島支店 ¥56,720
3 田中 邦子 2004/07/10 2004/07/15 福井支店、石川支店 ¥98,200

併せて、サンプルテーブル(社員管理)を下記のように用意します。なお、社員IDフィールドは数値型です。

社員ID 社員名
24 橘 修平
36 柴田 喜一
85 正道 良一
121 田中 邦子

SOME句 構文

SOME句は、国際標準規格SQL92からANY句と同義語です。 

構文
fieldname 比較演算子 ANY (サブクエリ)
引数 意味 指定
fieldname

フィールド名を指定します。

省略不可。

比較演算子

比較演算子を記述します。

省略不可。

サブクエリ

サブクエリを記述します。

省略不可。

  • 条件欄へは、サブクエリを指定します。
  • これら条件に該当するフィールドデータがない場合は無視されます。
サンプル構文

下記の事例は全て同じ働きをします。全てサブクエリを抽出条件に記述しています。

「社員管理」テーブルの「社員ID」フィールド値が80から150までの社員以外を抽出条件として該当レコードを求めます。

  1. SELECT * FROM 出張管理 WHERE 社員名 <> ANY(SELECT 社員名 FROM 社員管理 WHERE 社員ID BETWEEN 80 AND 150);

これをIN句を用いて置き換えると、下記のようになります。#全てが置き換えることができるとは限りません。

  1. SELECT * FROM 出張管理 WHERE 社員名 NOT IN(SELECT 社員名 FROM 社員管理 WHERE 社員ID BETWEEN 80 AND 150);

事例 - ADOを用いた事例

ADOを用いて以下のようにSQLを実行します。

Sub MySQLANY()

On Error GoTo エラー

    Dim cat As ADOX.Catalog
    Dim cmd As ADODB.Command
    
    'カレントデータベースに接続します。
    Set cat = New ADOX.Catalog
    cat.ActiveConnection = CurrentProject.Connection
    
    'クエリを定義します。
    Set cmd = New ADODB.Command
    cmd.CommandText = "SELECT * FROM 出張管理 " _
                    & "WHERE 社員名 = ANY(SELECT 社員名 FROM 社員管理 " _
                    & "WHERE 社員ID BETWEEN 80 AND 150);"

    '選択クエリを作成します。
    cat.Procedures.Append "Q_出張管理", cmd
    DoCmd.OpenQuery "Q_出張管理"
    
    Set cmd = Nothing
    Set cat = Nothing
    
    Exit Sub
    
エラー:
    
    If Err.Number = -2147217816 Then
        cat.Views.Delete "Q_出張管理"
        Resume
    Else
        MsgBox Err.Number & " : " & Err.Description
    End If
    
End Sub
留意点
  1. VBA内でSQLを用いる場合は、前後をダブルクォーション(")で囲みます。
  2. 同名のクエリが既に存在している場合、Deleteメソッドを用いて削除します。
  3. ANY句の抽出条件は、サブクエリで指定します。
結果

下記のようにデータが表示されます。

クエリで作成すると・・・

このSQLステートメントをAccessオブジェクトのクエリで作成すると、下記のようになります。

2004/08/26

ページの先頭へ 前ページへ戻る

 


比較演算子を用いて条件をまとめる - ANY句 : SQL入門講座


-Microsoft Access Club-

cPanelとPLESKインストール済みのアダルトサイト対応レンタルサーバーをご提供しています。もちろん、海外大手のデータセンターにサーバー機器を収納します。
cPanelやPLESKをインストールしたレンタルサーバー。
アダルトサイトにも対応済み。
海外大手データセンターにサーバー機器を収納。