Предположим, что у нас есть 2 таблицы:
Table1
tc1
0
1
2
и Table2
tc2
0
2
3
Это будет результатом различных запросов на этих 2 таблиц
SELECT tc1, tc2 FROM table1, table2 WHERE tc1=tc2
Результат:
tc1 tc2
0 0
2 2
Это то же самое, как этот запрос:
SELECT tc1, tc2 FROM table1 INNER JOIN table2 ON tc1=tc2
Это в основном возвращает только те строки, в которых tc1 = СК2. Просто. Теперь внешние соединения ведут себя по-разному. Они включают все строки из одной таблицы.
LEFT
означает, что он будет содержать все строки из набора, который у вас уже есть, даже если они не соответствуют чему-либо в объединенной таблице.
RIGHT
означает, что он будет содержать все строки из объединенной таблицы, даже если они не соответствуют ни в каких строках, которые у вас уже есть.
FULL
вернет все строки с обеих сторон.
Когда матч не найден на одной стороне, значения возвращаются как NULL
SELECT tc1, tc2 FROM table1 LEFT JOIN table2 ON tc1=tc2
результат будет:
tc1 tc2
0 0
1 NULL
2 2
Теперь, с правой присоединиться
SELECT tc1, tc2 FROM table1 RIGHT JOIN table2 ON tc1=tc2
вернется
tc1 tc2
0 0
2 2
NULL 3
И теперь, полное внешнее соединение
SELECT tc1, tc2 FROM table1 FULL OUTER JOIN table2 ON tc1=tc2
возвратит все строки, с соответствующими нулям
tc1 tc2
0 0
1 NULL
2 2
NULL 3
Имейте в виду, что они эквивалентны:
INNER JOIN <=> JOIN
LEFT OUTER JOIN <=> LEFT JOIN
RIGHT OUTER JOIN <=> RIGHT JOIN
Это имеет смысл сейчас. Спасибо, что нашли время, чтобы объяснить примеры. – LP496