テーブルの結合とはテーブルの正規化とは
テーブルの正規化とは
- テーブルを分けて情報の重複をなくしていく作業
テーブルの正規化するメリット
- 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の結果を足し算する