Продолжаю тему разборов задач с собеседований по SQL. Итак, в базе данных есть таблица CLIENTS, содержащая три строки: И есть таблица INVOICES, в которой две строки: И сама задача звучит так: сколько строк вернёт запрос, указанный ниже SELECT * FROM CLIENTS WHERE EXISTS (SELECT COUNT(*) FROM INVOICES WHERE ID_CLIENT = CLIENTS.ID) Здесь нужно заметить неправильное использование EXISTS. Оператор EXISTS используют для проверки того, возвращается ли что-то подзапросом, указанным в скобках. Как правило, в скобках для оператора EXISTS/NOT EXISTS пишут: SELECT * или: SELECT 1 В задаче выше нарочно допущена ошибка (в EXISTS нарочно написано SELECT COUNT). SELECT COUNT всегда будет возвращать данные. Написанный в скобочках подзапрос всегда будет возвращать количество, хоть и иногда 0. Но данные-то есть. Ноль - это тоже данные. Поэтому EXISTS будет давать TRUE для каждой из трех строчек основного запроса. Ещё больше интересных задач с собеседований я публикую в моем Телеграм-канале по SQL!
Задача с собеседования по SQL с заложенной в неё ошибкой
14 октября 202414 окт 2024
363
~1 мин