関係データベースの設計と運用①

### DDLとは？
DDLとは、```データ定義言語と呼ばれるSQLの命令```のことです。

データベースに新規テーブルを作成する```CREATE```文、テーブルを削除する```DROP```文、既存テーブルのカラム定義を変更する```ALTER```文などをデータ定義言語（英：Data Definition Language、略：DDL）
#### 出典
https://medium-company.com/ddl%E3%81%A8dml%E3%81%AE%E9%81%95%E3%81%84/#:~:text=DDL%E3%81%A8%E3%81%AF,DDL%EF%BC%89%E3%81%A8%E3%81%84%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

### 整合性とは？
“整合性（せいごうせい）”の意味は```矛盾がなく整っていること```“つじつまが合っていること”。

「整合性がある・ない」「整合性に欠ける」「整合性を図る」「整合性を持たせる」いった形で使われています。
#### 出典
https://kufura.jp/work/business-manner/192733#:~:text=%E2%80%9C%E6%95%B4%E5%90%88%E6%80%A7%EF%BC%88%E3%81%9B%E3%81%84,%E3%82%8F%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

### 検査制約
データベース中の表のデータは，値の範囲や条件など制限を持つ場合が多くあります。例えば，商品の情報をデータベースに格納する場合，```商品価格として負の値はあり得ません。そのため，負の値はデータベースに存在してはいけない値```であり，挿入又は更新時に値をチェックする必要があります。このように，データ挿入又は更新時に制約条件をチェックし，```条件を満たさないデータの場合は操作を抑止```することで```表データの整合性を保つ制約```が検査制約です。
#### 出典
https://itpfdoc.hitachi.co.jp/manuals/3000/3000635243/U3520326.HTM#:~:text=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E4%B8%AD%E3%81%AE%E8%A1%A8%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AF%EF%BC%8C%E5%80%A4%E3%81%AE%E7%AF%84%E5%9B%B2%E3%82%84%E6%9D%A1%E4%BB%B6%E3%81%AA%E3%81%A9%E5%88%B6%E9%99%90%E3%82%92%E6%8C%81%E3%81%A4%E5%A0%B4%E5%90%88%E3%81%8C%E5%A4%9A%E3%81%8F%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E4%BE%8B%E3%81%88%E3%81%B0%EF%BC%8C%E5%95%86%E5%93%81%E3%81%AE%E6%83%85%E5%A0%B1%E3%82%92%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AB%E6%A0%BC%E7%B4%8D%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%EF%BC%8C%E5%95%86%E5%93%81%E4%BE%A1%E6%A0%BC%E3%81%A8%E3%81%97%E3%81%A6%E8%B2%A0%E3%81%AE%E5%80%A4%E3%81%AF%E3%81%82%E3%82%8A%E5%BE%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%81%9D%E3%81%AE%E3%81%9F%E3%82%81%EF%BC%8C%E8%B2%A0%E3%81%AE%E5%80%A4%E3%81%AF%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AB%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%A6%E3%81%AF%E3%81%84%E3%81%91%E3%81%AA%E3%81%84%E5%80%A4%E3%81%A7%E3%81%82%E3%82%8A%EF%BC%8C%E6%8C%BF%E5%85%A5%E5%8F%88%E3%81%AF%E6%9B%B4%E6%96%B0%E6%99%82%E3%81%AB%E5%80%A4%E3%82%92%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%EF%BC%8C%E3%83%87%E3%83%BC%E3%82%BF%E6%8C%BF%E5%85%A5%E5%8F%88%E3%81%AF%E6%9B%B4%E6%96%B0%E6%99%82%E3%81%AB%E5%88%B6%E7%B4%84%E6%9D%A1%E4%BB%B6%E3%82%92%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%97%EF%BC%8C%E6%9D%A1%E4%BB%B6%E3%82%92%E6%BA%80%E3%81%9F%E3%81%95%E3%81%AA%E3%81%84%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AF%E6%93%8D%E4%BD%9C%E3%82%92%E6%8A%91%E6%AD%A2%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E8%A1%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E6%95%B4%E5%90%88%E6%80%A7%E3%82%92%E4%BF%9D%E3%81%A4%E5%88%B6%E7%B4%84%E3%81%8C%E6%A4%9C%E6%9F%BB%E5%88%B6%E7%B4%84%E3%81%A7%E3%81%99%E3%80%82

### 非NULL制約
NOT NULL 制約は、```NULL 値が列に入力されない```ようにします。

NULL値は、不明の状態を表すためにデータベース内で使用されます。 デフォルトでは、 データベース・マネージャーに提供されるすべての組み込みデータ・タイプが NULL 値の存在をサポートします。 ただし、ビジネス・ルールによっては、値を常に提供しなければならないことを指示するものがあります (例えば、すべての従業員が緊急時連絡先情報を通知する必要があるなど)。 表の指定された列に NULL 値が割り当てられないことを保証するために、NOT NULL 制約が使用されます。 NOT NULL 制約が特定の列について定義されていると、その列に ```NULL値を入れようとする挿入または更新操作は失敗します```。
#### 出典
https://www.ibm.com/docs/ja/db2/11.5?topic=constraints-not-null#:~:text=NOT%20NULL%20%E5%88%B6%E7%B4%84%E3%81%AF,%E3%81%AF%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

### 参照制約
データベース中の表は，それぞれ独立しているのではなく，```お互いに関連を持っている場合があります```。一方の表に関連するデータがないと，ほかの表でそのデータの意味がないことがあります。表間のデータの```参照整合性を保つ```ため，```表定義時に特定の列（外部キーといいます）に定義する制約```が参照制約です。
#### 出典
http://itdoc.hitachi.co.jp/manuals/3020/3020645060/W4500107.HTM#:~:text=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E4%B8%AD%E3%81%AE%E8%A1%A8%E3%81%AF%EF%BC%8C%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E7%8B%AC%E7%AB%8B%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%EF%BC%8C%E3%81%8A%E4%BA%92%E3%81%84%E3%81%AB%E9%96%A2%E9%80%A3%E3%82%92%E6%8C%81%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E4%B8%80%E6%96%B9%E3%81%AE%E8%A1%A8%E3%81%AB%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8C%E3%81%AA%E3%81%84%E3%81%A8%EF%BC%8C%E3%81%BB%E3%81%8B%E3%81%AE%E8%A1%A8%E3%81%A7%E3%81%9D%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E6%84%8F%E5%91%B3%E3%81%8C%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E8%A1%A8%E9%96%93%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%8F%82%E7%85%A7%E6%95%B4%E5%90%88%E6%80%A7%E3%82%92%E4%BF%9D%E3%81%A4%E3%81%9F%E3%82%81%EF%BC%8C%E8%A1%A8%E5%AE%9A%E7%BE%A9%E6%99%82%E3%81%AB%E7%89%B9%E5%AE%9A%E3%81%AE%E5%88%97%EF%BC%88%E5%A4%96%E9%83%A8%E3%82%AD%E3%83%BC%E3%81%A8%E3%81%84%E3%81%84%E3%81%BE%E3%81%99%EF%BC%89%E3%81%AB%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%E5%88%B6%E7%B4%84%E3%81%8C%E5%8F%82%E7%85%A7%E5%88%B6%E7%B4%84%E3%81%A7%E3%81%99%E3%80%82

### 一意制約とは？
リレーショナルデータベースでテーブルにデータを追加・更新する際の制約の一つで、その列の中で```データが一意（他と重複しない）でなければならない```という制約。
#### 出典
https://e-words.jp/w/%E4%B8%80%E6%84%8F%E5%88%B6%E7%B4%84.html#:~:text=%E4%B8%80%E6%84%8F%E5%88%B6%E7%B4%84%E3%81%A8%E3%81%AF%E3%80%81%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%A7%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E8%BF%BD%E5%8A%A0%E3%83%BB%E6%9B%B4%E6%96%B0%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AE%E5%88%B6%E7%B4%84%E3%81%AE%E4%B8%80%E3%81%A4%E3%81%A7%E3%80%81%E3%81%9D%E3%81%AE%E5%88%97%E3%81%AE%E4%B8%AD%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8C%E4%B8%80%E6%84%8F%EF%BC%88%E4%BB%96%E3%81%A8%E9%87%8D%E8%A4%87%E3%81%97%E3%81%AA%E3%81%84%EF%BC%89%E3%81%A7%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%E3%81%AA%E3%82%89%E3%81%AA%E3%81%84%E3%81%A8%E3%81%84%E3%81%86%E5%88%B6%E7%B4%84%E3%80%82

### INNER JOIN
INNER JOIN(内部結合)とは、その名の通りテーブルとテーブルを結合するためのSQL構文です。そして、INNER(内部)であることの特徴は、```テーブルとテーブルの互いの条件に一致するレコード(データ行)をのみを抽出```するという点です。
#### 出典
https://www.sejuku.net/blog/56589#:~:text=INNER%20JOIN(%E5%86%85%E9%83%A8%E7%B5%90%E5%90%88)%E3%81%A8%E3%81%AF%E3%80%81%E3%81%9D%E3%81%AE%E5%90%8D%E3%81%AE%E9%80%9A%E3%82%8A%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%A8%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%82%92%E7%B5%90%E5%90%88%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AESQL%E6%A7%8B%E6%96%87%E3%81%A7%E3%81%99%E3%80%82%E3%81%9D%E3%81%97%E3%81%A6%E3%80%81INNER(%E5%86%85%E9%83%A8)%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AE%E7%89%B9%E5%BE%B4%E3%81%AF%E3%80%81%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%A8%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E4%BA%92%E3%81%84%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%81%AB%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89(%E3%83%87%E3%83%BC%E3%82%BF%E8%A1%8C)%E3%82%92%E3%81%AE%E3%81%BF%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B%E3%81%A8%E3%81%84%E3%81%86%E7%82%B9%E3%81%A7%E3%81%99%E3%80%82

# 外部結合 ```OUTER JOIN```
p240 ```片方のテーブルの情報が全て出力```される。
外部結合という名前の由来は、このNUllにあります。「```元のテーブルにない(つまりテーブルの外部から）情報を結果に持ってくる```」という意味で外部結合と呼ばれる。

p241　どちらのテーブルをマスタにするか
```LEFT```、```RIGHT```どちらにするかで元のテーブルにない情報のテーブルを指定できる。
```
FROM Shohin AS S LEFT OUTER JOIN TempoShohin AS TS
  ON TS.shohin_id = S.shohin_id;
```
この場合は、TempoShohinがマスタのテーブルとなる。
### 出典
https://www.shoeisha.co.jp/book/detail/9784798144450

# SQL文
### INSERT文
テーブルに値を挿入する。
```
INSERT INTO テーブル名 （列１、列２...) VALUES (値１、値２...)
```
### UPDATE文
テーブルのデータを変更することができる。
```
UPDATE テーブル名
   SET 列名 = 式;
```
```SET```句に更新後の値を書き込む。
列名でカラム名を指定。

### CASE式
```
CASE WHEN 評価式 THEN 式
     WHEN 評価式 THEN 式
     .
     . 
     .
     ELSE 式
END
```
```評価式```で真であれば```THEN```以降の式を行う。
全てが真でなかった場合は、
```ELSE```の式を行う。

## 出典
https://www.shoeisha.co.jp/book/detail/9784798144450