Подзапросы
Область применения:Azure Synapse Analytics Analytics Platform System (PDW)SQL analyticsв хранилище 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;
C. Связанные вложенные запросы с аналитикой
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;
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по