Поиск…


Логический порядок обработки запросов в SQL

/*(8)*/  SELECT /*9*/ DISTINCT /*11*/ TOP  
/*(1)*/  FROM 
/*(3)*/        JOIN 
/*(2)*/       ON 
/*(4)*/  WHERE 
/*(5)*/  GROUP BY 
/*(6)*/  WITH {CUBE | ROLLUP}
/*(7)*/  HAVING 
/*(10)*/ ORDER BY 
/*(11)*/ LIMIT 

Порядок обработки запроса и описание каждого раздела.

VT обозначает «Виртуальную таблицу» и показывает, как различные данные создаются по мере обработки запроса

  1. FROM: Декартово произведение (кросс-соединение) выполняется между двумя первыми двумя таблицами в предложении FROM, и в результате создается виртуальная таблица VT1.

  2. ON: фильтр ВКЛ применяется к VT1. Только строки, для которых TRUE, вставлены в VT2.

  3. OUTER (join): Если указан OUTER JOIN (в отличие от CROSS JOIN или INNER JOIN), строки из сохраненной таблицы или таблиц, для которых совпадение не было найдено, добавляются к строкам из VT2 в качестве внешних строк, генерируя VT3. Если в предложении FROM указано более двух таблиц, шаги 1 - 3 применяются повторно между результатом последнего соединения и следующей таблицей в предложении FROM до тех пор, пока не будут обработаны все таблицы.

  4. ГДЕ: Фильтр WHERE применяется к VT3. Только строки, для которых TRUE, вставлены в VT4.

  5. GROUP BY: Строки из VT4 расположены в группах на основе списка столбцов, указанного в предложении GROUP BY. VT5 генерируется.

  6. CUBE | ROLLUP: Супергруппы (группы групп) добавляются к строкам из VT5, генерируя VT6.

  7. HAVING: Фильтр HAVING применяется к VT6. Только группы, для которых TRUE, вставлены в VT7.

  8. SELECT: обрабатывается список SELECT, генерирующий VT8.

  9. DISTINCT: Дублированные строки удаляются из VT8. Генерируется VT9.

  10. ORDER BY: строки из VT9 сортируются в соответствии с списком столбцов, указанным в предложении ORDER BY. Создается курсор (VC10).

  11. TOP: указанное число или процент строк выбирается с начала VC10. Таблица VT11 генерируется и возвращается вызывающему абоненту. LIMIT имеет ту же функциональность, что и TOP в некоторых SQL-диалектах, таких как Postgres и Netezza.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow