Найти в Дзене
Илья Хохлов

Задача с собеседования по SQL с заложенной в неё ошибкой

Продолжаю тему разборов задач с собеседований по 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.

Итак, в базе данных есть таблица CLIENTS, содержащая три строки:

-2

И есть таблица INVOICES, в которой две строки:

-3

И сама задача звучит так: сколько строк вернёт запрос, указанный ниже

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!