Usando junções internas
Uma junção interna é uma junção na qual os valores associados das colunas são comparados, usando um operador de comparação.
No padrão ISO, as junções internas podem ser especificadas nas cláusulas FROM ou WHERE. Esse é o único tipo de junção que o ISO oferece suporte na cláusula WHERE. Junções internas especificadas na cláusula WHERE são conhecidas como junções internas com estilo antigo.
A consulta a seguir Transact-SQL é um exemplo de uma junção interna:
USE AdventureWorks2008R2;
GO
SELECT *
FROM HumanResources.Employee AS e
INNER JOIN Person.Person AS p
ON e.BusinessEntityID = p.BusinessEntityID
ORDER BY p.LastName
Essa junção interna é conhecida como uma junção de igualdade. Essa junção retorna todas as colunas em ambas as tabelas e retorna somente as linhas para as quais há um valor igual na coluna de junção.
Junções que usam operadores diferentes de igual
É possível também unir valores de duas colunas que não são iguais. Os mesmos operadores e predicados usados para as junções internas podem ser usados para as junções não iguais. Para obter mais informações sobre os operadores e predicados disponíveis que podem ser usados em junções, consulte Usando operadores em expressões e WHERE (Transact-SQL).
O exemplo a seguir usa uma junção menor que (<), para localizar os preços de venda do produto 718 que são menores do que o preço recomendado na lista para aquele produto.
USE AdventureWorks2008R2;
GO
SELECT DISTINCT p.ProductID, p.Name, p.ListPrice, sd.UnitPrice AS 'Selling Price'
FROM Sales.SalesOrderDetail AS sd
JOIN Production.Product AS p
ON sd.ProductID = p.ProductID AND sd.UnitPrice < p.ListPrice
WHERE p.ProductID = 718;
GO
Aqui está o conjunto de resultados.
ProductID Name ListPrice Selling Price
----------- --------------------------- ------------------ -------------
718 HL Road Frame - Red, 44 1431.5000 758.0759
718 HL Road Frame - Red, 44 1431.5000 780.8182
718 HL Road Frame - Red, 44 1431.5000 858.90
(3 row(s) affected)
Junções que usam um operador não igual
A junção não igual (<>) é raramente usada. Como regra geral, junções não iguais só fazem sentido quando usadas com uma autojunção. Por exemplo, esta junção não igual Transact-SQL e a autojunção são usadas para localizar as subcategorias que apresentam, no mínimo, dois preços diferentes presentes nas subcategorias. $15:
USE AdventureWorks2008R2;
GO
SELECT DISTINCT p1.ProductSubcategoryID, p1.ListPrice
FROM Production.Product p1
INNER JOIN Production.Product p2
ON p1.ProductSubcategoryID = p2.ProductSubcategoryID
AND p1.ListPrice <> p2.ListPrice
WHERE p1.ListPrice < $15 AND p2.ListPrice < $15
ORDER BY ProductSubcategoryID;
Observação |
---|
A expressão NOT column_name = column_name é equivalente a column_name<>column_name. |
O exemplo Transact-SQL a seguir, usa uma junção não igual combinada com uma autojunção para localizar todas as linhas na tabela ProductVendor na qual duas ou mais linhas têm o mesmo ProductID, mas números diferentes de VendorID (ou seja, os produtos têm mais de um fornecedor):
USE AdventureWorks2008R2;
GO
SELECT DISTINCT p1.VendorID, p1.ProductID
FROM Purchasing.ProductVendor p1
INNER JOIN Purchasing.ProductVendor p2
ON p1.ProductID = p2.ProductID
WHERE p1.VendorID <> p2.VendorID
ORDER BY p1.VendorID