Запросы к базе данных с использованием языка SQL. Извлечение данных. Функции агрегирования

SQL (Structure Query Language, язык структурированных запросов) - это язык программирования и запросов к базам данных, который используется для осуществления доступа к данным, для запросов к реляционным СУБД, для управления БД и их обновления.

Все запросы на получение практически любого количества данных из одной или нескольких таблиц выполняются с помощью единственного предложения SELECT. При выполнении этой операции выполняется поиск указанной таблицы или таблиц, извлекаются заданные столбцы, выделяются строки, соответствующие условию отбора, сортируются или группируются результирующие строки в указанном порядке. Команда SELECT не изменяет данные в базе данных. Синтаксически оператор SELECT состоит из нескольких предложений, большинство из которых не являются обязательными:

SELECT [предикат] список_полей

FROM имена_таблиц

[WHERE критерий_поиска]

[GROUP BY критерий_группировки ]

[HAVING групповой_критерий]

[ORDER BY критерий_столбца]

Предложение SELECT позволяет выбрать данные из указанных столбцов и (если необходимо) выполнить перед выводом их преобразование в соответствии с указанными выражениями и (или) функциями и имеет следующий синтаксис:

SELECT [аргументы] список_полей

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

- *- это означает выбрать все колонки, указанных в запросе;

- таблица.* | представление.* | псевдоним.* - это означает выбрать все колонки из указанной таблицы | представления | таблицы с указанным псевдонимом.

Аргументы:

- DISTINCT - аргумент, дающий возможность исключить дублирующиеся значения из результата выполнения предложения SELECT.

- TOP n [PERCENT] – аргумент, возвращающий в результате выполнения предложения SELECT только первые n строк из набора результата. Если задано ключевое слово PERCENT, то будут возвращаться первые строки, составляющие n процентов от общего количества строк.

Предложение FROM содержит имена таблиц и представлений (запросов), из которых извлекаются данные и имеет следующий синтаксис:

FROM таблица [AS псевдоним] | представление [AS псевдоним]

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

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

WHERE критерий_поиска | таблица1.поле {*= | =*} таблица2.поле

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

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

Операторы бывают реляционные, логические (булевы и специальные). Реляционные операторы – это математические символы (>, <, >=, <=, =, <>), которые задают определенный тип сравнения между двумя значениями. Булевы операторы (AND, OR, NOT) связывают одно или несколько выражений «истина / ложь» и в результате получают единственное значение «истина / ложь». К специальным операторам относятся операторы IN, LIKE, BETWEEN,.

Оператор LIKE применяется для поиска по соответствующему шаблону только к полям типа Char, VarChar (текстовых), и имеет следующий синтаксис:

выражение [NOT] LIKE шаблон.

Шаблоны – это специальные символы – заменители:

- символ % (процент) заменяет последовательность символов произвольной длины, например:

WHERE фамилия LIKE “С%” возвращает все строки с фамилиями, первой буквой которых будет С;

- _ ( подчеркивание) – заменяет один символ, например:

WHERE фамилия LIKE “С_к%” возвращает все строки с фамилиями, первой буквой которых будет С, а третья буква к;

- [ ] – вместо одного символа строки будет подставлен набор возможных символов, указанных в ограничителях, например:

WHERE фамилия LIKE “[А-С]%” возвращает все строки с фамилиями, начинающихся на буквы от А до С;

- [^] – вместо соответствующего символа строки будут подставлены все символы, кроме указанных в ограничителях, например:

WHERE фамилия LIKE “[^А-С]%” возвращает все строки с фамилиями, начинающихся на буквы вне диапазона от А до С.

Оператор IN используется как условие поиска, проверяющее, не соответствует ли проверяемое выражение кому –либо из значений в подзапросе или в списке значений, и имеет следующий синтаксис:

выражение [NOT] IN (значение_1, значение_2, . . .)| подзапрос

Например, WHERE фамилия IN (‘Иванов’, ‘Петров’, ‘Сидоров’).

Оператор BETWEEN используется всегда в сочетании с оператором AND и задает диапазон вхождения, применяемый как условие поиска, и имеет следующий синтаксис:

выражение [NOT] BETWEEN значение_1 AND значение_2.

Аргументы значение_1 и значение_2 определяют начало и конец диапазона значений. Они могут быть заданы числовыми, или символьными константами. Первое значение должно быть первым в соответствии с алфавитным и числовым порядком. Например, WHERE Фамилия BETWEEN ‘Орлов’ AND ‘Сидоров’.

Оператор IS NULL используется в условиях поиска, ищущих строк, содержащие NULL-значения в заданной колонке, и имеет следующий синтаксис:

выражение IS [NOT] NULL.

Предложение GROUP BY группирует по указанному перечню столбцов с тем, чтобы получить для каждой группы единственное агрегированное значение, используя в предложении SELECT агрегатные функции, и имеет следующий синтаксис:

GROUP BY [ALL] критерий_группировки [WITH {CUBE | ROLLUP}].

Аргумент критерий_группировки определяет условие группировки. Как правило, здесь указывается имя колонки таблицы, по которой будет выполнена группировка.

Аргумент ALL в разделе GROUP BY указывает серверу на необходимость выводить список всех групп, не выполняя для них функции агрегирования.

Аргумент WITH CUBE определяет необходимость суперагрегирования данных. В результате будут добавлены строки, являющиеся результатом агрегирования уже агрегированных данных (итого по группе, итого всего).

Аргумент WITH ROLLUP позволяет избежать излишнего агрегирования.

Агрегатные функции выполняют вычисления над набором значений и возвращают одно значение.

Функция AVG() – вычисляет среднее значение для набора данных, и имеет следующий синтаксис:

AVG ([ALL | DISTINCT] выражение)

ALL – агрегирование выполняется для всех строк набора данных (по умолчанию).

DISTINCT – агрегирование выполняется только для уникальных строк.

Функция Count() – подсчитывает количество строк, которое должно быть выведено при выполнении запроса, и имеет следующий синтаксис:

COUNT ({[ALL / DISTINCT] выражение / * })

«*» используется только в случае группировки данных с помощью раздела GROUP BY.

Функция Sum() – выполняет суммирование всех значений в указанной колонке, и имеет следующий синтаксис:

SUM ([ALL | DISTINCT] выражение).

Функция Max() – возвращает максимальное значение в указанной колонке, и имеет следующий синтаксис:

MAX ([ALL | DISTINCT] выражение).

Функция Min() – возвращает минимальное значение в указанной колонке, и имеет следующий синтаксис:

MIN([ALL | DISTINCT] выражение).

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

Предложение ORDER BY применяется, чтобы задать порядок, в котором должны сортироваться строки набора результатов. С помощью ключевых слов ASC или DESC можно явно указать порядок сортировки:

- ASC – по возрастанию значений (действует по умолчанию);

- DESC – по убыванию.

Наши рекомендации