В этом учебном материале вы узнаете, как использовать Oracle условие EXISTS с синтаксисом и примерами.
Oracle условие EXISTS используется в сочетании с подзапросом (subquery), и считай "должно быть выполнено", если подзапрос возвращает хотя бы одну строку. EXISTS может использоваться в предложениях SELECT, INSERT, UPDATE или DELETE.
Синтаксис
Синтаксис условия EXISTS в Oracle/PLSQL:
Параметры или аргументы
subquery Подзапрос - это предложение SELECT. Если подзапрос возвращает хотя бы одну запись в результирующем наборе, то условие EXISTS будет определяться как TRUE, и условие EXISTS будет выполнено. Если подзапрос не возвратит никаких записей, то условие EXISTS будет определяться как FALSE, и условие EXISTS не будет выполнено.
Примечание
- Oracle запрос SQL, использующий условие EXISTS очень неэффективен, так как подзапрос перезапускается для каждой строки в таблице внешнего запроса.
- Есть более эффективные способы написания большинства запросов, которые бы не использовали условие EXISTS.
Пример с оператором SELECT
Рассмотрим простой пример.
Ниже приводится предложение SELECT, которое использует условие EXISTS:
1 2 3 4 5 |
SELECT * FROM customers WHERE EXISTS (SELECT * FROM order_details WHERE customers.customer_id = order_details.customer_id); |
Этот пример Oracle условия EXISTS возвратит все записи из таблицы customers, где есть хотя бы одна запись в таблице order_details с соответствующим customer_ id.
Пример оператора SELECT с использованием NOT EXISTS
Oracle условие EXISTS также может быть объединено с оператором NOT.
Например:
1 2 3 4 5 |
SELECT * FROM customers WHERE NOT EXISTS (SELECT * FROM order_details WHERE customers.customer_id = order_details.customer_id); |
Этот пример EXISTS возвратит все записи из таблицы customers, где нет никаких записей в таблице order_details с соответствующим customer_ id.
Пример с оператором INSERT
Ниже приведен пример оператора INSERT, который использует условие 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 * FROM order_details WHERE suppliers.supplier_id = order_details.supplier_id); |
Пример с оператором UPDATE
Ниже приведен пример оператора UPDATE, который использует условие EXISTS:
1 2 3 4 5 6 7 |
UPDATE suppliers SET supplier_name = (SELECT customers.name FROM customers WHERE customers.customer_id = suppliers.supplier_id) WHERE EXISTS (SELECT customers.name FROM customers WHERE customers.customer_id = suppliers.supplier_id); |
Пример с оператором DELETE
Ниже приведен пример DELETE, который использует условие EXISTS:
1 2 3 4 |
DELETE FROM suppliers WHERE EXISTS (SELECT * FROM order_details WHERE suppliers.supplier_id = order_details.supplier_id); |