
- •Формирование запросов к базе данных.
- •Множественные операции
- •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.
- •Курсоры и транзакции.
Фраза where
Позволяет отобрать строки, возвращаемые из таблице по оператору SELECT или строки, обрабатываемые операторами DELETE и UPDATE.
DELETE …WHERE условие
SELECT ...WHERE условие
UPDATE…WHEREусловие
Фраза WHERE предназначена для специфицирования условия. Оператор, содержащий эту фразу, будет работать только со строками, удовлетворяющими условию.
Условие определяется как логическое выражение. Например:
DEPTNO = 30
Операции AND и OR могут использоваться для составных выражений. Например, выражение:
DEPTNO= 30ANDJOB= 'SALESMAN'
Операция NOT используется для смены значения выражения на противоположное. Например, выражение:
NOT(DEPTNO= 30ANDJOB= 'SALESMAN')
Следующий оператор выбирает все строки, в которых DEPTNO не равен 30:
SELECT * FROM EMP WHERE DEPTNO !=30
А следующий - изменяет все строки, в которых COMM имеет значение null:
UPDATE EMP SET SAL = (1.1*SAL) WHERE COMM IS NULL
И, наконец, последний оператор использует коррелированный запрос для удаления всех отделов, которые не содержат служащих:
DELETE FROM DEPT A WHERE NOT EXISTS
(SELECT 'TRUE' FROM EMP B WHERE A.DEPTNO = B.DEPTNO)
Для каждой строки таблицы DEPT ORACLE выполняет следующую последовательность шагов:
1. Определяет значение DEPTNO для строки.
2. Использует это значение для определения, существует ли такой DEPTNO в таблице EMP.
3. Если не существует, строка удаляется. Если DEPTNO существует для какой-нибудь из строк таблицы EMP, не удаляет строку.
Команда DELETE использует коррелированный запрос, так как запрос ссылается на ту же таблицу. 'TRUE' - просто константа, положенная по синтаксису и может быть заменена любой другой константой или столбцом таблицы EMP. Операция NOT EXISTS специфицирует, что строка будет удалена, если запрос не вернет ни одной строки.
Фраза where (Встроенный sql)
Ограничение строк, возвращаемых операторами SELECT,DELETEилиUPDATE.
SELECT ...FROM ...WHERE [condition | CURRENT OF cursor_name]
condition логическое выражение, которое может ссылаться на host - переменные или массивы (фраза WHERE оператора SELECT не может содержать массивов host - переменных). Условие поиска может включать в себя запрос. См. ниже описание синтаксиса query.
CURRENT OF может использоваться только с DELETE или UPDATE; ссылается на строку, обработанную последней оператором FETCH в указанном курсоре.
Если опущена фраза WHERE, обрабатываются все строки таблицы или обзора. Ссылки на host - переменные могут быть использованы везде, где допустимо использование констант.
Если фраза WHERE отсутствует в операторах DELETE или UPDATE, пятый элемент sqlwarn (SQLCA) устанавливается в 'W' (предупреждение) и выполняются действия по EXEC SQL WHENEVER SQLWARNING.
Если все host - переменные во фразе WHERE являются массивами, результат идентичен том, как будто оператор выполнился по разу для каждой компоненты массива.
Если какая-либо host - переменная во фразе WHERE является массивом, массивами должны быть и все остальные host - переменные.
Если массивы различаются размерностью, будет выбираться минимальный (или значение, указанное во фразе FOR) для определения числа повторений оператора, содержащего фразу WHERE.
Фраза WHERE оператора SELECT не может содержать массивов host - переменных.