Sottoquery
Si applica a:Azure Synapse Analytics Analytics
Platform System (PDW)
ENDPOINT di analisi SQL in Microsoft Fabric
Warehouse in Microsoft Fabric
Questo argomento fornisce esempi di uso di sottoquery in Azure Synapse Analytics, piattaforma di analisi (PDW) o Microsoft Fabric.
Per l'istruzione SELECT, vedere SELECT (Transact-SQL)
Contenuto
Nozioni di base
Sottoquery
Una sottoquery è una query nidificata in un'istruzione SELECT, INSERT, UPDATE o DELETE o in un'altra sottoquery. Viene anche denominata query interna o istruzione SELECT interna.
Query esterna
Istruzione che contiene la sottoquery. Viene anche denominata istruzione SELECT esterna.
Sottoquery correlata
Una sottoquery che fa riferimento a una tabella nella query esterna.
Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)
Questa sezione fornisce esempi di sottoquery supportate in Azure Synapse Analytics o nella piattaforma di strumenti analitici (PDW).
R. TOP e ORDER BY in una sottoquery
SELECT * FROM tblA
WHERE col1 IN
(SELECT TOP 100 col1 FROM tblB ORDER BY col1);
B. Clausola HAVING con una sottoquery correlata
SELECT dm.EmployeeKey, dm.FirstName, dm.LastName
FROM DimEmployee AS dm
GROUP BY dm.EmployeeKey, dm.FirstName, dm.LastName
HAVING 5000 <=
(SELECT sum(OrderQuantity)
FROM FactResellerSales AS frs
WHERE dm.EmployeeKey = frs.EmployeeKey)
ORDER BY EmployeeKey;
C. Sottoquery correlate con analisi
SELECT * FROM ReplA AS A
WHERE A.ID IN
(SELECT sum(B.ID2) OVER() FROM ReplB AS B WHERE A.ID2 = B.ID);
D. Istruzioni UNION correlate in una sottoquery
SELECT * FROM RA
WHERE EXISTS
(SELECT 1 FROM RB WHERE RB.b1 = RA.a1
UNION ALL SELECT 1 FROM RC);
E. Predicati di join in una sottoquery
SELECT * FROM RA INNER JOIN RB
ON RA.a1 = (SELECT COUNT(*) FROM RC);
F. Predicati di join correlati in una sottoquery
SELECT * FROM RA
WHERE RA.a2 IN
(SELECT 1 FROM RB INNER JOIN RC ON RA.a1=RB.b1+RC.c1);
G. Sub-SELECT correlate come origini dati
SELECT * FROM RA
WHERE 3 = (SELECT COUNT(*)
FROM (SELECT b1 FROM RB WHERE RB.b1 = RA.a1) X);
H. Sottoquery correlate nei valori di dati usati con le aggregazioni
SELECT Rb.b1, (SELECT RA.a1 FROM RA WHERE RB.b1 = RA.a1) FROM RB GROUP BY RB.b1;
I. Uso di IN con una sottoquery correlata
Nell'esempio seguente viene utilizzata la parola chiave IN
in una sottoquery correlata o ripetuta. È una query che dipende dalla query esterna. La query interna viene eseguita ripetutamente, una volta per ogni riga che può essere selezionata dalla query esterna. Questa query recupera un'istanza di EmployeeKey
, nonché il nome e cognome di ogni dipendente per il quale OrderQuantity
nella tabella FactResellerSales
corrisponde a 5
e con numero di identificazione uguale nelle tabelle DimEmployee
e FactResellerSales
.
SELECT DISTINCT dm.EmployeeKey, dm.FirstName, dm.LastName
FROM DimEmployee AS dm
WHERE 5 IN
(SELECT OrderQuantity
FROM FactResellerSales AS frs
WHERE dm.EmployeeKey = frs.EmployeeKey)
ORDER BY EmployeeKey;
J. Uso di EXISTS e IN con una sottoquery
Nell'esempio seguente vengono illustrate query semanticamente equivalenti per evidenziare la differenza tra l'uso della parola chiave EXISTS
e della parola chiave IN
. Entrambe sono esempi di una sottoquery che recupera un'istanza di ogni nome di prodotto per il quale la sottocategoria di prodotto è Road Bikes
. ProductSubcategoryKey
corrisponde nelle tabelle DimProduct
e DimProductSubcategory
.
SELECT DISTINCT EnglishProductName
FROM DimProduct AS dp
WHERE EXISTS
(SELECT *
FROM DimProductSubcategory AS dps
WHERE dp.ProductSubcategoryKey = dps.ProductSubcategoryKey
AND dps.EnglishProductSubcategoryName = 'Road Bikes')
ORDER BY EnglishProductName;
Or
SELECT DISTINCT EnglishProductName
FROM DimProduct AS dp
WHERE dp.ProductSubcategoryKey IN
(SELECT ProductSubcategoryKey
FROM DimProductSubcategory
WHERE EnglishProductSubcategoryName = 'Road Bikes')
ORDER BY EnglishProductName;
K. Uso di più sottoquery correlate
In questo esempio vengono utilizzate due sottoquery correlate per trovare i nomi dei dipendenti che hanno venduto un determinato prodotto.
SELECT DISTINCT LastName, FirstName, e.EmployeeKey
FROM DimEmployee e JOIN FactResellerSales s ON e.EmployeeKey = s.EmployeeKey
WHERE ProductKey IN
(SELECT ProductKey FROM DimProduct WHERE ProductSubcategoryKey IN
(SELECT ProductSubcategoryKey FROM DimProductSubcategory
WHERE EnglishProductSubcategoryName LIKE '%Bikes'))
ORDER BY LastName;
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per