
- •2. Функции обработки значений
- •2.1. Строковые функции
- •2.2. Числовые функции
- •2.3. Функции даты-времени
- •3. Вычисляемые выражения
- •4. Условные выражения с оператором case
- •4.1. Оператор case со значениями
- •4.2. Оператор case с условиями поиска
- •4.3. Функции nullif и coalesce
- •Заполнить в тетради!!!
Материал для подготовки к практической работе по теме:
«Вычисления в SQL-выражениях»
Задания:
Внимательно изучите предложенный теоретический материал.
Письменно заполните таблицу, которая приведена в конце документа.
Реализуйте на практике все специально выделенные практические примеры (отмечены символом ). Для этого откройте Учебную базу данных.
Теоретический материал для изучения:
В выражениях SQL-запросов нередко требуется выполнить предварительную обработку данных. С этой целью используются специальные функции и выражения.
1. Итоговые функции
Довольно часто требуется узнать, сколько записей соответствует тому или иному запросу, какова сумма значений некоторого числового столбца, его максимальное, минимальное и среднее значения. Для этого служат так называемые итоговые (статистические, агрегатные) функции. Итоговые функции обрабатывают наборы записей, заданные, например, выражением where. Если их включить в список столбцов, следующий за оператором select, то результатная таблица будет содержать не только столбцы таблицы базы данных, но и значения, вычисленные с помощью этих функций.
Список итоговых функций:
COUNT (параметр) - возвращает количество записей, указанных в параметре. Если требуется получить количество всех записей, то в качестве параметра следует указать символ звездочки (*). Если в качестве параметра указать имя столбца, то функция вернет количество записей, в которых этот столбец имеет значения, отличные от null. Чтобы узнать, сколько различных значений содержит столбец, перед его именем следует указать ключевое слово distinct.
Например:
SELECT COUNT(*) FROM Клиенты;
SELECT COUNT(Сумма_заказа) FROM Клиенты;
SELECT COUNT(DISTINCT Сумма_заказа) FROM Клиенты;
Попытка выполнить следующий запрос приведет к сообщению об ошибке:
SELECT Регион, COUNT(*) FROM Клиенты;
SUM (параметр) - возвращает сумму значений указанного в параметре столбца. Параметр может представлять собой и выражение, содержащее имя столбца.
Например:
SELECT SUM(Сумма_заказа) FROM Клиенты;
Данное SQL-выражение возвращает таблицу, состоящую из одного столбца и одной записи и содержащую сумму всех определенных значений столбца Сумма_заказа из таблицы Клиенты.
AVG (параметр) - возвращает среднее арифметическое всех значений указанного в параметре столбца. Параметр может представлять собой выражение, содержащее имя столбца.
Например:
SELECT AVG(Сумма_заказа) FROM Клиенты;
SELECT AVG(Сумма_заказа*27.8) FROM Клиенты
WHERE Регион <> 'Северо_3апад';
МАХ (параметр) - возвращает максимальное значение в столбце, указанном в параметре. Параметр может также представлять собой выражение, содержащее имя столбца.
Например:
SELECT MAX(Сумма_заказа) FROM Клиенты;
SELECT МАХ(Сумма_заказа*27.8) FROM Клиенты
WHERE Регион <> 'Северо_3апад';
MIN(параметр) - возвращает минимальное значение в столбце, указанном в параметре. Параметр может представлять собой выражение, содержащее имя столбца.
Например:
SELECT MIN(Сумма_заказа) FROM Клиенты;
SELECT MIN(Сумма_заказа*27.8) FROM Клиенты
WHERE Регион <> 'Северо_3апад';
На практике нередко требуется получить итоговую таблицу, содержащую суммарные, усредненные, максимальные и минимальные значения числовых столбцов. Для этого следует использовать группировку (group by) и итоговые функции:
SELECT Регион, SUM(Сумма_заказа) FROM Клиенты
GROUP BY Регион;
Результатная таблица для данного запроса содержит имена регионов и итоговые (общие) суммы заказов всех клиентов из соответствующих регионов.
Теперь рассмотрим запрос на получение всех итоговых данных по регионам:
SELECT Регион, SUM(Сумма_заказа), AVG(Сумма__заказа),
МАХ(Сумма_заказа) , MIN(Сумма_заказа)
FROM Клиенты GROUP BY Регион;
И
сходная
и результатная таблицы показаны на рис.
В данном примере только Северо-Западный
регион представлен в исходной таблице
более чем одной записью. Поэтому в
результатной таблице для него различные
итоговые функции дают различные значения.
При использовании итоговых функций в списке столбцов в операторе select заголовки соответствующих им столбцов в результатной таблице имеют вид Expr1001, Expr1002 и т.д. (или что-нибудь аналогичное, в зависимости от реализации SQL). Однако заголовки для значений итоговых функций и других столбцов вы можете задавать по своему усмотрению. Для этого достаточно после столбца в операторе SELECT указать выражение вида: AS заголовок_столбца.
Например:
SELECT Регион,
SUM(Сумма_заказа) AS [Общая сумма заказа],
АVG(Сумма_заказа) AS [Средняя сумма заказа],
МАХ(Сумма_заказа) AS Максимум,
МIN(Сумма_заказа) AS Минимум
FROM Клиенты
GROUP BY Регион;
Псевдонимы, состоящие из нескольких слов, разделенных пробелами, заключаются в квадратные скобки.
Итоговые функции можно использовать в выражениях SELECT и HAVING, но их нельзя применять в выражении WHERE. Оператор HAVING аналогичен оператору WHERE, но в отличие от WHERE он отбирает записи в группах.
Пример:
Допустим, требуется определить, в каких регионах более одного клиента. С этой целью можно воспользоваться таким запросом:
SELECT Регион, Count(*)
FROM Клиенты
GROUP BY Регион HAVING COUNT(*) > 1;
2. Функции обработки значений
При работе с данными часто приходится их обрабатывать (преобразовывать к нужному виду): выделить в строке некоторую подстроку, удалить ведущие и заключительные пробелы, округлить число, вычислить квадратный корень, определить текущее время и т. п.
В SQL имеются следующие три типа функций:
- строковые функции;
- числовые функции;
- функции даты-времени.
2.1. Строковые функции
Строковые функции принимают в качестве параметра строку и возвращают после ее обработки строку или null.
SUBSTRING (строка FROM начало [FOR длина]) – возвращает подстроку, получающуюся из строки, которая указана в качестве параметра строка. Подстрока начинается с символа, порядковый номер которого указан в параметре начало, и имеет длину, указанную в параметре длина. Нумерация символов строки ведется слева направо, начиная с 1. Квадратные скобки здесь указывают лишь на то, что заключенное в них выражение не является обязательным. Если выражение for длина не используется, то возвращается подстрока от начало и до конца исходной строки. Значения параметров начало и длина должны выбираться так, чтобы искомая подстрока действительно находилась внутри исходной строки. В противном случае функция SUBSTRING вернёт NULL.
Например:
SUBSTRING ('Дорогая Маша!' FROM 9 FOR 4) - возвращает 'Маша';
SUBSTRING('Дорогая Маша! ' FROM 9) - возвращает 'Маша! ';
SUBSTRING ('Дорогая Маша!' FROM 15) - возвращает NULL.
Использовать эту функцию в SQL-выражении можно, например, так: ,
SELECT * FROM Клиенты
WHERE SUBSTRING(Регион FROM 1 FOR 5) = 'Север';
UPPER (строка) - переводит все символы указанной в параметре строки в верхний регистр.
LOWER (строка) - переводит все символы указанной в параметре строки в нижний регистр.
TRIM (LEADING | TRAILING | BOTH ['символ'] FROM строка) - удаляет ведущие (leading), заключительные (trailing) или те и другие (both) символы из строки. По умолчанию удаляемым символом является пробел (' '), поэтому его можно не указывать. Чаще всего эта функция используется именно для удаления пробелов.
Например:
TRIM(LEADING ' ' FROM ' город Санкт-Петербург ') - возвращает 'город Санкт-Петербург ';
TRIM(TRALING ' ' FROM ' город Санкт-Петербург ') - возвращает
' город Санкт-Петербург';
TRIM(BOTH ' ' FROM ' город Санкт-Петербург ') - возвращает 'город Санкт-Петербург';
TRIM(BOTH FROM ' город Санкт-Петербург ') – возвращает 'город Санкт-Петербург';
TRIM(BOTH 'г' FROM 'город Санкт-Петербург') - возвращает 'ород Санкт-Петербур'.
Среди этих функций наиболее часто используемые - это SUBSTRING() и TRIM().
2.2. Числовые функции
Числовые функции в качестве параметра могут принимать данные не только числового типа, но возвращают всегда число или NULL (неопределенное значение).
POSITION(целеваяСтрока IN строка) - ищет вхождение целевой строки в указанную строку. В случае успешного поиска возвращает номер положения ее первого символа, иначе - 0. Если целевая строка имеет нулевую длину (например, пустая строка ' '), то функция возвращает 1. Если хотя бы один из параметров имеет значение NULL, то возвращается NULL. Нумерация символов строки ведется слева направо, начиная с 1.
Например:
POSITION('e' IN 'Привет всем') - возвращает 5;
POSITION('всем' IN 'Привет всем') - возвращает 8;
POSITION(' ' IN 'Привет всем') - возвращает 1;
POSITION('Привет! ' IN 'Привет всем') - возвращает 0.
В таблице Клиенты столбец Адрес содержит, кроме названия города, почтовый индекс, название улицы и другие данные. Возможно, вам потребуется выбрать записи о клиентах, проживающих в определенном городе. Так, если требуется выбрать записи, относящиеся к клиентам, проживающим в Санкт-Петербурге, то можно воспользоваться следующим выражением SQL-запроса:
SELECT * FROM Клиенты
WHERE POSITION('Санкт-Петербург' IN Адрес) > 0;
Заметим, что этот простой запрос на выборку данных можно сформулировать иначе:
SELECT * FROM Клиенты
WHERE Адрес LIKE '%Петербург%';
EXTRACT (параметр) - извлекает элемент из значения типа дата-время или из интервала.
Например:
EXTRACT (MONTH FROM DATE '2005-10-25') - возвращает 10.
CHARACTER_LENGTH (строка) - возвращает количество символов в строке.
Например:
CHARACTER_LENGTH ('Привет всем') - возвращает 11.
OCTET_LENGTH (строка) - возвращает количество октетов (байтов) в строке. Каждый символ латиницы или кириллицы представляется одним байтом, а символ китайского алфавита - двумя байтами.
CARDINALITY (параметр) - принимает в качестве параметра коллекцию элементов и возвращает количество элементов в коллекции (кардинальное число). Коллекция может быть, например, массивом или мультимножеством, содержащим элементы различных типов.
ABS (число) - возвращает абсолютное значение числа.
MOD (число1, число2) - возвращает остаток от целочисленного деления первого числа на второе.
LN(число) - возвращает натуральный логарифм числа.
ЕХР(число) - возвращает ечисло (основание натурального логарифма в степени число).
POWER (число1, число2) - возвращает число1число2 .
SQRT (число) - возвращает квадратный корень из числа.
FLOOR (число) - возвращает наибольшее целое число, не превышающее заданное параметром (округление в меньшую сторону).
CEIL (число) или CEILING (число) - возвращает наименьшее целое число, которое не меньше заданного параметром (округление в большую сторону).
WIDTH_BUCKET(число1, число2, число3, число4) - возвращает целое число в диапазоне между 0 и число4+1. Параметры число2 и число3 задают числовой отрезок, разделенный на равновеликие интервалы, количество которых задается параметром число 4. Функция определяет номер интервала, в который попадает значение число1. Если число1 находится за пределами заданного диапазона, то функция возвращает 0 или число 4+1.
Например:
WIDTH_BUCKET (3.14, 0, 9, 5) - возвращает 2.