リレーショナルデータベース(RDB)とは
データベース構造の一種で、複数の表形式でデータを管理しているもの。
- テーブルを分割していることでデータの管理が効率的になり、安全、確実、高速に処理しやすい。
- ACID特性を持ち、トランザクション処理の信頼性と安全性が高い。
- 複数のテーブルに分かれるため結合処理が必要になり、わかりづらくなる。
- データ量が多くなると更新するときに時間がかかりやすい。
リレーションとは
テーブルそのもの。
テーブルの列(カラム)の定義とすべての行(レコード)の集まりのこと。
リレーションシップとは、
テーブル同士を共通した行(カラム)で関連づけること。
データの整合性をデータベースに保証させることができる。
Primary Key(主キー)
テーブルの各行(レコード)を重複せずに識別できるようになる列(カラム)のこと。
Primary Keyは、候補キーの中からテーブルごとに1つだけ選ばれる。
同一の値は存在しないこと(一意性制約)、 値がNULLでないこと(非NULL制約)という制約を必ず満たすもの。
社員番号のような自然に一意性を持つ列を「自然キー」という。
- 管理目的で追加された列を「人工キー」という。
- 複数の列を組み合わせることで一意性を確保し、1つの主キーとしているものを「複合主キー」という。
Foreign Key(外部キー)
他のテーブルの主キーと関連づけさせるための列(カラム)のこと。
- Foreign Keyが指し示す先にあるべき行が存在することによってリレーションシップが成立する。
- 参照先に必ず存在する状態を参照整合性といい、参照制約を満たすもの。
- 制約を満たしている場合は、同じカラムにPrimary KeyとForeign Key両方を付与することもできる。
JOIN句
複数のテーブルを結合させる
SELECT * FROM customers JOIN orders ON customers.id = orders.customer_id JOIN items ON orders.item_id = items.id
3つ以上のテーブルの結合は、JOIN・ON句を追加し1つずつ結合処理していく。
Foreign Keyの値がNULLのときは、結合先が見つからず行ごと消滅してしまう。
外部結合
- 内部結合・・・結合する先が見つからないときは、結果に表示されず行ごと消滅するJOIN句での結合。
- 外部結合・・・結合する先が見つからないとき、結合先のカラムにNULLを入れて、すべての行を強制的に表示する方法。
外部結合の種類
・左外部結合(LEFT JOIN)
左のテーブルのすべての行を表示する。
・右外部結合(RIGHT JOIN)
右のテーブルのすべての行を表示する。
・完全外部結合(FULL JOIN)
左右のテーブルのすべての行を表示する。
MySQLはサポート外なのでUNIONで左右をつないで代用する。
左のテーブルのすべての行を表示する。
・右外部結合(RIGHT JOIN)
右のテーブルのすべての行を表示する。
・完全外部結合(FULL JOIN)
左右のテーブルのすべての行を表示する。
MySQLはサポート外なのでUNIONで左右をつないで代用する。
- 自己結合・・・同じテーブル同士を別名(AS句)をつけて結合。
- 副問い合わせの結果との結合・・・テーブルの代わりに副問い合わせの式を入れる。必ず別名(AS句)をつける。
SELECT * FROM customers JOIN ( SELECT * FROM orders WHERE price >=5000 ) AS orders_5000 ON customers.id = orders_5000.customer_id;