😋
データベース - SQLの機能
Select
SELECT *
FROM table
WHERE column = 'value';
SELECTの中で、projectionもできる
SELECT title, length*0.016667 AS length, ‘hrs.’ AS inHours
FROM Movies
WHERE studioName = ‘Marvel Studios’ AND year = 2012;
Null
- 未知の値
- 該当しないattributeに対する値
- 隠蔽された値(phone numberなど)
- NULL > 0 = UNKNOWN (Boolean expression)
- NULL + NULL = NULL (Arithmetic expression)
Order By
- 昇順(ASC)と降順(DESC)にソートできる
SELECT *
FROM table
ORDER BY column ASC/DESC;
Subquery
- SELECT文の中にSELECT文を記述できる
SELECT *
FROM table
WHERE column IN (SELECT column FROM table);
- EXISTS R: Rが空でない
- s IN R: sがRの要素である
- s > ALL R: sがRのすべての要素より大きい
- s > ANY R: sがRの要素のいずれかより大きい
Distinct
- ユニークな値(重複なし)のみを取得する
SELECT DISTINCT column
FROM table;
Grouping
- グループごとに集計する
SELECT column, COUNT(*)
FROM table
GROUP BY column;
Having
- GROUP BYで集計した結果に対して条件を指定する
SELECT column, COUNT(*)
FROM table
GROUP BY column
HAVING COUNT(*) > 1;
Insert
- データを挿入する
INSERT INTO table (column1, column2, column3)
VALUES (value1, value2, value3);
- データを複数挿入する
INSERT INTO table (column1, column2, column3)
VALUES (value1, value2, value3),
(value1, value2, value3),
(value1, value2, value3);
- データを挿入する(NULLを含む)
INSERT INTO table (column1, column2, column3)
VALUES (value1, NULL, value3);
- データを挿入する(NULLを含む)
INSERT INTO table (column1, column2, column3)
VALUES (value1, NULL, value3);
- ほかのテーブルからデータを挿入する
INSERT INTO table (column1, column2, column3)
SELECT column1, column2, column3
FROM table2;
Delete
- データを削除する
DELETE FROM table
WHERE column = value;
Update
- データを更新する
UPDATE table
SET column1 = value1, column2 = value2
WHERE column3 = value3;
-- column1とcolumn2をvalue1とvalue2に更新する
Transaction
- Transactionは、複数のSQL文をまとめて実行する単位である。COMMITされるまでDBは変更されない。
- COMMIT: transaction 処理成功
- ROLLBACK: transaction 処理失敗
Dirty data の処理
- Dirty Data: commitされていないデータ
- Dirty Read: 他のトランザクションが更新したデータを読み込む
Dirty readを許さなければ、並列処理ができない。
Dirty readを許すと、データの整合性が保たれない。
Dirty readを許すかどうかは、トランザクションの隔離レベルで決める。
- Read Uncommitted: Dirty ReadすべてOK
- Read Committed: Transaction実行中、他のTransactionによって削除されることがある
- Repeatable Read: 他のTransactionによってtupleが挿入されることがある
- Serializable: すべて逐次的に実行される
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Discussion