В этом учебном пособии вы узнаете, как использовать PostgreSQL условие EXISTS с синтаксисом и примерами.
Описание
PostgreSQL условие EXISTS используется в сочетании с подзапросом и считается "выполненным", если подзапрос возвращает хотя бы одну строку. Его можно использовать в операторе SELECT, INSERT, UPDATE или DELETE.
Синтаксис
Синтаксис для условия EXISTS в PostgreSQL:
Параметры или аргументы
- subquery
- Оператор SELECT, который обычно начинается с SELECT *, а не со списка выражений или имен столбцов. Чтобы повысить производительность, вы можете заменить SELECT * на SELECT 1, поскольку результат столбца подзапроса не имеет значения (имеют значение только возвращаемые строки).
Примечание
- Операторы SQL, которые используют условие EXISTS в PostgreSQL, очень неэффективны, поскольку подзапрос перезапускается для КАЖДОЙ строки в таблице внешнего запроса. Есть более эффективные способы написания большинства запросов, которые не используют условие EXISTS.
Пример - с оператором SELECT
Рассмотрим простой пример.
Ниже приведен оператор SELECT, в котором используется PostgreSQL условие EXISTS:
1 2 3 4 5 |
SELECT * FROM products WHERE EXISTS (SELECT 1 FROM inventory WHERE products.product_id = inventory.product_id); |
В этом PostgreSQL примере условия EXISTS будут возвращены все записи из таблицы products, где в таблице inventory есть хотя бы одна запись с совпадающим product_id. Мы использовали SELECT 1 в подзапросе для повышения производительности, поскольку результирующий набор столбцов не имеет отношения к условию EXISTS (имеет значение только наличие возвращенной строки).
Пример - оператора SELECT с использованием NOT EXISTS
PostgreSQL условие EXISTS также можно комбинировать с оператором NOT.
Например,
1 2 3 4 5 |
SELECT * FROM products WHERE NOT EXISTS (SELECT 1 FROM inventory WHERE products.product_id = inventory.product_id); |
В этом PostgreSQL примере EXISTS будут возвращены все записи из таблицы products, где в таблице inventory нет записей для данного product_id)
Пример - с оператором INSERT
Ниже приведен пример оператора INSERT, в котором используется PostgreSQL условие EXISTS:
1 2 3 4 5 6 7 |
INSERT INTO contacts (contact_id, contact_name) SELECT supplier_id, supplier_name FROM suppliers WHERE EXISTS (SELECT 1 FROM orders WHERE suppliers.supplier_id = orders.supplier_id); |
Пример - с оператором UPDATE
Ниже приведен пример оператора UPDATE, в котором используется PostgreSQL условие EXISTS:
1 2 3 4 5 6 7 |
UPDATE suppliers SET supplier_name = (SELECT customers.customer_name FROM customers WHERE customers.customer_id = suppliers.supplier_id) WHERE EXISTS (SELECT 1 FROM customers WHERE customers.customer_id = suppliers.supplier_id); |
Пример - с оператором DELETE
Ниже приведен пример оператора DELETE, который использует PostgreSQL условие EXISTS:
1 2 3 4 |
DELETE FROM contacts WHERE EXISTS (SELECT 1 FROM employees WHERE contacts.contact_id = employees.employee_id); |