SQL Server Essentials: SQL Insert、SQL Update、SQL Delete、およびTruncateを使用してテーブルデータを変更する方法

テーブルは、あらゆるリレーショナルデータベースシステムの核となるコンポーネントの1つであり、SQL Serverも例外ではありません。テーブルには、リレーショナルデータベースエンジンがクエリ、レポート、およびその他の操作に使用するデータが格納されています。この記事では、T-SQLのINSERT、T-SQLのUPDATE、T-SQLのDELETE、およびTRUNCATEを使用してSQL Serverのテーブルからデータを変更する方法を紹介します。

前回の記事「Essential SQL Server: Creating Databases and Tables」で、基本的なSQL Serverデータベースとテーブルの作成方法を紹介しました。この記事では、そのテーブルにデータを追加、更新、削除する方法について見ていきます。

広告

I created the following table in my previous article. The syntax from this simple example DDL command shows that the table has three columns and each of them uses a different data type:

CREATE TABLE dbo.myLogins
 (
     id INT NOT NULL PRIMARY KEY,
    name VARCHAR (20),
    login_date DATETIME
 );

この記事では、INSERTステートメントを使用してテーブルにデータを追加し、UPDATEステートメントを使用してテーブルのデータを変更し、DELETEステートメントを使用してデータを削除する方法について見ていきます。テーブル内のデータはいくつかの異なる方法で削除できるため、DELETEステートメントとTRUNCATEステートメントの違いについても説明します。

T-SQL INSERTを使用して行を追加する

次のいくつかの方法でSQL Serverテーブルにデータを追加できます:

  • SQL Server Management Studio(SSMS)のインタラクティブクエリデザイナーを使用してテーブル
  • PowerShell
  • SQL ServerのインポートとエクスポートウィザードまたはIntegration Servicesを使用してデータをテーブルにインポートできます
  • コマンドラインツールbcpユーティリティを使用することもできます。

ただし、データをSQL Serverテーブルに追加する最も一般的な方法は、SQL INSERTステートメントを使用することです。 T-SQL INSERTステートメントは、1つ以上の行をSQL Serverテーブルに追加します。

広告

次の例は、前述の例のテーブルに行を追加する方法を示しています。

INSERT INTO myLogins (id, name, login_date) VALUES (2, 'John Smith', '3-12-2023')

ここでは、INSERT INTOステートメントは、挿入される行を含むテーブルを特定します。次に、カッコの中で使用される列のリストが表示されます。このリストはテーブル内のすべての列を使用していますが、必ずしもそうする必要はありません。

最後に、VALUES句は、テーブルに挿入される実際の値を提供します。ショートカットとして、INSERTステートメントで列リストを省略することもできます。例えば、以下のINSERTステートメントは、前の例とまったく同じ機能を実行します:

INSERT INTO myLogins VALUES (2, 'John Smith', '3-12-2023')
As a shortcut, you can omit the column list in an INSERT statement (Image credit: Petri/Michael Otey)

カラムが NOT NULL キーワードを使用して定義されていない限り、INSERT 文の値リストで NULL を明示的に指定することもできます。また、カラムの値を指定したくない場合は、そのカラムをカラムリストと値リストから省略しても構いません。これにより、そのカラムには NULL 値が含まれるようになります。

広告

クエリの結果からテーブル行を挿入する

VALUES 句を使用した標準の T-SQL INSERT 文の他に、SQL クエリの結果としてテーブルに行を追加することもできます。クエリは単純でも複雑でもかまいませんし、その結果をターゲットテーブルに挿入することができます。

たとえば、myLogins2 テーブルから行をコピーして myLogins テーブルに挿入するには、以下に示すようなクエリを使用できます:

INSERT INTO myLogins (id, name, login_date) SELECT id, name, login_date FROM myLogins2 where id > 50.

この例では、サブクエリの結果を使用して、myLogins2 テーブルから myLogins テーブルに行を挿入しています。INSERT 文は、テーブル内の 3 つの列にデータを挿入します。サブクエリは、SELECT 文を使用して、2 番目の myLogins2 というテーブルから同じ 3 つの列を選択します。

ただし、この例では、id値が50より大きい行のみが返され、myLoginsテーブルに追加されます。この単純な例では、列名が同じでも構いませんが、これは必須ではありません。これを動作させるには、myLogins2テーブルに、id値が50より大きい1つ以上の行が必要で、myLoginsテーブルに存在しない必要があります。

T-SQL UPDATEを使用した行の更新

表への行の追加と同様に、表の行を変更する方法はいくつかあります。SSMSのクエリデザイナを使用して行を対話的に更新することができますが、PowerShellやIntegration Servicesを使用することもできます。

ただし、データベーステーブル内の既存の行を変更する最も一般的な方法は、SQL UPDATEステートメントを使用することです。T-SQL UPDATEステートメントは、SQL Serverテーブル内の1つ以上の行の値を変更します。

通常、特定の行を更新するには、UPDATEステートメントとWHERE句を組み合わせて使用します。WHERE句を使用しない場合、テーブル内のすべての行が更新されます。次のリストは、myLoginsテーブルの1行の値を変更するためにT-SQL UPDATEステートメントを使用する簡単な例を示しています。

UPDATE myLogins SET name = ‘John Smith’ WHERE id = 1

前述のように、WHERE句を省略すると、すべての行のname列が新しい値に設定されます。同様に、WHERE句に複数の行が含まれる場合(たとえば、<または>演算子を使用した場合)、複数の一致する行が更新されます。

クエリの結果に基づいてテーブル行を更新する

INSERTステートメントと同様に、別のテーブルから値を使用して1つのテーブルの行を更新することもできます。次のリストでは、別のテーブルからのSQL更新の使用方法を示しています。

UPDATE myLogins SET myLogins.name = myLogins2.name FROM myLogins2 WHERE myLogins.id = myLogins2.id

ここでは、UPDATEステートメントがmyLoginsテーブルに対して実行され、id列の値が一致する場合にmyLogins2テーブルからの値を使用してname列が更新されることが示されています。

The UPDATE statement lets you update rows in one table using values from another table (Image credit: Petri/Michael Otey)

UPDATE ステートメントを使用するためのオプションは他にもたくさんあります。クエリは複数の行を更新することができ、JOIN を使用して複雑にすることもでき、TOP 句、ORDER BY 句、Common Table Expressions(CTE)などを使用して更新クエリを構築することができます。

T-SQL DELETE と TRUNCATE を使用して行を削除する

予想通り、インタラクティブな SSMS クエリデザイナー、PowerShell、または統合サービスを使用してテーブルから行を削除することができます。ただし、最も一般的な方法は SQL DELETE ステートメントを使用することです

T-SQL DELETEステートメントは、SQL Server テーブルから1つ以上の行を削除します。言うまでもありませんが、SQL DELETE ステートメントは慎重に使用する必要があります。なぜなら、それはテーブルからデータを永久に削除するからです。間違えた場合、データをスナップショット、トランザクションログ、またはバックアップから復元する必要があるかもしれません。

次の例は、myLogins テーブルから1行を削除する方法を示しています:

DELETE FROM myLogins WHERE id = 1

ここでは、id 列の値が 1 と等しい行が myLogins テーブルから削除されることがわかります。次のステートメントのように WHERE 句を変更することで複数の行を削除することもできます。この場合、id の値が 50 より大きいすべての行が削除されます。

DELETE FROM myLogins WHERE id &gt; 50
You can delete multiple rows by changing the WHERE clause (Image credit: Petri/Michael Otey)

UPDATE ステートメントと同様に、WHERE 句を省略するとテーブル内のすべての行が削除されます。たとえば、次の例では、myLogins テーブル内のすべての行が削除されます:

DELETE FROM myLogins

クエリの結果から行を削除する

INSERT および UPDATE ステートメントと同様に、DELETE ステートメントもクエリの結果から操作することができます。次の例は、クエリに基づいて行を削除する方法を示しています:

DELETE FROM myLogins WHERE login_date &lt; '12-31-2022'

ここでは、login_date 列の日付が 12/31/22 よりも前の myLogins テーブル内のすべての行が削除されます。

I’ve been using simple examples throughout this article, but like the INSERT and UPDATE statements, your queries can be much more complex. You could use JOINs and multiple tables in the DELETE statement’s subquery, use clauses like TOP and ORDER BY, and more.

DELETE vs TRUNCATE

T-SQLのDELETEコマンドは、テーブルから1つ以上の行を削除することができます。ただし、これはテーブルから行を削除する唯一の方法ではありません。SQL Serverテーブル内のすべての行を削除するには、T-SQL TRUNCATE TABLEステートメントを使用できます。

DELETEステートメントは完全にログ記録されるアクションです。一方、TRUNCATE TABLEステートメントは最小限にログ記録されるアクションです。これは、TRUNCATEコマンドがわずかにパフォーマンスが向上し、トランザクションログに追加されるエントリが少なくなることを意味します。TRUNCATEの使用例を以下のリストで確認できます。

TRUNCATE TABLE myLogins

これにより、myLoginsテーブル内のすべてのデータが削除されます。

概要

このチュートリアルでは、T-SQL INSERT、UPDATE、およびDELETEステートメントを使用して、SQL Serverテーブルに行を追加、変更、削除する方法を説明しました。各ケースで、単一行の値とサブクエリの結果として複数の行を操作する方法を説明しました。さらに、DELETEとTRUNCATEステートメントが異なる方法であることを確認しましたが、どちらも基本的にテーブルから行を削除できることを示しました。

関連記事:

Source:
https://petri.com/sql-insert-update-delete-truncate/