Оператор JOIN

Оператор JOIN позволяет писать SQL запросы с выборкой данных из нескольких таблиц на основе определенного условия объединения.

A SQL query walks into a bar and sees two tables.
He walks up to them and says:
'Can I join you?'



Пересечение множеств. INNER JOIN

Работа оператора JOIN подобна операциям над множествами в реляционной алгебре.

Допустим, у нас есть две таблицы: коты и конфеты. Каждая запись в таблице котов содержит идентификатор принадлежащей ему конфеты candy_id.

Таблица cat

id name candy_id
1 Мия 3
2 Брат Кота-астронавта null
3 Кот-астронавт 2

Таблица candy

id name
1 Плутоновое Пралине
2 Взрывная Комета
3 Вселенская Гармония

null — специальное значение, обозначающее отсутствие данных, у кота с идентификатором 2 нет связи с конфетой.

Сформируем SQL запрос объединения данных таблиц cat и candy на условии равенства идентификатора конфеты в обеих таблицах.

SELECT cat.name, candy.name               -- выбрать имена котов и имена конфет
FROM cat                                  -- из таблицы cat
JOIN candy ON cat.candy_id = candy.id;    -- объединить с таблицей candy по равенству идентификатора конфеты
Именно INNER JOIN используется по умолчанию, если не указывать дополнительные ключевые слова
JOIN = INNER JOIN

Результатом выполнения запроса будет объединенная таблица со склеенными записями из таблиц cat и candy.

Объединенная таблица cat и candy

cat.name candy.name
Мия Вселенская Гармония
Кот-астронавт Взрывная Комета
Cat and candy tables inner join example

Типы JOIN

Помимо INNER JOIN существуют и другие типы объединения таблиц

  • LEFT JOIN: включает все записи из таблицы, указанной слева в запросе (после FROM) и записи на пересечении
  • RIGHT JOIN: включает все записи из таблицы, указанной справа в запросе (после JOIN) и записи на пересечении
  • FULL JOIN = FULL OUTER JOIN: включает все записи из обеих таблиц



JOIN запросы с NULL

Чтобы выбрать только записи, не попадающие на пересечение таблиц, необходимо указать условие в запросе:

WHERE table_name.column_name IS NULL



Задача

Напишите SQL-запрос, который вернет всех котов и принадлежащие им конфеты.

SQL симулятор

Логические операторы не поддерживаются симулятором

Схема базы данных:

Cat and candy tables database schema