Итак, приступим к более детальному разбору операторов DML. Без применения этих операторов было бы вообще бессмысленна вся эта затея с серверами БД. Начать лучше всего с оператора DML - INSERT. Оператор INSERT, служит для заполнения таблиц БД данными и является достаточно простым в использовании. Давайте посмотрим, на синтаксис оператора INSERT:
---------------- INSERT INTO --- таблица --------------------------------------------------- -------------------------------- (имя столбца таблицы) ------------------------------------- --------------------------------------- , -------------------------------------------------- ----------------------- VALUES --- (выражение); -------------------------------------------- ----------------------- оператор выбора --------------------------------------------
Я думаю, понятно, что "таблица" - это имя таблицы, куда вводятся данные. "имя столбца" - это список столбцов, в которые вводятся данные. "Выражение" - это собственно сами данные. "Оператор выбора" - это предложение SELECT, для заполнения таблицы. Используется без части VALUES. Давайте удалим все таблицы, которые вы создавали в прошлый раз, так как сейчас мы будем рассматривать их новый вариант. Удалять таблицы вы уже умеете. Если вы не сделали этого в прошлый раз то просто введите:
DROP TABLE PEOPLE / DROP TABLE NEWPEOPLE / COMMIT /
Затем создаем таблицу PEOPLE с новыми параметрами:
CREATE TABLE PEOPLE ( ID NUMBER PRIMARY KEY, NM VARCHAR2(50), FM VARCHAR2(50), OT VARCHAR2(50) ) / COMMIT /
Получаем:
SQL> CREATE TABLE PEOPLE 2 ( 3 ID NUMBER PRIMARY KEY, 4 NM VARCHAR2(50), 5 FM VARCHAR2(50), 6 OT VARCHAR2(50) 7 ) 8 / Таблица создана. SQL> COMMIT 2 / Фиксация обновлений завершена.
Обратите внимание на поле ID таблицы PEOPLE! Оно имеет атрибут PRIMARY KEY, то есть является первичным ключом таблицы. В него можно записывать только отличные друг от друга значения. И это поле не принимает значения типа NULL! Теперь, применив оператор INSERT, согласно его синтаксического разбора введем в таблицу шесть значений:
INSERT INTO PEOPLE(ID, NM, FM, OT) VALUES(1, 'John', 'Godwin', 'Petrovich') / INSERT INTO PEOPLE(ID, NM, FM, OT) VALUES(2, 'Bob', 'Doris', 'Martovich') / INSERT INTO PEOPLE(ID, NM, FM, OT) VALUES(3, 'Frank', 'Black', 'Milleniumich') / INSERT INTO PEOPLE(ID, NM, FM, OT) VALUES(4, 'Pupkin', 'Misha', 'Semenovich') / INSERT INTO PEOPLE(ID, NM, FM, OT) VALUES(5, 'Pistoletov', 'Makar', 'Patronovich') / INSERT INTO PEOPLE(ID, NM, FM, OT) VALUES(6, 'Avtomatov', 'Kolya', 'Pricelovich') / COMMIT /
Получаем:
SQL> INSERT INTO PEOPLE(ID, NM, FM, OT) 2 VALUES(1, 'John', 'Godwin', 'Petrovich') 3 / 1 строка создана. SQL> INSERT INTO PEOPLE(ID, NM, FM, OT) 2 VALUES(2, 'Bob', 'Doris', 'Martovich') 3 / 1 строка создана. SQL> INSERT INTO PEOPLE(ID, NM, FM, OT) 2 VALUES(3, 'Frank', 'Black', 'Milleniumich') 3 / 1 строка создана. SQL> INSERT INTO PEOPLE(ID, NM, FM, OT) 2 VALUES(4, 'Pupkin', 'Misha', 'Semenovich') 3 / 1 строка создана. SQL> INSERT INTO PEOPLE(ID, NM, FM, OT) 2 VALUES(5, 'Pistoletov', 'Makar', 'Patronovich') 3 / 1 строка создана. SQL> INSERT INTO PEOPLE(ID, NM, FM, OT) 2 VALUES(6, 'Avtomatov', 'Kolya', 'Pricelovich') 3 / 1 строка создана. SQL> COMMIT 2 / Фиксация обновлений завершена.
В части INTO PEOPLE(ID, NM, FM, OT) оператора INSERT указаны поля в порядке ввода данных, если есть необходимость порядок следования полей можно изменить или вообще исключить некоторые из них. В части VALUES(6, 'Avtomatov', 'Kolya', 'Pricelovich') оператора INSERT указаны собственно данные для ввода. Вот так работает оператор INSERT.
Я думаю, ничего сложного в этом нет. В результате таблица PEOPLE получила шесть записей. А что, если у вас есть данные, которые быстро нужно загрузить не путая с тем, что уже было в таблице. Для этого можно применить оператор INSERT с выражением SELECT. Создадим промежуточную таблицу и перебросим содержимое основной в нее:
CREATE TABLE OLD_PEOPLE ( ID NUMBER PRIMARY KEY, NM VARCHAR2(50), FM VARCHAR2(50), OT VARCHAR2(50) ) / COMMIT /
Получаем: SQL> CREATE TABLE OLD_PEOPLE 2 ( 3 ID NUMBER PRIMARY KEY, 4 NM VARCHAR2(50), 5 FM VARCHAR2(50), 6 OT VARCHAR2(50) 7 ) 8 / Таблица создана. SQL> COMMIT 2 / Фиксация обновлений завершена.
Теперь применяя INSERT с выражением, перегрузим данные в новую таблицу:
INSERT INTO OLD_PEOPLE SELECT * FROM PEOPLE /
Получаем:
SQL> INSERT INTO OLD_PEOPLE 2 SELECT * FROM PEOPLE 3 / 6 строк создано. SQL> COMMIT 2 / Фиксация обновлений завершена.
Теперь в обеих таблицах одинаковые данные. Вот таким образом можно, применяя оператор SELECT со всей его мощью, получать результаты разнообразных запросов. Но при этом количество, имена и типы данных обеих таблиц должны быть одинаковы!!! Например, таким оператором я часто пользуюсь при сливании таблиц телефонных номеров. Очень удобно. Таким образом, мы рассмотрели первый из трех основных операторов, DML - INSERT. Пока не удаляйте таблицы PEOPLE и OLD_PEOPLE, в следующем шаге они нам еще понадобятся. Пока можете поработать с тем материалом, который рассмотрели сейчас.