主流DBMS標準SQLの基本構文

技術的備忘録

主流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 テーブル名;

 表紙ページへ戻る

タイトルとURLをコピーしました