Sql что такое exists

Предикат EXISTS

Обычно предикат EXISTS используется в зависимых (коррелирующих) подзапросах. Этот вид подзапроса имеет внешнюю ссылку, связанную со значением в основном запросе. Результат подзапроса может зависеть от этого значения и должен оцениваться отдельно для каждой строки запроса, в котором содержится данный подзапрос. Поэтому предикат EXISTS может иметь разные значения для разных строк основного запроса.

Пример на пересечение.

Найти тех производителей портативных компьютеров, которые также производят принтеры:

Sql что такое exists. computers. Sql что такое exists фото. Sql что такое exists-computers. картинка Sql что такое exists. картинка computers

В подзапросе выбираются производители принтеров и сравниваются с производителем, значение которого передается из основного запроса. В основном же запросе отбираются производители портативных компьютеров. Таким образом, для каждого производителя портативных компьютеров проверяется, возвращает ли подзапрос строки (которые говорят о том, что этот производитель также выпускает принтеры). Поскольку два условия в предложении WHERE должны выполняться одновременно ( AND ), то в результирующий набор попадут нужные нам строки. DISTINCT используется для того, чтобы каждый производитель присутствовал в выходных данных только один раз. В результате получим

Пример на разность.

Найти производителей портативных компьютеров, которые не производят принтеров:

Sql что такое exists. computers. Sql что такое exists фото. Sql что такое exists-computers. картинка Sql что такое exists. картинка computers

Источник

Предикат EXISTS SQL и проверка существования набора значений

Назначение предиката SQL EXISTS

Предикат языка SQL EXISTS выполняет логическую задачу. В запросах SQL этот предикат используется в выражениях вида

Это выражение возвращает истину, когда по запросу найдена одна или более строк, соответствующих условию, и ложь, когда не найдено ни одной строки.

Обычно предикат EXISTS применяется в случаях, когда необходимо найти значения, соответствующие основному условию, заданному в секции WHERE, и дополнительному условию, заключённому в подзапрос, являющийся аргументом предиката.

Для NOT EXISTS всё наоборот. Выражение

возвращает истину, когда по запросу не найдено ни одной строки, и ложь, когда найдена хотя бы одна строка.

Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке .

Наиболее простые запросы с предикатом SQL EXISTS

В примерах работаем с базой данных библиотеки и ее таблицами «Книга в пользовании» (BOOKINUSE) и «Пользователь» (USER). Пока нам потребуется лишь таблица «Книга в пользовании» (BOOKINUSE).

AuthorTitlePubyearInv_NoCustomer_ID
ТолстойВойна и мир20052865
ЧеховВишневый сад20001731
ЧеховИзбранные рассказы201119120
ЧеховВишневый сад1991565
Ильф и ПетровДвенадцать стульев1985331
МаяковскийПоэмы19832120
ПастернакДоктор Живаго200669120
ТолстойВоскресенье20067747
ТолстойАнна Каренина19897205
ПушкинКапитанская дочка20042547
ГогольПьесы20078147
ЧеховИзбранные рассказы19874205
ПушкинСочинения, т.11984647
ПастернакИзбранное200013718
ПушкинСочинения, т.219848205
NULLНаука и жизнь 9 2018201912718
ЧеховРанние рассказы200117131

Этот запрос вернёт следующий результат:

Customer_ID
65
205

Пример 2. Определить ID пользователей, которым выданы книги Чехова, и которым при этом не выданы книги Ильфа и Петрова. Конструкция запроса аналогична конструкции из предыдущего примера с той разницей, что дополнительное условие задаётся предикатом NOT EXISTS. Запрос будет следующим:

Этот запрос вернёт следующий результат:

User_ID
120
65
205

Написать запрос SQL с предикатом EXISTS самостоятельно, а затем посмотреть решение

Пример 3. Определить автора (авторов), книги которого выданы пользователю с ID 120, а также с ID 18.

Различия предикатов EXISTS и IN

При первом взгляде на запросы с предикатом EXISTS может возникнуть впечатление, что он идентичен предикату IN. Это не так. Хотя они очень похожи. Предикат IN ведет поиск значений из диапазона, заданного в его аргументе, и если такие значения есть, то выбираются все строки, соответствующие этому диапазону. Результат же действия предиката EXISTS представляет собой ответ «да» или «нет» на вопрос о том, есть ли вообще какие-либо значения, соответствующие указанным в аргументе. Кроме того, перед предикатом IN указывается имя столбца, по которому следует искать строки, соответствующие значениям в диапазоне. Разберём пример, показывающий отличие предиката EXISTS от предиката IN, и задачу, решаемую с помощью предиката IN.

Пример 4. Определить ID пользователей, которым выданы книги авторов, книги которых выданы пользователю с ID 31. Запрос будет следующим:

Результатом выполнения запроса будет следующая таблица:

User_ID
120
65
205

Запросы с предикатом EXISTS и дополнительными условиями

Если дополнительно к предикату EXISTS в запросе применить хотя бы одно дополнительное условие, например, заданное с помощью агрегатных функций, то такие запросы могут служить уже для простого анализа данных. Продемонстрируем это на следующем примере.

Пример 5. Определить ID пользователей, которым выдана хотя бы одна книга Пастернака, и которым при этом выдано более 2 книг. Пишем следующий запрос, в котором первое условие задаётся предикатом EXISTS со вложенным запросом, а второе условие с оператором HAVING всегда должно следовать после вложенного запроса:

Результат выполнения запроса:

Как видно из таблицы BOOKINUSE, книга Пастернака выдана также пользователю с ID 18, но ему выдана всего одна книга и он не попадает в выборку. Если применить к подобному запросу ещё раз функцию COUNT, но уже для подсчёта выбранных строк (потренируйтесь в этом самостоятельно), то можно получить сведения о том, сколько пользователей, читающих книги Пастернака, при этом читают также книги других авторов. Это уже из сферы анализа данных.

Запросы с предикатом EXISTS к двум таблицам

Запросы с предикатом EXISTS могут извлекать данные из более чем одной таблицы. Многие задачи можно с тем же результатом решить с помощью оператора JOIN, но в ряде случаев использование EXISTS позволяет составить менее громоздкий запрос. Использовать EXISTS предпочительнее в тех случаях, когда в результирующую таблицу попадут столбцы лишь из одной таблицы.

В следующем примере из той же базы данных помимо таблицы BOOKINUSE потребуется также таблица «Пользователь» (CUSTOMER).

Customer_IDSurname
18Зотов
31Перов
47Васин
65Тихонов
120Краснов
205Климов

Пример 6. Определить авторов, книги которых выданы пользователю по фамилии Краснов. Пишем следующий запрос, в котором предикатом EXISTS задано единственное условие:

Результатом выполнения запроса будет следующая таблица:

Author
Чехов
Маяковский
Пастернак

Примеры запросов к базе данных «Библиотека» есть также в уроках по операторам GROUP BY, IN и функциям CONCAT, COALESCE.

Предикат EXISTS в соединениях более двух таблиц

Сейчас мы увидим более предметно, почему использовать EXISTS предпочительнее в тех случаях, когда в результирующую таблицу попадут столбцы лишь из одной таблицы.

Sql что такое exists. reestdb. Sql что такое exists фото. Sql что такое exists-reestdb. картинка Sql что такое exists. картинка reestdb

Пример 7. Определить клиентов, купивших или взявших в аренду объекты, у которых нет лоджии или балкона. Пишем следующий запрос, в котором предикатом EXISTS задано обращение к результату соединения двух таблиц:

Так как из таблицы Client столбцы выбираются при помощи оператора «звёздочка», то будут выведены все столбцы этой таблицы, в которой будет столько строк, сколько насчитывается клиентов, соответствующих условию, заданному предикатом EXISTS. Из таблиц, к соединению которых обращается вложенный запрос, нам не требуется выводить ни одного столбца. Поэтому для экономии машинного времени извлекается лишь один столбец. Для этого после слова SELECT прописана единица. Этот же приём применён и в запросах в следующих примерах.

Написать запрос SQL с предикатом EXISTS самостоятельно, а затем посмотреть решение

Пример 3. Определить менеджеров, которые провели сделки с объектами с числом комнат больше 2.

Продолжаем писать вместе запросы SQL с предикатом EXISTS

Пример 9. Определить собственников объектов, которые были взяты в аренду. Пишем следующий запрос, в котором предикатом EXISTS также задано обращение к результату соединения двух таблиц:

Как и в предыдущем примере, из таблицы, к которой обращён внешний запрос, будут выведены все поля.

Пример 10. Определить число собственников, с объектами которых провёл менеджер Савельев. Пишем запрос, в котором внешний запрос обращается к соединению трёх таблиц, а предикатом EXISTS задано обращение лишь к одной таблице:

Все запросы проверены на существующей базе данных. Успешного использования!

Примеры запросов к базе данных «Недвижимость» есть также в уроках по операторам GROUP BY и IN.

Источник

Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Базы данных

SQL условие EXISTS

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

Описание

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

Синтаксис

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

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

Примечание

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

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

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

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
6000MilaKunisyahoo.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

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

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

Пример условия 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

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

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

product_idcurrent_category
150
250
350
450
575
810

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

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

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

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

Источник

Логический оператор EXISTS в T-SQL. Описание и примеры

Привет, сегодня мы рассмотрим несколько примеров использования логического оператора EXISTS в языке T-SQL, Вы узнаете, что это за оператор, как он работает и где его можно использовать.

Оператор EXISTS в языке T-SQL

EXISTS – это логический оператор языка T-SQL, который принимает и обрабатывает вложенный SQL запрос (SELECT) с целью проверки существования строк. В качестве результата возвращает значения (Boolean):

Оператор EXISTS Вы можете использовать как в секции WHERE запроса SELECT, так и в условных конструкциях языка T-SQL, например, в IF.

Таким образом, если у Вас возникла необходимость проверить, возвращает ли SQL запрос хотя бы одну строку, а результат этой проверки использовать в другом запросе или SQL инструкции, Вы можете использовать оператор EXISTS, по опыту могу сказать, что в некоторых случаях это очень удобно.

Примечание! Инструкция SELECT во вложенном запросе не может содержать ключевое слово INTO.

Оператор EXISTS в языке T-SQL также поддерживает ключевое слово NOT (NOT EXISTS), в данном случае будет противоположная работа, т.е. будет TRUE, если вложенный запрос не возвращает никаких строк, и FALSE, если возвращает.

Заметка! Новичкам рекомендую посмотреть мой видеокурс по T-SQL для начинающих, в нем подробно рассмотрены все базовые конструкции языка T-SQL.

Пример использования EXISTS в секции WHERE

В первом примере давайте посмотрим, как можно использовать логический оператор EXISTS в запросе SELECT в секции WHERE.

В следующем SQL запросе мы запрашиваем данные из таблицы TestTable, но при условии, что в таблице TestTable2 есть записи.

Sql что такое exists. EXISTS In T SQL 2. Sql что такое exists фото. Sql что такое exists-EXISTS In T SQL 2. картинка Sql что такое exists. картинка EXISTS In T SQL 2

Мы видим, что данные нам вывелись, следовательно, в таблице TestTable2 записи есть.

Пример использования EXISTS в условной конструкции IF

Оператор EXISTS можно использовать и в условной конструкции IF, например, следующим образом.

Sql что такое exists. EXISTS In T SQL 3. Sql что такое exists фото. Sql что такое exists-EXISTS In T SQL 3. картинка Sql что такое exists. картинка EXISTS In T SQL 3

В этом примере мы сначала проверяем, есть ли записи в таблице TestTable, и если есть, то выполняем необходимое действие, я для примера просто посылаю запрос SELECT.

Пример использования NOT EXISTS

В данном случае давайте представим, что нам нужно сделать что-то, только в том случае, если в таблице TestTable отсутствуют определённые записи. Если Вы обратили внимание, в таблице TestTable нет записей с ProductId больше 3, поэтому давайте для примера будем использовать именно это условие, т.е. если таких записей не существует, выполним нужное нам действие.

Источник

EXISTS (Transact-SQL)

Specifies a subquery to test for the existence of rows.

Sql что такое exists. topic link. Sql что такое exists фото. Sql что такое exists-topic link. картинка Sql что такое exists. картинка topic linkTransact-SQL Syntax Conventions

Syntax

To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

Arguments

subquery
Is a restricted SELECT statement. The INTO keyword is not allowed. For more information, see the information about subqueries in SELECT (Transact-SQL).

Result Types

Boolean

Result Values

Returns TRUE if a subquery contains any rows.

Examples

A. Using NULL in a subquery to still return a result set

B. Comparing queries by using EXISTS and IN

Here is the result set for either query.

C. Comparing queries by using EXISTS and = ANY

D. Comparing queries by using EXISTS and IN

E. Using NOT EXISTS

Here is the result set.

Examples: Azure Synapse Analytics and Analytics Platform System (PDW)

F. Using EXISTS

The following example identifies whether any rows in the ProspectiveBuyer table could be matches to rows in the DimCustomer table. The query will return rows only when both the LastName and BirthDate values in the two tables match.

G. Using NOT EXISTS

NOT EXISTS works as the opposite as EXISTS. The WHERE clause in NOT EXISTS is satisfied if no rows are returned by the subquery. The following example finds rows in the DimCustomer table where the LastName and BirthDate do not match any entries in the ProspectiveBuyers table.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *