Oracle SQL

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)
全データが取得されるので、テスト実行する時は注意しましょうね。
100万件のテーブルなんかで実行すると大変ですよ。
そんな風にならないように件数を調べてから実行しましょう。
下のSQLを実行するとテーブルの件数のみを取得できます。

SELECT COUNT(*) FROM テーブル

(2)

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

WHERE 列1 = 1

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

WHERE 列1 = 1 AND 列2 < 1000

(3)

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

SELECT DISTINCT 列1,列2,列3 FROM テーブル1

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

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

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

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

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

(6)
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を記述します。
 

Back

Copyright(C) 2000-2008 IceProbe, All rights reserved.