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

3. По аналогии с левым можно определить правое внешнее соединение. Перепишем предыдущий пример с использованием его возможностей:

SELECT empname, NVL(enddate, SYSDATE)-startdate AS stage

FROM career RIGHT OUTER JOIN emp ON career.empno = emp.empno;

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

Мы можем выполнить сортировку строк выходного запроса, указав в нем фразу

ORDER BY {имястолбца | номерстолбца [ASC | DESC] }…

Объединение запросов

Иногда требуется объединить результаты выполнения двух и более запросов в единое множество строк.Для объединения результатов двух и нескольких запросов используется оператор UNION, запись которого имеет вид

запрос {UNION [ALL] запрос }…

Заметим, что при объединении запросов, в отличие от обычного оператора SELECT, происходит автоматическое устранение дублирующихся записей. Чтобы избежать этого, необходимо указать ключевое слово ALL.

Для объединения запросов можно задавать фразу ORDER BY, но следует иметь в виду, что сортировка выполняется после объединения, соответственно фраза ORDER BY должна быть записана в последнем внутреннем операторе SELECT.

К таким операторам относятся также операторы INTERSECT (формальное пересечение с исключением повторяющихся строк) и MINUS (результирующее множество содержит все строки, входящие в состав первого запроса: но отсутствующие во втором). Формат этих операторов совпадает с форматом оператора UNION.

Пример.Найти временные интервалы (месяц и год), в которые работник с кодом 3209 получал только основную зарплату.

SELECT month, year FROM salary1 WHERE empno=3209

MINUS

SELECT month, year FROM salary2 WHERE empno=3209;

11.Модификация данных. Модификация объектов БД. Последовательности. Модификация и удаление таблиц. Примеры использования.

Модификация данных

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

Для вставки новых записей используется оператор

INSERT INTO приемник

[(списокстолбцов)] { VALUES (списокзначений) | подзапрос};

Приемник выступает таблица или представление, которое было создано в режиме модификации. Если список столбцов не указан, то список значений во фразе VALUES должен содержать значения для каждого столбца, и порядок следования значений совпадает с порядком описания столбцов. Для таблиц со сложной структурой это может оказаться не совсем удобно, поэтому мы можем воспользоваться параметром «список столбцов», как показано в следующем примере:

INSERT INTO emp VALUES (’4210’, ’SERGE KASHKEVICH’, NULL);

INSERT INTO emp (empno, empname) VALUES (’4210’, ’SERGE KASHKEVICH’);

Заметим, что если структура таблицы emp такая же, как описано ранее, то оба этих оператора эквивалентны. Однако после возможного изменения структуры таблицы (например, добавления новых полей) первый запрос потребует модификации, а второй можно оставить неизменным.

Использование подзапроса в операторе вставки позволяет добавлять несколько записей сразу, например:Зарплата за декабрь 2001 года увеличилась на 3% по сравнению с ноябрем этого же года для всех работников, которые работали в ноябре. Добавить соответствующие записи в таблицу salary.

INSERT INTO salary (empno, month, year, salvalue)

SELECT empno, 12, 2001, salvalue*1.03 FROM salary

WHERE month=11 AND year=2001;

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

DELETE FROM приемник

[ WHERE условие ];

Если условие не задано, удаляются все строки таблицы. В условии можно использовать подзапросы практически любой сложности.

Н-р: Удалить из таблицы dept сведения об отделах, в которых не было ни одного сотрудника, начиная с 2002 года.

DELETE FROM dept WHERE deptno NOT IN

(SELECT DISTINCT deptno FROM career

WHERE NVL(enddate, sysdate)>=

to_date(’01.01.2002’, ’dd.mm.yyyy’));

Изменение содержимого записей таблицы выполняется с помощью оператора UPDATE

UPDATE приемник

SET { {столбец | (списокстолбцов)} = выражение }…

[ WHERE условие ];

Н-р: Задать дату рождения работника SMITH – 15 января 1953 года.

UPDATE emp SET date=to_date(’15.01.1953’, ’dd.mm.yyyy’)

WHERE empname=’SMITH’;

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

UPDATE job SET minsalary=

(SELECT MIN(salvalue) FROM salary

WHERE month=1 AND year=2003)

WHERE jobno NOT IN

(SELECT DISTINCT jobno FROM career

WHERE enddate IS NULL);

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