Ключевые слова и параметры
schema
Имя схемы, содержащей таблицу. Если схема опущена, то Oracle предполагает, что таблица находится в вашей схеме.
table
Имя таблицы, в которой производятся обновления значений.
set_clause
column
Имя столбца таблицы, значение которого должно быть обновлено. Если столбец отсутствует во фразе the set_clause, значение столбца не изменяется.
subquery
Подзапрос, который возвращает точно одну строку для каждой обновляемой строки.
Если вы определили только один столбец во фразе set_clause, подзапрос должен возвратить только одно значение.
Если вы определили множество столбцов во фразе set_clause, подзапрос должен возвратить столько значений, сколько указано столбцов.
Если подзапрос не возвратил ни одной строки, то указанным столбцам присваивается значение NULL.
expr
Новое значение, присваиваемое соответствующему столбцу.
where_clause
Ограничивает строки, которые подвергаются обновлению. Строка обновляется, если указанное условие condition принимает значение TRUE. Если эта фраза опущена, то Oracle обновляет все строки таблицы. Синтаксис условий приведен в лабораторной работе 2 . Для любой строки, которая удовлетворяет условию фразы where_clause, столбцам в левой части оператора присваивания (=) фразы set_clause присваиваются значения соответствующих выражений в правой части. Выражения вычисляются в момент обновления строки.
Примеры
Простые примеры
В следующем примере всем преподавателям на должности assistant устанавливается значение NULL столбца Commission:
UPDATE TEACHER
SET Commission = NULL
WHERE post = 'ассистент';
В следующем примере преподаватель Jones переводится на кафедру 20 с увеличением ставки на 100 (предполагаем, что у нас имеется только один преподаватель Jones):
UPDATE TEACHER
SET DepNo =20, salary = salary + 100
WHERE name = 'jones';
Сложный пример
В следующем примере показывается использование следующих синтаксических конструкций предложения UPDATE:
Обе формы фразы set_clause в одном предложении.
Коррелированный подзапрос.
Фраза where_clause, ограничивающая обновляемые строки.
Использование алиаса таблицы.
Обновление нескольких столбцов (salary, Commission) одновременно.
UPDATE TEACHER a
SET DepNo =
(SELECT DepNo
FROM deptartment
WHERE name = 'DBMS'),
(salary, Commission) =
(SELECT 1.1*AVG(salary), 1.5*AVG(Commission)
FROM TEACHER b
WHERE a.DepNo = b.DepNo)
WHERE DepNo IN
(SELECT DepNo
FROM DEPARTMENT
WHERE FacNo = 1);
Это предложение UPDATE выполняет следующие действия:
Обновляет значения только у тех преподавателей, которые работают на факультете, имеющем FacNo = 1
Устанавливает этим преподавателям значение DepNo, равным DepNo кафедры 'DBMS' (то есть все преподаватели переводятся на эту кафедру)
Устанавливает ставку этим учителям, в 1.1 раз большую средней ставки их предыдущей кафедры.
Устанавливает надбавку этим учителям, в 1.5 раз большую средней надбавки их предыдущей кафедры.
Удаление строк в таблице
Синтаксис
Назначение
Удаляет указанные строки в таблице.
Предварительные требования
Чтобы иметь возможность удалять строки в таблице, принадлежащей вашей схеме, вы должны иметь привилегию DELETE по отношению к этой таблице.
Для удаления строк в таблицах других схем необходима системная привилегия DELETE ANY TABLE.
Ключевые слова и параметры
schema
Имя схемы, содержащей таблицу. Если схема опущена, то Oracle предполагает, что таблица находится в вашей схеме.
table
Имя таблицы, из которой удаляются строки.
where_clause
Удаляются строки, удовлетворяющие указанному условию. Условие может ссылаться на таблицу, из которой производится удаление и может содержать подзапрос.
Если фраза where_clause опущена, Oracle удаляет все строки таблицы.
t_alias
Предоставляет имя-синоним для таблицы, которое может использоваться в любом месте предложения DELETE.
Примеры
В следующем примере удаляются все строки таблицы DEPARTMENT.
DELETE FROM DEPARTMENT;
В следующем примере в таблице TEACHER удаляются строки, имеющие отношение к профессорам с надбавкой менее 100:
DELETE FROM TEACHER
WHERE post = 'professor' AND Commission < 100;
Задание
Вставка строк в таблицу
Вставьте следующие строки в таблицы.
FACULTY |
FacPK |
Name |
DeanFK |
Building |
Fund |
1 |
informatics |
NULL |
5 |
57398.00 | |
2 |
economy |
NULL |
3 |
NULL | |
3 |
linguistics |
NULL |
4 |
NULL |
DEPARTMENT |
DepPK |
FacFK |
Name |
HeadFK |
Building |
Fund |
1 |
1 |
SE |
NULL |
5 |
14378.00 | |
2 |
1 |
CAD |
NULL |
5 |
15000.00 | |
3 |
1 |
DBMS |
NULL |
4 |
22000.00 | |
4 |
2 |
Accounts |
NULL |
3 |
NULL |
TEACHER |
TchPK |
DepFK |
Name |
Post |
Tel |
Hiredate |
Salary |
Commission |
ChiefFK |
1 |
1 |
Andrew |
ассистент |
2281319 |
01.02.2001 |
250 |
80 |
NULL | |
2 |
1 |
John |
профессор |
2281550 |
01.07.2001 |
400 |
150 |
1 | |
3 |
2 |
Bill |
преподаватель |
NULL |
17.11.2002 |
240 |
80 |
1 | |
4 |
2 |
Albert |
ассистент |
NULL |
11.11.2001 |
260 |
100 |
4 |
SGROUP |
GrpPK |
DepFK |
Course |
Num |
Quantity |
Curator |
Rating |
1 |
1 |
1 |
101 |
33 |
4 |
20 | |
2 |
1 |
1 |
102 |
35 |
4 |
22 | |
3 |
3 |
2 |
205 |
20 |
1 |
15 | |
4 |
3 |
3 |
305 |
25 |
NULL |
40 | |
5 |
3 |
4 |
405 |
25 |
2 |
37 |
SUBJECT |
SbjPK |
Name |
1 |
pascal | |
2 |
C | |
3 |
OS | |
4 |
inernet | |
5 |
dbms |
ROOM |
RomPK |
Num |
Seates |
Floor |
Building |
1 |
101 |
20 |
1 |
5 | |
2 |
316 |
150 |
3 |
5 | |
3 |
201 |
150 |
2 |
2 | |
4 |
202 |
30 |
2 |
5 |
LECTURE |
TchFK |
GrpFK |
SbjFK |
RomFK |
Type |
Day |
Week |
Lesson |
1 |
1 |
1 |
1 |
лекция |
пон |
1 |
1 | |
1 |
2 |
2 |
1 |
лабораторная |
пон |
1 |
1 | |
2 |
3 |
3 |
1 |
лекция |
втр |
1 |
3 | |
2 |
4 |
4 |
2 |
практика |
срд |
1 |
3 | |
4 |
4 |
5 |
2 |
практика |
чет |
2 |
4 | |
4 |
4 |
5 |
3 |
семинар |
пят |
2 |
1 |
Вставьте в таблицу FACULTY информацию о вашем факультете. В связи с тем, что к этому времени сведения о преподавателях еще не введены, в качестве внешнего ключа, ссылающегося на декана факультета, укажите NULL.
Вставьте в таблицу DEPARTMENT информацию о вашей кафедре и всех тех кафедрах, на которых работают обучающие вас преподаватели. В связи с тем, что к этому времени сведения о преподавателях еще не введены, в качестве внешних ключей, ссылающихся на заведующих кафедр, укажите NULL.
Вставьте в таблицу TEACHER информацию о тех преподавателях, которые вас обучают, включая декана факультета и заведующих всех кафедр. Подчиненность преподавателей устанавливаются следующим образом:
деканы факультетов никому не подчиняются:
заведующие кафедр подчиняются деканам факультетов (если зав кафедры является деканом, то он никому не подчиняется)
преподаватели, читающие лекции, подчиняются заведующим кафедр
преподаватели, проводящие лабораторные работы по дисциплине, подчиняются преподавателям, читающим лекции по этой дисциплине.
Обновите таблицу FACULTY, заменяя NULL в столбце DeanFK на внешние ключи соответствующих деканов
Обновите таблицу DEPARTMENT, заменяя NULL в столбце HeadFK на внешние ключи соответствующих заведующих кафедр.
Вставьте в таблицу SGROUP информацию о вашей группе.
Вставьте в таблицу SUBJECT все изучаемые вами в текущий момент дисциплины.
Вставьте в таблицу ROOM информацию о тех аудиториях, где проводятся у вас занятия.
Вставьте в таблицу LECTURE расписание всех ваших занятий.