Продвинутые SQL-запросы
2026-02-26 20:06 Diff

В этом уроке мы вспомним типы соединений JOIN. Это один из ключевых операторов SQL, который позволяет объединять данные из разных таблиц. JOIN позволяет совмещать информацию из нескольких таблиц на основе связанных значений в них, что позволяет получить более полные и сложные результаты запросов к базе данных.

Соединение INNER JOIN

INNER JOIN - это операция объединения, которая возвращает только те строки, которые имеют соответствующие значения в обеих таблицах, участвующих в объединении.

Соединение LEFT JOIN

LEFT JOIN - это операция объединения, которая возвращает все строки из левой таблицы table1 и только соответствующие строки из правой таблицы table2. Если в правой таблице нет соответствующей строки, то возвращается NULL для значений правой таблицы.

Соединение RIGHT JOIN

RIGHT JOIN - это операция объединения, которая возвращает все строки из правой таблицы (table2) и только соответствующие строки из левой таблицы (table1). Если в левой таблице нет соответствующей строки, то возвращается NULL для значений левой таблицы.

Соединение FULL JOIN

FULL JOIN (или FULL OUTER JOIN) - это операция объединения, которая возвращает все строки из обеих таблиц (table1 и table2), даже если нет соответствующих строк в другой таблице. Если в любой из таблиц нет соответствующих строк, то возвращается NULL для значений этой таблицы.

Соединение CROSS JOIN

CROSS JOIN - это операция объединения, которая возвращает декартово произведение двух таблиц, то есть все возможные комбинации строк из обеих таблиц. При использовании CROSS JOIN каждая строка из левой таблицы будет объединена со всеми строками из правой таблицы.

Риски и опасности NULL

  • Cравнение значений:
  • Арифметические вычисления: 5 + NULL = NULL. Любая операция приводит к NULL
  • Сортировка: NULL попадаются в рандомных местах
  • Внешние ключи: Нарушения составления таблиц
  • Агрегирующие функции: NULL значения в агрегатных функциях обрабатываются по особому - они игнорируются.
  • Вывод на экран: Возможное недопонимание результатов, ухудшение пользовательского опыта: сложно воспринимаются, сложно строить графики

Оператор NVL

Оператор NVL позволяет заменить NULL-значения на какое-то дефолтное значение.

Оператор COALESCE

COALESCE возвращает первое не NULL значение из списка. Если все параметры NULL, то функция возвращает NULL.

Оператор DECODE

Функция DECODE не создана для обработки NULL-значений, но ее можно использовать по аналогии с функцией NVL.