0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQL テーブルの結合

Posted at

こちらの記事では、私が学んだSQLについて記載しております。
自身の忘れないためのメモとしております。
間違っている部分もあるかもしれませんので、ご了承ください。

テーブルの結合とは

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

テーブルの[正規化]は重要!!

・データ管理が容易になる 
・データ容量の削減
→特別な意図がなければ、データは正規化する。

例
ユーザー情報の中で都道府県のデータを取得する際に
”文字列”でデータを保存してしまうと、データに負荷がかかる。
テーブルは別にして、都道府県のみのデータにすることで、”文字列”をまとめられる。

[正規化なし]
テーブルusers 
id  name  都道府県
1  田中  大阪
2  鈴木  大阪
3  佐藤  大阪

[正規化あり]
テーブルusers        テーブル都道府県
id  name  都道府県    id   都道府県
1  田中   2      1  東京
2  鈴木   2      2  大阪
3  佐藤   2      3  京都

テーブルを分け正規化することで、データ管理がしやすくなり、容量を削減可能。
もし今後、都道府県の「大阪」が「太田」と変更された場合でも、テーブル都道府県の変更を行えばすぐに対応可能になる。

内部結合 inner joinで結合可能

***記述方法***
select
     テーブル名a.id,
     テーブル名b.表記したいカラム名   ←テーブル名b.nameなど
from
     テーブル名a
inner join
     テーブル名b
on テーブル名a.id = テーブル名b.a_id; ←2つのテーブルのidを結合する

***テーブル名は省略も可能***
テーブル users, orders

select
    u.id,
    u.name,
    o.name
from 
    users u   ←users as uとして変更可能。asは省略も可能なので左のような記載になる。
inner join
    orders o
on u.order_id = o.id;

外部結合 left outer join/right outer join

inner joinではnullは表記せず、left outer joinではnullも表記する
select
	u.last_name,
    u.id,
    o.user_id,
    o.id
from
	users u
-- inner join
left outer join
	orders o
on u.id = o.user_id
order by u.id;

3つ以上のテーブルの結合 inner join連続で記述

テーブル users, orders, orders_details
select	
     u.id,
     u.name,
     o.name,
     od.price
from
   users u
inner join
   orders o
on u.order_id = o.id
inner join
   orders_details od
on od.order_id = o.id;

一対多もしくは多対多の関係は、確認して行うこと!!!

テーブルの足し算 union/union all

テーブル1とテーブル2で列数(カラム名)を合わせる必要があります!!
テーブル users ,adomin
select
    email,
    name,
    gender
from
    users
union       ←unionのみだと重複は省略。union allだと重複も表記される。
select
    email,
    name,
    gender
from
	admin
;


***条件分岐*** order byのみ全体の1つしか記述できない!!!!!!!
select
	email,
    last_name,
    first_name,
    gender
from
	users
where
	gender = 1
union
select
	email,
    last_name,
    first_name,
    gender
from
	admin_users
where
	gender = 2
order by gender    ←order byは全体記述の最後!
;

補足

主キー/外部キー

・主キー・・1つの行を特定できる列(カラム)のこと
・外部キー・・・他のテーブルの関連付けに使う列(カラム)のこと

記述順序

記述順序                   実行順序
select・・・・・取得カラムの指定          from・・・・・・・対象テーブルの指定
from・・・・・・・対象テーブルの指定         結合処理
結合処理                    where・・・・・・絞り込み条件式の指定
where・・・・・・絞り込み条件の指定         group by・・グループ化の条件を指定
group by・・グループ化の条件指定        having・・・・・グループ化した後の絞り込み条件を指定
having・・・・・グループ化した後の絞り込み条件指定  select・・・・・取得カラムの指定
order by・・・並び替え条件指定          order by・・並び替え条件を指定
limt・・・・・・・・取得する行数の制限         limit・・・・・・取得する行数の制限

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?