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

抽出条件にサブクエリを用いる : SQL入門講座



データ操作を行なうことのできるSQLステートメントを「クエリ」と呼びます。これは、いままでからも現れている言葉ですが、Accessオブジェクトの「クエリ」とは異なります。
ここでは、WHERE句内に別のSQLステートメント(クエリ)を指定する方法を解説します。

ANY演算子 構文

サブクエリとは、SQLステートメント内のWHERE句用いる別のSQLステートメントのことです。SQLステートメント(クエリ)の中のクエリなので、これを「サブクエリ」と呼びます。サブクエリで求めた値を条件値としてWHERE句で用いる訳です。

  • サブクエリとして利用するSQLステートメントは、比較演算子以降を()で囲みます。
  • SELECT句で選択するフィールドは1つに限定する。
  • 複数の条件を設定する場合は、IN演算子、ANY演算子を用いる。
  • サブクエリとして利用するSQLステートメントは、元のSQLステートメントと関連付けを必要としません。 条件として用いるデータを求めるための働きに限定されます。
サンプルテーブル

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

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 田中 邦子
構文
WHERE fieldname 比較演算子 (サブクエリ)
引数 意味 指定
fieldname

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

省略不可。

比較演算子

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

省略不可。

サブクエリ

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

省略不可。

  • これら条件に該当するフィールドデータがない場合は無視されます。
サンプル構文

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

  1. SELECT * FROM 出張管理 WHERE 社員名 = (SELECT 社員名 FROM 社員管理 WHERE 社員ID = 85);

下記のSQLステートメントは、一般的な構文です。

  1. SELECT * FROM 出張管理 WHERE 社員名 = "正道 良一";

事例 - ADOを用いた事例

RunSQLメソッドを用いて以下のようにSQLを実行します。

Sub MySQLSubQuery()
                
    Dim mySQL As String
    mySQL = "UPDATE 出張管理 SET 旅費額 = 旅費額 + 13100 " _
            & "WHERE 社員名 = (SELECT 社員名 FROM 社員管理 WHERE 社員ID = 85);"

    If MsgBox("社員IDが85の社員の旅費額を増額します。", vbYesNo) = vbYes Then
        DoCmd.RunSQL mySQL
        MsgBox "処理が終了しました。"
    End If
                                    
End Sub
留意点
  1. VBA内でSQLを用いる場合は、前後をダブルクォーション(")で囲みます。
  2. 更新クエリを実行するSQLステートメントのWHERE句にサブクエリを用いています。
結果

下記のようにデータが変化します。

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

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

2004/08/27

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

 


抽出条件にサブクエリを用いる : SQL入門講座


-Microsoft Access Club-

アメリカ合衆国やヨーロッパのデータセンターからcPanelレンタルサーバーをご提供します。お支払いは日本国内の銀行振込で...。1ヵ月契約からOKです。
アメリカ合衆国やヨーロッパからcPanelレンタルサーバー。
お支払いは日本国内の銀行振込。
最短契約期間は1ヵ月契約からOKです。