Стандарты языка реляционных баз данных SQL: краткий обзор
Страница 17. Одиночные операторы манипулирования данными


2. 6. 2 Одиночные операторы манипулирования данными

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

2. 6. 2. 1 Оператор выборки

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

<select statement> ::=
SELECT [ALL | DISTINCT] <select name>
INTO <select target list>
<table expression>
<select target list>::=
<target specification> [{, <target specification>}. . . ]

Поскольку, как мы уже объясняли в подразделе 2. 3. 2, результатом одиночного оператора выборки должна являться таблица, состоящая не более, чем из одной строки, список целей специфицируется в самом операторе. После выполнения оператора цели содержат соответствующие поля (столбцы) результирующей строки(если, конечно, результирующая таблица не является пустой).

2. 6. 2. 2 Оператор поискового удаления

Оператор описывается следующим синтаксическим правилом:

<delete statement: searched> ::=
DELETE FROM <table name>
WHERE [<search condition>]

Таблица T, указанная в разделе FROM оператора DELETE, должна быть изменяемой. На условие поиска накладывается то условие, что на столбцы таблицы T не должны содержаться ссылки ни в как ом вложенном подзапросе предикатов раздела WHERE.

Фактически, оператор выполняется следующим образом: последовательно просматриваются все строки таблицы T, и те строки, для которых результатом вычисления условия выборки является true, удаляются из таблицы T. При отсутствии раздела WHERE удаляются все строки таблицы T (обычно при выполнении поискового оператора DELETE без раздела WHERE в интерактивном режиме до удаления всех строк запрашивается подтверждение правильности такого действия).

2. 6. 2. 3 Оператор поисковой модификации

Оператор обладает следующим синтаксисом:

<update statement: searched> ::=
UPDATE <table name>
SET <set clause: searched>
[{, <set clause: searched>}. . . ]
[WHERE <search conditions>]
<set clause: searched> ::=
<object column: searched> =
{ <value expression> | NULL }
<object column: searched> ::= <column name>

Таблица T, указанная в операторе UPDATE, должна быть изменяемой. На условие поиска накладывается то условие, что на столбцы таблицы T не должны содержаться ссылки ни в как ом вложенном подзапросе предикатов раздела WHERE.

Оператор фактически выполняется следующим образом: таблица T последовательно просматривается, и каждая строка, для которой результатом вычисления условия поиска является true, изменяется в соответствии с разделом SET. Если арифметическое выражение в разделе SET содержит ссылки на столбцы таблицы T, то при вычислении арифметического выражения используются значения столбцов текущей строки до их модификации. 

2. 6. 3 Операторы окончания транзакции

Текущая транзакция может быть завершена успешно (с фиксацией в базе данных произведенных изменений) путем выполнения оператора COMMIT WORK или аварийно (с удалением из базы данных изменений, произведенных текущей транзакцией) путем выполнения оператора ROLLBACK WORK. При выполнении любого из этих операторов производится принудительное закрытие всех курсоров, открытых к моменту выполнения оператора завершения транзакции.

 
« Предыдущая статья