МАНИПУЛИРОВАНИЕ ДАННЫМИ
Команды манипулирования данными
В SQL для выполнения ввода данных в таблицу, их изменения и удаления предназначены три команды: INSERT, UPDATE, DELETE.
Команда INSERT осуществляет вставку в таблицу новой строки. В простейшем случае она имеет вид:
INSERT INTO <имя таблицы> VALUES (<значение 1>, <значение 2>, ... , <значение 7V>);
При такой записи указанные в скобках после ключевого слова VALUES значения вводятся в поля добавленной в таблицу новой строки в том порядке, в котором соответствующие столбцы указаны при создании таблицы.
Например, ввод новой строки в таблицу STUDENT: INSERT INTO STUDENT
VALUES (101, 'Костюченко', 'Александр', 200, 3, 'Минск', #1/22/1981#, 15);
Если в какое-либо поле необходимо вставить NULL- значение, то оно вводится как обычное:
INSERT INTO STUDENT
VALUES (202, 'Мазуркин', NULL, 200, 3, 'Минск', #1/22/1981#, 15);
В случае, когда необходимо ввести значения полей в порядке, отличном от заданного при создании таблицы, или требуется ввести значения не во все столбцы, следует использовать следующую форму команды INSERT:
INSERT INTO STUDENT (STUDENT ID, CITY, SURNAME, NAME)
VALUES (2, 'Бобруйск', 'Абрамович', 'Саша');
Столбцам, значения которых не указаны в приведенном в скобках списке, автоматически присваивается значение по умолчанию, если оно указано при создании таблицы, либо N U LL-значение.
С помощью команды INSERT можно извлечь данные из одной таблицы и поместить их в другую, причем обе таблицы должны существовать и иметь одинаковые схемы отношений.
Пример: переписать в таблицу STUDENT1 данные о студентах из Москвы:
INSERT INTO STUDENT1 SELECT *
FROM STUDENT WHERE CITY = 'Москва';
Удаление строк из таблицы осуществляется командой DELETE.
Пример: удалить данные из таблицы EXAM MARKS. В результате таблица становится пустой:
DELETE FROM EXAM MARKS;
Для удаления из таблицы нескольких строк, удовлетворяющих некоторому условию, можно воспользоваться предложением WHERE:
DELETE FROM EXAM MARKS
WHERE STUDENT ID = 301;
Команда UPDATE позволяет изменять, т. е. обновлять значения некоторых или всех полей в существующей строке или строках таблицы.
Пример: изменить рейтинг всех университетов на значение 200:
UPDATE UNIVERSITY SET RATTING = 200;
Для указания конкретных строк таблицы, значения полей которых должны быть изменены, в команде UPDATE можно использовать предикат, указываемый в предложении WHERE.
Пример: изменить рейтинг тех университетов, которые расположены в Москве:
UPDATE UNIVERSITY SET RATTING = 200 WHERE CITY = 'Москва';
Команда UPDATE позволяет изменять не только один, но и множество столбцов.
Пример: наименование предмета обучения с идентификатором 43 заменить на название «Высшая математика», количество часов и семестр также изменить:
UPDATE SUBJECT
SET SUBJ NAME = 'Высшая математика', HOUR = 36, SEMESTER = 1
WHERE SUBJ_ID= 43;
В предложении SET можно использовать выражения, указывающие способ изменения значения поля, в которые могут входить значения изменяемого и других полей.
Пример: увеличить стипендию студентов из Воронежа в два раза:
UPDATE STUDENT
SET STIPEND = STIPENDS
WHERE CITY = 'Воронеж';
Предложение SET не является предикатом, поэтому в нем можно указывать значение NULL следующим образом: UPDATE UNIVERSITY SET RATTING = NULL WHERE CITY = 'Воронеж';
Использование подзапросов с INSERT
Применение оператора INSERT с подзапросом позволяет загружать сразу несколько строк в одну таблицу, используя информацию из другой таблицы. При этом количество и тип возвращаемых подзапросом столбцов должно соответствовать количеству и типу столбцов таблицы, в которую вставляются данные.
Пример: пусть таблица STUDENT1 имеет структуру, идентичную STUDENT. Чтобы переписать всех студентов из Воронежа из таблицы STUDENT в STUDENT1, необходимо выполнить следующий запрос:
INSERT INTO STUDENT1 SELECT *
FROM STUDENT WHERE CITY = 'Воронеж';
Пример: добавить в таблицу STUDENT1 сведения о студентах, которые учатся в Москве:
INSERT INTO STUDENT1 SELECT *
FROM STUDENT WHERE UNIV ID IN (SELECT UNIV ID FROM UNIVERSITY WHERE CITY = ’Москва’);
Использование подзапросов, основанных на таблицах внешних запросов
Пример: пусть в таблице SSTUD хранятся сведения о студентах, обучающихся в том же городе, в котором они живут. Заполнить эту таблицу данными из таблицы STUDENT: INSERT INTO SSTUD SELECT *
FROM STUDENT A
WHERE CITY IN
(SELECT CITY
FROM UNIVERSITY В
WHERE A.UNIV ID = B.UNIV_ID);
Пример: выбрать список студентов, имеющих максимальный балл на каждый день сдачи экзаменов и переписать их в другую таблицу EXAM:
INSERT INTO EXAM SELECT *
FROM EXAM_MARKS A WHERE MARK =
(SELECT MAX (MARK)
FROM EXAM MARKS В
WHERE A.EXAM DATE = B.EXAM DATE);
Использование подзапросов c DELETE
Пример: удалить все данные о студентах, которые учатся в Воронеже:
DELETE
FROM STUDENT WHERE UNIV ID IN (SELECT UNIV ID FROM UNIVERSITY WHERE CITY = 'ВОРОНЕЖ');
В предикате предложения FROM (подзапроса) нельзя ссылаться на таблицу, из которой осуществляется удаление. Однако можно ссылаться на текущую строку из таблицы, являющуюся кандидатом на удаление, т. е. на строку, которая в настоящее время проверяется в основном предикате.
Пример: удалить данные о студентах, которые учатся в университетах, имеющих рейтинг 401:
DELETE
FROM STUDENT WHERE EXISTS (SELECT *
FROM UNIVERSITY WHERE RATTING = 401
AND STUDENT.UNIV ID = UNIVERSITY.UNIV_ID); Второй способ решения этой задачи:
DELETE
FROM STUDENT WHERE 401 IN (SELECT RATTING FROM UNIVERSITY
WHERE STUDENT.UNIV ID = UNIVERSITY.UNIVJD);
Использование подзапросов с UPDATE
С помощью команды UPDATE можно применять подзапросы в любой форме, приемлемой для команды DELETE.
Пример: увеличить стипендии на 20 % студентам, которые имеют оценки только 4 и 5:
UPDATE STUDENT А
SET STIPEND = STIPEND + STIPEND*20 / 100 WHERE 4 <=
(SELECT MIN (MARK)
FROM EXAM MARKS В
WHERE B.STUDENT ID = A.STUDENT ID);
- Ш ВОПРОСЫ ДЛЯ САМОКОНТРОЛЯ
- 1. Перечислите команды манипулирования данными.
- 2. Опишите синтаксис команд манипулирования данными. Приведите примеры их использования.
- 3. Приведите примеры использования подзапросов с INSERT.
- 4. Приведите примеры использования подзапросов с DELETE.
- 5. Приведите примеры использования подзапросов с UPDATE.