SQL: конструкция запроса SELECT

SELECT (выбрать) — вывести данные из всех или указанных столбцов и (если необходимо) выполнить перед выводом их преобразование в соответствии с указанными выражениями и (или) функциями. Под «что» подразумевается список имен столбцов таблиц или столбцов запроса (через запятую).

В квадратных скобках указаны необязательные части SQL-запроса, к которым в том числе относятся секции FROM и WHERE.

FROM (откуда) — из перечисленных таблиц, в которых расположены эти столбцы. Под «откуда» понимается список самих этих таблиц и подзапросы (также через запятую).

WHERE (где) — строки из указанных таблиц должны удовлетворять указанному перечню условий отбора данных. В секции WHERE перечисляются ограничения на значения столбцов, объединенные логическими операциями И (AND) и ИЛИ (OR). Фактически, в секции WHERE задается условие, которое может быть верным или неверным для каждой строки или комбинации строк таблицы в секции FROM.

GROUP BY (группируя по) — группировать по указанному перечню столбцов с тем, чтобы получить для каждой группы единственное агрегированное значение (показатель), используя в секции SELECT SQL-функции SUM (сумма), COUNT (количество), MIN (минимальное значение), MAX (максимальное значение) или AVG (среднее значение).

HAVING (имея) — иметь в результате лишь те группы, которые удовлетворяют указанному перечню условий отбора групп.

ORDER BY (сортировать по) — сортировать по указанному перечню столбцов.

Сразу можно заметить, что в условиях отбора строк допускается использовать не только те столбцы, что перечислены в секции SELECT, но и любые столбцы таблиц, перечисленных в секции FROM.

Запрос SELECT как правило может использоваться:

· как самостоятельная команда на получение и вывод строк таблиц, сформированной из столбцов и строк одной или нескольких таблиц (представлений).

[ORDER BY <элемент_сортировки> [, …] [ASC | DESC] | USING operator] [NULLS { FIRST | LAST } ] [, …] ] [<секция_ограничения_смещения_строк>]

Порядок следования секций и конструкций в запросе SELECT, как правило, не может быть изменен.

Логический порядок обработки основных элементов запроса SELECT:

1) FROM — определяются имена используемых объектов. При выборе данных из нескольких таблиц (опция JOIN) выполняется их соответствующее соединение; 2) WHERE — выполняется фильтрация строк объекта в соответствии с заданными условиями; 3) GROUP BY — образуются группы строк, имеющих одно и то же значение в указанном элементе (столбце); 4) HAVING — фильтруются группы строк объекта в соответствии с указанным условием; 5) оконные функции; 6) SELECT — устанавливается, какие элементы должны присутствовать в выходных данных; 7) DISTINCT — определяется, выводить все или только неповторяющиеся значения; 8) UNION — в случае объединения нескольких запросов; 9) ORDER BY — определяется упорядоченность результатов выполнения запроса; 10) секция_ограничения_смещения_строк — ограничивается числом возвращаемых строк.

Этот порядок определяет, когда объекты, определенные в одном шаге, становятся доступными для секций в последующих шагах.

Следует отметить, что фактическое физическое выполнение запроса определяется обработчиком запросов, и порядок выполнения действий из приведенного списка может значительно отличаться.

В большинстве СУБД в SQL-запросе две секции — SELECT и FROM — являются обязательными, все остальные могут быть опущены.