Расчет значений вычисляемых столбцов
Для расчета значений вычисляемых столбцов результирующего НД используются арифметические выражения. При этом в списке возвращаемых столбцов после SELECT вместо имени вычисляемого столбца указывается выражение:
SELECT [DISTINCT | ALL ]
{ * | <значение1> [,<значение2> …], <выражение1>[AS <имя_столбца>] …}
FROM <таблица1> [ , <таблица2> … ]
Пример:
SELECT R.*, T.ZENA, R.KOLVO*T.ZENA AS STOIM
FROM RASHOD R, TOVARY T
WHERE R.TOVAR = T.TOVAR
------------------------
AS STOIM – необязательное присвоение имени вычисляемому столбцу
Агрегатные функции
Агрегатные функции предназначены для вычисления итоговых значений операций над всеми записями НД. К агрегатным относятся следующие функции:
· COUNT(<выражение>) – число вхождений выражения в результирующий НД;
· SUM(<выражение>) – суммирует значение выражения;
· AVG(<выражение>) – находит среднее значение;
· MAX(<выражение>) – определяет максимальное значение;
· MIN(<выражение>)- определяет минимальное значение.
Примеры:
SELECT COUNT(DISTINCT POKUP) AS COUNT_POKUP
FROM RASHOD;
-----------------------
SELECT SUM(R.KOLVO*T.ZENA) AS OBS_ZENA
FROM RASHOD R, TOVARY T
WHERE (R.TOVAR = T.TOVAR)
Группировка записей
Иногда требуется получить агрегированные значения не по всему результирующему НД, а по каждой из входящих в него групп записей, характеризующихся одинаковым значением какого-либо столбца. Для этого перед предложением WHERE вводится предложение:
GROUP BY столбец [ , столбец1 … ]
Примеры:
SELECT R.TOVAR, SUM(R.KOLVO*T.ZENA)
FROM RASHOD R, TOVARY T
WHERE R.TOVAR = T.TOVAR
GROUP BY R.TOVAR, R.DAT_RASH
---------------------------------------------------
SELECT DAT_RASH, COUNT(DISTINCT POKUP)
FROM RASHOD
GROUP BY DAT_RASH
Наложение ограничений на группировку записей
Если нужно в результирующем НД выдавать агрегацию не по всем группам, а только по группам, которые отвечают некоторому условию то после GROUP BY указывается предложение:
HAVING <агрегатная функция> <отношение> <значение>
Агрегатная функция – одна из функций MIN, MAX, AVG, SUM
Отношение – одна из операций отношения.
Значение – константа, результат вычисления выражения или единичное значение, возвращаемое вложенным оператором SELECT.
Пример:
SELECT POKUP, MIN(KOLVO)
FROM RASHOD
GROUP BY POKUP
HAVING MIN (KOLVO) >= 100
Отличие HAVING от WHERE:
· HAVING – исключает из результирующего НД группы с результатами агрегированных значений;
· WHERE – исключает из расчета агрегатных значений по группировкам записи, не удовлетворяющие условию;
· В условии поиска WHERE нельзя указывать агрегатную функцию.
3.4.1.11. Оператор SELECT: задание сложных условий поиска.
Использование логических выражений
Сложные логические выражения строятся при помощи операторов AND, OR и NOT.
Замечание:
Операторы отношения при построении выражений имеют меньший приоритет, чем логические операции, что избавляет от необходимости расстановки многочисленных скобок.
Пример:
SELECT R.*, T.ZENA
FROM RASHOD R, TOVARY T
WHERE R.TOVAR = T.TOVAR AND
(R.KOLVO <= 30 OR R.KOLVO >= 3000) AND
R.POKUP IS NOT NULL
ORDER BY R.KOLVO
Сравнение столбца с результатом вычисления выражения
<выражение> <оператор> <столбец>
или аналогичный способ
<столбец> <оператор> <выражение>
Результат вычисления выражения сравнивается содержимым указанного столбца.
Пример:
SELECT R.DAT_RASH, R.TOVAR, T.ZENA
FROM RASHOD R, TOVAR T
WHERE R.TOVAR = T.TOVAR AND T.ZENA > (120 / R.KOLVO)
ORDER BY R.DAT_RASH
Использование BETWEEN
<значение> [ NOT ] BETWEEN <значение1> AND <значение2>
Указать значение, которое должно находиться в интервале между значением1 и значением2.
Пример:
SELECT *
FROM RASHOD
WHERE KOLVO BETWEEN 1000 AND 3000
Использование IN
Если нужно, чтобы значение какого-либо столбца (или результат вычисления некоторого выражения) совпадало с одним из дискретных значений, в условии поиска указывается предложение:
<значение> [ NOT ] IN ( <значение1> [, <значение2> … ] )
В результирующий НД будут включены только те записи, для которых значение, стоящее слева от IN , равно одному из значений, указанному в списке значений.
Пример:
SELECT *
FROM RASHOD
WHERE KOLVO IN (100, 1000, 3000 )
Замечание:
Существует вторая форма использования IN, в которой список возможных значений возвращается вложенным запросом SELECT.