主流DBMSそれぞれの基本操作を書くにあたって、標準SQLに該当する操作は、全てのDBMSで同じになるので、ここに一つに纏めておきたいと思う。
基本的な構文しか書かない。
「ド忘れ」したときにご利用ください。
DML(Data Manipulation Language)
SELECT
基本構文
SELECT 列名1, 列名2, … FROM テーブル名;
検索条件
SELECT 列名1, 列名2, … FROM テーブル名
WHERE 列名1 = 値 (検索条件を書く) ;
検索条件に使用する条件演算子
= 等しい (一般のコンピュータ言語では、統合は == になるが、SQLでは一つの = になる)
< より小さい
> より大きい
<= 以下
>= 以上
<> 等しくない
LIKE ‘xxx%’ : xxxの部分だけ等しく、%の部分は一致していない。文字列でのみ使用できる。
IN(値 , 値 , … , 値 ) : 値に該当するレコードだけ抽出する。
集約1
SELECT 列名1, 列名2
FROM テーブル名
GROUP BY 列名1, 列名2
[HAVING 検索条件]
;
HAVING句の条件は、集約結果に対して付ける条件なので、GROUP BY句の無いSQLには使用できない。
集約2
SELECT DISTINCT 列名1, 列名2
FROM テーブル名
内部結合
SELECT A.列名11, A.列名12, B.列名21, B.列名22, ….
FROM 甲テーブル名 A
INNER JOIN 乙テーブル名 B ON A.列名11 = B.列名21
WHERE 検索条件 ;
INNERを省略する記法もあるが、可読性が悪くなるので、推奨されない。
左外部結合
SELECT A.列名11, A.列名12, B.列名21, B.列名22, ….
FROM 甲テーブル名 A
LEFT OUTER JOIN 乙テーブル名 B ON A.列名11 = B.列名21
WHERE 検索条件 ;
OUTERを省略する記法もあるが、可読性が悪くなるので、推奨されない。
右外部結合
SELECT A.列名11, A.列名12, B.列名21, B.列名22, ….
FROM 甲テーブル名 A
RIGHT OUTER JOIN 乙テーブル名 B ON A.列名11 = B.列名21
WHERE 検索条件 ;
OUTERを省略する記法もあるが、可読性が悪くなるので、推奨されない。
完全外部結合
SELECT A.列名11, A.列名12, B.列名21, B.列名22, ….
FROM 甲テーブル名 A
FULL OUTER JOIN 乙テーブル名 B ON A.列名11 = B.列名21
WHERE 検索条件 ;
交差結合
SELECT A.列名11, A.列名12, B.列名21, B.列名22, ….
FROM 甲テーブル名 A
CROSS JOIN 乙テーブル名 B
WHERE 検索条件 ;
UNION
SELECT 列名1, 列名2, 列名N FROM 甲テーブル名
UNION [ALL]
SELECT 列名1, 列名2, 列名N FROM 乙テーブル名
[GROUP BY 列名2]
[ORDER BY 列名1]
;
SELEC句の項目欄は、全てのSELECT句で同一にしなければならない。
副問い合わせ
SELEC句の項目で、副問い合わせする
SELECT
社員ID,
(SELECT 担当者名 FROM 受付テーブル WHERE 社員ID=社員ID) AS 社員名
FROM 社員マスター ;
FROM句のテーブル名で、副問い合わせする
SELECT 社員ID, 社員名
FROM (SELECT 社員ID, 担当者名 AS 社員名 FROM 受付テーブル) ;
WHERE句の条件欄で、副問い合わせする
SELECT 社員ID, 社員名
FROM 社員マスター
WHERE 社員ID = (SELECT 社員ID FROM 受付テーブル) ;
INSERT
INSERT INTO テーブル名 ( 列名1 , 列名2 , … , 列名N )
VALUES ( 値1 , 値2 , … , 値N ) ;
列名は省略できる。
INSERT INTO テーブル名
VALUES ( 値1 , 値2 , … , 値N ) ;
SELCT文から値を取得する。
INSERT INTO テーブル名 ( 列名1 , 列名2 , … , 列名N )
SELECT 列名1 , 列名2 , … , 列名N FROM 参照テーブル名 ;
UPDATE
UPDATE テーブル名
SET 列名1 = 値1, 列名2 = 値2 , … 列名N = 値N
WHERE 検索条件 ;
DELETE
DELETE FROM テーブル名
WHERE 検索条件 ;
MERGE
MERGE INTO 更新テーブル名
USING 参照テーブル名
ON (マージ条件)
WHEN MATCHED THEN – マージ条件に一致する
UPDATE文
WHEN NOT MATCHED THEN – マージ条件に一致しない
INSERT文
;
DCL(Data Control Language)
GRANT
GRANT 権限名 ON オブジェクト名 TO ユーザー名 ;
権限名はDBMSごとに多少の方言はあるが、だいたい以下のものになる。
SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER
または、全ての主要権限を意味する以下の権限を指定する。
ALL [ PRIVILEGES ]
REVOKE
REVOKE 権限名 ON オブジェクト名 FROM ユーザー名 ;
DDL(Data Definition Language)
CREATE
CREATE句は種類が多すぎるので、主要な一部だけ、簡単に掲載する。
TABLE
CREATE TABLE テーブル名 (
列名1 データ型 [NOT NULL] [オプション] ,
列名2 データ型 [NOT NULL] [オプション] ,
….
列名N データ型 [NOT NULL] [オプション] ,
[PRIMARY KEY (列名1 , 列名2, … ) , ]
[FOREIGN KEY (列名1 , 列名2)
REFERENCES 参照テーブル名 [(外部のキー列名 , ….)] ]
) ;
VIEW
CREATE VIEW ビュー名 AS SELECT文 ;
INDEX, USER, ROLE, SCHEMA, TRIGGER, PROCEDURE, FUNCTIONなどはDBMSにより仕様が大きく異なるので標準化されていません。
DROP
TABLE
DROP TABLE テーブル名
VIEW
DROP VIEW ビュー名
ALTER
TABLE
名称変更
ALTER TABLE テーブル名 RENAME TO 新テーブル名;
ALTER TABLE テーブル名 RENAME INDEX インデックス名 TO 新インデックス名;
ALTER TABLE テーブル名 RENAME COLUMN 列名 TO 新列名;
追加
ALTER TABLE テーブル名 ADD COLUMN 列名 データ型;
ALTER TABLE テーブル名 ADD INDEX テーブル名(列名);
列変更
ALTER TABLE テーブル名 CHANGE COLUMN 列名 新列名 データ型 制約;
ALTER TABLE テーブル名 MODIFY COLUMN 列名 データ型 制約;
削除
ALTER TABLE テーブル名 DROP COLUMN 列名;
ALTER TABLE テーブル名 DROP INDEX インデックス名;
VIEW
ALTER VIEW ビュー名 AS SELECT文;
TRUNCATE
TRUNCATE TABLE テーブル名;