Utilizzo di inner join

In un inner join i valori delle colonne unite in join vengono confrontati tramite un operatore di confronto.

In base allo standard SQL-92 è possibile specificare inner join nella clausola FROM o nella clausola WHERE. Si tratta dell'unico tipo di join supportato da SQL-92 nella clausola WHERE. Gli inner join specificati nella clausola WHERE vengono considerati obsoleti.

La query Transact-SQL seguente è un esempio di inner join:

USE AdventureWorks;
GO
SELECT *
FROM HumanResources.Employee AS e
    INNER JOIN Person.Contact AS c
    ON e.ContactID = c.ContactID
ORDER BY c.LastName

Questo inner join, denominato equijoin, restituisce tutte le colonne di entrambe le tabelle e solo le righe che includono valori uguali nella colonna di join.

Join che utilizzano operatori diversi dall'operatore di uguaglianza

È inoltre possibile unire in join i valori di due colonne non uguali. Per i join di disuguaglianza si possono utilizzare gli stessi operatori e predicati utilizzati per gli inner join. Per ulteriori informazioni sugli operatori e i predicati che è possibile utilizzare nei join, vedere Utilizzo di operatori nelle espressioni e WHERE (Transact-SQL).

Nell'esempio seguente viene utilizzato un join di minoranza (<) per individuare i prezzi di vendita del prodotto 718 inferiori al prezzo di listino consigliato.

USE AdventureWorks;
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

Set di risultati:

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)

Join che utilizzano l'operatore di disuguaglianza

Il join di disuguaglianza (<>) viene utilizzato raramente. In generale, è opportuno utilizzare questi join solo insieme a un self join. Questo join di disuguaglianza Transact-SQL viene utilizzato, ad esempio, insieme a un self join per trovare le sottocategorie che includono almeno due prodotti con prezzo inferiore a $15:

USE AdventureWorks;
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;

[!NOTA] L'espressione NOT column_name = column_name equivale a column_name <> column_name.

Nell'esempio seguente di Transact-SQL viene utilizzato un join di disuguaglianza associato a un self join per trovare tutte le righe della tabella ProductVendor in cui due o più righe includono lo stesso valore ProductID, ma valori VendorID diversi, ovvero prodotti con più rivenditori:

USE AdventureWorks;
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

Vedere anche

Concetti

Funzioni di conversione

Altre risorse

WHERE (Transact-SQL)
Esempi di istruzioni SELECT (Transact-SQL)
SELECT (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005