В этом учебном пособии вы узнаете, как использовать условие EXISTS в SQL Server (Transact-SQL) с синтаксисом и примерами.
Описание
Условие EXISTS SQL Server (Transact-SQL) используется в сочетании с подзапросом и считается выполненным, если подзапрос возвращает хотя бы одну строку. Он может использоваться в операторах SELECT, INSERT, UPDATE или DELETE.
Синтаксис
Синтаксис условия EXISTS в SQL Server (Transact-SQL):
Параметры или аргументы
subquery - подзапрос - это оператор SELECT. Если подзапрос возвращает хотя бы одну запись в своем результирующем наборе, условие EXISTS будет оцениваться как true и условие EXISTS будет выполнено. Если подзапрос не возвращает никаких записей, предложение EXISTS будет оцениваться как false, а условие EXISTS не будет выполнено.
Примечание
- Операторы SQL, которые используют условие EXISTS, очень неэффективны, так как подзапрос перезапускается для КАЖДОЙ строки в таблице внешнего запроса. Существуют более эффективные способы написания большинства запросов, которые не используют условие EXISTS.
Пример с оператором SELECT
Рассмотрим простой пример.
Ниже приведен оператор SELECT, в котором используется условие EXISTS:
1 2 3 4 5 6 |
SELECT * FROM employees WHERE EXISTS (SELECT * FROM contacts WHERE employees.last_name = contacts.last_name AND employees.first_name = contacts.first_name); |
Этот пример условия SQL Server EXISTS вернет все записи из таблицы employees, в которой есть по крайней мере одной записи в таблице contacts с соответствующими last_name и first_name.
Пример оператора SELECT с использованием NOT EXISTS
Условие SQL Server EXISTS также может быть объединено с оператором NOT.
Например:
1 2 3 4 5 6 |
SELECT * FROM employees WHERE NOT EXISTS (SELECT * FROM contacts WHERE employees.last_name = contacts.last_name AND employees.first_name = contacts.first_name); |
Этот пример SQL Server EXISTS вернет все записи из таблицы employees, в которых нет записей в таблице contacts для соответствующих last_name и first_name.
Пример с оператором 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 orders WHERE suppliers.supplier_id = orders.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 contacts WHERE EXISTS (SELECT * FROM employees WHERE employees.last_name = contacts.last_name); |