Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ИОСУ часть 2 _SQL.doc
Скачиваний:
19
Добавлен:
10.11.2019
Размер:
3.88 Mб
Скачать

4. Инструкции dml

К DML инструкциям в Oracle относятся команды вставки, обновления, удаления, чтения, изменения способа работы сервера при обращении к данным.

Перечислим основные DML инструкции в таблице:

Таблица

Инструкция

Назначение

ALTER SESSION

изменяет функциональные характеристики текущего сеанса связи с БД (+NLS) многие из параметров определены в файле инициализации INTT.DBA или SPFILE

ANALYZE

собирает или удаляет статистическую информацию об объекте БД, проверяет структуру объекта или идентифицирует переменные и сцепленные строки таблицы (кластера).

DELETE

удаляет строки из таблицы, представления или моментальной копии

EXPAIN PLAN

создаёт пояснение для плана использования (исполнения) команды SQL.

INSERT INTO

вставка строки данных в таблицу или представление

MERGE INTO

выбирает строки таблицы для обновления или вставки в другую таблицу(с Oracle9i Release 2) (позволяет избегать многократного использования INSERT, UPDATE)

SAVE POINT точка сохранения

определяет точку сохранения транзакции, до которой можно было выполнить откат при помощи команды ROLLBACK

SELECT

извлекаем данные из таблиц, представлений и момент копий

SET CONSTRAINT

задаёт на уровне транзакций, будут ли ограничения проверяться после каждой DML команды или только в конце транзакций

SET ROLE

включить или отключить роль для текущего сеанса

SET TRANSACTION

установить базовые характеристики транзакции

TRUNCATE

удаляет все строки из таблицы или кластера (не создаёт записей отката, выполняется быстро, аналог DELETE FROM)

UPDATE

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

В стандарте SQL описаны наиболее распространенные инструкции SELECT, INSERT INTO, UPDATE и DELETE, которые подробно рассмотрены далее.

5. Инструкция 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 не будет ждать снятия блокировки.