NOT EXIST
Вот есть такой запрос
SELECT *
FROM clients c
WHERE NOT EXISTS (
SELECT 1
FROM orders o
WHERE o.client_id = c.id
)
Сначала мы выполняем подзапрос, который выбирает всех клиентов, у которых есть хотя бы один заказ:
SELECT 1
FROM orders o
WHERE o.client_id = c.id
Вот мы получили эту подзапросную выборку, что происходит дальше?
База данных пробегает по каждой записи из таблицы clients и сравнивает с подзапросной выборкой? А что она конкретно сравнивает? "Она сравнивает строки". Какие строки? Наверное же ячейки сравнивает или как это работает. Вот на этом моменте не понимаю
Допустим такой запрос
SELECT *
FROM orders o
WHERE o.client_id = 5
Тут я понимаю, база данных пробегает по каждой записи из таблицы orders и просто смотрит ячейку client_id, а равна ли она 5? Если равна то берёт в итоговую выборку
А в случае с EXIST какие она ячейки сравнивает?
Не думай об этом Потому что это не так . Ты можешь думать так когда речь идёт о логике выполнения запроса. Но когда речь про производительность, уже так думать нельзя
почему нельзя так думать?
Обсуждают сегодня