ビューを介したデータのクエリと変更
このステップでは、PostgreSQL でビューを介してデータをクエリし、変更する方法を学びます。ビューは主にデータをクエリするために使用されますが、場合によっては、ベーステーブルの基になるデータを変更するためにも使用できます。
ビューを介したデータのクエリ
前のステップで示したように、ビューを介したデータのクエリは簡単です。SELECT
ステートメントを使用して、通常のテーブルであるかのようにビューからデータを取得できます。
たとえば、employee_info
ビューからすべてのデータを取得するには:
SELECT * FROM employee_info;
WHERE
句やその他の SQL 構文を使用して、データをフィルタリングおよびソートすることもできます。
SELECT * FROM employee_info WHERE department = 'Sales';
このクエリは、営業(Sales)部の従業員のみを返します。
ビューを介したデータの変更
特定の条件下では、ビューを介してデータを変更できます。ビューは、PostgreSQL が更新するベーステーブルと列を判断するのに十分単純である必要があります。一般に、ビューが次の基準を満たしている場合、ビューは変更可能です。
- 1 つのテーブルからのみ選択します。
- 集計関数(aggregate functions)(例:
SUM
、AVG
、COUNT
)を含みません。
GROUP BY
、HAVING
、またはDISTINCT
句を含みません。
更新を容易にするために、employee_id
を含む別のビューを作成しましょう。
CREATE VIEW employee_details AS
SELECT employee_id, first_name, last_name, department, salary
FROM employees;
次に、employee_details
ビューを介して従業員の給与(salary)を更新してみましょう。
UPDATE employee_details
SET salary = 65000.00
WHERE employee_id = 1;
このステートメントは、employee_id
が 1 の従業員の給与を 65000.00 に更新します。
employees
テーブルを直接クエリして、更新を確認できます。
SELECT * FROM employees WHERE employee_id = 1;
employee_id
が 1 の給与が更新されていることがわかります。
ビューを介したデータの挿入
ビューにベーステーブルの NULL を許容しない(non-nullable)すべての列が含まれている場合、ビューを介してデータを挿入することもできます。employee_details
ビューにはemployees
テーブルのすべての列が含まれているため、新しい従業員を挿入できます。
INSERT INTO employee_details (first_name, last_name, department, salary)
VALUES ('David', 'Lee', 'IT', 90000.00);
employee_id
はシリアル(serial)列であり、自動的に生成されるため、指定しないことに注意してください。
挿入を確認します。
SELECT * FROM employees WHERE first_name = 'David' AND last_name = 'Lee';
ビューを介したデータの削除
同様に、変更可能なビューを介してデータを削除できます。
DELETE FROM employee_details WHERE first_name = 'David' AND last_name = 'Lee';
削除を確認します。
SELECT * FROM employees WHERE first_name = 'David' AND last_name = 'Lee';
重要な考慮事項
- すべてのビューが変更可能であるとは限りません。結合(join)、集計(aggregation)、またはその他の複雑な操作を含む複雑なビューは、通常、読み取り専用です。
- ビューを介してデータを変更すると、パフォーマンスに影響を与える可能性があります。PostgreSQL は、ビュー操作を基になるベーステーブルの操作に変換する必要があります。
- ビューを介してデータを変更する場合は、変更がベーステーブルに直接影響するため、注意してください。