Даны две таблицы t1 и t2. Задача выписать все виды джойнов, которые знаешь, и результат запроса select * from t1 <join> t2 on t1.t = t2.t для каждого из них. |t1.t| ------ 1 2 4 null ------ |t2.t| ------ 1 3 null null
Ответ от нейросети
sobes.tech AI
Рассмотрим виды JOIN и результат для запроса select * from t1 <join> t2 on t1.t = t2.t на данных:
| t1.t |
|---|
| 1 |
| 2 |
| 4 |
| null |
| t2.t |
|---|
| 1 |
| 3 |
| null |
| null |
1. INNER JOIN Возвращает строки, где условие соединения выполняется (t1.t = t2.t).
Результат:
| t1.t | t2.t |
|---|---|
| 1 | 1 |
null не равен null в SQL, поэтому строки с null не соединятся.
2. LEFT JOIN (LEFT OUTER JOIN) Возвращает все строки из t1 и совпадающие из t2, если нет совпадения — NULL в столбцах t2.
Результат:
| t1.t | t2.t |
|---|---|
| 1 | 1 |
| 2 | NULL |
| 4 | NULL |
| NULL | NULL |
Строка с NULL из t1 не соединится с NULL из t2, но сама строка из t1 попадёт в результат.
3. RIGHT JOIN (RIGHT OUTER JOIN) Все строки из t2 и совпадающие из t1, иначе NULL в t1.
Результат:
| t1.t | t2.t |
|---|---|
| 1 | 1 |
| NULL | 3 |
| NULL | NULL |
| NULL | NULL |
4. FULL JOIN (FULL OUTER JOIN) Все строки из t1 и t2, совпадающие соединяются, остальные дополняются NULL.
Результат:
| t1.t | t2.t |
|---|---|
| 1 | 1 |
| 2 | NULL |
| 4 | NULL |
| NULL | NULL |
| NULL | 3 |
| NULL | NULL |
5. CROSS JOIN Декартово произведение всех строк из t1 и t2, без условия.
Результат (всего 4 строки t1 * 4 строки t2 = 16):
| t1.t | t2.t |
|---|---|
| 1 | 1 |
| 1 | 3 |
| 1 | NULL |
| 1 | NULL |
| 2 | 1 |
| 2 | 3 |
| 2 | NULL |
| 2 | NULL |
| 4 | 1 |
| 4 | 3 |
| 4 | NULL |
| 4 | NULL |
| NULL | 1 |
| NULL | 3 |
| NULL | NULL |
| NULL | NULL |
Таким образом, основные виды JOIN и их поведение на данных приведены выше.