Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:конечная точка аналитики платформы Аналитики Azure Synapse Analytics
(PDW)
в хранилище Microsoft Fabric в Microsoft Fabric
В этом разделе приведены примеры использования вложенных запросов в Azure Synapse Analytics, системы платформы аналитики (PDW) или хранилища Microsoft Fabric.
Сведения об инструкции SELECT см. в статье SELECT (Transact-SQL).
Содержимое
Основные сведения
Вложенный запрос
Подзапрос — это запрос, вложенный внутри SELECT, INSERT, UPDATE, или DELETE оператора, либо внутри другого подзапроса. Он также называется внутренним запросом или внутренней выборкой.
Внешний запрос
Инструкция, содержащая вложенный запрос. Также называется внешней выборкой.
Связанный вложенный запрос
Вложенный запрос, который обращается к таблице во внешнем запросе.
Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)
В этом разделе приведены примеры вложенных запросов, поддерживаемых в Azure Synapse Analytics или Analytics Platform System (PDW).
А. TOP и ORDER BY во вложенном запросе
SELECT * FROM tblA
WHERE col1 IN
(SELECT TOP 100 col1 FROM tblB ORDER BY col1);
B. Предложение HAVING со связанным вложенным запросом
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;
В. Связанные вложенные запросы с аналитикой
SELECT * FROM ReplA AS A
WHERE A.ID IN
(SELECT sum(B.ID2) OVER() FROM ReplB AS B WHERE A.ID2 = B.ID);
D. Связанные инструкции объединения во вложенном запросе
SELECT * FROM RA
WHERE EXISTS
(SELECT 1 FROM RB WHERE RB.b1 = RA.a1
UNION ALL SELECT 1 FROM RC);
Е. Предикаты соединения во вложенном запросе
SELECT * FROM RA INNER JOIN RB
ON RA.a1 = (SELECT COUNT(*) FROM RC);
F. Связанные предикаты соединения во вложенном запросе
SELECT * FROM RA
WHERE RA.a2 IN
(SELECT 1 FROM RB INNER JOIN RC ON RA.a1=RB.b1+RC.c1);
G. Связанные вложенные выборки в качестве источников данных
SELECT * FROM RA
WHERE 3 = (SELECT COUNT(*)
FROM (SELECT b1 FROM RB WHERE RB.b1 = RA.a1) X);
H. Связанные вложенные запросы в значениях данных, используемые с агрегатами
SELECT Rb.b1, (SELECT RA.a1 FROM RA WHERE RB.b1 = RA.a1) FROM RB GROUP BY RB.b1;
I. Использование IN со связанным вложенным запросом
В следующем примере в коррелированном или повторяющемся вложенном запросе используется кодовое слово IN. Это запрос, зависящий от результатов выполнения другого запроса. Внутренний запрос повторно выполняется для каждой строки, которая может быть выбрана с помощью внешнего запроса. Этот запрос получает один экземпляр EmployeeKey, а также имя и фамилию каждого сотрудника, для которого значение OrderQuantity в таблице FactResellerSales составляет 5, а соответствующие идентификационные номера в таблицах DimEmployee и 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. Использование EXISTS или IN с вложенным запросом
В приведенном ниже примере представлены семантически эквивалентные запросы для демонстрации различий в использовании ключевых слов EXISTS и IN. Вложенный запрос в каждом из примеров получает один экземпляр каждого названия продукта, подкатегория которого — Road Bikes. Значения ProductSubcategoryKey совпадают в таблицах DimProduct и 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. Использование нескольких связанных вложенных запросов
В данном примере с помощью двух коррелированных запросов осуществляется поиск сотрудников, продавших определенную продукцию.
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;