![](https://ntorelabo.com/wp-content/uploads/2022/09/22057596_m.jpg)
データベース設計
Contents
トランザクション
複数の処理を一つの処理とみなし、全て成功か、全て失敗のどちらかになる。
ACID特性
原子性 ATOMICITY | 完全に実行されるか、全く実行されないかどちらか |
一貫性 CONSISTENCY | トランザクションの実行前後で整合性をもち、一貫したデータである |
独立性 ISOLATION | 他のトランザクションへ影響しない |
耐久性 DURABILITY | データが失われることは無い |
ロック
共有ロック
- データを参照する時
- 共有ロック中は他のトランザクションからもデータを参照できる
- 共有ロック中は更新はできません。
占有ロック
- データを更新する時
- 占有ロック中は他のトランザクションからもデータを参照できない
- 占有ロック中は更新はできません。
デッドロック
2つのトランザクションが、お互いが共有資源解放待ち状態となり、どちらも処理も進行できなくなる状態
コミット
トランザクション処理を確定させる。
アボート
中止、強制終了
ロールバック
トランザクション処理失敗 → トランザクション前に戻す
ロールフォワード
データベースの内容を障害前の変更時の状態に戻す
選択
必要な行だけを抜き出す
射影
データの中から、必要な列だけを抜き出す
結合
同じ列を基準に2つの表をくっつける
正規化
- 整合性の向上
第1正規化
- 繰り返し要素をなくす
- 行の結合を解除
第2正規化
主キーの一部の関数従属性を排除。
※関数従属性…ある列に別の列が連動する、例)従業員番号→氏名
- 主キー … 行を特定できる列
- 複合キー … 行をを特定できる複数の列
第3正規化
主キー以外の列の関数従属性を排除
外部キー
- 参照整合性制約
- 参照先の表の列の値しかとれない
![](https://ntorelabo.com/wp-content/uploads/2023/04/スクリーンショット-2023-05-27-12.42.05.png)
非NULL制約
NULLが入れられない
![](https://ntorelabo.com/wp-content/uploads/2022/09/22057596_m.jpg)
SQL
AS
SELECTで抽出したものに別名をつける。
SELECT
customer AS '顧客'
, cost AS '費用'
, category AS 'カテゴリ'
FROM
item;
CHECK
条件に合わなければ、書き込みを拒否される
CHECK( 条件式 )
GROUP BY
- 特定の列の数値によって、切り分ける。(最大値、最小値など)
![](https://ntorelabo.com/wp-content/uploads/2023/04/スクリーンショット-2023-05-05-10.33.55.png)
![](https://ntorelabo.com/wp-content/uploads/2023/04/スクリーンショット-2023-05-05-10.33.21.png)
IN
複数の値のうちいずれかと一致している行を抽出する。
SELECT * FROM テーブル名 WHERE カラム名? IN ('値1', '値2');
![](https://ntorelabo.com/wp-content/uploads/2023/04/スクリーンショット-2023-05-17-19.28.01.png)
LIKE
- 文字列検索
ワイルドカード
- % … 0文字以上の任意の文字列
- _ … 任意の1文字
ORDER BY
SELECT
SELECT 列名,列名,…
FROM テーブル名
![](https://ntorelabo.com/wp-content/uploads/2023/04/スクリーンショット-2023-05-04-19.22.49.png)
*(アスタリスク) … 全ての列
DISTINCT
SELECTで抽出した、レコードで重複しているものを除外する
WHERE
条件を指定して選択します。
SELECT 列名 FROM
テーブル名 WHERE 条件A AND 条件B;
{SQLの命令文} WHERE [列1] = [値];
解答法
![](https://ntorelabo.com/wp-content/uploads/2023/04/スクリーンショット-2023-05-24-19.50.48.png)
HAVING
集合関数を使って行を絞る
![](https://ntorelabo.com/wp-content/uploads/2023/04/スクリーンショット-2023-05-05-10.59.11.png)
![](https://ntorelabo.com/wp-content/uploads/2023/04/スクリーンショット-2023-05-05-10.59.42.png)
CASE
CASE
WHEN {条件式} THEN {真の場合の値}
WHEN {条件式} THEN {真の場合の値}
…
ELSE {偽の場合の値}
END
集合関数
![](https://ntorelabo.com/wp-content/uploads/2023/04/スクリーンショット-2023-05-05-9.58.12.png)
![](https://ntorelabo.com/wp-content/uploads/2023/04/スクリーンショット-2023-05-05-9.58.37.png)
AVG
平均値を求める
COUNT
個数を求める
MIN
最小値を求める
MAX
最大値を求める
SUM
合計値を求める
・select SUM(列名) from (テーブル名)
・条件付き
select SUM(列名) from (テーブル名) where (条件式)
・グループ
select SUM(列名) from (テーブル名) group by (列名)
副問合せ
<手順>
- 副問合せ
- ①の結果を使用して主問合せをする
SELECT * FROM 従業員表
WHERE 年齢 <> ( SELECT MAX(年齢) FROM 従業員表 )
… 副問合せ