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

postgresの外部キー制約やcascadeについて

外部キーを貼っておくと、当然、削除などを行うときにエラーになり、truncateも当然できなくなりますが、cascadeをつけることで、関連するテーブルまで一気にtruncateされます。 [cray …

no image

アンチパターン 参照渡しと値渡し+キー情報の設定+同一値を複数テーブルに配置+正規化が不十分+集計表+不適切なステータス値

本日は自分がデータベースの設計をしていて気を付かないといけないなーと思った点などを。 注意点としては設計のミスは実装で取り返しにくいことが多いので極力気を付けましょう。あといろいろなテーブルのパターン …

no image

DBの構造について メモリとHDD

データベースについてまたまた学習中。 覚えておきたいポイントなど。 データを収めておくべき媒体では「記憶コスト(単位金額当たりの容量)」と「アクセス速度」の2つが重要なパラメータ メモリとHDDでは前 …

no image

SQL 更新系に関して

SQL実践入門、残り2章になりましたが、いやーむずいっす。 今回は9章を進めていますがSQLはもともと検索を主な用途として発展したため、SELECT文の使用がメインになります。 ですが、UPDATE文 …

no image

論理設計のグレーノウハウ サロゲートキー

前回まではアンチパターンやバッドノウハウについて学習してきましたが、今回はグレーノウハウについて特集します。 グレーノウハウとは読んで字のごとくホワイトともブラックとも言えないという手法ですね。 つま …

アーカイブ