SQL условие EXISTS

В этом учебном материале вы узнаете, как использовать SQL условие EXISTS с синтаксисом и примерами.

Описание

SQL условие EXISTS используется в сочетании с подзапросом и считается выполненным, если подзапрос возвращает хотя бы одну строку. Его можно использовать в операторе SELECT, INSERT, UPDATE или DELETE.

Синтаксис

Синтаксис условия EXISTS в SQL:

WHERE EXISTS ( subquery );

Параметры или аргументы

subquery
подзапрос является оператором SELECT. Если subquery возвращает хотя бы одну запись в своем наборе результатов, предложение EXISTS оценивается как true и условие EXISTS будет выполнено. Если subquery не возвращает никаких записей, предложение EXISTS оценивается как false, и условие EXISTS не будет выполнено.

Примечание

Операторы SQL, использующие условие EXISTS, очень неэффективны, поскольку подзапрос повторно запускается для КАЖДОЙ строки в таблице внешнего запроса. Есть более эффективные способы написания большинства запросов, которые не используют условие EXISTS.

Пример — использование условия EXISTS с оператором SELECT

Давайте начнем с примера, который показывает, как использовать условие EXISTS с оператором SELECT.

В этом примере у нас есть таблица customers со следующими данными:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
6000 MilaKunisyahoo.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

И таблица orders со следующими данными:

order_idcustomer_idorder_date
170002019/06/18
250002019/06/18
380002019/06/19
440002019/06/20
5NULL2019/07/01

Теперь давайте найдем все записи из таблицы customers, где есть хотя бы одна запись в таблице orders с тем же customer_id. Выполните следующий SELECT запрос:

Будет выбрано 4 записи. Вот результаты, которые вы должны получить:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL

В этом примере в таблице customers есть 4 записи, у которых значение customer_id имеется в таблице orders.

Пример условия EXISTS с оператором UPDATE

Давайте рассмотрим пример, в котором используется условие EXISTS в операторе UPDATE.
В этом примере у нас есть таблица products со следующими данными:

product_idproduct_namecategory_id
1Pear50
2Banana50
3Orange50
4Apple50
5Bread75
6Sliced Ham25
7KleenexNULL

И таблица с именем summary_data со следующими данными:

product_idcurrent_category
110
210
310
410
510

Теперь давайте обновим таблицу summary_data значениями из таблицы products. Введите следующий SQL оператор:

Будет обновлено 5 записей. Снова выберите данные из таблицы summary_data:

Вот результаты, которые вы получите:

product_idcurrent_category
150
250
350
450
575
810

В этом примере будет обновлено поле current_category в таблице summary_data данными category_id из таблицы products, где значения product_id совпадают. Первые 5 записей в таблице summary_data были обновлены.

Подсказка: Если бы мы не включили условие EXISTS, запрос UPDATE обновил бы поле current_category на NULL в 6-й строке таблицы summary_data (поскольку таблица products не имеет записи, где product_id = 8).

Пример условия EXISTS с оператором DELETE

Давайте посмотрим на пример, который использует условие EXISTS в опертаоре DELETE.

В этом примере у нас есть таблица customer со следующими данными:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
6000 MilaKunisyahoo.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

И таблица orders со следующими данными:

order_idcustomer_idorder_date
170002019/06/18
250002019/06/18
380002019/06/19
440002019/06/20
5NULL2019/07/01

Введите следующий оператор DELETE:

Будет удалена 1 запись. Выберите данные из таблицы orders еще раз:

Вот результаты, которые вы должны получить:

order_idcustomer_idorder_date
170002019/06/18
250002019/06/18
380002019/06/19
5NULL2019/07/01

В этом примере удаляются все записи из таблицы orders, где в таблице customer есть запись с last_name «Bieber» и совпадающим значением customer_id в обеих таблицах. В этом примере запись для order_id = 4 была удалена.

Пример NOT с условием EXISTS

Наконец, условие NOT можно объединить с условием EXISTS, чтобы создать условие NOT EXISTS. Давайте рассмотрим пример, который показывает, как использовать условие NOT EXISTS в SQL.
В этом примере у нас есть таблица customers со следующими данными:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
6000 MilaKunisyahoo.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

И таблица orders со следующими данными:

order_idcustomer_idorder_date
170002019/06/18
250002019/06/18
380002019/06/19
440002019/06/20
5NULL2019/07/01

Введите следующий SQL оператор:

Будет выбрано 2 записи. Вот результаты, которые вы получите:

customer_idfirst_namelast_namefavorite_website
6000 MilaKunisyahoo.com
9000RussellCrowegoogle.com

В этом примере будут возвращены все записи из таблицы customers, где нет записей в таблице orders для данного customer_id.