ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Проверка наличия адресов email в таблице SQL: существует или нет

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

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

Для определения отсутствующих записей в SQL-таблице из заданного списка воспользуйтесь LEFT JOIN совместно с VALUES. Фильтруйте NULL значения для получения результатов.

SQL
Скопировать код
WITH List(Value) AS (VALUES ('A'),('B'),('C'))
SELECT List.Value
FROM List
LEFT JOIN YourTable ON List.Value = YourTable.Column
WHERE YourTable.Column IS NULL;

Замените 'A', 'B', 'C' на нужные вам значения и скорректируйте YourTable и Column. Этот подход позволяет быстро выявить недостающие элементы.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Продвинутый подход с использованием оператора EXCEPT

Оператор EXCEPT служит для выявления отсутствующих значений. Он выберет записи из первого запроса, которых нет в результате второго запроса.

SQL
Скопировать код
SELECT Value
FROM (VALUES ('A'), ('B'), ('C')) AS List(Value)
EXCEPT
SELECT Column
FROM YourTable;

Совместимость с более старыми версиями SQL Server

При работе со старыми версиями SQL Server вы можете воспользоваться подходом с использованием производной таблицы и UNION ALL:

SQL
Скопировать код
SELECT Value
FROM (
    SELECT 'A' AS Value
    UNION ALL
    SELECT 'B'
    UNION ALL
    SELECT 'C'
) AS List
LEFT JOIN YourTable ON List.Value = YourTable.Column
WHERE YourTable.Column IS NULL;

Применение NOT IN и EXISTS

Помимо LEFT JOIN, можно использовать NOT IN или подзапросы с EXISTS:

SQL
Скопировать код
-- Подход с NOT IN
SELECT Value 
FROM (VALUES ('A'), ('B'), ('C')) AS List(Value)
WHERE Value NOT IN (SELECT Column FROM YourTable)

-- Подзапрос EXISTS с условием CASE
SELECT Value,
       CASE WHEN EXISTS(SELECT 1 FROM YourTable WHERE Column = List.Value)
            THEN 'Exists' ELSE 'Missing' END AS Status
FROM (VALUES ('A'), ('B'), ('C')) AS List(Value)

Использование общих табличных выражений (CTE)

CTE (Common Table Expression) используют для упорядочивания данных и повышения читаемости запросов:

SQL
Скопировать код
WITH EmailList AS (
    SELECT 'email1@example.com' AS Email
    UNION ALL SELECT 'email2@example.com'
    UNION ALL SELECT 'email3@example.com'
)
SELECT Email,
       CASE WHEN yt.Email IS NULL THEN 'Missing' ELSE 'Exists' END AS Status
FROM EmailList el
LEFT JOIN YourEmailTable yt
ON el.Email = yt.Email;

Визуализация

Поиск сокровищ можно представить так:

Markdown
Скопировать код
Список значений (🗺️): [💎, 🏺, 📜, 🗡️]
Таблица (🏰): [🗡️, 📜] 

Отсутствуют в замке (❓): [💎, 🏺]

Спрятанные сокровища вы можете открыть при помощи SQL:

SQL
Скопировать код
SELECT treasure 
FROM ValueList
WHERE treasure NOT IN (SELECT treasure FROM Castle)

Таким образом, мы находим потерянные сокровища, обойдя охрану замка:

Markdown
Скопировать код
🗺️➖🏰 = [💎, 🏺]
// Сокровища ждут своего обнаружения!

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

  1. Конструктор значений таблиц (Transact-SQL) – SQL Server | Microsoft Learn – Изучение конструкторов значений таблиц даст вам способность к волшебству в SQL.
  2. SQL Server LEFT JOIN Not IN – SQL Authority – Обоснование, почему предпочтительнее использовать LEFT JOIN, чем NOT IN.
  3. LEFT Anti Semi Join – SQL Performance – Анализ производительности запросов при использовании NOT EXISTS и NOT IN.
Свежие материалы