Проверка на непустой результат SELECT запроса в SQL

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если нужно узнать, возвращает ли запрос SELECT вообще какие-то результаты, используйте в своём коде конструкцию EXISTS. Она остановит выполнение, как только обнаружит первую подхождую запись. Таким образом, можно значительно увеличить эффективность вашего запроса.

SQL
Скопировать код
IF EXISTS (SELECT 1 FROM ваша_таблица WHERE ваши_условия)
    SELECT 'Отличные новости! Данные найдены 😃';
ELSE
    SELECT 'Ой! Данных нет 😥';

При этом, конечно, вам придётся подставить имя вашей таблицы и подходящие для вашего случая условия.

Маленькое замечание: В условии EXISTS существеннее использовать SELECT 1 вместо SELECT *. Извлекать все столбцы таблицы для проверки наличия данных совершенно незачем. Сохраняем ресурсы, друзья!

Кинга Идем в IT: пошаговый план для смены профессии

А сколько всё-таки строк?

Легко узнаете, сколько строк затронуло ваш запрос, если сразу после его выполнения примените @@ROWCOUNT. Практично, не правда ли?

SQL
Скопировать код
SELECT * FROM ваша_таблица WHERE ваши_условия;
IF @@ROWCOUNT > 0
    SELECT 'Данные есть; @@ROWCOUNT это подтверждает 🎉';
ELSE
    SELECT 'Данные отсутствуют; @@ROWCOUNT это подтверждает 😢';

Внимание: Если вы работаете с огромными объёмами данных, лучше использовать ROWCOUNT_BIG(). Эта функция справится с числом строк, выходящим за рамки типа int. Но помните: функция ISNULL не подойдёт для определения пустоты результата запроса.

Визуализация результата

Хотите наглядно представить себе, как проверяется результат запроса SELECT на пустоту? Представьте, будто вы кидаете в воду широкую рыболовную сеть.

Markdown
Скопировать код
🎣 ➡️ 🌊 : SELECT * FROM таблица WHERE условие;

Итак, результата нет, если?

Markdown
Скопировать код
🎣 ➡️ 🌊: []  # Пустой массив – это пустая сеть;

А когда можно радостно говорить о улове дня?

Markdown
Скопировать код
🎣 ➡️ 🌊: [🐟, 🐠]  # Массив с данными – удачная рыбалка!

Обязательно проверьте ваш улов, прежде чем начнёте готовить ужин.

SQL
Скопировать код
IF EXISTS(SELECT 1 FROM таблица WHERE условие)
    -- У нас есть рыба для жарки 🍳
ELSE
    -- Кажется, сегодня придется обойтись без рыбы 🍕

Специальные условия? Без вопросов!

Если в вашем запросе учтены конкретные условия, сочетайте их с IF EXISTS. Это поможет быстро определить наличие необходимых данных.

SQL
Скопировать код
IF EXISTS(SELECT 1 FROM сервис WHERE специальное_условие)
    SELECT 'Специальное условие выполнено. Мы победили! 💪';
ELSE
    SELECT 'Специальное условие не выполнено. К сожалению 😶';

Двойная польза: IF EXISTS и @@ROWCOUNT

Нужно получить из запроса конкретное количество строк? Сочетайте IF EXISTS и @@ROWCOUNT. Этот вариант предоставит вам две выгоды.

SQL
Скопировать код
SELECT * FROM ваша_таблица WHERE ваши_условия;
IF EXISTS (SELECT 1 FROM ваша_таблица WHERE ваши_условия) AND @@ROWCOUNT > ожидаемое_количество
    SELECT 'Данных достаточно. Ужин обеспечен 🥘';
ELSE
    SELECT 'Данных недостаточно. Видимо, придется заказывать еду 😅';

Профессиональный совет: Если хотите углубиться в изучение @@ROWCOUNT, обратитесь к SQL Server Books Online — ресурсу, что уже многим помог стать гуру SQL.

В контексте всё важно, поэтому выбирайте мудро

Важно понять, что важнее для вас: производительность или точное количество строк? Подбирая между EXISTS и @@ROWCOUNT в зависимости от задачи, и, конечно, экспериментируйте – это поможет найти оптимальное решение.

Полезные материалы

  1. sql – Подзапросы с использованием Exists 1 или Exists * – Stack Overflow — здесь объясняется работа EXISTS в SQL-подзапросах.
  2. sql server – Уменьшение размера файла журнала не приводит к сокращению его размера – Database Administrators Stack Exchange — обсудить инциденты, связанные с запросами SQL, которые могут привести к неожиданным результатам.
  3. PG Casts — для пользователей PostgreSQL подсказка, как обнаружить пустые результаты запросов.
  4. SQL-запрос для проверки или получения строки с заданными значениями – GeeksforGeeks — целая копилка советов и трюков SQL, включая инструкции о том, как проверять пустые таблицы или результаты.
  5. Множество способов использования Coalesce в SQL Server — как использовать функцию COALESCE в SQL Server для обработки NULL или пустых результатов.