Access VBA 入門講座

HomeSELECT文SELECT文

SELECT文はデータベースのテーブルからデータを抽出する際に使用します。抽出条件や、昇順・降順など様々な条件を指定して抽出することができます。


SELECT フィールド名1 [AS 別名1] [,フィールド名2 [AS 別名2]...]

FROM テーブル名 

[ WHERE 条件式]

[ GROUP BY]

[ ORDER BY];
						
社員名簿テーブル

上記の社員名簿テーブルを使用例にして各句、演算式を使用したSELECT文の解説をしていきます。

FROM句

FROM句以降にテーブル名を指定することでテーブルのレコードを抽出します。フィールド名に * を指定するとテーブルの全データを取得します。以下の例では社員名簿テーブルから全てのデータを取得します。


SELECT * FROM 社員名簿;
						
WHERE句

SELECT文はテーブルから指定された順番でフィールドを取得します。WHERE句以降に条件式を指定することにより条件式を満たすレコードを抽出します。以下の例では社員名簿テーブルから性別が男であるレコードから氏名を取得します。性別など文字列を条件式として使用するには文字列を ' で囲みます。


SELECT 社員名簿.氏名 FROM 社員名簿 WHERE 社員名簿.性別='男';
						

以下の例では社員名簿テーブルから生年月日が2009/01/01以前のレコードから氏名と生年月日を取得します。なお、生年月日など年月日を条件式として使用するには年月日を # で囲みます。


SELECT 社員名簿.氏名, 社員名簿.生年月日 FROM 社員名簿 

WHERE 社員名簿.生年月日 < #2009/01/01#;
						
DISTINCT句

テーブルに同じデータ行が在る場合、重複するレコードを取り除いた結果を取得するにはフィールド名の最初にDISTINCTを指定します。


SELECT DISTINCT フィールド名1 [,フィールド名2...]

FROM テーブル名 

[ WHERE 条件式];
						

以下の例では社員名簿テーブルから部門を重複することなく取得します。



SELECT DISTINCT 社員名簿.所属部門 FROM 社員名簿 ;

						
論理演算子(AND,OR)

テーブルから複数の条件にあったデータを取得したい場合にはWHERE以降に論理演算子(AND,OR)を使用して指定します。


SELECT フィールド名1 [,フィールド名2...]

FROM テーブル名 

WHERE 条件式1 論理演算 条件式2;
						

以下の例では生年月日が1980/01/01以前で性別が男であるレコードから氏名フィールドを取得します。


SELECT 社員名簿.氏名 FROM 社員名簿 

WHERE 社員名簿.生年月日 < #2009/01/01# AND 社員名簿.性別='男';
						
IN演算子

テーブルから複数の値にあったデータを取得したい場合にはWHERE以降にIN演算子を使用して指定します。


SELECT フィールド名1 [,フィールド名2...]

FROM テーブル名 

WHERE フィールド名1 IN (値1 [,値2...]);
						

以下の例では所属部門が経理と営業であるレコードの氏名を取得します。


SELECT 社員名簿.氏名 FROM 社員名簿 

WHERE 社員名簿.所属部門 IN ('経理', '営業');
						
BETWEEN演算子

テーブルよりある数値の範囲にあるレコードを取得する場合はBETWEEN演算子を使用します。


SELECT フィールド名1 [,フィールド名2...]

FROM テーブル名 

WHERE フィールド名1 BETWEEN 下限値 AND 上限値 ;
						

以下の例では社員名簿テーブルから生年月日が1980/01/01~1990/12/31の範囲にあるレコードを取得します。


SELECT * FROM 社員名簿

WHERE 社員名簿.生年月日 BETWEEN #1980/01/01# AND #1990/12/31# ;
						
LIKE演算子

LIKE演算子はメタ文字によるパターンマッチング検索を行います。


SELECT フィールド名1 [,フィールド名2...]

FROM テーブル名 

WHERE フィールド名1 LIKE 文字列 ;
						

以下の例では氏名の最後が"郎"であるレコードから氏名を取得します。


SELECT 社員名簿.氏名 FROM 社員名簿

WHERE 社員名簿.氏名 LIKE '%郎';
						
ORDER BY句

テーブルよりレコードをソートして取得するにはORDER BY句にて昇順にソートする場合はASC、降順にソートする場合はDESCを指定します。


SELECT フィールド名1 [,フィールド名2...]

FROM テーブル名 

WHERE 条件式

ORDER BYフィールド名1 DESC [ASC]
						

以下の例では氏名を降順でソートした結果を取得します。


SELECT * FROM 社員名簿 ORDER BY 社員名簿.氏名 DESC;
						
GROUP BY句

フィールドをグループ化して集計を行う場合GROUP BYによりグループ化をするフィールドを指定し集計関数を使用して取得します。


SELECT フィールド名1 [AS 別名1] [,フィールド名2 [AS 別名2]...]

FROM テーブル名 

GROUP BY フィールド名1
						
受注テーブル

上記の受注テーブルを使用例にして各句、演算式を使用したSELECT文の解説をしていきます。

以下の例では商品ごとの受注高の合計を別名(合計受注高)を指定して商品名と合計受注高を取得します。


SELECT 商品名, SUM(受注高) AS 合計受注高 

FROM 受注テーブル GROUP BY 商品名;
						
HAVING句

フィールドをグループ化して集計を行う場合、HAVINGを使用して条件式を指定することができます。


SELECT フィールド名1 [AS 別名1] [,フィールド名2 [AS 別名2]...]

FROM テーブル名 

GROUP BY フィールド名1

HAVING 条件式
						

以下の例では商品ごとの受注高の合計を別名(合計受注高)を指定して合計受注高が60,000以上の商品名と合計受注高を取得します。


SELECT 商品名, SUM(受注高) AS 合計受注高 

FROM 受注テーブル GROUP BY 商品名

HAVING SUM(受注高) > 60000;