web-dev-qa-db-ja.com

SELECTステートメントはDMLにカウントされますか?

名前を見るとデータ操作言語(DML)含まれているすべてのステートメントは実際にはmanipulatingデータ用であると思います。

私の知る限り、SELECTステートメントはデータのクエリにのみ使用でき、変更はできません。 (取らないINSERT ... SELECTここで考慮に入れてください。)

SELECTはDMLの一部であり、そうであれば、なぜですか?

4
magnattic

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言語リファレンス から)。

8
Leigh Riffel

データを操作および制限します:GROUP BY、ORDER BY、TOP、JOIN、ロックヒントなど

変更しても、データベースの状態は変更されません。

つまり、「操作」を読んで「状態の変更」を含めるかどうかです。

8
gbn