skillup

技術ブログ

Database

サブクエリの使い方

投稿日:

以前も少し学習しましたが、今回からはサブクエリの扱い方です。特に異なった行の比較(年度計算など)に関して行われる自己結合をつかったものが非常に強力です。

例によってここを学習しています。

下記のようなテーブル(sales)があるとします。

year | sale
——+——
1990 | 50
1991 | 51
1992 | 52
1993 | 52
1994 | 50
1995 | 50
1996 | 49
1997 | 55

自己結合覚えると楽ですね

例えば下記のSQLでまず8*8を作ります。

このうち、当然前年のものだけを見たいので、下記のような条件を作ります。(最初の年度は出ません)

こうしますと下記のような表がとれます。

year | sale | prev_year | prev_year | var
——+——+———–+———–+—–
1991 | 51 | 1990 | 50 | ↑
1992 | 52 | 1991 | 51 | ↑
1993 | 52 | 1992 | 52 | =
1994 | 50 | 1993 | 52 | ↓
1995 | 50 | 1994 | 50 | =
1996 | 49 | 1995 | 50 | ↓
1997 | 55 | 1996 | 49 | ↑

自己結合非常にわかりやすいですね・・・。最初見たときは何に使うんだろう・・と思っていましたが、集合の考え方をイメージするのに非常に

またサブクエリで書く場合は下記のようになりますが、自己結合をイメージに持っておくと非常に考えやすいです。

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

dbUnitの使い方

えーJavaで有名なテストツールDBUnitについて。 DbUtilではありませんので間違えないように。(私は最初間違えました・・・) まだ全然使い込んでるわけではありませんがどんなことができるかとい …

no image

SQL case式やウィンドウ関数の威力

プログラマには「プログラムは思った通りに動かない。書いた通りに動く。」「バグではない仕様です」なんて面白い格言がいろいろありますが、データベースの世界にも「WHERE句で条件分岐させるのは素人のやるこ …

no image

mysqlデータのCSV出力

ガチンコ塾のブログでもかいたのですが、行動力が大切だなーと思う今日この頃。 社長が熟練のJavaエンジニアで基本的に聞けば、基本的に解決することが多いのですが、外部の勉強会などにも出て情報収集の必要性 …

no image

SQL基礎 手続き型言語と集合思考の言語

どんな仕事でもそうだと思いますが、長年惰性で使っていると日常の作業はなんとかできてるけど、実は深く理解していない&効率のいいやり方を知らない、ということが結構あります。 私の場合、ちょっと前にCSSを …

no image

複数GROUP BYでの注意

GROUP BYしたときに件数が増えるという現象があったので一応メモ。というか当たり前のことですが・・・ たとえば以下のようなテーブルがあったとします。 student id student_name …