Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
всис-упор.docx
Скачиваний:
0
Добавлен:
25.12.2019
Размер:
727.54 Кб
Скачать

Сложение строк — результатов select оператором union

Объединение результатов двух или более запросов.

"Выдать номера сотрудников, имеющих должность MANAGER или имеющих подчиненных":

SELECT mgr FROM emp WHERE mgr IS NOT NULL

UNION

SELECT empno FROM emp WHERE job = 'MANAGER'

;

  • UNION автоматически убирает дубликаты (повторения) строк из результата.

  • Устранение дубликатов требует внутренней работы СУБД, отчего на больших объемах данных программа получит результат нескоро.

Разновидность UNION ALL будет отрабатываться как простое объединение строк без устранения дубликатов. "Выдать номера сотрудников, имеющих должность MANAGER, и номера сотрудников, имеющих подчиненных":

SELECT mgr FROM emp WHERE mgr IS NOT NULL

UNION ALL

SELECT empno FROM emp WHERE job = 'MANAGER'

;

Если программист, зная свои данные, уверен, что строки в объединении результатов запросов не повторяются, ему следует использовать именно UNION ALL и существенно сэкономить на этом ресурсы СУБД, включая процессорное время обработки.

Пересечение результатов select оператором intersect

Пересечение результатов двух или более запросов достигается оператором INTERSECT.

Пример. "Выдать номера сотрудников, имеющих должность MANAGER и имеющих подчиненных":

SELECT mgr FROM emp WHERE mgr IS NOT NULL

INTERSECT

SELECT empno FROM emp WHERE job = 'MANAGER'

;

Вычитание результатов select оператором minus

Вычитание результата одного запроса из другого достигается использованием оператора MINUS.

Пример. "Выдать номера сотрудников, имеющих подчиненных, но не в должности MANAGER":

SELECT mgr FROM emp WHERE mgr IS NOT NULL

MINUS

SELECT empno FROM emp WHERE job = 'MANAGER'

;

Упражнение. Поменяйте в последнем запросе предложения SELECT местами: выдайте список "сотрудников в должности MANAGER, но не имеющих подчиненных". Пустой ответ означает, что таковых нет.

Упражнение. Выдайте с помощью множественной операции MINUS названия отделов, где нет сотрудников.

В Oracle имя операции MINUS взято из реляционной модели, а в стандарте SQL:1999соответствующий оператор называется EXCEPT (последнего названия придерживаются, например, DB2 и SQL Server).

Общие правила

  • Комбинируемые блоки SELECT должны иметь одинаковую структуру (в Oracle — с точностью до совместимости типов столбцов: общего формата хранения, но не обязательно точности).

  • При комбинировании запросов автоматически убираются дубликаты (за исключением UNION ALL).

  • При комбинировании запросов отсутствующие значения (NULL) считаются равными друг другу (исключение из общего правила сравнения с отсутствующим значением), подобно тому как это происходит при использовании DISTINCT или GROUP BY.

  • Фраза ORDER BY может следовать только за последним SELECT и применяться к общему результату.

  • Именование столбцов окончательного результата по правилам первого предложения SELECT.

37) Добавление, изменение и удаление данных в таблице.

Команда ALTER позволяет изменить объект, команда DROP удалить объект из БД.

Переименование таблицы или ее столбца

-- переименование таблицы

ALTER TABLE tblname RENAME TO tblname3;

-- переименование столбца oldname в newname

ALTER TABLE tblname RENAME oldname TO newname;

Добавление/удаление столбца

Во время развития БД иногда требуется добавить новый или удалить старый столбец в той или иной таблице.

-- добавление

ALTER TABLE tblname ADD num1 VARCHAR2(100) NOT NULL;

-- удаление

ALTER TABLE tblname DROP num1;

38) Добавление данных сразу в несколько таблиц. Синхронизация данных между двумя таблицами с помощью оператора MERGE. Продвинутые СУБД предоставляют расширенные возможности по вставке данных. Например, в Oracle можно произвести вставку в несколько таблиц, и если нужно можно указать условия.

-- вставка в таблицы tbl1, tbl2, tbl3

-- по условию

INSERT ALL

-- в таблицу tbl1 если поле val в выборке меньше 100

WHEN val < 100 THEN

INTO tbl1

WHEN val > 100 AND val < 200 THEN

INTO tbl2

ELSE

INTO tbl3

SELECT ..., my_val AS val, ...;

В версии СУБД 9 появилась команда MERGE, позволяющая либо изменить существующие строки какой-нибудь таблицы, либо добавить — в зависимости от сформулированного условия. Условие формулируется на основе соединения целевой таблицы с другой (в общем случае — с источником данных, в качестве которого, однако, помимо обычной таблицы могут выступать еще представление данных, таблицы с внешним хранением с временным хранением данных, а также подзапрос). Назначение операции MERGE — ускорить обновление больших таблиц. Обратите внимание, что обновление выполняется применительно к одному состоянию БД и поэтому не логически сводимо к последовательному выполнению команд INSERT, UPDATE и, возможно, DELETE.

MERGE INTO таблица

USING источник_данных ON (условие)

WHEN MATCHED THEN update-предложение

WHEN NOT MATCHED THEN insert-предложение;

где источник данных — как правило, подзапрос.

108