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

ユニークキーの設定

MySQLでのユニークキーの設定に関して。 ユニークキーの設定は下記の通り。

ユニークキーを作成した後に確認するのは下記コマンドで。 …

no image

NOT EXISTSの利用

引き続きNOT EXISTSの利用です。 思った以上に使えますね・・・がムズイ。 今回は下記のようなテーブル(seats)があるとします。 ケースとしては新幹線の座席番号で空は席が空いている状態、占は …

no image

サロゲートキーに関して

テーブル設計に関してのメモ。 テーブルを作る時にid int not null auto_increment primary keyを自動的に作ることが多いと思いますが、サロゲートキーといい、グレーノ …

no image

MySQLでのlocalhostと127.0.0.1の違い

たまにMySQLでローカルのホストに接続する時に、localhostで接続するときと127.0.0.1で接続するときで挙動が違う(片方だとエラーになり、もう片方だとエラーにならない)などがあるのでちょ …

no image

データベースアンチパターン・グレーパターンまとめ

本で勉強したものと自分で個人的に経験したことのまとめ Contents1 値渡しと参照渡しの混同2 型の制約が弱い3 変更していいデータ、していけないデータ4 参照系と履歴系のデータを区別する5 リレ …