Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

SQL Join: возвращаем строки из левой таблицы без совпадений

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

Для вывода строк из левой таблицы, которые не присутствуют в правой, используйте конструкцию LEFT JOIN в связке с проверкой на NULL в соответствующем поле правой таблицы:

SQL
Скопировать код
SELECT l.*
FROM left_table l
LEFT JOIN right_table r ON l.id = r.id
WHERE r.id IS NULL;

Такой SQL-запрос выберет все записи из left_table, которые не нашли соответствия в right_table.

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

Анализ и вариации

Использование NOT EXISTS для больших наборов данных

В случае работы с большими объемами данных, запросы с использованием NOT EXISTS могут выполняться быстрее благодаря эффективному использованию индексов. Это можно сравнить с пользованием быстрым спорткаром в мире SQL:

SQL
Скопировать код
SELECT l.*
FROM left_table l
WHERE NOT EXISTS (
    SELECT 1
    FROM right_table r
    WHERE l.id = r.id
);

Помните о важности процесса индексирования: это как проверка мощности двигателя вашего автомобиля.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

NOT IN для простоты написания запроса

NOT IN идеально подходит для обработки небольших объемов данных или когда у вас есть определенный перечень значений. Это удобный способ отфильтровать ненужные строки:

SQL
Скопировать код
SELECT l.*
FROM left_table l
WHERE l.id NOT IN (
    SELECT r.id
    FROM right_table r
);

Однако, если ваши столбцы могут содержать NULL, будьте дополнительно внимательны: NOT IN может дать неожиданные результаты.

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

Представьте себе, что вы – владелец строительной компании. Ваша задача — определить, какие материалы есть на складе, но ещё не были использованы на строительстве:

Markdown
Скопировать код
Материалы на складе: [🧱1, 🧱2, 🧱3]
Материалы на стройке: [🧱2, 🧱3, 🧱4]

Ваша задача — найти материалы, которые находятся только на складе и не использовались на стройке.

SQL
Скопировать код
SELECT S.*
FROM Storage S
LEFT JOIN Construction_Site C ON S.material = C.material
WHERE C.material IS NULL;

Результат:

Markdown
Скопировать код
Материалы на складе: [🧱1]

Таким образом с помощью SQL-запроса вы определяете какие материалы находятся на складе, но ещё не использовались на строительстве.

Мелкие детали и особенности

Типы объединений и их нюансы

Важно четко понимать различия между LEFT, RIGHT и FULL объединениями, чтобы правильно ориентироваться при сравнении таблиц, подобно тому, как важно знать правила шахмат.

Работа с колонками, имеющими одинаковые имена

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

Отладка сложных запросов

Разбейте сложные запросы на части, используя табличные переменные или общие табличные выражения (CTE), чтобы упростить их отладку и выполнение, как если бы вы разрезали пиццу на кусочки.

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

  1. Визуальное представление объединений SQL – CodeProject — графическое объяснение объединений SQL, полезное для понимания принципов их работы, как обучение катанию на велосипеде.
  2. Читает ли SQL Server все аргументы функции COALESCE, если первый аргумент не NULL? – Database Administrators Stack Exchange — дискуссия о том, как SQL Server работает с функцией COALESCE и вопросы производительности, связанные с этим.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой SQL-запрос следует использовать для выбора строк из левой таблицы, которые не имеют совпадений в правой таблице?
1 / 5