📝
SQLの基本的な構文のまとめ
かなり前、データベーススペシャリストの勉強をしていた際に整理した、基本的なSQLの構文の一覧です。
複雑なSQLやDBMS固有のSQLについては対応しておらず、基本的な構文のみです。
SELECT
SELECT DISTINCT 列名1, 列名2
FROM テーブル名1, テーブル名2
WHERE 条件式
GROUP BY 列名1, 列名2
HAVING SUM(列名3) = 10
ORDER BY 列名1 ASC, 列名2 DESC;
UNION ALL
SELECT 列名1, 列名2
FROM テーブル名3;
副問合せ
以下、単一行副問合せ
SELECT 列名1, 列名2
FROM テーブル名1
WHERE 列名1 !=
(SELECT UNIQUE 列名1
FROM テーブル名2);
以下、複数行副問合せ
SELECT 列名1, 列名2
FROM テーブル名1
WHERE 列名1 IN
(SELECT 列名1
FROM テーブル名2);
SELECT 列名1, 列名2
FROM テーブル名1
WHERE 列名1 > ALL
(SELECT 列名1
FROM テーブル名2);
ANYとSOMEは同一の意味。
ALL
ANY
SOME
相関副問合せ
SELECT 列名1
FROM テーブル名1 X
WHERE EXISTS
(SELECT *
FROM テーブル名2 Y
WHERE Y.列名1 = X.列名1);
集合演算
UNION
UNION ALL
EXCEPT
INTERSECT
集約関数
基本的にNULLを除外して集約する。
しかし、COUNT(*)は例外。
SUM(列名1)
AVG(列名1)
MAX(列名1)
MIN(列名1)
COUNT(列名1)
COUNT(DISTINCT 列名1)
COUNT(*)
MAX(列名1)
COALESCE
NULLでない最初の引数を返す関数。
SELECT COALESCE (列名1, 列名2)
FROM テーブル名1;
CASE
SELECT 列名1,
CASE
WHEN 条件式1 THEN 'a'
WHEN 条件式2 THEN 'b'
ELSE 'c'
END
FROM テーブル名1;
SELECT 列名1,
CASE 列名2
WHEN 1 THEN 'a'
WHEN 2 THEN 'b'
ELSE 'c'
END
FROM テーブル名1;
BETWEEN
SELECT 列名1
FROM テーブル名1
WHERE 列名2 BETWEEN 'A01' AND 'A20';
IN
SELECT 列名1
FROM テーブル名1
WHERE 列名2 IN('A01', 'A02');
LIKE
SELECT 列名1
FROM テーブル名1
WHERE 列名2 LIKE '%bcd%';
IS NULL / IS NOT NULL
SELECT 列名1
FROM テーブル名1
WHERE 列名2 IS NOT NULL
AND 列名3 IS NULL;
INSERT
INSERT INTO テーブル名1(列名1, 列名2) VALUES
('a', 'b');
INSERT INTO テーブル名1(列名1, 列名2)
SELECT 列名1, 列名2
FROM テーブル名2;
UPDATE
UPDATE テーブル名
SET 列名1='a'
WHERE 条件式;
DELETE
DELETE FROM テーブル名1
WHERE 条件式;
CREATE TABLE
CREATE TABLE テーブル名1
(列名1 INTEGER NOT NULL CHECK(列名1 != 0),
列名2 NCHAR(10) UNIQUE NOT NULL DEFAULT 'a',
列名3 REFERENCES テーブル名2(列名10),
列名4 INTEGER CONSTRAINT 制約名1 UNIQUE,
列名5 CHAR(5),
FOREIGN KEY(列名4, 列名5)
REFERENCES テーブル名2(列名4, 列名5)
ON DELETE CASCADE,
PRIMARY KEY(列名1, 列名2),
UNIQUE(列名1, 列名3),
CONSTRAINT 制約名2 CHECK(列名1 >= 1));
上記の例では、FOREIGN KEYの末尾に「ON DELETE CASCADE」を指定している。
これは、参照先のカラムのレコードが削除された時に、
前半の「ON DELETE」の部分については、以下のものを指定できる。
ON DELETE
ON UPDATE
後半の「CASCADE」の部分については、以下のものを指定できる。
NO ACTION
CASCADE
SET NULL
Discussion