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のメモリ設定

実務で結構サーバーをヘビーに使われるお客さんがいて、SQLが遅くなったりとしています。 なんとか対策しないといけないので、いろいろと調査をいます。 それで今回はMySQLのメモリ問題など。 MySQL …

no image

sql_modeに関して

開発では動いていたのに本番ではint型のカラムで空白が入らない!みたいなエラーが出て、データベースにデータが入らないことが発覚し、調査をすることに・・・ sql_modeが原因でした・・・ sql_m …

no image

herokuでMySQL

昨日に続き、heroku+MySQLのメモです。 herokuはディフォルトではPostgreSQLですが、アドオンを使うとMySQLも使えるようになります。 使い方ですが、herokuの管理画面でク …

no image

MySQLのパフォーマンスチェックなどについて

常日頃MySQLをつかっているのですがパフォーマンスのチェックなどをあまりしていなかったため、これをチョクチョクしていこうかなあと思っております。 簡単に使えるツール(ただし5.1.4から)としては標 …

no image

論理設計のアンチパターン その2

今回は論理設計のアンチパターンの続きです。 今までに比べると何も意図がないというものではなく、パフォーマンスを考えて設計されているようなものが多いです。 ただし、中には絶対に許されないタイプのものもあ …