SQLのコメントアウトの使い方
SQLは、リレーショナルデータベースを用いてデータを操作したり定義したりする言語です。他のプログラミング言語と組み合わせて、DBMSを操作する必要があることからプログラミングAPIや言語が仕様として決められています。
ここでは、言語仕様に基づき使用されるコメント機能について解説していきます。
そもそもコメントアウトとは
コメントアウトとは、プログラミングコードにおいて実行処理として解釈されない注釈などをコメントとして記述することです。それぞれのプログラミング言語においてコメント機能が実装されています。
コメント機能は、ソースコードの説明文などの注釈や、デバッグコードを埋め込んで無効化しておくなどの用途に用います。
SQLのコメントアウト
SQLは、テキストファイルとして編集してSQLファイルとして格納し使用する場合が多いでしょう。作成したSQLファイルは、スクリプトファイルとして使用しますが、操作方法を解説したい場合などはファイルに注釈を入れておくと便利です。
その際には、SQLのコメント機能の定義に基づいて、コメントアウトしておくと良いでしょう。
主要SQLのコメントアウトの書き方
SQLが使えるリレーショナルデータベースは、商用パッケージからオープンソースソフトウェアまで多岐に渡ります。また、SQLはRDBMSの特性に合わせて定義されていることから、文法上の違い(方言)があります。ここでは、主要なRDBMSについてSQLのコメント機能を解説します。
標準SQLのコメント機能
標準SQLは、「ISO/IEC 9075」で定義されているSQLの仕様です。1986年以降それまでバラバラだった各社の提供するSQLを統一標準として定義したものです。各社の提供するSQLは、この標準に準拠するものと独自に定義した部分がありますので、利用するDBMSの仕様の確認も必要になります。
標準SQLにおけるコメント機能は、次の2種類です。
・2重ハイフン ”--” の後にコメントを使う 2重ハイフン ”--” 以降のテキストはコメントとして解釈されます。これは行末まで有効です。言い換えると1行単位のコメントに使用し、複数行の場合はその都度行頭に2重ハイフン ”--” を入れます。
SELECT * FROM DATA; -- この部分がコメントです
SELECT * FROM DATA; -- この部分がコメントです
・C言語形式で ”/*” と ”*/” の間にコメントを入れる C言語形式では、 ”/*” と ”*/” の間にコメントを入れます。この場合は、行の区切りは意識せずに、単1行あるいは複数行で使用できます。
SELECT * FROM DATA; /* この部分がコメントです */
/*
このように複数行でも使用できます
このように複数行でも使用できます
*/
標準SQLでは、次のようにC言語形式コメントの入れ子にも対応します。
/*
このように複数行でも使用できます
/* この部分がコメントの入れ子です */
このように複数行でも使用できます
*/
SQL Serverのコメント機能
Microsoft SQL Serverは、Microsoft Windowsと親和性が高いRDBMSで、T-SQLと標準SQLに対応します。コメント機能は、2重ハイフン ”--” 、C言語形式 ”/* */” に対応します。C言語形式のコメントの入れ子にも対応します。
またAnalysis ServicesではMDXクエリがあり、C++の二重スラッシュ ”//” 形式にも対応します。以下は、MDXクエリでのコメント機能の書き方です。
// クエリにこのようなコメントを追加できます
【参考】:SQL コメント (MDX 構文) 【参考】:SQL -- (コメント) (Transact-SQL) 【参考】:SQL スラッシュ アスタリスク (ブロック コメント) (Transact-SQL)
Oracleのコメント機能
Oracleは初めてリリースされた商用RDBMSで、数多くのプラットフォームをサポートします。コメント機能は、標準SQLと同じく2重ハイフン ”--” 、C言語形式 ”/* */” に対応します。ただしC言語形式のコメントの入れ子には対応しません。
PL/SQLでも同様の使い方を行います。SQL*Plusでは、次のようにREMARKコマンドで明示的にコメントを追加することもできます。
REMARK コメントです
SELECT * FROM DATA;
【参考】:Oracle Database: コメント 【参考】:Oracle Database: SQL*Plusでのスクリプトの使用
PostgreSQLのコメント機能
PostgreSQLは、標準SQL準拠を強みとするオープンソースのRDBMSです。コメント機能は、標準SQLと同じく2重ハイフン ”--” 、C言語形式 ”/* */” に対応します。標準SQLの仕様に従い、C言語形式のコメントの入れ子にも対応します。
【参考】:PostgreSQL Docs: Comments
MySQLのコメント機能
MySQLは、Linux、Apache、Perl・Python・PHPとの組み合わせに強みと実績を持つ、オープンソースのRDBMSです。コメント機能は、標準SQLと同じく2重ハイフン ”--” 、C言語形式 ”/* */” に対応します。C言語形式のコメントの入れ子には、対応しません。
2重ハイフンの後ろには半角スペースあるいはタブなどの制御文字が必要です。具体的には、次のような違いがあります。
SELECT * FROM DATA; -- 2重ハイフンの後ろに半角スペースがあるため、コメントです
SELECT * FROM DATA; --これは半角スペースで区切られていないためコメントとなりません
MySQLは独自性が高く、シェルスクリプト形式の”#”にも対応します。 ”#” は行末まで有効で、行ごとに指定する必要があります。
SELECT * FROM DATA; # この部分がコメントです
MySQLの特定のコードを実行するために、拡張コードを記述することもできます。MySQLで実行し、他のSQLでは解釈されないようにします。
SELECT /*! STRAIGHT_JOIN */ column_x from table_y;
【参考】:MySQL Docs: コメント 【参考】:MySQL Docs: コメントの先頭としての「--」
Informixのコメント機能
IBMが提供するInformixでは、標準SQLと同じく2重ハイフン ”--” 、C言語形式 ”/* */” に対応します。ただしC言語形式のコメントの入れ子には対応しません。独自機能として、波括弧 ”{ }” で囲む形式もサポートします。
波括弧 ”{ }” の使用方法は、C言語形式と同じで単1行と複数行に対応しますが、コメントの入れ子には対応しません。波括弧の使い方は、次の通りです。
SELECT * FROM DATA;{ この部分がコメントです }
{
このように複数行でも使用できます
}
【参考】:IBM Docs: How to Enter SQL Comments 【参考】:IBM Docs: Examples of SQL Comments
SQLのコメントアウトはRDBMSの違いを理解して使おう
SQLはリレーショナルデータベースで用いる言語ですが、言語は対象となるRDBMSごとに最適化されています。そのため標準SQLが共通言語としてリリースされてからも、互換性の観点で違いがあります。
コメントアウトはコード開発の生産性を高めますが、ベースとなるRDBMSの違いを理解して使い分けするのが良いでしょう。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから