Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5870 / 429 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00

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

Аннотация: Язык запросов DML предназначен для манипулирования данными. Наиболее распространенным оператором является SELECT. Узнать обо всех тонкостях использования оператора SELECT позволит данный материал. Огромное количество примеров, примечаний к ним, объяснения принципов работы – все это и многое другое вы найдете в лекции. Вводится множество новых операторов, ключевых слов и, самое главное, описываются принципы работы с данными новшествами. Агрегатные функции, описываемые в лекции, помогают решать повседневные задачи, связанные с поиском среднего арифметического значения, количеством элементов, минимального и максимального элементов, суммы значений и многого другого.

Прочитав эту лекцию, вы узнаете, как извлекать данные при помощи оператора SELECT языка Transact-SQL (T-SQL). Здесь также описаны многие необязательные предложения, условия поиска и функции, которые могут применяться в операторах SELECT. Благодаря этим элементам вы сможете составлять запросы, возвращающие лишь те данные, которые вам нужны.

Оператор SELECT

Хотя оператор SELECT обычно применяется для извлечения данных со специфическими свойствами, его можно использовать и для присваивания значений локальным переменным или для вызова функций (об этом будет рассказано в разделе "Другие применения оператора SELECT" в конце этой лекции). Оператор SELECT может быть простым или сложным (но сложные операторы SELECT не обязательно лучше). Старайтесь составлять свои операторы SELECT как можно проще, пусть они только лишь извлекают нужные данные. Например, если вам нужны данные из двух колонок таблицы, то составляйте оператор SELECT для извлечения данных только из этих двух колонок, чтобы минимизировать объем возвращаемых данных.

После того как вы решили, какие именно данные и из каких таблиц вам нужны, надо решить, какие другие опции вы будете использовать (если это вообще понадобится). Эти опции могут задавать колонки из предложений WHERE, для которых будет применяться индексация, можно задать сортировку возвращаемых данных, а можно задать, чтобы выдавались различающиеся неодинаковые значения. (Об оптимизации запросов см. "Использование SQL Query Аnalyzer и SQL Profiler" .)

Давайте начнем изучать различные опции оператора SELECT и рассмотрим иллюстрирующие их примеры. Учебные базы данных pubs и Northwind создались автоматически при инсталляции Microsoft SQL Server 2000. Чтобы ознакомиться с этими базами данных, посмотрите их таблицы, применив SQL Server Enterprise Manager.

Синтаксически оператор SELECT состоит из нескольких предложений (clauses), большинство из которых не являются обязательными. Оператор SELECT должен обязательно иметь предложения SELECT и FROM. Эти два предложения задают соответственно колонку (или колонки) и таблицу (или таблицы), из которых будут извлекаться данные. Например, простой оператор SELECT, извлекающий имена и фамилии авторов из таблицы authors базы данных pubs, может выглядеть вот так:

SELECT   		au_fname, au_lname 
FROM     		authors

Если вы пользуетесь утилитой OSQL с командной строкой (она была описана в "Введение в Transact-SQL и SQL Query Аnalyzer" ), то не забывайте давать команду GO, исполняющую оператор. При использовании OSQL полный код T-SQL для вышеприведенного оператора SELECT будет таким:

USE      			pubs 
SELECT   		au_fname, au_lname 
FROM     		authors 
GO
Примечание. Ключевые слова не зависят от регистра букв (т.е. от того, какими буквами они набраны – строчными или ПРОПИСНЫМИ), поэтому для улучшения читаемости кода рекомендуется выделять их регистром букв в соответствии с какой-нибудь системой. В нашей книге, например, ключевые слова выделены ПРОПИСНЫМИ буквами.

Если вы запускаете оператор SELECT в интерактивном режиме (например, при помощи OSQL или SQL Query Analyzer), то результаты отображаются в колонках, и для удобства восприятия эти колонки даны вместе с заголовками. (О T-SQL, OSQL и Query Analyzer см. "Введение в Transact-SQL и SQL Query Аnalyzer" )

Предложение SELECT

Предложение SELECT содержит обязательный список выборки (select list) и, возможно, несколько необязательных аргументов. Список выборки – это заданный в предложении SELECT список выражений или колонок, определяющий, какие данные должны быть извлечены. В этом разделе мы расскажем как о необязательных аргументах предложения SELECT, так и о списке выборки.

Аргументы

Для управления выдаваемыми строками в предложении SELECT могут применяться следующие аргументы:

  • DISTINCT. При использовании этого аргумента оператор SELECT возвращает только неодинаковые (уникальные) строки. Если список выборки содержит несколько колонок, то строки считаются неодинаковыми, если они различаются значениями хотя бы в одной из колонок. Строки считаются одинаковыми (дублирующимися), когда в каждой паре соответствующих колонок этих строк содержатся одинаковые значения.
  • TOP n [PERCENT]. При использовании этого аргумента оператор SELECT возвращает только первые n строк из набора результатов. Если задано ключевое слово PERCENT, то будут возвращаться первые строки, составляющие n процентов от общего количества строк. При использовании ключевого слова PERCENT, число n должно быть в пределах от 0 до 100. Если в запросе имеется предложение ORDER BY, то строки вывода сначала сортируются, а затем из отсортированного набора результатов выдаются первые n строк или n процентов от общего количества строк. (О предложении ORDER BY см. раздел "Предложение ORDER BY" далее.)

Ниже даны три примера запуска оператора SELECT с разными аргументами. В первом из них при запуске используется аргумент DISTINCT, во втором – аргумент TOP 50 PERCENT, а в третьем – аргумент TOP 5:

SELECT   		DISTINCT au_fname, au_lname 
FROM     		authors 
GO
SELECT   		TOP 50 PERCENT au_fname, au_lname 
FROM      		authors 
GO
SELECT   		TOP 5 au_fname, au_lname 
FROM      		authors 
GO

Первый запрос вернет 23 строки, каждая из которых будет уникальной. Второй запрос вернет 12 строк (приблизительно 50%, с округлением до большего числа), а третий запрос вернет 5 строк.