テーブルの結合とはテーブルの正規化とは

テーブルの正規化とは

  • テーブルを分けて情報の重複をなくしていく作業

テーブルの正規化するメリット

  • 1 . データ管理が容易になる
  • 2 . データ容量の削減

  • →特別な意図がなければ、テーブルは正規化する。

    • 特別な意図の例) システムのパフォーマンス向上のため。

テーブルの結合とは

  • テーブル同氏をある条件で結合することにより、正規化なしの状態を作り出すこと。

基本は正規化、しかしながら、

  • パフォーマンスの問題が解消できない(できなくなりそうな)場合はあえて非正規化することもある。

  • 実務で見かける可能性もある。

主キーと外部キー

主キー(Primary Key, PK)

  • 一つの行を特定できる列のこと。

外部キー(Foreign Key, FK)

  • 他のテーブルとの関連づけに使う列のこと
  • 外部キーは関連づけされた先のテーブルでは主キーになる。

リレーションシップの種類

  • テーブル同士の結び付き・関係性の種類

  • 1対多

  • 多対多
  • 一対一

1対多の事例

  • (1)ユーザー - (多)注文

  • (1)ブログの投稿者 - (多)ブログの投稿

  • (1)注文 - (多)注文明細

  • (1)部署 - (多)従業員

多対多の事例

  • (多) 商品 - (多) 商品カテゴリ

  • (多) ブログの投稿 - (多)ブログのカテゴリ

  • (多) ユーザー - (多) 操作権限

一対一の事例

  • 特殊なので、あまり使う機会はない

内部結合でテーブルを結合するinner join

  • 構文
select
  テーブル名1.列名,
  テーブル名2.列名 ...
from
  テーブル名1
inner join
  テーブル名2
on テーブル名1.列名 = テーブル名2.列名;

内部結合 + 絞り込み

  • 構文 inner join + where
select
  テーブル名1.列名,
  テーブル名2.列名 ...
from
  テーブル名1
inner join
  テーブル名2
on テーブル名1.列名 = テーブル名2.列名
where
  絞り込み条件;

select文の記載順序と実行順序(結合を追加)

  • 記述順序 (必ずこの順序で書く必要がある)

    • 1 . select ・・・ 取得行(カラム)の指定
    • 2 . from ・・・ 対象テーブルの指定
    • 3 . 結合処理
    • 4 . where ・・・ 絞り込み条件の指定
    • 5 . group by ・・・ グループ化の条件を指定
    • 6 . having ・・・ グループ化した後の絞り込み条件を指定
    • 7 . order by ・・・ 並び替え条件を指定
    • 8 . limit ・・・ 取得する行数の制限
  • 実行順序

    • 1 . from ・・・ 対象テーブルの指定
    • 2 . 結合処理
    • 3 . where ・・・ 絞り込み条件の指定
    • 4 . group by ・・・ グループ化の条件を指定
    • 5 . having ・・・ グループ化した後の絞り込み条件を指定
    • 6 . select ・・・ 取得行(カラム)の指定
    • 7 . order by ・・・ 並び替え条件を指定
    • 8 . limit ・・・ 取得する行数の制限

外部結合

  • 片方のテーブルの情報がすべて出力される、テーブルの結合
  • 外部結合は欠落のあるデータを取り扱う結合。

  • 構文 :外部結合 left outer join

select
  テーブル名1.列名,
  テーブル名2.列名 ...
from
  テーブル名1
left outer join
  テーブル名2
on テーブル名1.列名 = テーブル名2.列名;

left outer join / right outer join

  • left outer join...左側(from句で最初に書いたテーブル)をマスタとする。

  • right outer join...右側(from句で後に書いたテーブル)をマスタとする。

内部結合 inner join

  • お互いに一致している行が統合テーブルの対象となる

テーブルの足し算 集合演算子 union nuion all

  • 構文
select 列1, ... from テーブル1
union select 列2, ... FROM テーブル2
  • ベースとなるselectの結果に、unionの後に記載したselectの結果を足し算する