Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Управление данными. Использование технологий ORACLE для реализации баз данных. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
722 Кб
Скачать

2. Удаление из таблицы books всей информации о книгах, изданных до определённой даты, с возвратом их общего количества:

CREATE OR REPLACE PROCEDURE remove_books (date_in IN DATE, removal_count_out OUT PLS_INTEGER) IS BEGIN

DELETE FROM books WHERE date_published < date_in: removal_count_out := SQL%ROWCOUNT; END:

Конечно, инструкции DML в реальных приложениях обычно бывают гораздо сложнее. Например, большое количество столбцов может обновляться данными, сгенерированными вложенным запросом. В Огасlе имя_таблицы можно заменить табличной функцией, возвращающей результирующий набор строк, с которым работает инструкция DML.

3.3. ВЫБОРКА

Осуществляется с помощью оператора SELECT (Выбрать). Формат оператора:

вразумительная форма:

SELECT список_возвращаемых_столбцов FROM список_таблиц [WHERE условие];

выборка (возвращаемый запросом набор данных) будет упорядочен по списку_возвращаемых_столбцов;

список_возвращаемых_столбцов может содержать выражения, функции, констант; список столбцов может содержать псевдостолбцы, выражения, функции, константы и т.п.;

список_таблиц – таблицы, из которых проводится выборка;

при наличии WHERE условие – выбираются записи, для которых значние выражения условие = ИСТИНА (TRUE);

подробная форма:

SELECT [ALL] | [DISTINCT]{* | column_name [alias] [, col-

umn_name [alias] [,...]

| [function]

|

[arithme-

tic_expression] }

 

 

 

FROM {[схема.]таблица[,

таблица alias

[,

...] |

подзапрос} [WHERE {условие | подзапрос }]

[CONNECT BY условие][ START WITH условие] [GROUP BY выра-

жение, выражение...] [HAVING условие] [{UNION | INTERSECT

| MINUS SELECT...}]

[{ORDER BY выражение | ASC | DESC,...}]

[FOR UPDATE OF столбец, столбец...] [NOWAIT];

32

выражение SELECT включает в себя список столбцов возвращаемых запросом;

выражение FROM включает в себя список таблиц для выполнения за-

проса;

выражение WHERE устанавливает условие поиска, если необходимо вернуть не все строки, а только ту часть, которая описана условием поиска;

выражение GROUP BY позволяет создать итоговой запрос, разбитый на группы;

выражение HAVING определяет условие возврата групп и используется только совместно с GROUP BY;

выражение ORDER BY определяет порядок сортировки результирующего набора данных;

в операторе SELECT обязательно должно присутствовать выражение FROM. Остальные выражения используются по мере необходимости;

оператор SELECT извлекает данные из столбцов одной или нескольких таблиц;

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

При совместном использовании нескольких предложений они должны быть записаны в указанном выше порядке.

Оператор выборки можно прочитать примерно так: SELECT (выбрать) все столбцы (если используется оператор *) или конкретно перечисленные столбцы WHERE (для которых) выполняются или не выполняются определённые условия. Такая фраза WHERE может содержать другой запрос SQL. Для выборки одного или нескольких столбцов из таблицы можно указать имя столбца после фразы SELECT. Имя каждого последующего столбца должно быть отделено от предыдущего запятой. Фраза WHERE позволяет ограничить число строк, возвращаемых запросом, или выполнить выборку только определённых строк.

Поскольку Oracle – это реляционная база данных, одни таблицы можно связать с другими с использованием фразы WHERE. Для выборки столбцов из двух или нескольких таблиц, содержащих взаимосвязанные данные, можно связать между собой столбцы с одним и тем же типом данных (и, в случае необходимости, согласовать типы данных с помощью функции). Если столбцы соединяемых таблиц имеют одинаковые имена, то ссылки на таблицы должны быть уточнены для указания того, к каким таблицам принадлежат эти столбцы.

33

Пример.

SELECT ename,dname FROM emp,dept WHERE emp.deptno =10 AND

emp.deptno=dept.deptno;

Здесь выбираются столбцы ename, dname из таблиц emp,dept соответ-

свенно. Связь по полю deptno.

Oracle поддерживает следующие операторы сравнения:

=

равно

!=

не равно

>

больше

<

меньше

>=

больше или равно

<=

меньше или равно

IN(list)

равно любому элементу в списке list

BETWEEN op1 AND

op2 >=op1 и <=op2

LIKE %

сопоставление частей строки

IS NULL

проверка отсутствия данных

AND, OR, NOT

 

В Oracle поддерживаются также арифметические операции. Такие операции могут применяться в различных частях оператора SQL, включая фразы SELECT, WHERE и ORDER BY. Для управления порядком вычисления выражений могут применяться круглые скобки. Например, выражение 4 * sal + comm приводит к получению иного результата по сравнению с выражением 4 * (sal + comm). В арифметических выражениях можно использовать значения констант и столбцов таблиц (sal * .05) или только значения столбцов таблиц. Кроме того, для получения требуемых результатов может быть задано несколько Условий. Для выполнения логических операций применяются два основных оператора: AND позволяет ввести дополнительные критерии отбора, a OR объединяет результаты отбора по двум критериям.

Примеры.

SELECT ename,deptno,job,sal FROM emp WHERE sal BETWEEN 1000 AND 2000 SELECT ename,deptno,job,sal FROM emp WHERE ename LIKE ‘%S’

SELECT ename,deptno,job,sal FROM emp WHERE job IS NULL

Оператор избыточного соединения

SELECT ...

34

FROM таблица1, таблица2, ...

WHERE таблица1.столбец = таблица2.столбец (+)

Оператор избыточного соединения (+) вызывает извлечение из соединенных таблиц не только строк, удовлетворяющих условию соединения, но еще и строк, не отвечающих условию, из таблицы.столбца, помеченных оператором

(+). Избыточное соединение в операторе SELECT можно проводить только с одной таблицей.

УСЛОВИЯ

Условием в языке SQL называется сочетание одного или нескольких выражений и логических операторов, вырабатывающих значение TRUE (истина) или FALSE (ложь). Условия могут использоваться:

в предложении WHERE операторов SELECT, INSERT, UPDATE, и DELETE, например: SELECT ename, sal FROM empWHERE job = ‘ANALYST’.. . ;

в предложениях CONNECT BY, STARTWITH, и HAVING оператора SELECT, например:

SELECT ename, mgr FROM emp CONNECT BY PRIOR empno = mgr STARTWITH ename = ‘KING’;

В языке PL/SQL условия употребляются в операторах IF и WHILE.

SELECT INTO (выбрать и поместить в переменную)

SELECT перечень INTO список_переменных FROM таблица, таблица,...

остальная_часть_оператора;

Оператор SELECT...INTO извлекает из таблицы (таблиц) значения указанных столбцов и помещает их в соотв. переменные, перечисленные в списке_переменных. Типы данных переменных и соотв. столбцов должны либо совпадать, либо быть совместимыми.

Извлеченную строку данных можно хранить в переменной, объявленной с помощью атрибута %ROWTYPE.

Список SELECT (выбор по полям) SELECT list FROM...

Список оператора SELECT состоит из одной или нескольких единиц информации, расположенных между словами SELECT и FROM и отделенных друг от друга запятыми. Порядок элементов в этом списке определяет порядок расположения столбцов в результате. Элементами списка SELECT могут быть:

имена столбцов и их альтернативные имена, например ename «Фами-

лия», deptno;

35

выражения со столбцами и ограничениями, или переменные включающего языка;

групповые функции, например MAX(столбец), MIN(столбец);

негрупповые функции, например SYSDATE, INITCAP(ename).

Если в оператор SELECT используется предложение GROUP BY, то элементами списка SELECT могут быть только групповые функции, выражения, стоящие после предложения GROUP BY, константы и функции без параметров

(типа SYSDATE).

СООТНОСЯЩИЙСЯ ПОДЗАПРОС

Соотносящийся подзапрос вычисляет запрос для КАЖДОЙ СТРОКИ за- проса-родителя. Для ясности настоятельно рекомендуется использовать альтернативные имена таблиц или столбцов:

SELECT список_столбцов FROM таблица1 алиас1 WHERE выраж оператор

(SELECT список_столбцов FROM таблица2 алиас2 WHERE алиас1.столбец оператор алиас2.столбец);

UPDATE список_столбцов SET столбец =

(SELECT выражение FROM таблица2 алиас2 WHERE алиас1.столбец = алиас2.столбец);

DELETE FROM таблица1 алиас1 WHERE столбец оператор

(SELECT выражение FROM таблица2 alias2 WHERE алиас1.столбец = алиас2.столбец);

СОЕДИНЕНИЕ

SELECT столбец, [таблица.]столбец, .. –‘ таблица.’ необязательна FROM таблица1, таблица2, ...

WHERE таблица1.столбец1 = таблица2.столбец1 Предложение WHERE – необязательно.

Операция соединения позволяет извлекать данные и комбинировать строки из двух или более таблиц одновременно. В результате, каждая извлеченная строка может содержать данные из разных таблиц. Предложение WHERE задаёт порядок составления строк. Если извлекаемый столбец существует в нескольких соединяемых таблицах, то перед ним необходимо указывать имя таблицы. Например, столбец sal таблицы emp: emp.sal. Простое соединение позволяет из-

36

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]