Рассмотрим ниже 2 таблицы:
EMP
empid name dept_id salary
1 Rob 1 100
2 Mark 1 300
3 John 2 100
4 Mary 2 300
5 Bill 3 700
6 Jose 6 400
Отдел
deptid name
1 IT
2 Accounts
3 Security
4 HR
5 R&D
Внутреннее присоединение:
В основном записывается как JOIN в запросах sql. Он возвращает только совпадающие записи между таблицами.
Узнайте всех сотрудников и имена их отделов:
Select a.empid, a.name, b.name as dept_name
FROM emp a
JOIN department b
ON a.dept_id = b.deptid
;
empid name dept_name
1 Rob IT
2 Mark IT
3 John Accounts
4 Mary Accounts
5 Bill Security
Как вы видите выше, Jose
не выводится из EMP в выводе, так как его dept_id 6
не находит соответствия в таблице Department. Точно так же строки HR
и R&D
не выводятся из таблицы Department , так как они не нашли соответствия в таблице Emp.
Итак, INNER JOIN или просто JOIN возвращает только совпадающие строки.
LEFT JOIN:
Возвращает все записи из таблицы LEFT и только совпадающие записи из таблицы RIGHT.
Select a.empid, a.name, b.name as dept_name
FROM emp a
LEFT JOIN department b
ON a.dept_id = b.deptid
;
empid name dept_name
1 Rob IT
2 Mark IT
3 John Accounts
4 Mary Accounts
5 Bill Security
6 Jose
Итак, если вы наблюдаете вышеприведенный вывод, все записи из таблицы LEFT (Emp) печатаются только с совпадающими записями из таблицы RIGHT.
Строки
HR
и R&D
не выводятся из таблицы Department , так как они не нашли соответствия в таблице Emp на dept_id.
Итак, LEFT JOIN возвращает ВСЕ строки из левой таблицы и только совпадающие строки из правой таблицы.
Также можно проверить ДЕМО здесь .