SELECT

機能

テーブルからデータ行を取得します

文法

(1)
SELECT
    列,・・・
FROM
    テーブル
テーブルから全データを取得します。

(2)

SELECT
    列,・・・
FROM
    テーブル
WHERE
条件
テーブルから条件に該当するデータを取得します。
(3)
SELECT DISTINCT
    列,・・・
FROM
テーブル
テーブルからデータを取得します。
但し、重複するデータは排除します。
(4)
SELECT
    列,・・・
FROM
    テーブル
ORDER BY
順列・・・
テーブルからソートした状態でデータを取得します。
(5)
SELECT
    グループ関数列,・・・
FROM
 テーブル
GROUP BY
    グループ列,・・・
テーブルからグループ列でグルーピングしてグループ関数列を取得します。
(6)
SELECT
    グループ関数列,・・・
FROM
    テーブル
GROUP BY
    グループ列,・・・
HAVING
    グループ関数列条件
テーブルからグループ列でグルーピングしてグループ関数列を取得します。
但し、グループ関数列条件に該当しない結果データは排除します。
WHERE 条件に該当するデータのみを取得したい場合に、WHEREに続けて条件式を記述します。
又テーブルを結合する条件もここに記述します。
DISTINCT SELECTの直後に記述すると結果データから重複するデータが排除されます。重複データもすべて取得する場合は、DISTINCTではなくALLを記述するのですが、デフォルトなので通常は記述しません。
ORDER BY データを昇順にソートした状態で取得します。
降順に取得したい場合は、順列の後ろにDESCを記述します。
昇順はASCを記述しますが、 デフォルトなので記述する必要はありません。
GROUP BY グルーピングして集計などを行います。
列が集約されるので、取得する列には何を返すのかを指示するグループ関数を記述しなければなりません。
HAVING グルーピングした結果に対して取得する条件を指定します。
WHEREに似ていますが、WHEREは元のデータに対するもので、HAVINGはグルーピングした結果に対しての条件です。

ここで紹介している文法は、代表的な使い方を抜粋したものです。

解説

(1)
SELECT
    列,・・・
FROM
    テーブル

WHERE句による対象データの絞り込みが無いので、全件対象となります。
100万件のテーブルなんかで実行すると大変ですよ。テスト実行する時は注意しましょうね。

そんな風にならないように件数を調べてから実行しましょう。
下のSQLを実行するとテーブルの件数のみを取得できます。

SELECT
    COUNT(*)
FROM
    テーブル

(2)

SELECT
    列,・・・
FROM
    テーブル
WHERE
    条件

WHEREには、取得したデータの条件を記述します。
例えば列1が1のデータを取得したい場合は、

WHERE
    列1 = 1

条件は論理演算子を使って複合条件を記述することもできます。
列1が1でかつ列2が1000未満のものを取得したい場合は、

WHERE
    列1 = 1 AND 列2 < 1000
(3)
SELECT DISTINCT 
    列,・・・
FROM
    テーブル

DISTINCTは取得データに対して機能するものなので、記述するのはSELECT後ろに1つだけです。たくさん書いちゃダメですよ。
例えばこんな感じです。

SELECT DISTINCT
    列1,列2,列3 
FROM
    テーブル1
(4)
SELECT
    列,・・・
FROM
    テーブル
ORDER BY
    順列・・・

ORDER BYのソート順は、項目の後ろに記述します。
列1で降順にソートするならこうなります。

SELECT
    列1,列2,列3 
FROM
    テーブル1 
ORDER BY
    列1 DESC

ORDER BYを指定していない場合のデータ順は保証されていないので、順番が大事な場合はかならず指定しましょう。
ちなみにNULL値は、一番大きい値としてソートされます。
いろんなデータベースを使用する方は、データベースによってNULL値の扱いが違うので注意してくださいね。

(5)
SELECT
    グループ関数列,・・・
FROM
    テーブル
GROUP BY
    グループ列,・・・

GROUP BYは集計する場合に使用します。
集計といっても合計だけではなく、グループ内での最大値や最小値を求めたりもできます。何を求めるかは取得列に記述するグループ関数で決まります。
例えば列1でグループ化して、列2の最大値を取得するならばこうなります。

SELECT
    列1,MAX(列2) 
FROM
    テーブル1 
GROUP BY
    列1
(6)
SELECT
    グループ関数列,・・・
FROM
    テーブル
GROUP BY
    グループ列,・・・
HAVING
    グループ関数列条件

HAVINGは集計した結果に対して取得条件を指定したい場合に使用します。
(5)の例で最大値が100未満の集計結果だけを取得したいならばこのようになります。

SELECT
    列1,MAX(列2) 
FROM
    テーブル1 
GROUP BY
    列1
HAVING
    MAX(列2) < 100

全列を取得するには テーブルの全列を取得する場合は、列・・・の部分にアスタリスク「*」を記述します。
アスタリスク「*」を指定すると、列順はテーブルに定義されている順になります。

SELECT
    * 
FROM
    テーブル
複数のテーブルから列を取得する

(横の結合)

複数のテーブルから列を取得するには、テーブル間でのデータの繋がり方をWHEREに記述しなければなりません。
又取得する項目がどのテーブルのものなのかも記述しなければなりません。

SELECT
    テーブル1.列2
    テーブル2.列3
FROM
    テーブル1,
    テーブル2
WHERE
    テーブル1.列1 = テーブル2.列1

テーブル名が長いなどの理由でわかりにくい場合は、
テーブルに仮の名前を付けることができます。
上の例のテーブル1にAという名前をテーブル2にBという名前を付けて書き直すと..

SELECT
    A.列2
    B.列3
FROM
    テーブル1 A,
    テーブル2 B
WHERE
    A.列1 = B.列1

となります。

複数のテーブルからデータをまとめて取得する

(縦の結合)

複数のテーブルからデータを取得する場合は、それぞれのテーブルからデータを取得するSQLECT文をUNIONで結合することによりまとめて取得することができます。
但し、まとめて取得するのですから、それぞれのテーブルから取得する列の構成は一致していなければなりません。

SELECT
    *
FROM
    テーブル1
UNION
SELECT
    *
FROM
    テーブル2

ちなみにUNIONで結合すると重複するデータは排除されるので、すべて取得したい場合は、UNION ALLを記述します。

    このページに関して管理人にメッセージを送ることができます。

    誤字脱字など些細な事でも構いませんのでお知らせ頂けると幸いです。

    その他のお問い合わせは、お問い合わせフォームからお願いします。


    スパムメール対策のクイズです。正解した場合のみ送信できます。