Лекция 14: Извлечение данных при помощи Transact-SQL
Прочитав эту лекцию, вы узнаете, как извлекать данные при помощи оператора 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 строк.