Operações LEFT JOIN RIGHT JOIN (SQL do Microsoft Access)
Aplica-se ao: Access 2013, Office 2013
Combina registros da tabela de origem quando usados em qualquer cláusula FROM.
Sintaxe
FROM table1 [ LEFT | RIGHT ] JOIN table2 ON table1.field1compopr table2.field2
As operações LEFT JOIN e RIGHT JOIN têm estas partes:
Parte |
Descrição |
---|---|
tabela1, tabela2 |
Os nomes das tabelas das quais os registros são combinados. |
field1, field2 |
Os nomes dos campos unidos. Os campos devem ser do mesmo tipo de dados e conter o mesmo tipo de dados, mas não precisam ter o mesmo nome. |
oprcomp |
Qualquer operador de comparação relacional: "=," "<," ">," "<=," ">=," ou "<>." |
Comentários
Use a operação LEFT JOIN para criar uma junção externa esquerda. As junções externas esquerdas incluem todos os registros da primeira de duas tabelas (a da esquerda), mesmo se não houver valores correspondentes na segunda tabela (à direita).
Use uma operação RIGHT JOIN para criar uma junção externa direita. As junções externas direitas incluem todos os registros da segunda de duas tabelas (a da direita), mesmo se não houver valores correspondentes para registros na primeira tabela (à esquerda).
Por exemplo, você poderia usar LEFT JOIN com as tabelas Departamentos (esquerda) e Funcionários (direita) para selecionar todos os departamentos, incluindo os que não tiverem funcionários atribuídos a eles. Para selecionar todos os funcionários, incluindo os não atribuídos a um departamento, você usaria RIGHT JOIN.
O exemplo a seguir mostra como você poderia unir as tabelas Categorias e Produtos no campo CategoryID. A consulta produz uma lista de todas as categorias, incluindo as que não contêm produtos:
SELECT CategoryName,
ProductName
FROM Categories LEFT JOIN Products
ON Categories.CategoryID = Products.CategoryID;
Neste exemplo, CategoryID é o campo unido, mas não é incluído nos resultados da consulta porque não está incluído na instrução SELECT. Para incluir o campo unido, insira o nome do campo na instrução SELECT — neste caso, Categories.CategoryID.
Observação
- Para criar uma consulta que inclua somente registros nos quais os dados dos campos unidos sejam iguais, use uma operação INNER JOIN.
- Uma LEFT JOIN ou uma RIGHT JOIN podem ser aninhadas em uma INNER JOIN, mas uma INNER JOIN não pode ser aninhada em uma LEFT JOIN ou em uma RIGHT JOIN. Consulte a discussão sobre aninhamento no tópico sobre INNER JOIN para saber como aninhar junções em outras junções.
- Você pode vincular várias cláusulas ON. Veja a discussão sobre vinculação de cláusula no tópico INNER JOIN para ver como fazer isso.
- Se você tentar inserir campos com dados de Memorando ou Objeto OLE, ocorrerá um erro.
Exemplo
Este exemplo:
Pressupõe a existência de campos de Nomes de Departamento e IDs de departamento hipotéticos em uma tabela de Funcionários. Observe que esses campos, na verdade, não existem na tabela de Funcionários do banco de dados do Northwind.
Seleciona todos os departamentos, inclusive os que não têm os funcionários.
Chama um procedimento EnumFields, que pode ser encontrado no exemplo de declaração SELECT.
Sub LeftRightJoinX()
Dim dbs As Database, rst As Recordset
' Modify this line to include the path to Northwind
' on your computer.
Set dbs = OpenDatabase("Northwind.mdb")
' Select all departments, including those
' without employees.
Set rst = dbs.OpenRecordset _
("SELECT [Department Name], " _
& "FirstName & Chr(32) & LastName AS Name " _
& "FROM Departments LEFT JOIN Employees " _
& "ON Departments.[Department ID] = " _
& "Employees.[Department ID] " _
& "ORDER BY [Department Name];")
' Populate the Recordset.
rst.MoveLast
' Call EnumFields to print the contents of the
' Recordset. Pass the Recordset object and desired
' field width.
EnumFields rst, 20
dbs.Close
End Sub