SQL выборка данных из одной таблицы, отсутствующих в другой
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
SELECT t1.*
FROM table1 t1
LEFT JOIN table2 t2
ON t1.id = t2.id
WHERE t2.id IS NULL;
При использовании LEFT JOIN мы быстро и эффективно получаем уникальные строки из table1
, отсутствующие в table2
. Для этого в запросе WHERE
применяется условие t2.id IS NULL
, что позволяет выбрать только те строки, которые не имеют соответствий. Это тонкая, хирургическая точность!

Альтернативные подходы
Нет единственно верного метода! Давайте рассмотрим еще несколько подходов, которые можно применить исходя из специфики вашей рабочей ситуации.
План B: NOT EXISTS
SELECT t1.*
FROM table1 t1
WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t1.id = t2.id);
Здесь мы сталкиваемся с коррелированным подзапросом! Как тщательно подготовленный оперативник, он работает тихо и незаметно, особенно при обработке персональных данных в объеме свыше 800 тысяч строк.
Вариант C: NOT IN
SELECT t1.*
FROM table1 t1
WHERE t1.id NOT IN (SELECT id FROM table2);
NOT IN
напрямую ведет к решению. Будьте аккуратны с NULL
значениями – в контексте SQL они ведут себя как чёрная овца в стаде белых, и способны замедлить производительность быстрее, чем алкоголь обнажит секреты, замкнутого дядюшки Васи!
Стратегия D: EXCEPT
SELECT id
FROM table1
EXCEPT
SELECT id
FROM table2;
Предпочитаете элегантные решения? Вот одно из них. Оператор EXCEPT
, похожий на бармена в элитном клубе, отсекает звезд от простых посетителей, возвращая только уникальные идентификаторы из table1
.
Будьте предельно внимательны
Анализируйте и убедитесь, что сравниваете соответствующие ключи или уникальные идентификаторы. Иначе, вы можете оказаться в той же ситуации, что и я каждое утро, когда не могу найти свои ключи. Точность – залог успеха!
Визуализация
Представим две T отдельно доставленных пиццы:
Пицца A (🍕A): [Кусок 1, Кусок 2, Кусок 3]
Пицца B (🍕B): [Кусок 2, Кусок 3, Кусок 4]
Нам нужны те усобицы из 🍕A, которые отсутствуют в 🍕B:
🍕A 🚫🍕B: [Кусок 1]
У нас получился раритет – кусок пиццы A! 🍕 Приятного аппетита!
Протестируйте методы для улучшения производительности
Оптимизация производительности не волшебство, вам нужно будет протестировать различные методы и изучить планы выполнения запросов.
Некоторые советы:
- Анализируйте планы выполнения для выявления потенциальных проблемных мест.
- Создавайте индексы для ключей или столбцов, используемых в объединении, для ускорения исполнения SQL-запросов!
- Понимайте кардинальность ваших данных, чтобы выбрать наиболее грамотную стратегию исключения.
- Для бенчмаркинга применяйте реальные наборы данных и избегайте нежелательных сюрпризов.
Работа с большими объемами данных
Для работы с большой информацией требуется специальный подход:
- Порционное удаление – это способ улучшения производительности при работе с большими объемами данных.
- Используйте индексы для оптимизации времени выполнения запросов.
- Рассмотрите возможность использования временных таблиц. Они помогут вам быстрее найти нужные данные в обширном информационном пространстве!
Выбор и компромиссы
Помните, что NOT EXISTS
, NOT IN
и LEFT JOIN/IS NULL
– всего лишь инструменты из вашего арсенала. Используйте их уместно:
NOT EXISTS
обычно более эффективен, чемNOT IN
, когда в результатах подзапроса присутствуют NULL значения.LEFT JOIN/IS NULL
может быть более эффективным, чемNOT EXISTS
, в зависимости от стратегии оптимизации вашего SQL движка.- Будьте осторожны с
NOT IN
, когда столбцы содержат NULL значения. Они могут испортить атмосферу на любой вечеринке!
Полезные материалы
- SQL LEFT JOIN Keyword – Всё о дружбе SQL и LEFT JOIN. Узнайте об этом здесь.
- Understanding SQL JOINs for Data Analysis – Понимание SQL JOINs проще, чем кажется. Это как книжка с картинками в мире SQL.
- SQL joins as venn diagram – Stack Overflow – Яркий и наглядный метод для осознания операций SQL JOIN.
- Optimizing SQL Queries for Performance – Откройте для себя искусство оптимизации SQL запросов. Ваш SQL будет вам благодарен!
- Using Subqueries in SQL – Тренировка для мастеров в освоении подзапросов SQL.
- Database Design for Mere Mortals™: A Hands-On Guide to Relational Database Design, Second Edition – Преобразуйте себя из новичка в эксперта по проектированию баз данных.