📝

SQLの基本的な構文のまとめ

2023/08/11に公開

かなり前、データベーススペシャリストの勉強をしていた際に整理した、基本的な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