はじめに
テーブルへのレコードの追加と削除は、データベースが実行する最も一般的な操作の一部です。データの追加には、値を追加するテーブル名と列名、および各フィールドに入力する値を指定することが含まれます。レコードを削除するには、正しい行を識別してテーブルから削除する必要があります。
このガイドでは、SQL INSERT
の使用方法について説明します。 およびDELETE
PostgreSQLでのコマンド。これには、基本的な構文、処理されたデータに関するデータ情報を返す方法、および1つのステートメントで複数の行を追加または削除する方法が含まれます。
テーブルの構造を確認する
INSERT
を使用する前に コマンドでは、テーブルの列、データ型、および制約によって課せられる要件に対応できるように、テーブルの構造を知っている必要があります。データベースクライアントに応じて、これを行うにはいくつかの異なる方法があります。
psql
を使用している場合 コマンドラインクライアント。この情報を見つける最も簡単な方法は、\d+
を使用することです。 ツールに組み込まれているメタコマンド。
たとえば、employee
というテーブルの構造を見つけるには 、次のように入力します:
\d+ employee
Table "public.employee" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description-------------+-----------------------------+-----------+----------+-----------------------------------------------+----------+--------------+------------- employee_id | integer | | not null | nextval('employee_employee_id_seq'::regclass) | plain | | first_name | character varying(45) | | not null | | extended | | last_name | character varying(45) | | not null | | extended | | last_update | timestamp without time zone | | not null | now() | plain | |Indexes: "employee_pkey" PRIMARY KEY, btree (employee_id) "idx_employee_last_name" btree (last_name)Triggers: last_updated BEFORE UPDATE ON employee FOR EACH ROW EXECUTE FUNCTION last_updated()Access method: heap
出力には、テーブルの列名、データ型、デフォルト値などが表示されます。
\d+
metaコマンドは、psql
でのみ使用できます。 クライアントであるため、別のクライアントを使用している場合は、テーブル情報を直接照会する必要がある場合があります。次のようなクエリを使用して、関連情報のほとんどを取得できます。
SELECT column_name, data_type, column_default, is_nullable, character_maximum_lengthFROM information_schema.columns WHERE table_name ='employee';
column_name | data_type | column_default | is_nullable | character_maximum_length-------------+-----------------------------+-----------------------------------------------+-------------+-------------------------- employee_id | integer | nextval('employee_employee_id_seq'::regclass) | NO | first_name | character varying | | NO | 45 last_name | character varying | | NO | 45 last_update | timestamp without time zone | now() | NO |(4 rows)
これらは、値を正しく挿入できるように、テーブルの構造についての良いアイデアを提供するはずです。
INSERT
の使用 テーブルに新しいレコードを追加するには
SQL INSERT
コマンドは、既存のテーブルにデータの行を追加するために使用されます。テーブルの構造がわかれば、テーブルの列を、新しいレコードに挿入する対応する値と一致させるコマンドを作成できます。
コマンドの基本的な構文は次のようになります。
INSERT INTO my_table(column1, column2)VALUES ('value1', 'value2');
列リストの列は、値リスト内で提供される値に直接対応しています。
デフォルトでは、INSERT
コマンドは、オブジェクトID(通常は0)と正常に挿入された行の数を返します。
INSERT 0 1
例として、新しい従業員をemployee
に挿入します 上記の表では、次のように入力できます:
INSERT INTO employee(first_name, last_name)VALUES ('Bob', 'Smith');
INSERT 0 1
ここでは、first_name
の値を提供します およびlast_name
他の列はデフォルト値で入力されたままになります。テーブルをクエリすると、新しいレコードが追加されたことがわかります。
SELECT * FROM employee;
employee_id | first_name | last_name | last_update-------------+------------+-----------+---------------------------- 1 | Bob | Smith | 2020-08-19 21:07:00.952454(1 row)
INSERT
からデータを返す ステートメント
テーブルに追加されたデータに関する追加情報が必要な場合は、RETURNING
を含めることができます。 ステートメントの最後にある句。 RETURNING
句は、挿入されたばかりのレコードを表示する列を指定します。
たとえば、挿入されたばかりのレコードのすべての列を表示するには、次のように入力します。
INSERT INTO my_table(column_name, column_name_2)VALUES ('value', 'value2')RETURNING *;
column_name | column_name_2-------------+--------------- value | value2(1 row)INSERT 0 1
employee
を使用する テーブルの場合、これは次のようになります:
INSERT INTO employee(first_name, last_name)VALUES ('Sue', 'Berns')RETURNING *;
employee_id | first_name | last_name | last_update-------------+------------+-----------+-------------------------- 2 | Sue | Berns | 2020-08-19 21:15:01.7622(1 row)INSERT 0 1
挿入から特定の列のみを返すように選択することもできます。たとえば、ここでは、新入社員のIDのみに関心があります:
INSERT INTO employee(first_name, last_name)VALUES ('Delores', 'Muniz')RETURNING employee_id;
employee_id ------------- 3(1 row)INSERT 0 1
通常どおり、列エイリアスを使用して、出力の列名を変更することもできます。
INSERT INTO employee(first_name, last_name)VALUES ('Simone', 'Kohler')RETURNING employee_id AS "Employee ID";
Employee ID------------- 4(1 row)INSERT 0 1
INSERT
の使用 一度に複数の行を追加するには
一度に1つのステートメントをレコードに挿入することは、一度に複数の行を挿入するよりも時間がかかり、効率が低下します。 PostgreSQLでは、同じテーブルに追加する複数の行を指定できます。新しい各行は括弧で囲まれ、括弧の各セットはコンマで区切られます。
マルチレコード挿入の基本的な構文は次のようになります。
INSERT INTO my_table(column_name, column_name_2)VALUES ('value', 'value2'), ('value3', 'value4'), ('value5', 'value6');
employee
の場合 参照しているテーブルでは、次のように入力することで、1つのステートメントに4人の新しい従業員を追加できます。
INSERT INTO employee(first_name, last_name)VALUES ('Abigail', 'Spencer'), ('Tamal', 'Wayne'), ('Katie', 'Singh'), ('Felipe', 'Espinosa');
INSERT 0 4
DELETE
の使用 テーブルから行を削除するには
SQL DELETE
コマンドは、テーブルから行を削除するために使用され、INSERT
の補完アクションとして機能します。 。テーブルから行を削除するには、WHERE
内に一致基準を指定して、ターゲットにする行を特定する必要があります。 条項。
基本的な構文は次のようになります:
DELETE FROM my_tableWHERE <condition>;
たとえば、employee
のすべての行に first_name
を持つテーブル Abigail
に設定 、次のように入力できます:
DELETE FROM employeeWHERE first_name = 'Abigail';
DELETE 1
ここでの戻り値は、DELETE
であることを示しています。 コマンドは、単一の行が削除された状態で処理されました。
DELETE
からデータを返す ステートメント
INSERT
と同様 コマンドを使用すると、RETURNING
を追加することで、削除された行から影響を受ける行または特定の列を返すことができます。 条項:
DELETE FROM my_tableWHERE <condition>RETURNING *;
たとえば、削除されたemployee
からすべての列を返すことで、正しいレコードが削除されたことを確認できます。 ここ:
DELETE FROM employeeWHERE last_name = 'Smith'RETURNING *;
employee_id | first_name | last_name | last_update-------------+------------+-----------+---------------------------- 1 | Bob | Smith | 2020-08-19 21:07:00.952454(1 row)DELETE 1
DELETE
の使用 一度に複数の行を削除するには
DELETE
を使用すると、一度に複数のアイテムを削除できます WHERE
で指定された選択基準を操作する 条項。
たとえば、IDで複数の行を削除するには、次のように入力します。
DELETE FROM employeeWHERE employee_id in (3,4)RETURNING *;
employee_id | first_name | last_name | last_update -------------+------------+-----------+---------------------------- 3 | Delores | Muniz | 2020-08-19 21:17:06.943608 4 | Simone | Kohler | 2020-08-19 21:19:19.298833(2 rows)DELETE 2
WHERE
を省略してもかまいません 特定のテーブルからすべての行を削除する句:
DELETE FROM employeeRETURNING *;
employee_id | first_name | last_name | last_update-------------+------------+-----------+---------------------------- 2 | Sue | Berns | 2020-08-19 21:15:01.7622 6 | Tamal | Wayne | 2020-08-19 22:11:53.408531 7 | Katie | Singh | 2020-08-19 22:11:53.408531 8 | Filipe | Espinosa | 2020-08-19 22:11:53.408531(4 rows)DELETE 4
ただし、DELETE
を使用することに注意してください データのテーブルを空にすることは、TRUNCATE
ほど効率的ではありません。 コマンド。テーブルをスキャンせずにデータを削除できます。
結論
この記事では、PostgreSQLテーブルにあるデータを制御するための最も重要なコマンドのいくつかを紹介しました。 INSERT
DELETE
の実行中に、コマンドを使用して新しいデータをテーブルに追加できます コマンドは、削除する行を指定します。どちらのコマンドも、影響を受ける行を返すことができ、一度に複数の行を操作できます。
これらの2つのコマンドは、テーブルに含まれるレコード数の増減を管理するために使用される主要なメカニズムです。基本的な構文と、他の句と組み合わせる方法を理解することで、必要に応じてテーブルにデータを入力してクリーンアップすることができます。