Программирование >>  Построение запросов sql 

1 ... 16 17 18 [ 19 ] 20 21 22 ... 101


[HAVING <условие поиска>] [PLAN <список пунктов плана>]

ORDER BY <элемент сортировки1> [, <элемент сортировки 2>]

[ROWS k [TO r ]].

Обработка элементов запроса SELECT выполняется в следующей последовательности:

1) FROM - определяются имена используемых объектов;

2) WHERE - выполняется фильтрация строк объекта в соответствии с заданными условиями;

3) GROUP BY - образуются группы строк, имеющих одно и то же значение в указанном элементе (столбце);

4) HAVING - фильтруются группы строк объекта в соответствии с указанным условием;

5) SELECT - устанавливается, какие элементы должны присутствовать в выходных данных;

6) ORDER BY - определяется упорядоченность результатов выполнения запроса.

Порядок предложений и фраз в запросе SELECT не может быть изменен. Только два предложения - SELECT и FROM являются обязательными, все остальные могут быть опущены. Существует множество вариантов записи данного запроса, что иллюстрируется приведенными ниже примерами.

Ниже перечислены функции каждого из предложений.

В предложении SELECT указывается список столбцов ТРЗ, которые должны быть возвращены запросом SELECT. Возвращаемые элементы могут содержать значения, считываемые из столбцов таблицы БД, или значения, вычисляемые во время выполнения запроса.

Конструкция DISTINCT ALL определяет, что делать с повторяющимися строками результата. При использовании конструкции ALL возвращаются все строки, удовлетворяющие условиям запроса (этот режим используется по умолчанию). При использовании конструкции DISTINCT возвращаются только неповторяющиеся строки.

Конструкция FIRST SKIP служит для ограничения возвращаемых запросом строк.

В предложении FROM указывается список объектов БД, которые содержат данные, считываемые запросом.

Предложение WHERE показывает, что в результаты запроса следует включать только некоторые строки. Для отбора строк, включаемых в результаты запроса, используется условие поиска.

Предложение GROUP BY позволяет создать итоговый запрос, который вначале группирует строки таблицы по определенному признаку, а затем включает в результаты запроса одну итоговую строку для каждой группы.

Предложение HAVING показывает, что в ТРЗ следует включать только некоторые из групп, созданных с помощью предложения GROUP BY. В этом



предложении, как и в предложении WHERE, для отбора включаемых групп используется условие поиска.

Предложение PLAN служит для определения пользователем собственных способов выполнения запросов. Обычно составлением плана запроса занимается оптимизатор. Оптимизатор анализирует возможные пути выполнения запроса, определяет стоимость выполнения каждого варианта и выбирает наилучший (наиболее быстрый) вариант. В основном пользователь не использует пункт PLAN, и СУБД сама определяет план по умолчанию.

Предложение ORDER BY сортирует результаты запроса на основании данных, содержащихся в одном или нескольких столбцах ТРЗ. Если это предложение не указано, результаты запроса не будут отсортированы.

Предложение ROWStO, как и FIRSTSKIP, служит для ограничения возвращаемых запросом строк, но имеет более широкое применение (может использоваться при объединении результатов нескольких запросов, в любых видах подзапроса, в UPDATE и DELETE).

Рассмотрим подробнее описанные конструкции.

3.2.1. Предложения SELECT и FROM

В предложении SELECT, с которого начинается запрос SELECT, необходимо указать элементы данных, которые будут возвращены в результате запроса. Эти элементы составляют столбцы ТРЗ и задаются в виде списка возвращаемых элементов, разделенных запятыми.

Синтаксис возвращаемых элементов применительно к однотабличным запросам имеет следующий вид:

<возвращаемый элемент> :: =

{ * столбец константа <выражение> }.

Из приведенного синтаксиса следует, что возвращаемый элемент может представлять собой:

- *, означающую вывод всех столбцов указанной таблицы;

- имя столбца, идентифицирующее один из столбцов, содержащихся в таблице, указанной в предложении FROM. Когда в качестве возвращаемого элемента указывается имя столбца таблицы БД, происходит выбор значения этого столбца для каждой из строк таблицы и помещение его в соответствующую строку ТРЗ;

- константу, показывающую, что в каждой строке результатов запроса должно содержаться одно и то же значение;

- выражение, показывающее, что необходимо вычислить значение, помещаемое в результат запроса, по формуле, определенной в выражении. Выражения, как уже отмечалось выше, представляют собой комбинацию идентификаторов, функций, операций, констант. Здесь же могут использоваться CASE-выражения;

- простой подзапрос (его использование в качестве возвращаемого элемента будет рассмотрено при изучении вложенных запросов).



Столбцы в таблице результатов располагаются в том порядке, в котором они указаны в списке возвращаемых элементов.

При использовании символа звездочки (*) в качестве списка возвращаемых элементов из исходного объекта будут прочитаны все столбцы. В случае если выборка производится из нескольких таблиц (многотабличные запросы будут рассмотрены позднее), то перед символом звездочки может указываться имя таблицы. Если не используется символ *, то для каждого из возвращаемых элементов из списка в ТРЗ будет создан один столбец.

Например, чтобы получить значения всех столбцов из таблицы Abonent, необходимо выполнить следующий запрос: SELECT * FROM Abonent;.

Результат выполнения запроса представлен на рис. 3.1.

ACCOUNTCD

STREETCD

HOUSENO

FLATNO

PHONE

005488

АКСЕНОВ С.А.

556893

115705

МИЩЕНКО Е.В.

769975

015527

КОНЮХОВ В.С.

761699

443690

ТУЛУПОВА М.И.

214833

136159

СВИРИНА З.А.

350003

443069

СТАРОДУБЦЕВ Е.В.

683014

136160

ШМАКОВ С.В.

982222

126112

МАРКОВА В.П.

683301

136169

ДЕНИСОВА Е.К.

680305

080613

ЛУКАШИНА Р.М.

254417

080047

ШУБИНА Т.П.

257842

080270

ТИМОШКИНА Н.Г.

321002

Рис. 3.1. Результат выполнения запроса на выборку всех данных

На логическом уровне запрос выполняется путем построчного просмотра таблицы, указанной в предложении FROM. Для каждой строки таблицы берутся значения столбцов, входящих в список возвращаемых элементов, и создается одна строка ТРЗ. Таким образом, таблица результатов простого запроса на чтение, подобного приведенному выше, содержит одну строку данных для каждой строки исходной таблицы БД.

В общем случае предложение FROM состоит из ключевого слова FROM, за которым следует список спецификаторов объектов БД, разделенных запятыми. Каждый спецификатор идентифицирует объект БД (базовая таблица, представление), содержащий данные, которые считывает запрос. Такие объекты называются исходными объектами запроса (и запроса SELECT), поскольку все данные, содержащиеся в ТРЗ, берутся из них. В случае однотабличных запросов в предложении FROM указывается только один исходный объект.

Рассмотрим пример запроса, когда в качестве возвращаемых элементов перечислены имена столбцов базовой таблицы.

Пусть активной является учебная БД. Чтобы вывести номера лицевых счетов, фамилии и телефоны всех абонентов, необходимо выполнить следующий запрос к таблице Abonent:

SELECT AccountCD, Fio, Phone FROM Abonent;.



1 ... 16 17 18 [ 19 ] 20 21 22 ... 101

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика