ИНСТРУКЦИЯ SELECT
Общие сведения о предложении SELECT. Все запросы на получение практически любого количества данных из одной или нескольких таблиц выполняются с помощью предложения SELECT. В общем случае результатом реализации предложения SELECT является другая таблица. К этой новой таблице может быть снова применена операция SELECT и т.д., т.е. такие операции могут быть вложены друг в друга.
Предложение SELECT может использоваться как:
самостоятельная команда на получение и вывод строк таблицы, сформированной из столбцов и строк одной или нескольких таблиц (представлений);
- элемент WHERE- или HAVING-условия ("вложенный запрос");
- фраза выбора в командах CREATE VIEW, DECLARE CURSOR или INSERT;
- средство присвоения глобальным переменным значений из строк сформированной таблицы (фраза INTO).
Инструкция SELECT – наиболее мощная из всех SQL-инструкций и, по сути, аналогична таким операторам реляционной алгебры как SELECTion, projection, join.
Инструкция SELECT состоит из шести предложений.
Предложения SELECT и FROM являются обязательными. Четыре остальных включаются в инструкцию только при необходимости. Ниже перечислены функции каждого из предложений.
В предложении SELECT указывается список столбцов, которые должны быть возвращены инструкцией SELECT. Возвращаемые столбцы могут содержать значения, извлекаемые из столбцов таблиц базы данных, или значения, вычисляемые во время выполнения запроса.
В предложении FROM указывается список таблиц, которые содержат элементы данных, извлекаемые запросом.
Предложение WHERE показывает, что в результаты запроса следует включать только некоторые строки. Для отбора строк, включаемых в результаты запроса, используется условие отбора.
Предложение GROUP BY позволяет создать итоговый запрос. Обычный запрос включает в результаты запроса по одной записи для каждой строки из таблицы. Итоговый запрос, напротив, вначале группирует строки базы данных по определенному признаку, а затем включает в результаты запроса одну итоговую строку для каждой группы.
Предложение having показывает, что в результаты запроса следует включать только некоторые из групп, созданных с помощью предложения GROUP BY. В этом предложении, как и в предложении WHERE, для отбора включаемых групп используется условие отбора.
Предложение order by сортирует результаты запроса на основании данных, содержащихся в одном или нескольких столбцах. Если это предложение не указано, результаты запроса не будут отсортированы.
Полный формат инструкции SELECT, применяемой в Oracle имеет вид:
SELECT [{DISTINCT | UNIQUE | ALL}]
{[схема.]{[имя_таблицы. | представление. | моментальная_копия.]. имя_столбца}
| выражение [[AS] псевдоним] [, выражение [[AS] псевдоним]…]
| *}
FROM
{имя_таблицы [@связь_БД] [AS OF {SCN | TIMESTAMP} выражение]
| имя_таблицы PARTITION (имя_раздела) [AS OF {SCN | TIMESTAMP} выражение]
| имя_таблицы SUBPARTITION (имя_подраздела) [AS OF{SCN | TIMESTAMP} выражение]
| имя_таблицы SAMPLE[BLOCK] процент_выборки [AS OF{SCN | TIMESTAMP} выражение]
| представление[@связь_БД] [AS OF {SCN | TIMESTAMP} выражение]
| представление PARTITION (имя_ раздела) [AS OF {SCN | TIMESTAMP} выражение]
| представление SUBPARTITION (имя_подраздела) [AS OF {SCN | TIMESTAMP} выражение]
| представление SAMPLE [BLOCK] процент_выборки [AS OF {SCN | TIMESTAMP} выражение]
| моментальная_копия[@связь_БД] [AS OF{SCN | TIMESTAMP} выражение]
| моментальная_копия PARTITION (имя_ раздела) [AS OF {SCN | TIMESTAMP} выражение]
| моментальная_копия SUBPARTITION (имя_подраздела) [AS OF {SCN | TIMESTAMP} выражение]
| моментальная_копия SAMPLE [BLOCK] процент_выборки [AS OF {SCN | TIMESTAMP} выражение]
| (подзапрос)
| имя_таблицы
{[тип_соединения] JOIN имя_таблицы
{ ON условие
|USING (столбец [столбец]…)
|{CROSS JOIN|NATURAL [тип_соединения] JOIN имя_таблицы}
}
[, [псевдоним_таблицы]
[, имя таблицы …]
[WHERE условие]
{[GROUP BY{выражение | {выражение [, выражение …]}
| CUBE (выражение [, выражение …])
| ROLLUP (выражение [, выражение …])
}
GROUPING SETS (
{выражение | {выражение [, выражение …]}
|CUBE (выражение [, выражение …])
|ROLLUP (выражение [, выражение …])
}
[HAVING условие]
[[START WITH условие] CONNECT BY условие]
[{UNION [ALL]] | INTERSECT | MINUS} {подзапрос}
[,{UNION [ALL] | INTERSECT | MINUS} {подзапрос}…]]
[ORDER BY{выражение | позиция | псевдоним} [ASC | DESC]
[, {выражение | позиция | псевдоним} [ASC | DESC] …]
FOR UPDATE[OF] {таблица | представление}.столбец
[{таблица | представление}.столбец ]
[NOWAIT]
При описании инструкции используются следующие ключевые слова:
DISTINCT – указывает, что должна быть возвращена только одна копия строки, даже в случае наличия дубликатов строк;
AS - задает псевдоним для столбца или выражения, может отсутствовать;
ALL - указывает, что должны быть возвращены все строки, включаю дубликаты. По умолчанию ALL.
AS OF - обеспечивает работу с данными по состоянию на конкретный номер системного изменения (SCN) или временную метку как указывает выражение;
SAMPLE [BLOCK] -выполняется случайная (или блочная) выборка строк таблицы;
START WITH – указывает строки, выступающие в качестве корневых в иерархическом запросе (если эти ключевые слова пропущены, то все строки таблицы считаются корневыми);
CONNECT BY – определяет отношение между родительскими и дочерними строками иерархии;
INNER - внутреннее соединение (установлено по умолчанию);
RIGHT - правое внешнее соединение;
LEFT - левое внешнее соединение;
FULL - полное внешнее соединение;
ON условие - задает условие соединения, которое не привязано к условию WHERE;
USING - соединение по равенству для столбцов, имеющих одинаковые имена;
CROSS JOIN - перекрёстное соединение, т.е. прямое произведение двух отношений;
NATURAL - естественное соединение по одноименным столбцам двух таблиц с одинаковыми значениями;
JOIN - явное указание на соединение, эквивалентно перечислению таблиц через запятую;
CUBE - группировка на основе всех возможных комбинаций значений предложенного списка отношений;
ROLLUP - группировка на основе значений предложенного списка выражений и сводных строк, возвращённых для каждого выражения наряду с дополнительной строкой общего итога;
GROUPING SETS – задает несколько групп данных для более удобного агрегирования (если указаны только нужные группы, то серверу не приходится выполнять все множество агрегатирований, которые требуют CUBE и ROLLUP);
FOR UPDATE [OF] – означает, что выбранные строки будут заблокированы. Если указывается ключевое слово OF, то будут заблокированы только строки названной таблицы;
NOWAIT – означает, что если таблица уже заблокирована, то сервер Oracle не будет ждать снятия блокировки.
Дата добавления: 2015-08-26; просмотров: 726;