Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подготовка к ПР_2.2.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
944.59 Кб
Скачать

Материал для подготовки к практической работе по теме:

«Вычисления в SQL-выражениях»

Задания:

  1. Внимательно изучите предложенный теоретический материал.

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

  3. Реализуйте на практике все специально выделенные практические примеры (отмечены символом ). Для этого откройте Учебную базу данных.

Теоретический материал для изучения:

В выражениях 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.