Как работают операторы SQL EXISTS?

Я пытаюсь выучить SQL и с трудом разбираюсь в выражениях EXISTS. Я наткнулся на эту цитату о «существует» и не понимаю что-то:

  

Используя оператор существования, ваш подзапрос может вернуть ноль, одну или несколько строк, а условие просто проверяет, вернул ли подзапрос какие-либо строки. Если вы посмотрите на предложение select подзапроса, вы увидите, что он состоит из одного литерала (1); поскольку условию в содержащем запросе нужно только знать, сколько строк было возвращено, фактические данные, возвращенные подзапросом, не имеют значения.

Я не понимаю, как внешний запрос узнает, какая строка проверяется подзапросом? Например:

SELECT *
  FROM suppliers
 WHERE EXISTS (select *
                 from orders
                where suppliers.supplier_id = orders.supplier_id);

Я понимаю, что в случае совпадения идентификатора из таблицы поставщиков и заказов подзапрос вернет значение true, и будут выведены все столбцы из соответствующей строки в таблице поставщиков. Что я не понимаю, так это то, как подзапрос сообщает, какая конкретная строка (скажем, строка с идентификатором поставщика 25) должна быть напечатана, если возвращается только true или false.

Мне кажется, что нет никакого отношения между внешним запросом и подзапросом.

sql
72 голоса | спросил Dan 1 Mayam11 2011, 10:31:40

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132