SQLのコメントについてまとめています。
SQLのコメントのサンプルコード
SQLのコメントにはDBMSによって差異があります。サンプルを交えて、独自拡張部分を紹介します。
【関連記事】
▶SQLのコメントの使い方 主要DBMSだけでもこれだけ違う 独自拡張機能も
OracleのSQLコメントの例
「REMARK」は、OracleのコマンドラインインタフェースSQL*Plusで有効なコメント用コマンドです。SQL標準ではないので、Oracle以外ではエラーになります。
REMARK Commission Report; REMARK to be run monthly.; COLUMN LAST_NAME HEADING 'LAST_NAME'; COLUMN SALARY HEADING 'MONTHLY SALARY' FORMAT $99,999; COLUMN COMMISSION_PCT HEADING 'COMMISSION %' FORMAT 90.90; REMARK Includes only salesmen; SELECT LAST_NAME, SALARY, COMMISSION_PCT FROM EMP_DETAILS_VIEW WHERE JOB_ID='SA_MAN';
参考)Oracle公式ドキュメント:スクリプトへのコメントの挿入について
「/*」と「*/」で囲むと複数行のブロックコメントアウトができます。1行のみのコメントアウトも可能です。ただし、コメントのネスト(入れ子)はできません。
/* Commission Report to be run monthly. */ COLUMN LAST_NAME HEADING 'LAST_NAME'; COLUMN SALARY HEADING 'MONTHLY SALARY' FORMAT $99,999; COLUMN COMMISSION_PCT HEADING 'COMMISSION %' FORMAT 90.90; REMARK Includes only salesmen; SELECT LAST_NAME, SALARY, COMMISSION_PCT FROM EMP_DETAILS_VIEW /* Include only salesmen.*/ WHERE JOB_ID='SA_MAN';
「–」は記述した部分から行の最後までをコメント扱いにします。「/*」と「*/」の間で使うことで、擬似的にコメントのネストが可能です。
-- Commissions report to be run monthly DECLARE --block for reporting monthly sales
ただし、行の途中から「–」を記述して良いのは、SQLの記述の場合のみ。SQL*Plusのコマンドの場合は、行頭でのみコメントが可能です。例えば、以下の場合はコメントとして扱われません。
SET LONG 777 -- set maximum width for LONG to 777
SQL ServerのSQLコメントの例
「–」は記述した箇所から行末までをコメントとして扱います。
-- Choose the AdventureWorks2012 database. USE AdventureWorks2012; GO -- Choose all columns and all rows from the Address table. SELECT * FROM Person.Address ORDER BY PostalCode ASC; -- We do not have to specify ASC because -- that is the default. GO
SQL Serverでは、「/*」「*/」を使って、コメントを入れ子(ネスト)にすることが可能です。以下の記述では、SQL内の「/*」が入れ子のコメント内のコメント開始と解釈され、対応する「*/」がないためエラーとなります。
DECLARE @comment AS VARCHAR(20); GO /* SELECT @comment = '/*'; */ SELECT @@VERSION; GO
エラーを回避するには、以下のように記述します。
DECLARE @comment AS VARCHAR(20); GO /* SELECT @comment = '/*'; */ */ SELECT @@VERSION; GO
参考)スラッシュ アスタリスク (ブロック コメント) (Transact-SQL) – SQL Server | Microsoft Docs
MySQLのSQLコメントの例
MySQLでは、単一行のコメントアウト「–」と「/* ~ */」のブロックコメントアウトに加えて、「#」が使用可能。#を記述した箇所から行末までがコメント扱いになります。
ただし、「#」は標準SQLではないため、MySQL以外ではエラーになります。他のDBMSへの移植性を考慮するなら、「#」を使うのは避けたほうが良いでしょう。
mysql> SELECT 1+1; # This comment continues to the end of line mysql> SELECT 1+1; -- This comment continues to the end of line mysql> SELECT 1 /* this is an in-line comment */ + 1; mysql> SELECT 1+ /* this is a multiple-line comment */ 1;
参考)MySQL :: MySQL 5.6 リファレンスマニュアル :: 9.6 コメントの構文
MySQLでは、ブロックコメントの入れ子は許可されていません。一時的な複数行のブロックコメントの中に、コメントをつけたい場合は、「–」を併用しましょう。
/* この記述方法はOK -- -- comment */
なお、入れ子になっているブロックコメント箇所に「–」を入れてもエラーとなります。
/* この記述方法だとエラーになる -- -- /* comment */ */
PostgreSQLのSQLコメントの例
PostgreSQLは、ブロックコメント「/* ~ */」を入れ子(ネスト)にできます。
-- これは標準 SQL92 のコメントです /* ネスト付き * 複数行コメント /* ネストされたブロックコメント */ */
主要DBMSで共通して使えるコメントは「–」のみです。「/* */」を使ったブロックコメントは各DBMSで独自拡張という扱いになっていて、入れ子が許可されているものと許されていないものがあります。他のDBMSへの移植性を考慮するなら、コメントは「–」か「ネストにしない/* ~ */のブロックコメント」のみ使用するのが良いでしょう。
まとめ
- 「–」は単一行のコメントアウト、「/* ~ */」は複数行のブロックコメントアウト
- ブロックコメントアウトは、DBMSによって入れ子記述が可能な場合あり
- DBMSにより「#」や「REMARK」など独自のコメントマークがある