SQL-выражения — это некий набор значений, операторов, имен столбцов, функций или других составляющих, имеющихся в SQL. Они представляют собой формулы и предназначены для получения некоторого набора данных.
В этой статье разберем три основных типа выражений в SQL. Это логические и числовые выражения, а также те, которые относятся к дате и времени. Все перечисленные типы уникальны и используются для достижения конкретных целей, примеры которых мы также приведем в статье.
Логические выражения в SQL используются для извлечения необходимых данных, основанных на условии, которое зачастую указывается в операторе WHERE
. Запросы с таким видом выражений могут начинаться с таких операторов, как SELECT
, UPDATE
, DELETE
или INSERT
.
Также с WHERE
могут использоваться операторы GROUP BY
, HAVING
и ORDER BY
. Они предназначены для фильтрации, сортировки и ограничений получаемых в запросе строк. Более подробно с ними можно ознакомиться в статье в нашем блоге.
Синтаксис применения логических выражений выглядит так:
SELECT наименование_столбца1, наименование_столбца2, наименование_столбца3, …, наименование_столбцаN
FROM наименование_таблицы
WHERE логическое_выражение;
В качестве примера возьмем таблицу «Staff», содержащую данные о работниках некоторой компании. Она будет состоять из следующих столбцов:
Итоговая таблица представлена ниже:
ID |
FirstName |
SecondName |
Post |
Wages |
1 |
Alexander |
Avdeev |
Manager |
45000 |
2 |
Anatoliy |
Andreev |
Junior QA specialist |
30000 |
3 |
Victoria |
Davydova |
Manager |
35000 |
4 |
Igor |
Konchalovskiy |
Main Developer |
90000 |
5 |
Alexanderа |
Medvedeva |
Senior QA specialist |
65000 |
6 |
Andrey |
Grushevskiy |
Analyst |
40000 |
Теперь составим запрос к данной таблице, применив логическое выражение:
SELECT * FROM Staff WHERE Post = Manager;
Данный запрос должен предоставить все данные о сотрудниках, которые работают в компании в качестве менеджера.
Результат запроса будет таким:
ID |
FirstName |
SecondName |
Post |
Wages |
1 |
Alexander |
Avdeev |
Manager |
45000 |
3 |
Victoria |
Davydova |
Manager |
35000 |
Как видно из таблицы, в результат были внесены только те данные, которые удовлетворяют условию в WHERE
.
В операторе WHERE
возможно использовать операторы AND
, OR
, XOR
или NOT
для того, чтобы организовать более сложное логическое выражение.
Например, в описанной выше таблице запросим только те данные сотрудников, кто получает заработную плату больше 40000, но меньше 70000. Также отсортируем полученные данные в порядке убывания по столбцу «Wages». Для этого используем следующее логическое выражение в SQL-запросе:
SELECT * FROM Staff
WHERE Wages > 40000 and Wages < 70000
ORDER BY Wages DESC;
В результате получим:
ID |
FirstName |
SecondName |
Post |
Wages |
5 |
Alexanderа |
Medvedeva |
Senior QA specialist |
65000 |
1 |
Alexander |
Avdeev |
Manager |
45000 |
Числовые выражения в SQL применяются для реализации математических операций. Зачастую их используют для составления отчетности. Формируются они с использованием некоторых агрегатных функций. Среди них: MIN
, MAX
, COUNT
, COUNT_BIG
, AVG
, SUM
и другие. Кроме перечисленных агрегатных функций возможно использовать операторы сложения, вычитания, деления или умножения.
Синтаксис выглядит следующим образом:
SELECT числовое_выражение
FROM наименование_таблицы
[WHERE условие];
В качестве примера снова возьмем таблицу «Staff», которая была представлена в прошлом абзаце, и составим выражение в SQL-запросе:
SELECT count(*) FROM Staff;
Данный запрос вернет количество строк таблицы «Staff». Оно будет равно 6.
Теперь усложним математическое выражение и вернем среднюю заработную плату сотрудников, занимающих должность менеджера в компании. Для этого составим следующий запрос:
SELECT avg(Wages) FROM Staff WHERE Post = Manager;
В результате получим 40000.
Теперь рассмотрим выражения, предназначенные для получения и последующей работы с текущими временем и датой.
Пример:
SELECT CURRENT_TIMESTAMP;
Этот запрос вернет текущие дату и время. CURRENT_TIMESTAMP
— это и есть SQL-выражение даты и времени, однако это также является и функцией одновременно.
Чтобы вернуть только текущее время, нужно использовать CURRENT_TIME
, а чтобы получить только текущую дату — CURRENT_DATE
.
Также в SQL имеется набор функций, предназначенных для разбиения даты и времени на отдельные части. В таблице ниже приведем их наименования, примеры использования и результаты запросов.
Результат SELECT CURRENT_TIMESTAMP
для примеров равен 2023-02-03 08:25:39
.
Функция |
Аргумент функции |
Что возвращает |
Пример |
|
Date |
День недели |
Result: 6 (Пятница) |
|
День месяца |
Result: 3 |
|
|
День года |
Result: 34 |
|
|
Последний день месяца |
Result: 2023-02-28 |
|
|
Месяц |
Result: 2 |
|
|
Год |
Result: 2023 |
|
|
Time |
Час |
Result: 8 |
|
Минуты |
Result: 25 |
|
|
Секунды |
Result: 39 |
Кроме перечисленных выше, существуют функции, рассчитанные на обработку полученных временных данных. Их наименования, описание и примеры будут представлены ниже в таблице. Для примеров взято то же значение CURRENT_TIMESTAMP
, что и раньше.
Функция |
Описание |
Примеры |
|
Предназначена для сложения даты и некоторого временного промежутка |
Result: 2023-03-03 08:25:39 |
|
Предназначена для вычитания из даты некоторого временного промежутка |
Result: 2023-01-03 08:25:39 |
|
Рассчитывает разницу в днях между двумя указанными датами |
Result: 367 |
|
Преобразует дату в количество дней, начиная с нулевого года |
Result: 738919 |
|
Рассчитывает количество секунд в указанном времени |
Result: 30 339 |
WHERE
. Синтаксис:SELECT наименование_столбца1, наименование_столбца2, наименование_столбца3, …, наименование_столбцаN
FROM наименование_таблицы
WHERE логическое_выражение;
WHERE
могут использоваться операторы GROUP BY
, HAVING
и ORDER BY
. Они предназначены для фильтрации, сортировки и ограничений получаемых в запросе строк.SELECT числовое_выражение
FROM наименование_таблицы
[WHERE условие];
Мы рассмотрели выражения в SQL и три основных типа данных конструкций: логические, числовые, а также те, что относятся к дате и времени. Для каждого типа мы для наглядности привели примеры. SQL-выражения помогут пользователю правильно составлять запросы и получать необходимые данные для дальнейшей их обработки.