Разница между оператором SQL Outer JOIN - PullRequest
1 голос
/ 19 сентября 2011

Я хотел бы узнать разницу между этими двумя запросами SQL. Примечание. Внешний ключ = dept_no

Запрос1:

SELECT emp_no, emp_name, emp.dept_no, dept_name, loc
from emp,dept
WHERE emp.dept (+)= dept.dept_no;

Запрос2:

SELECT emp_no, emp_name, emp.dept_no, dept_name, loc
from emp,dept
WHERE emp.dept = dept.dept_no(+);

В основном мой вопрос касается позиции Внешнего Соединения.Спасибо!

Ответы [ 3 ]

4 голосов
/ 19 сентября 2011

Вы отметили свой вопрос mysql, но используемый вами специальный синтаксис внешнего соединения - это запатентованное изобретение Oracle.

MySQL не поддерживает синтаксис модификатора соединения (+) в любой позиции.

Почему бы не использовать синтаксис ANSI SQL-92 для LEFT OUTER JOIN и RIGHT OUTER JOIN?Тогда ваши запросы будут понятны и будут работать как в Oracle, так и в MySQL.

SELECT emp_no, emp_name, emp.dept_no, dept_name, loc
FROM emp LEFT OUTER JOIN dept ON emp.dept = dept.dept_no
4 голосов
/ 19 сентября 2011

Позиция outer join (влево или вправо) определяет, из какой из таблиц возвращать все строки , даже если не найдено соответствующих строк из связанной таблицы. Поэтому ...

Первый (left outer join) вернет всю информацию о сотруднике (все строки из emp), даже если он не связан с отделом.

Второй (right outer join) вернет все названия отделов и номера отделов (все строки из dept), даже если в этом отделе нет сотрудников.

0 голосов
/ 19 сентября 2011

Это классическая разница между Table 1 (LEFT outer join) Table 2 и Table 1 (RIGHT outer join) Table 2, в которой первая дает вам все записи из таблицы 1, включая записи, в которых отсутствует связь в таблице 2, а вторая - наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...