😋

データベース - SQLの機能

2022/12/14に公開

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