
- •Формирование запросов к базе данных.
- •Множественные операции
- •Order by
- •For update of
- •Последовательности
- •Фразы оператора select
- •Фраза from
- •Фразы group by и having
- •Фраза having
- •Фраза where
- •Фраза where (Встроенный sql)
- •Фраза current of
- •Фразы connect by и start with
- •Start with
- •Использование order by
- •Фраза order by
- •Внешнее объединение
- •Подзапросы.
- •Функции агрегирования результатов запроса
- •Курсоры
- •Види курсоров
- •Объявление курсора.
- •Открытие курсора
- •Атрибуты курсора.
- •Чтение данных с использованием курсора.
- •Закрытие курсора
- •Неявные курсоры. Предопределенный курсор sql.
- •Примеры работы с курсорами
- •Изменение и удаление данных в позиции курсора.
- •Переменные-курсоры.
- •Работа с транзакциями в pl/sql.
- •Курсоры и транзакции.
Формирование запросов к базе данных.
* простые объединения
* внешние объединения
* запросы
* коррелированные запросы
* распределенные запросы
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 не указано, то выполнение запроса будет приостановлено до тех пор, пока не будут освобождены все требуемые для блокировки строки.