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でtext型が大量にあるもののリストア 

MySQLでのリストアについて。 先日実務でtext型のカラムが複数あるテーブルを読もうとしたら下記エラーがでてこけました。

なにやら …

no image

NOT EXISTSの利用2

今回もNOT EXISTSの利用です。 前回の問題にプラスアルファし、列が一緒でないと連続でも意味ない仕様にします。 例えば下記のようなテーブルがあるとします。 seat | row_id | sta …

no image

JPAでのリレーション(アノテーション使用)

JPAでリレーションを管理するとき、最初はアノテーションでやろうとしたんですが、結局やり方がわからずコンストラクタ式をかいて対処してました。 JPAでのリレーションに関して 外部キー制約があるやり方は …

no image

MySQLのセキュアな設定

以前SSHの設定についていろいろ書いたんで今回はMySQLに関して。 Contents1 基本的な処方箋(MySQLに限らないかも)2 ホストのアクセスを制限する3 LOCAL INFILEコマンドを …

no image

正規化のデメリット

Contents1 正規化のデメリット2 本日のSQL 正規化のデメリット 正規化についていろいろ書いてきましたが、メリットもあればデメリットもあります。 メリットとしては データの不整合が起きにくい …

アーカイブ