Выбор ответа Middle Подзапросы и CTE обновлено
Что писать в SELECT внутри EXISTS
Вопрос
Чем отличаются EXISTS (SELECT 1 FROM ...), EXISTS (SELECT * FROM ...) и EXISTS (SELECT NULL FROM ...)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ничем: EXISTS проверяет лишь наличие строк. EXISTS истинен, если подзапрос вернул хотя бы одну строку; какие значения в этой строке, неважно, даже NULL.
Варианты ответа
SELECT NULLвсегда даёт false, потому что значение NULLSELECT *медленнее, потому что читает все колонки строкиSELECT 1работает в PostgreSQL, а в других СУБД нет- Ничем: EXISTS проверяет лишь наличие строкправильный ответ
Разбор
EXISTS истинен, если подзапрос вернул хотя бы одну строку; какие значения в этой строке, неважно, даже NULL. Колонки из SELECT * внутри EXISTS не вычисляются, поэтому разницы в скорости нет. SELECT 1 это просто договорённость о читаемости, она работает в любой СУБД.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Подзапросы и CTE»
- Полный путь категории в дереве
- Клиенты, у которых все заказы оплачены
- Дни без продаж по регионам
- Цепочка руководителей вверх по дереву
- Дороже любой книги: ALL против MAX
- Категория с максимальной выручкой
- Два последних заказа каждого клиента через LATERAL
- Дороже среднего по своей категории