Опубликован: 11.12.2006 | Уровень: специалист | Доступ: платный

Лекция 14: Извлечение данных при помощи Transact-SQL

Функции T-SQL

Теперь, когда вы хорошо знакомы с основными предложениями, применяемыми в операторе SELECT (немного дополнительной информации вы еще узнаете в "Расширенное описание T-SQL" ), давайте рассмотрим некоторые функции T-SQL, которые можно применять в предложении SELECT. Эти функции позволяют добиться большей гибкости при создании запросов; они группируются по нескольким категориям, например, относящиеся к таким вещам, как конфигурация, курсор, дата и время, безопасность, система, системная статистика, текст и изображения, математика, набор строк, строки, агрегатные функции. Функции T-SQL выполняют вычисления, преобразования, какие-либо действия, или возвращают некоторую информацию. Имеется много функций, но в этом разделе мы рассмотрим только общеупотребительные агрегатные функции.

Дополнительная информация. Дополнительную информацию об этой и других категориях функций вы найдете, открыв в SQL Server Books Online вкладку Index (Предметный указатель) и открыв тему "functions".
Агрегатные функции

Как уже говорилось, агрегатные функции выполняют вычисления над набором значений и возвращают одно значение. Агрегатные функции могут быть заданы в списке выборки и чаще всего применяются в случаях, когда оператор содержит предложение GROUP BY. В некоторых из приведенных ранее примеров использовались агрегатные функции AVG и COUNT. Список имеющихся агрегатных функций перечислен в табл. 14.3.

Таблица 14.3. Агрегатные функции
Функция Описание
AVG Возвращает среднее арифметическое для значений выражения; null-значения игнорируются
COUNT Возвращает количество элементов в выражении (равное количеству строк)
COUNT_BIG То же самое, что и COUNT, но результат имеет тип данных bigint, а не int
GROUPING Возвращает специальную дополнительную колонку; применяется, только когда предложение GROUP BY содержит операцию CUBE или ROLLUP. Для дополнительной информации откройте в SQL Server Books Online вкладку Index (Предметный указатель) и откройте тему "GROUPING keyword"
MAX Возвращает максимальное значение из значений выражения
MIN Возвращает минимальное значение из значений выражения
STDEV Возвращает статистическое стандартное отклонение (statistical standard deviation) для всех величин выражения. Эта функция предполагает, что выражения, используемые в расчете, являются образцом всей совокупности данных
STDEVP Возвращает статистическое стандартное отклонение для всех величин выражения. Эта функция предполагает, что выражения, используемые в расчете, являются всей совокупностью данных
SUM Возвращает сумму всех значений выражения
VAR Возвращает статистическое отклонение (statistical variance) для всех значений из выражения. Эта функция предполагает, что выражения, используемые в расчете, являются образцом всей совокупности данных
VARP Возвращает статистическое отклонение для всех значений из выражения. Эта функция предполагает, что выражения, используемые в расчете, являются всей совокупностью данных

Функция COUNT применяется специальным образом: она подсчитывает все строки таблицы. Для этого нужно после COUNT поместить символ-звездочку в скобках, вот так

SELECT   		COUNT(*) 
FROM     		publishers 
GO

Набор результатов будет таким:

----------------------
         				8

Функции AVG, COUNT, MAX, MIN и SUM могут применяться с необязательными ключевыми словами ALL или DISTINCT. Для каждой из этих функций ALL означает, что функция должна применяться ко всем значениям выражения, а DISTINCT означает, что повторяющиеся значения должны участвовать в расчете только по одному разу. По умолчанию применяется опция ALL.

Как правило, применяются понятные названия агрегатных функций. Ниже приведен пример, в котором используются сразу две агрегатные функции MAX и MIN, здесь вычисляется разница цен между самой дорогой и самой дешевой книгами:

SELECT   		MAX(price) - MIN(price) AS "Разница цен" 
FROM     		titles 
GO

Набор результатов будет таким:

Разница цен 
------------------------------
                   					19.96

В следующем примере функция SUM применяется, чтобы найти общее количество книг заказанных в каждом из магазинов:

SELECT   		stores.stor_name, SUM(sales.qty) AS "Заказано всего" 
FROM     		sales, stores 
WHERE    		sales.stor_id = stores.stor_id 
GROUP BY 	stor_name
GO

Набор результатов (6 строк) будет таким:

stor_name                                     Заказано всего 
--------------------------------------------------------
Barnum’s                                      125 
Bookbeat                                      80 
Doc-U-Mat: Quality Laundry and Books          130 
Eric the Read Books                           8 
Fricative Bookshop                            60 
News & Brews                                  90
Примечание. Помните, что в SQL Server имеется множество разновидностей функций. Если вам необходимо выполнять какие-либо специфические действия, обратитесь к SQL Server Books Online и посмотрите, какие встроенные функции уже имеются.

Другие применения оператора SELECT

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

При помощи оператора SELECT вы можете, исполняя транзакцию или хранимую процедуру, присвоить значение локальной переменной, хотя для этого лучше применять оператор SET. Локальные переменные должны быть обозначены символом @ в начале имени. Например, можно присвоить значение 0 локальной переменной @count при помощи оператора SET, вот так:

SET  		@count = 0 
GO

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

SELECT   		@price = MAX(price) 
FROM     		items 
GO

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

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

SELECT   		GETDATE()
GO

Функция GETDATE не имеет никаких параметров, но скобки нужны все равно.

Заключение

В этой лекции вы изучили оператор SELECT, отдельные предложения, которые могут быть включены в него, научились ими пользоваться, узнали про условия поиска и про функции. Вы изучили материал о логических операциях, о соединениях, об алиасах, о сопоставлении шаблонам, о результатах группировки и сортировки и о многом другом. Мы дали вам большой объем информации, но у оператора SELECT имеется еще много других возможностей. (О дополнительных возможностях см. "Расширенное описание T-SQL" ; там же мы рассмотрим другие операторы манипулирования данными – INSERT, UPDATE и DELETE. А в "Управление таблицами с помощью T-SQL и Enterprise Manager" мы расскажем о том, как можно вносить изменения в таблицы базы данных.)

Максим Ерохин
Максим Ерохин
Россия, г. Санкт-Петербург
Татьяна Лубинец
Татьяна Лубинец
Россия, Уфа, Уфимский авиационный институт, 1987