Лекция 14: Извлечение данных при помощи Transact-SQL
Функции T-SQL
Теперь, когда вы хорошо знакомы с основными предложениями, применяемыми в операторе SELECT (немного дополнительной информации вы еще узнаете в "Расширенное описание T-SQL" ), давайте рассмотрим некоторые функции T-SQL, которые можно применять в предложении SELECT. Эти функции позволяют добиться большей гибкости при создании запросов; они группируются по нескольким категориям, например, относящиеся к таким вещам, как конфигурация, курсор, дата и время, безопасность, система, системная статистика, текст и изображения, математика, набор строк, строки, агрегатные функции. Функции T-SQL выполняют вычисления, преобразования, какие-либо действия, или возвращают некоторую информацию. Имеется много функций, но в этом разделе мы рассмотрим только общеупотребительные агрегатные функции.
Агрегатные функции
Как уже говорилось, агрегатные функции выполняют вычисления над набором значений и возвращают одно значение. Агрегатные функции могут быть заданы в списке выборки и чаще всего применяются в случаях, когда оператор содержит предложение GROUP BY. В некоторых из приведенных ранее примеров использовались агрегатные функции AVG и COUNT. Список имеющихся агрегатных функций перечислен в табл. 14.3.
Функция 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
Другие применения оператора 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" мы расскажем о том, как можно вносить изменения в таблицы базы данных.)