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

オブジェクト指向 データベース層

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にデータベース層の考え方について。 Contents1 データべース層1.1 要点1.1.1 典型的なダメテーブル設計1.1 …

no image

CASE式のすすめ その2

本日も「達人に学ぶSQL徹底指南書」を地道に進めていきます。 Contents1 CASE式の利用2 UPDATE文のCASE3 テーブル同士のマッチング CASE式の利用 私自身はCHECK制約を使 …

no image

JPAでのデータベースとの同期

このブログでも何回か書いてきたJPAですが、新規レコードをインサートさせた際IDを取得し、そのIDをもとに何らかのキーを作る、そういう処理があったので紹介させていただきます。 何回か書いてますが、JP …

no image

Firebaseについて

前回Lambdaに少し触れましたが、2019年6月現在、サーバーレスなアプリというものが活況(?)のようです。 大規模なアプリというと Webサーバー+RDB+サーバーサイドプログラミング言語 が必須 …

no image

Webの高速化に関して

Webの高速化に関してメモ。 高速化って言っても幅広いんですけどね。自分が行なっている対策に関して。 一応LAMP環境を前提にしてます。 Contents1 一番大事なのは測定2 DB対策3 フロント …