Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: Titik akhir analitik SQL Azure Synapse Analytics
Platform System (PDW)
di Microsoft Fabric
Warehouse di Microsoft Fabric
Topik ini memberikan contoh penggunaan subkueri di Azure Synapse Analytics, Analytics Platform System (PDW), atau Microsoft Fabric Warehouse.
Untuk pernyataan SELECT, lihat SELECT (Transact-SQL)
Konten
Dasar
Kueri bertumpuk
Subkueri adalah kueri yang ditumpuk di dalam pernyataan SELECT, INSERT, UPDATE, atau DELETE, atau di dalam subkueri lain. Ini juga disebut kueri dalam atau pemilih dalam.
Kueri luar
Pernyataan yang berisi subkueri. Ini juga disebut pilihan luar.
Subkueri berkorelasi
Subkueri yang merujuk ke tabel di kueri luar.
Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)
Bagian ini menyediakan contoh subkueri yang didukung di Azure Synapse Analytics atau Analytics Platform System (PDW).
J. TOP dan ORDER BY dalam subkueri
SELECT * FROM tblA
WHERE col1 IN
(SELECT TOP 100 col1 FROM tblB ORDER BY col1);
B. Klausa HAVING dengan subkueri berkorelasi
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. Subkueri berkorelasi dengan analitik
SELECT * FROM ReplA AS A
WHERE A.ID IN
(SELECT sum(B.ID2) OVER() FROM ReplB AS B WHERE A.ID2 = B.ID);
D. Pernyataan serikat berkorelasi dalam subkueri
SELECT * FROM RA
WHERE EXISTS
(SELECT 1 FROM RB WHERE RB.b1 = RA.a1
UNION ALL SELECT 1 FROM RC);
E. Menggabungkan predikat dalam subkueri
SELECT * FROM RA INNER JOIN RB
ON RA.a1 = (SELECT COUNT(*) FROM RC);
F. Predikat gabungan yang berkorelasi dalam subkueri
SELECT * FROM RA
WHERE RA.a2 IN
(SELECT 1 FROM RB INNER JOIN RC ON RA.a1=RB.b1+RC.c1);
G. Subpilih berkorelasi sebagai sumber data
SELECT * FROM RA
WHERE 3 = (SELECT COUNT(*)
FROM (SELECT b1 FROM RB WHERE RB.b1 = RA.a1) X);
H. Subkueri berkorelasi dalam nilai data yang digunakan dengan agregat
SELECT Rb.b1, (SELECT RA.a1 FROM RA WHERE RB.b1 = RA.a1) FROM RB GROUP BY RB.b1;
I. Menggunakan IN dengan subkueri berkorelasi
Contoh berikut menggunakan IN dalam subkueri yang berkorelasi, atau berulang. Ini adalah kueri yang bergantung pada kueri luar untuk nilainya. Kueri dalam dijalankan berulang kali, satu kali untuk setiap baris yang mungkin dipilih oleh kueri luar. Kueri ini mengambil satu instans EmployeeKey plus nama depan dan belakang setiap karyawan di mana OrderQuantity dalam FactResellerSales tabel adalah 5 dan di mana nomor identifikasi karyawan cocok dalam DimEmployee tabel dan 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. Menggunakan EXISTS versus IN dengan subkueri
Contoh berikut menunjukkan kueri yang setara secara semantik untuk menggambarkan perbedaan antara menggunakan EXISTS kata kunci dan IN kata kunci. Keduanya adalah contoh subkueri yang mengambil satu instans dari setiap nama produk yang subkataan produknya adalah Road Bikes. ProductSubcategoryKey kecocokan DimProduct antara tabel dan 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;
Atau
SELECT DISTINCT EnglishProductName
FROM DimProduct AS dp
WHERE dp.ProductSubcategoryKey IN
(SELECT ProductSubcategoryKey
FROM DimProductSubcategory
WHERE EnglishProductSubcategoryName = 'Road Bikes')
ORDER BY EnglishProductName;
K. Menggunakan beberapa subkueri berkorelasi
Contoh ini menggunakan dua subkueri yang berkorelasi untuk menemukan nama karyawan yang telah menjual produk tertentu.
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;