2016-01-02 2 views
0

Когда вы выполняете левое соединение на двух таблицах, скажем, учитель и отдел ON teacher.id = department.id. Левое соединение сравнивает каждую запись с левой таблицей (учителем) с каждой записью из правой таблицы (отдела) и присоединяет запись к строке результата, если teacher.id = department.id.SQL Left Join Query Результат Строка

Что происходит с строками из каждой таблицы, когда teacher.id != department.id? Строки из таблицы преподавателя и отдела по-прежнему объединяются в одну строку результатов, за исключением того, что каждое значение столбца для строки результата будет иметь значение NULL?

ответ

1

Предположим, что у нас есть 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 
+0

Это имеет смысл сейчас. Спасибо, что нашли время, чтобы объяснить примеры. – LP496

1

Для четкого разъяснения о том, как Left & Right объединяет работу, и результаты, которые они могут производить, проверить эти:

Left joins explained.

Right joins explained.

Надеется, что это помогает.