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, что позволяет выбрать только те строки, которые не имеют соответствий. Это тонкая, хирургическая точность!

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

Альтернативные подходы

Нет единственно верного метода! Давайте рассмотрим еще несколько подходов, которые можно применить исходя из специфики вашей рабочей ситуации.

План 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 – Преобразуйте себя из новичка в эксперта по проектированию баз данных.