SQL выборка данных из одной таблицы, отсутствующих в другой

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

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

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

SQL
Скопировать код
SELECT t1.* 
FROM table1 t1 
WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t1.id = t2.id);

Здесь мы сталкиваемся с коррелированным подзапросом! Как тщательно подготовленный оперативник, он работает тихо и незаметно, особенно при обработке персональных данных в объеме свыше 800 тысяч строк.

Вариант C: NOT IN

SQL
Скопировать код
SELECT t1.* 
FROM table1 t1 
WHERE t1.id NOT IN (SELECT id FROM table2);

NOT IN напрямую ведет к решению. Будьте аккуратны с NULL значениями – в контексте SQL они ведут себя как чёрная овца в стаде белых, и способны замедлить производительность быстрее, чем алкоголь обнажит секреты, замкнутого дядюшки Васи!

Стратегия D: EXCEPT

SQL
Скопировать код
SELECT id 
FROM table1
EXCEPT
SELECT id 
FROM table2;

Предпочитаете элегантные решения? Вот одно из них. Оператор EXCEPT, похожий на бармена в элитном клубе, отсекает звезд от простых посетителей, возвращая только уникальные идентификаторы из table1.

Будьте предельно внимательны

Анализируйте и убедитесь, что сравниваете соответствующие ключи или уникальные идентификаторы. Иначе, вы можете оказаться в той же ситуации, что и я каждое утро, когда не могу найти свои ключи. Точность – залог успеха!

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

Представим две T отдельно доставленных пиццы:

Markdown
Скопировать код
Пицца A (🍕A): [Кусок 1, Кусок 2, Кусок 3]
Пицца B (🍕B): [Кусок 2, Кусок 3, Кусок 4]

Нам нужны те усобицы из 🍕A, которые отсутствуют в 🍕B:

Markdown
Скопировать код
🍕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 значения. Они могут испортить атмосферу на любой вечеринке!

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

  1. SQL LEFT JOIN Keyword – Всё о дружбе SQL и LEFT JOIN. Узнайте об этом здесь.
  2. Understanding SQL JOINs for Data Analysis – Понимание SQL JOINs проще, чем кажется. Это как книжка с картинками в мире SQL.
  3. SQL joins as venn diagram – Stack Overflow – Яркий и наглядный метод для осознания операций SQL JOIN.
  4. Optimizing SQL Queries for Performance – Откройте для себя искусство оптимизации SQL запросов. Ваш SQL будет вам благодарен!
  5. Using Subqueries in SQL – Тренировка для мастеров в освоении подзапросов SQL.
  6. Database Design for Mere Mortals™: A Hands-On Guide to Relational Database Design, Second Edition – Преобразуйте себя из новичка в эксперта по проектированию баз данных.