Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кожин / Лекции / Лекция 06 select.doc
Скачиваний:
31
Добавлен:
20.03.2016
Размер:
172.03 Кб
Скачать
  1. Формирование запросов к базе данных.

* простые объединения

* внешние объединения

* запросы

* коррелированные запросы

* распределенные запросы

SELECT[ALL|DISTINCT] * |table.*| expr [c_alias] --- [, table.* | expr [c_alias]]...

FROM [user.]table [t_alias][,[user.]table [t_alias]]...

[WHERE condition]

[CONNECT BY condition [START WITH condition]]

[GROUP BY expr [, expr]...[HAVING condition]]

[UNION|INTERSECT|MINUS SELECT ...]

[ORDER BY expr|position [ASC|DESC]

[,expr|position [ASC|DESC]] ]...

[FOR UPDATE OF column [,column]...[NOWAIT] ]

ALL берется по умолчанию и означает, что все строки, удовлетворяющие условию оператора, будут показы­ваться.

DISTINCT специфицирует, что дублирующие строки удаляются до показа. Строка рассматривается дублирую­щейся, если все соответствующие значения из списка SELECT одина­ковы для обеих строк.

специфицирует, что показываются все столбцы таблиц из фразы FROM. table.

* специфицирует, что показываются все столбцы указанной таблицы.

c_alias обеспечивает имя для выражения из столбцов, которое будет пока­зано в заголовке при выдаче. Не влияет на действительные имена столбцов. На алиасы столбцов нельзя ссылаться где-либо еще в запросе.

[user.]table специфицирует имя таблицы или обзора, подлежащих выдаче. Имени таблицы может предшествовать имя владельца; если не указано, предполагается пользователь, вы­давший запрос.

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

condition (См. описание синтаксиса "condition" в Главе 4 - "Опера­ции и функции" - данного руко­водства).

position идентифицирует относительную позицию столбца в списке SELECT.

ASC|DESC указывает порядок сортировки (соответственно - возрастающий и убывающий), базирующийся на пос­ледовательности слияния операци­онной системы.

column столбец, принадлежащий таблице, указанной в списке фразы FROM. NOWAIT указывает, что ORACLE должен немедленно вернуть управление пользователю, если он попытается заблокировать строку, уже забло­кированную другим пользователем.

Многие фразы оператора SELECT описываются индиви­дуально в Главе 6 - "Фразы оператора SELECT".

Фразы должны использоваться в приведенном выше порядке за исключением:

* CONNECT BY, START WITH, GROUP BY и HAVING мо­гут указываться в любом порядке.

* фразы ORDER BY и FOR UPDATE OF могут меняться местами.

Хотя обычно и необязательно предварять имя столб­ца именем таблицы и имя таблицы - именем пользо­вателя, иногда такое указание бывает необходимо. Обычно ORACLE выполняет меньшую работу, если име­на таблиц и столбцов квалифицированы полностью. Полное квалифицирование столбцов необходимо так­же, если две или более таблицы имеют столбцы с одинаковыми именами.

Каждое выражение expr приводит к выдаче одного столбца, а table.* - к выдаче нескольких столбцов- по одному на столбец таблицы (в порядке их оп­ределения в момент создания таблицы). Тип данных и размер выдачи для выражения определяется на ос­новании элементов выражения.

Звездочка (*) означает "все" столбцы таблицы. Ес­ли во фразе FROM указано несколько таблиц, звез­дочка означает "все столбцы всех таблиц". Звездочка может быть предварена именем таблицы (table.*), что ограничивает выдачу только столб­цами данной таблицы.

Каждый алиас, если указан, используется для по­метки предшествующего выражения и появляется в качестве имени столбца в выходном заголовке. Али­ас не влияет на действительные имена столбцов таблицы и не может использоваться для ссылки в оставшейся части запроса.

FROM table специфицирует таблицу или обзор, из которой будут выбираться данные. Если алиас ука­зан для таблицы, он должен использоваться для ссылки на данную таблицу во всей оставшейся части оператора SELECT.

Фраза CONNECT BY используется для запроса иерар­хических отношений. Она указывает, что строки должны выдаваться в иерархическом порядке и опре­деляет отношение, используемое для определения иерархии связи строк в таблице. Фраза PRIOR долж­на указываться перед первой частью условия. PRIOR означает родителя в каждом отношении "родитель" - "потомок". Другая часть представляет дочернюю вершину. Например, CONNECT BY PRIOR EMPNO=MGR оз­начает, что поле EMPNO в родительской вершине равно полю MGR в каждой дочерней (порожденной) вершине. Число уровней CONNECT BY лимитируется доступной пользователю памятью.

CONNECT BY нельзя использовать совместно с:

* подзапросами

* объединениями

Фраза START WITH идентифицирует строки (или стро­ку), которые будут использоваться в качестве кор­ня дерева, назначая условие, которому они должны удовлетворять. Отсутствие этой фразы означает начало со всех столбцов, удовлетворяющих условию фразы WHERE.

Во фразе START WITH допустимы подзапросы.

Если в операторе SELECT используется фраза CONNECT BY, в нем же можно воспользоваться псев­достолбцом LEVEL, который возвращает 1 для корня, 2 - для вершины, порожденной корнем, 3 - для вну­ка и т.д.

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

ORACLE обрабатывает фразы WHERE, GROUP BY и HAVING следующим образом:

1. Удаляет все строки, не удовлетворяющие усло­вию WHERE.

2. Вычисляет и формирует группы как указано во фразе GROUP BY.

3. Удаляет все группы, не удовлетворяющие ус­ловию HAVING.

Операции UNION, INTERSECT и MINUS комбинируют в один результаты двух операторов SELECT. UNION по­казывает результаты обоих компонент, исключая дублирующиеся; INTERSECT показывает только стро­ки, возвращенные обоими запросами; MINUS показы­вает строки, возвращенные первым запросом после удаления строк, возвращенных вторым запросом. Число и типы столбцов, возвращаемых обеими компо­нентами, должно быть одинаковым, идентичность размерности необязательна.

ORDER BY - сортировка. Позиция – число, определяющее позицию столбца из фразы SELECT. ASC|DESC – возрастающий или убывающий порядок сортировки .

FOR UPDATE определяет необходи­мость блокировки отобранных строк. OF уточняет перечень таблиц или представлений, данные из которых должны быть заблокированы.

NOWAIT указывает на то, что управление будет передано следующему после SELECT оператору, даже если требуемые для блокировки строки недоступны (т. е. заблокированы другим процес­сом). Если ключевое слово NOWAIT не указано, то выполне­ние запроса будет приостановлено до тех пор, пока не будут освобождены все требуемые для блокировки строки.

Соседние файлы в папке Лекции