TGViewer
В мире больших данных В мире больших данных @big_data_systems_analysis · 301 subscribers
Post #77 118
Разгадка тайн соединения NULL-значений в SQL

Продолжим серию статей про особенности работы с #null 🙂 да, они ещё не закончились.

Одна из часто встречающихся проблем — непонимание как происходит JOIN таблиц с NULL-значениями. Давайте посмотрим на примерах.

Допустим у нас есть две таблицы:

user_names
us_id  name
1 Илья
2 Ольга
3 Null
Null Null

user_roles
us_id  role
1 admin
2 user
3 user
Null guest
Null Null


INNER JOIN

Строки, для которых нет совпадения в обеих таблицах, исключаются из результирующего набора. В том числе, если в столбце, по которому происходит соединение, встречаются значения с NULL, эти строки будут исключены из результата, так как два NULL нельзя сравнить между собой.
SELECT u.us_id, r.us_id, name, role
FROM user_names u
INNER JOIN user_roles r ON u.us_id = r.us_id;


Результат:
u.us_id   r.ud_id  name   role
1 1 Илья admin
2 2 Ольга user
3 3 Null user


LEFT JOIN
Возвращает все записи из левой таблицы (users_name) и соответствующие записи из правой таблицы (users_role).
SELECT u.us_id, r.us_id, name, role
FROM user_names u
LEFT JOIN user_roles r ON u.us_id = r.us_id;


Результат:
u.us_id   r.ud_id  name   role
1 1 Илья admin
2 2 Ольга user
3 3 Null user
Null Null Null Null

Здесь стоит отметить, что появившиеся Null в полях r.ud_id — не являются Null-значениями из таблицы users_role.

FULL JOIN
Возвращает все записи, включая совпадения в левой или правой таблице. Строки в любой из таблиц будут содержать NULL значения в столбцах из другой таблицы, в случае отсутствия совпадения по ключу.
SELECT u.us_id, r.us_id, name, role
FROM user_names u
FULL JOIN user_roles r ON u.us_id = r.us_id;


Результат:
u.us_id   r.ud_id  name   role
1 1 Илья admin
2 2 Ольга user
3 3 Null user
Null Null Null Null
Null Null Null guest
Null Null Null Null

Обратим внимание, что строки с NULL NULL повторяются дважды, так как они не равны друг другу и их нельзя объединить.

#sql #null
  • ❤ 1
More from @big_data_systems_analysis
  1. Jul 28, 2026Продолжая тему тех самых SQL-скриптов на 1200 строк, хочу напомнить одну важную вещь, кото…
  2. Jul 15, 2026Борьба с ветряными мельницами Думаю, многим из вас уже набили оскомину разговоры об ИИ. Мн…
  3. Mar 8, 2026В этот день желаю женской части аудитории верить в себя и позволять быть себе любой без ог…
  4. Mar 6, 2026Этот мем — точная копия одного рабочего дня, который я, кажется, прожила уже раз двести 😄…
  5. Mar 4, 2026Знаете, какая фраза чаще всего дорого обходится компании? "Работает — и ладно" 🥂 Результа…
  6. Feb 26, 2026Дисциплина, конечно, прошла мимо меня 😄 в черновиках 1000 и 1 пост, но ни один из них не…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →