skillup

技術ブログ

Database

外部結合について 行列変換

投稿日:

今回から外部結合について学習します。

これはCASE式でもやった集合の考え方が大事になってきます。

例えば下記のようなテーブルCoursesとがあるとします。

name | course
——+———-
赤井 | SQL入門
赤井 | UNIX基礎
鈴木 | SQL入門
工藤 | SQL入門
工藤 | Java中級
吉田 | UNIX基礎
渡辺 | SQL入門

ここから下記のような表を作るとします。行から列にするとします。

name | sql | unix基礎 | java中級
——+—–+———-+———-
渡辺 | ○ |                 |
工藤 | ○ |                 | ○
赤井 | ○ |      ○        |
鈴木 | ○ |                 |
吉田 |     |       ○       |

この場合SQLは下記のようになります。

私の場合集計関数(GROUP BY)とCASE式を使って下記のような式を作りました。これでもできます。

が下記のようにも書けます。

下記のSQLでnameだけのテーブルを作り、これを通常のcoursesの共通エリアを考えます。

name
——
渡辺
工藤
赤井
鈴木
吉田

次は列から行になおします。

下記のようなテーブルがあり、( personnel)下記のようなテーブルをこんどは下記のように2列にするとします。さっきの逆ですね。

employee | child_1 | child_2 | child_3
———-+———+———+———
赤井        | 一郎      | 二郎     | 三郎
工藤        | 春子      | 夏子     |
鈴木        | 夏子      |            |
吉田        |             |            |

employee | child
———-+——-
吉田 |
吉田 |
吉田 |
工藤 |
工藤 | 春子
工藤 | 夏子
赤井 | 一郎
赤井 | 二郎
赤井 | 三郎
鈴木 |
鈴木 |
鈴木 | 夏子

この場合UNIONを使うとかけます。こういう時に使うんですね・・・

ちなみにALLを除くと重複行(鈴木 NULLや吉田 NULL)が一行になります。

-Database
-

執筆者:


comment

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

関連記事

no image

MySQLのマイグレーション(workbench使用)

以前cakePHPにてマイグレーションの手法を紹介したのですが、当然PHP以外をつかっていたり、PHPでもcakeを使っていなければこの方法は通用しません。 何か、汎用的にデータベースの構造の差分がチ …

no image

テストのダミーデータ作成

データベースに大量のデータを作りたいときにいつもあああやhoge,aaaですとデータという感じがしないですし、抽出や集計ができません。 なるべく自然に近いデータが欲しいのですが、簡単に作れる方法があり …

no image

自己結合に関して

以前もこのエントリーで学習しましたが、SQLの結合では自己結合という考え方があります。 下記のようなテーブルProductsがあるとします。 name | price ——&# …

no image

SQL基礎 case式について

case式に関して。 集約系の関数では複雑な処理を一気に行うことができる。 case式は1列のみ有効。複数の列に対して行うことはできない。 case ~ when ・・・thenではwhenが評価され …

no image

NULLについて

「達人に学ぶSQL徹底指南書」を読み進めていきましたがNULLについていろいろ書いてあるのでメモリます。 Contents1 NULLには未知と適用不能の2パターンがある2 = NULL が使えず I …