名前を見るとデータ操作言語(DML)含まれているすべてのステートメントは実際にはmanipulatingデータ用であると思います。
私の知る限り、SELECT
ステートメントはデータのクエリにのみ使用でき、変更はできません。 (取らないINSERT ... SELECT
ここで考慮に入れてください。)
SELECT
はDMLの一部であり、そうであれば、なぜですか?
DMLはSELECT
ステートメントを除外すると見なすことができます。 「 Data Manipulation Launguage 」のWikepidia.orgエントリには、次のように記述されています。
純粋に読み取り専用のSELECTクエリステートメントは 'SQL-data'ステートメントでクラス化されます 2 のため、標準ではDMLの外部にあると見なされます。 SELECT ... INTOフォームは、データを操作(変更)するため、DMLと見なされます。ただし、一般的な慣例では、この区別は行われず、SELECTはDMLの一部であると広く見なされています。
区別がない例として、 Oracle 11.2コンセプトガイド には、次のようにDMLとしてSELECTSが含まれています。
データ操作言語(DML)ステートメントは、既存のスキーマオブジェクトのデータをクエリまたは操作します。 DDLステートメントを使用すると、データベースの構造を変更できますが、DMLステートメントを使用すると、内容をクエリまたは変更できます。
厳密に言えば、SELECT
はデータを照会するだけではありません。少なくともOracleには、「トランザクションを終了するまで他のユーザーが行をロックまたは更新できないように、選択した行をロックできるようにするfor_update_clauseがあります。」 ( SQL言語リファレンス から)。
データを操作および制限します:GROUP BY、ORDER BY、TOP、JOIN、ロックヒントなど
変更しても、データベースの状態は変更されません。
つまり、「操作」を読んで「状態の変更」を含めるかどうかです。