Оператор EXISTS виконує зовнішній запит SQL, якщо внутрішній запит (підзапит) не повертає NULL. Принцип роботи оператора EXISTS:

Цей процес повторюється для кожного рядка зовнішнього запиту.
Розглянемо приклад. Припустимо, нам потрібно показати всіх клієнтів, які здійснили замовлення. У підзапиті ми перевіряємо наявність зробленого замовлення клієнта (по полю customer_id) і якщо це підтверджується, то в результаті виводимо ідентифікатор та ім’я клієнта.
|
1 2 3 4 5 6 7 |
SELECT customer_id, first_name FROM Customers WHERE EXISTS ( SELECT order_id FROM Orders WHERE Orders.customer_id = Customers.customer_id ); |
Результат:

Оператор NOT EXISTS в SQL
Ми також можемо використовувати оператор NOT для інвертування роботи оператора EXISTS. Команда SQL виконується, якщо підзапит повертає порожній результат (тобто NULL-значення). Наприклад, виконаємо попередню SQL-команду, але вже з оператором NOT EXISTS:
|
1 2 3 4 5 6 7 |
SELECT customer_id, first_name FROM Customers WHERE NOT EXISTS ( SELECT order_id FROM Orders WHERE Orders.customer_id = Customers.customer_id ); |
Тут ми виводимо всіх клієнтів, які НЕ зробили замовлення.

Приклади використання оператора EXISTS
DROP таблицю, якщо EXISTS
Ми можемо видалити таблицю (команда DROP), якщо вона вже існує (команда IF EXISTS). Наприклад:
|
1 |
DROP TABLE IF EXISTS my_table; |
CREATE таблицю, якщо NOT EXISTS
Ми можемо створити таблицю (команда CREATE), якщо її не існує (команда IF NOT EXISTS). Наприклад:
|
1 2 3 4 5 6 7 |
CREATE TABLE IF NOT EXISTS Companies ( id int, name varchar(50), address text, email varchar(50), phone varchar(10) ); |
Ще один приклад
Наступна SQL-команда вибирає всі замовлення з таблиці Orders клієнтів віком від 23 років.
|
1 2 3 4 5 6 7 8 |
SELECT * FROM Orders WHERE EXISTS ( SELECT customer_id FROM Customers WHERE Orders.customer_id = Customers.customer_id AND Customers.age > 23 ); |
Результат:

