ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

SQLのSELECT文の考え方のまとめ

2008-07-03 13:18:10 | Weblog

 RDBは、
   ・射影:列を絞り込む
   ・選択:行を絞り込む
   ・結合:2つの(物理ないし論理)表をつなげる
 ことによって、新たな(論理)表を生み出し、必要なデータを取得する。

 したがって、RDBを操作するSQLにおいても、SELECT文で、上記の操作を定義する。




■SELECT文と、RDBの操作との関係

SELECT文は

 SELECT テーブル名.項目名,・・・・・
   FROM テーブル名 なんとかJOIN テーブル名 ON 2つのテーブルを結ぶ条件
   WHERE 選択条件文
   ORDER BY 並び替え項目,・・・ DESC
   GROUP BY グループ化する項目
   HAVING 集合関数に関する条件

という形になる。このとき

 1行目の SELECT テーブル名.項目名,・・で 射影
 2行目の FROM テーブル名 なんとかJOIN で結合
 3行目の WHERE 選択条件文で選択

になっている。したがって、この3行で、論理表のデータは取得できていることになる。




■論理表を作成した後で・・・

 この論理表を元に、並び替えと、集合関数に関する操作ができる。

 並び替えは、ORDER BY でおこない、
 集合関数(COUNT(*) など、複数レコードにまたがる操作)を使っている場合、
その関数をグループ化するなら、GROUP BY 、さらに、その集合関数の操作に対し、
条件がつくならHAVINGとなる。
(集合関数の条件操作は、論理表が確定した「あと」の操作になるため、
 論理表を作るために(=その状態では論理表確定「まえ」)設定するWHERE句では
 指定できない)




■SELECT文作成戦略

 これを受けて、SELECT文は、以下の手順で考えることになる。

(1)まず必要な項目(テーブル名.項目名)をあげよ
     →それが、SELECT のところにかかれる

(2)(1)で上げた項目のテーブル名をあつめ、出てくるテーブルの
   結合方法について、のべよ
     →それが、FROM のところにかかれる

(3)(1)、(2)でできたテーブルのうち、必要なレコードを選択する
   条件を述べよ
     →それが、WHERE のところにかかれる

   -----(ここまでで、必要なデータは取得されるはず)----

(4)もし、並び替えが必要なら、その際の項目と、昇順降順を考えよ
     →これが、ORDER BYになる

   -----(以下は、(1)で集合関数を使った場合)----

(5)(1)で集合関数を利用していて、グループごとに集計する場合、
   その項目を挙げよ
   →これがGROUP BYになる。

(6)その際、集合関数に関して、条件があれば、それを述べよ
   →これがHAVINGになる。




こんなかんじ。
あ、サブクエリーの話が抜けてるけど(^^;)・・


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする