Junção externa |
O diagrama entidade relacionamento a seguir apresentado mostra os relacionamentos existentes entre as tabelas EMPLOYEES e DEPARTMENTS. Considerando apenas o relacionamento "Trabalha Em" verificamos que um empregado pode não ter um departamento atribuído, assim como um departamento pode não ter empregados atribuídos. Os empregados que não têm departamento e os departamentos que não têm empregado não aparecem no resultado de uma junção interna, mas aparecem na junção externa. A junção externa é uma extensão da junção interna.
A junção externa à esquerda estende o resultado da junção interna, pois mostra todas as linhas que são devolvidas pela junção interna e acrescenta as linhas da tabela da esquerda que não têm correspondência na tabela da direita. A junção envolve sempre duas tabelas, sendo a da esquerda a que primeiro aparece no comando. O diagrama apresentado a seguir mostra como funciona este tipo de junção:
Os comandos apresentados a seguir mostram como fazer a junção externa à esquerda entre as tabelas EMPLOYEES e DEPARTMENTS. Esta operação vai mostrar as linhas obtidas pela junção interna, acrescida dos empregados que não têm um departamento atribuído, o que é possível porque a coluna DEPARTMENT_ID em EMPLOYEES suporta valores nulos:
Sintaxe proprietária | ON | USING | NATURAL JOIN |
---|---|---|---|
SELECT e.first_name, e.last_name, d.department_id, d.department_name FROM employees e, departments d WHERE e.department_id=d.department_id (+); |
SELECT e.first_name, e.last_name, d.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id=d.department_id); |
SELECT e.first_name, e.last_name, department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d USING (department_id); |
Não aplicável |
A junção externa à direita funciona da mesma forma que a junção externa à esquerda, mas mostra as linhas da tabela da direita que não têm correspondência com linhas da tabela da esquerda. Este resultado pode ser obtido por uma junção à esquerda trocando a ordem das colunas. O diagrama apresentado a seguir descreve o funcionamento deste tipo de junção:
Os comandos apresentados a seguir mostram como fazer a junção externa à direita entre as tabelas EMPLOYEES e DEPARTMENTS. Esta operação vai mostrar as linhas obtidas pela junção interna, acrescida dos departamentos que não têm um empregado atribuído:
Sintaxe proprietária | ON | USING | NATURAL JOIN |
---|---|---|---|
SELECT e.first_name, e.last_name, d.department_id, d.department_name FROM employees e, departments d WHERE e.department_id (+) =d.department_id; |
SELECT e.first_name, e.last_name, d.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id=d.department_id); |
SELECT e.first_name, e.last_name, department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d USING (department_id); |
Não aplicável |
Junção externa FULL (à esquerda e à direita)
A junção externa FULL mostra a soma das junções externas à esquerda e à direita, como exemplificado no próximo diagrama:
Os comandos apresentados a seguir mostram como fazer a junção externa FULL entre as tabelas EMPLOYEES e DEPARTMENTS:
Sintaxe proprietária | ON | USING | NATURAL JOIN |
---|---|---|---|
SELECT e.first_name, e.last_name, d.department_id, d.department_name FROM employees e, departments d WHERE e.department_id =d.department_id (+) UNION SELECT e.first_name, e.last_name, d.department_id, d.department_name FROM employees e, departments d WHERE e.department_id (+) =d.department_id; |
SELECT e.first_name, e.last_name, d.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id=d.department_id); |
SELECT e.first_name, e.last_name, department_id, d.department_name FROM employees e FULL OUTER JOIN departments d USING (department_id); |
Não aplicável |
Realizado por Turtle Learning ®. Última alteração em 2011-08-14