sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLでデータを挿入および削除する方法


    はじめに

    テーブルへのレコードの追加と削除は、データベースが実行する最も一般的な操作の一部です。データの追加には、値を追加するテーブル名と列名、および各フィールドに入力する値を指定することが含まれます。レコードを削除するには、正しい行を識別してテーブルから削除する必要があります。

    このガイドでは、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つのコマンドは、テーブルに含まれるレコード数の増減を管理するために使用される主要なメカニズムです。基本的な構文と、他の句と組み合わせる方法を理解することで、必要に応じてテーブルにデータを入力してクリーンアップすることができます。




    1. 楽観的同時実行性:IsConcurrencyTokenおよびRowVersion

    2. SQLで平方根を計算する方法

    3. MySQLの複数の列に基づいてランクを決定する

    4. MySQLVARCHARの長さとUTF-8