SELECT文はデータベースのテーブルからデータを抽出する際に使用します。抽出条件や、昇順・降順など様々な条件を指定して抽出することができます。
SELECT フィールド名1 [AS 別名1] [,フィールド名2 [AS 別名2]...]
FROM テーブル名
[ WHERE 条件式]
[ GROUP BY]
[ ORDER BY];
上記の社員名簿テーブルを使用例にして各句、演算式を使用したSELECT文の解説をしていきます。
FROM句FROM句以降にテーブル名を指定することでテーブルのレコードを抽出します。フィールド名に * を指定するとテーブルの全データを取得します。以下の例では社員名簿テーブルから全てのデータを取得します。
SELECT * FROM 社員名簿;
SELECT文はテーブルから指定された順番でフィールドを取得します。WHERE句以降に条件式を指定することにより条件式を満たすレコードを抽出します。以下の例では社員名簿テーブルから性別が男であるレコードから氏名を取得します。性別など文字列を条件式として使用するには文字列を ' で囲みます。
SELECT 社員名簿.氏名 FROM 社員名簿 WHERE 社員名簿.性別='男';
以下の例では社員名簿テーブルから生年月日が2009/01/01以前のレコードから氏名と生年月日を取得します。なお、生年月日など年月日を条件式として使用するには年月日を # で囲みます。
SELECT 社員名簿.氏名, 社員名簿.生年月日 FROM 社員名簿
WHERE 社員名簿.生年月日 < #2009/01/01#;
テーブルに同じデータ行が在る場合、重複するレコードを取り除いた結果を取得するにはフィールド名の最初にDISTINCTを指定します。
SELECT DISTINCT フィールド名1 [,フィールド名2...]
FROM テーブル名
[ WHERE 条件式];
以下の例では社員名簿テーブルから部門を重複することなく取得します。
SELECT DISTINCT 社員名簿.所属部門 FROM 社員名簿 ;
テーブルから複数の条件にあったデータを取得したい場合にはWHERE以降に論理演算子(AND,OR)を使用して指定します。
SELECT フィールド名1 [,フィールド名2...]
FROM テーブル名
WHERE 条件式1 論理演算 条件式2;
以下の例では生年月日が1980/01/01以前で性別が男であるレコードから氏名フィールドを取得します。
SELECT 社員名簿.氏名 FROM 社員名簿
WHERE 社員名簿.生年月日 < #2009/01/01# AND 社員名簿.性別='男';
テーブルから複数の値にあったデータを取得したい場合にはWHERE以降にIN演算子を使用して指定します。
SELECT フィールド名1 [,フィールド名2...]
FROM テーブル名
WHERE フィールド名1 IN (値1 [,値2...]);
以下の例では所属部門が経理と営業であるレコードの氏名を取得します。
SELECT 社員名簿.氏名 FROM 社員名簿
WHERE 社員名簿.所属部門 IN ('経理', '営業');
テーブルよりある数値の範囲にあるレコードを取得する場合は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演算子はメタ文字によるパターンマッチング検索を行います。
SELECT フィールド名1 [,フィールド名2...]
FROM テーブル名
WHERE フィールド名1 LIKE 文字列 ;
以下の例では氏名の最後が"郎"であるレコードから氏名を取得します。
SELECT 社員名簿.氏名 FROM 社員名簿
WHERE 社員名簿.氏名 LIKE '%郎';
テーブルよりレコードをソートして取得するにはORDER BY句にて昇順にソートする場合はASC、降順にソートする場合はDESCを指定します。
SELECT フィールド名1 [,フィールド名2...]
FROM テーブル名
WHERE 条件式
ORDER BYフィールド名1 DESC [ASC]
以下の例では氏名を降順でソートした結果を取得します。
SELECT * FROM 社員名簿 ORDER BY 社員名簿.氏名 DESC;
フィールドをグループ化して集計を行う場合GROUP BYによりグループ化をするフィールドを指定し集計関数を使用して取得します。
SELECT フィールド名1 [AS 別名1] [,フィールド名2 [AS 別名2]...]
FROM テーブル名
GROUP BY フィールド名1
上記の受注テーブルを使用例にして各句、演算式を使用したSELECT文の解説をしていきます。
以下の例では商品ごとの受注高の合計を別名(合計受注高)を指定して商品名と合計受注高を取得します。
SELECT 商品名, SUM(受注高) AS 合計受注高
FROM 受注テーブル GROUP BY 商品名;
フィールドをグループ化して集計を行う場合、HAVINGを使用して条件式を指定することができます。
SELECT フィールド名1 [AS 別名1] [,フィールド名2 [AS 別名2]...]
FROM テーブル名
GROUP BY フィールド名1
HAVING 条件式
以下の例では商品ごとの受注高の合計を別名(合計受注高)を指定して合計受注高が60,000以上の商品名と合計受注高を取得します。
SELECT 商品名, SUM(受注高) AS 合計受注高
FROM 受注テーブル GROUP BY 商品名
HAVING SUM(受注高) > 60000;
SQLとは | SELECT | INSERT | UPDATE | DELETE | CREATE TABLE | DROP TABLE