При равенстве id INNER JOIN даст 2 строки, LEFT — 4, RIGHT — 4, FULL — 6. CROSS JOIN даст 16 пар, потому что сочетает каждую строку A с каждой строкой B.
Разные варианты объединения таблиц в SQL
При равенстве id INNER JOIN даст 2 строки, LEFT — 4, RIGHT — 4, FULL — 6. CROSS JOIN даст 16 пар, потому что сочетает каждую строку A с каждой строкой B.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо продемонстрировать объединения двух таблиц с помощью всех основных типов JOIN: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN и CROSS JOIN. Для каждого запроса указать, какие строки окажутся в результате.
Даны две таблицы TableA и TableB:
TableA | TableB
---------|---------
id | id
---------|---------
1 | 2
2 | 4
3 | 6
4 | 8
SELECT TableA.id, TableB.id
FROM ...
Ответ
При равенстве id INNER JOIN даст 2 строки, LEFT — 4, RIGHT — 4, FULL — 6. CROSS JOIN даст 16 пар, потому что сочетает каждую строку A с каждой строкой B.
SELECT a.id, b.id FROM TableA a INNER JOIN TableB b ON a.id = b.id;
SELECT a.id, b.id FROM TableA a LEFT JOIN TableB b ON a.id = b.id;
SELECT a.id, b.id FROM TableA a RIGHT JOIN TableB b ON a.id = b.id;
SELECT a.id, b.id FROM TableA a FULL OUTER JOIN TableB b ON a.id = b.id;
SELECT a.id, b.id FROM TableA a CROSS JOIN TableB b;
INNER: (2,2), (4,4). LEFT дополнит (1,NULL), (3,NULL). RIGHT дополнит INNER парами (NULL,6), (NULL,8). FULL объединит все шесть пар. CROSS — все сочетания {1,2,3,4} × {2,4,6,8}. Без ORDER BY порядок строк не гарантируется; FULL поддерживается не каждой СУБД.