Lesson5 SELECT文の句


SQL言語において最も重要で利用する機会が多いものが、SELECT句です。SELECTとは呼んで字のごとく”問い合わせ”のことで、リレーショナルデータベースシステムに対してデータの問い合わせ(参照要求)を行います。レッスン1で述べたようにデータベースは本来単なるデータの蓄積に過ぎませんから、データの問い合わせが最も重要であるということが分かるでしょう。

ここでは、特にSELECT句にフォーカスしてその実装と機能について考察してみたいと思います。

5.1 SELECT の基本文法
SELECT句はSQL言語にとって最も重要な構文です。このため、SQL文自体のことをクエリー(問い合わせ)と呼ぶ場合もあります。SELECT句にはさまざまなオプションを使って柔軟性にとんださまざまな機能を提供しています。まずは、次の例題を見てください。

SELECT * FROM TABEL;

結果は次のようになります。

   NO CPU
----- ---------------
1 PENTIUM100
2 AMD K6-300
3 AMD K6-300
4 Intel DX4-100
8 MMX PENTIUM 166
15 PENTIUM II 400

TABLE表に存在する全てのテーブルが出力されました。
これが、最も単純であり明快な基本型であると言えるでしょう。

では、次にNO列の値を使って目的の行のみを抽出してみます。
まずはNOが15の列のみを抽出してみます。

SELECT * FROM TABEL WHERE NO = 15;

NO    CPU 
----- ---------------
15 PENTIUM II 400

WHERE句によって抽出する条件を指定しました。WHERE句には AND(かつ) および OR(または) を使って複数指定することも可能です。

SELECT * FROM TABEL WHERE NO = 15 OR NO = 1;

NO    CPU
----- ---------------
1 PENTIUM100
15 PENTIUM II 400

OR ( または ) で抽出された2つの行を選択することができました。

5.2 ORDER BY句
ところで、いままで実行したSQL文はここであげている結果とまったく同じ順序で出力されたでしょうか。レッスン2で述べたように今までのリレーショナルデータベースでは結果も含めて集合という概念でデータを扱いますので、出力された結果はは必ず同じであるとは限りません。すなわち出力される順番はいつも同じである保証はありません。

出力される順番を目的の通り並び替えるためには、ORDER BY 句を使います。

次の例を見てください。

SELECT * FROM TABEL ORDER BY CPU;

NO    CPU
----- ---------------
2 AMD K6-300 3 AMD K6-300 4 Intel DX4-100 8 MMX PENTIUM 166 15 PENTIUM II 400 1 PENTIUM100

CPU列の文字コードの順番で全ての行が昇順に並びかえられて出力されました。

5.3 GROUP BY句
GROUP BY 句を使うと出力される行をグループ化することが出来ます。GROUP BY句を使って行をグループ化し、集計関数でその行の合計や値の合計をグループ毎に求めると便利です。
例えば次のように使います。

SELECT SUM(NO) FROM TABEL GROPU BY CPU;

SUM(NO) CPU
------- ---------------
1 PENTIUM100
5 AMD K6-300
4 Intel DX4-100
8 MMX PENTIUM 166
15 PENTIUM II 400

CPUの値によって行がグループ化され、そのNOの値が合計されているのが分かりましたでしょうか。
このように、さまざまな集計関数と組み合わせることによって、グループの行の合計や平均値、合計値などを簡単に求めることができます。

まとめ
SELECT句はさまざまな条件でデータを問い合わすことが出来る非常に有益な句です。また、その使い方によって簡単に複雑なデータパターンでデータを抽出することができます。
SQLはパズルのようだ、とよく言われますが、これらSELECT文をいかにうまく組み合わせることによって、難しいデータの問い合わせも簡単に実現することができるからでしょう。


本書での要点

  1. SELECT文の構文とそれぞれの句の優先順位
  2. AS句による別名指定
  3. ORDER BY句による昇順降順とその組み合わせ
  4. GROUP BY句を使った、さまざまな集計関数の応用
  5. HAVING 句について
  6. 今までの句を組み合わせた応用例


<戻る>