.RU

DML. Изменение данных - Фукин и. А


^ DML. Изменение данных

DML (Data Manipulation Language) – язык манипулирования данными, составная часть SQL.

Рассмотрим его основные команды – команды добавления, изменения и удаления данных INSERT, UPDATE и DELETE.

Для добавления новых строк в таблицу служит команда INSERT:

INSERT [INTO] имя_таблицы [(список_полей)]

VALUES (список_значений);

Например,

INSERT k_firm (firm_name, firm_addr)

VALUES('Альфа', 'Москва');

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

Для поля с ограничением IDENTITY обычно явное значение указывать нельзя, т.к. оно формируется автоматически. Если требуется явно указывать значения для таких полей, следует предварительно выполнить команду:

SET IDENTITY_INSERT ON

Если мы вставляем значения из одной таблицы в другую, формат команды INSERT следующий:

INSERT [INTO] имя_таблицы [(список_полей)]

(SELECT параметры);

Для обновления данных используется команда UPDATE:

UPDATE имя_таблицы

SET поле1=выражение1 [,…, полеN=ВыражениеN]

[WHERE условие];

Например,

UPDATE k_dept SET staff_num=1

WHERE dept_short_name='Sales';

Если опция WHERE пропущена, изменяться будут все строки таблицы.

Для удаления данных используется команда DELETE:

DELETE [FROM] имя_таблицы [WHERE условие];

Например,

DELETE FROM k_dept WHERE dept_short_name='Sales';

Если опция WHERE пропущена, удалены будут все строки таблицы.

Заполним тестовыми данными нашу базу «Рога и копыта». Кроме команд добавления, для примера рассмотрены несколько команд изменения данных. Обратите внимание, что для полей, имеющих свойство IDENTITY, значения не задаются – они будут генерироваться автоматически.

Строки-константы следует задавать в одинарных кавычках.

Могут возникать некоторые проблемы с заданием констант типа дата. Формат таких констант зависит от региональных настроек операционной системы.

Если вы хотите задать определенный формат даты, например, день:месяц:год, выполните команду:

SET DATEFORMAT dmy

Мы будем использовать формат год:месяц:день

SET DATEFORMAT ymd

при котором константа-дата выглядит так: ‘2012-01-31’

В примерах также используется функция GETDATE(), которая возвращает текущие дату/время.


^ Таблица "Предприятия"


INSERT INTO k_firm (firm_name, firm_addr)

VALUES('Альфа', 'Москва');

INSERT INTO k_firm (firm_name, firm_addr)

VALUES('Бета', 'Казань');

INSERT INTO k_firm (firm_name, firm_addr)

VALUES('Гамма', 'Париж');

INSERT INTO k_firm (firm_name, firm_addr)

VALUES('Дельта', 'Лондон');

INSERT INTO k_firm (firm_name, firm_addr)

VALUES('Омега', 'Токио');


Посмотрим результат заполнения, для этого выполним следующую команду:

SELECT * FROM k_firm;

Результат будет выглядеть следующим образом (поле firm_phone мы не заполняли, поэтому в нем будут значения NULL):


firm_num firm_name firm_addr firm_phone

-------------------------------------------

1 Альфа Москва NULL

2 Бета Казань NULL

3 Гамма Париж NULL

4 Дельта Лондон NULL

5 Омега Токио NULL


(5 row(s) affected)


^ Таблица "Отделы"


INSERT INTO k_dept (dept_short_name, dept_full_name)

VALUES('Sales', 'Отдел продаж');

INSERT INTO k_dept (dept_short_name, dept_full_name)

VALUES('Mart', 'Отдел маркетинга');

INSERT INTO k_dept (dept_short_name, dept_full_name) VALUES('Cust', 'Отдел гарантийного обслуживания');


Посмотрим результат заполнения, для этого выполним следующую команду:

SELECT * FROM k_dept;


dept_num dept_short_name dept_full_name staff_num

-----------------------------------------------------

1 Sales Отдел продаж NULL

2 Mart Отдел маркетинга NULL

3 Cust Отдел гарантийного обслуживания NULL


(3 row(s) affected)


^ Таблица "Сотрудники"


INSERT INTO k_staff

(staff_name, dept_num, staff_hiredate, staff_post)

VALUES('Иванов', 1, '1999-01-01', 'Менеджер');

INSERT INTO k_staff

(staff_name, dept_num, staff_hiredate, staff_post) VALUES('Петров', 2, '2010-10-13','Менеджер');

INSERT INTO k_staff

(staff_name, dept_num, staff_hiredate, staff_post) VALUES('Сидоров', 3, '2005-12-01','Менеджер');

INSERT INTO k_staff

(staff_name, staff_hiredate, staff_post)

VALUES('Семенов', '1990-01-01','Директор');

INSERT INTO k_staff

(staff_name, dept_num, staff_hiredate, staff_post) VALUES('Григорьев', 3, '2008-12-19','Программист');


Посмотрим результат заполнения, для этого выполним следующую команду:

SELECT * FROM k_staff;

staff staff staff dept staff staff

_num _name _post _num _hiredate _termdate

--------------------------------------- -------------------

1 Иванов Менеджер 1 1999-01-01 00:00:00.000 NULL

2 Петров Менеджер 2 2010-10-13 00:00:00.000 NULL

3 Сидоров Менеджер 3 2005-12-01 00:00:00.000 NULL

4 Семенов Директор NULL 1990-01-01 00:00:00.000 NULL

5 Григорьев Программист 3 2008-12-19 00:00:00.000 NULL


(3 row(s) affected)


После того как мы заполнили таблицу "Сотрудники", мы можем в таблице "Отделы" заполнить столбец staff_num, содержащий код руководителя отдела.


UPDATE k_dept SET staff_num=2

WHERE dept_short_name='Mart';

UPDATE k_dept SET staff_num=3

WHERE dept_short_name='Cust';

UPDATE k_dept SET staff_num=1

WHERE dept_short_name='Sales';


Посмотрим результат изменения, для этого выполним следующую команду:

SELECT * FROM k_dept;


dept_num dept_short_name dept_full_name staff_num

--------------------------------------------------------

1 Sales Отдел продаж 1

2 Mart Отдел маркетинга 2

3 Cust Отдел гарантийного обслуживания 3


(3 row(s) affected)


^ Таблица "Договоры"


INSERT INTO k_contract

(contract_type, firm_num, staff_num, contract_date)

VALUES('A', 1, 1,'2011-11-01');

INSERT INTO k_contract

(contract_type, firm_num, staff_num, contract_date)

VALUES('B', 1, 2,'2011-10-01');

INSERT INTO k_contract

(contract_type, firm_num, staff_num, contract_date)

VALUES('C', 1, 1,'2011-09-01');

INSERT INTO k_contract

(contract_type, firm_num, staff_num, contract_date)

VALUES('A', 2, 2,'2011-11-15');

INSERT INTO k_contract

(contract_type, firm_num, staff_num, contract_date)

VALUES('B', 2, 2,'2011-08-01');

INSERT INTO k_contract

(contract_type, firm_num, staff_num, contract_date)

VALUES('C', 3, 1,'2011-07-15');

INSERT INTO k_contract

(contract_type, firm_num, staff_num, contract_date)

VALUES('A', 4, 1,'2011-11-12');


Посмотрим результат заполнения, для этого выполним следующую команду:

SELECT * FROM k_contract;


contract_num contract_date contract_type firm_num staff_num

-----------------------------------------------------------

1 2011-11-01 00:00:00.000 A 1 1

2 2011-10-01 00:00:00.000 B 1 2

3 2011-09-01 00:00:00.000 C 1 1

4 2011-11-15 00:00:00.000 A 2 2

5 2011-08-01 00:00:00.000 B 2 2

6 2011-07-15 00:00:00.000 C 3 1

7 2011-11-12 00:00:00.000 A 4 1


(7 row(s) affected)


Обратите внимание, что даты договоров заполнились автоматически текущими датой и временем – это сработало определение DEFAULT для данного поля.


Таблица "Счета"


INSERT INTO k_bill

(contract_num, bill_date, bill_term, bill_sum)

VALUES(1, '2011-11-12', '2011-12-12', 1000);

INSERT INTO k_bill

(contract_num, bill_date, bill_term, bill_sum)

VALUES(1, '2011-12-12', '2012-01-12', 2000);

INSERT INTO k_bill

(contract_num, bill_date, bill_term, bill_sum)

VALUES(1, '2012-01-12', '2012-02-12',2000);

INSERT INTO k_bill

(contract_num, bill_date, bill_term, bill_sum)

VALUES(2, '2011-12-12', '2012-01-12', 6000);

INSERT INTO k_bill

(contract_num, bill_date, bill_term, bill_sum)

VALUES(2, '2012-01-12', '2012-02-12', 2000);

INSERT INTO k_bill

(contract_num, bill_date, bill_term, bill_sum)

VALUES(3, '2012-01-12', '2012-02-12', 2500);

INSERT INTO k_bill

(contract_num, bill_date, bill_term, bill_sum)

VALUES(4, '2011-12-12', '2012-01-12', 1500);

INSERT INTO k_bill

(contract_num, bill_date, bill_term, bill_sum)

VALUES(5, '2011-12-12', '2012-01-12', 1200);

INSERT INTO k_bill

(contract_num, bill_date, bill_term, bill_sum)

VALUES(5, '2012-01-12', '2012-02-12', 10000);


Посмотрим результат заполнения, для этого выполним следующую команду:

SELECT * FROM k_bill;


bill bill bill bill contract bill

_num _date _term _peni _num _sum

-----------------------------------------------------------

1 2011-11-12 00:00:00.000 2011-12-12 00:00:00.000 0 1 1000

2 2011-12-12 00:00:00.000 2012-01-12 00:00:00.000 0 1 2000

3 2012-01-12 00:00:00.000 2012-02-12 00:00:00.000 0 1 2000

4 2011-12-12 00:00:00.000 2012-01-12 00:00:00.000 0 2 3000

5 2012-01-12 00:00:00.000 2012-02-12 00:00:00.000 0 2 2000

6 2012-01-12 00:00:00.000 2012-02-12 00:00:00.000 0 3 2500

7 2011-12-12 00:00:00.000 2012-01-12 00:00:00.000 0 4 1000

8 2011-12-12 00:00:00.000 2012-01-12 00:00:00.000 0 5 1200

9 2012-01-12 00:00:00.000 2012-02-12 00:00:00.000 0 5 2000


(9 row(s) affected)


^ Таблица "Платежи"


INSERT INTO k_payment

(payment_num, bill_num, payment_date, payment_sum)

VALUES(1, 1, '2011-12-01', 1000);

INSERT INTO k_payment

(payment_num, bill_num, payment_date, payment_sum)

VALUES(1, 2, '2011-12-15', 1000);

INSERT INTO k_payment

(payment_num, bill_num, payment_date, payment_sum)

VALUES(1, 3, '2012-01-13', 1500);

INSERT INTO k_payment

(payment_num, bill_num, payment_date, payment_sum)

VALUES(2, 3, '2012-01-15', 500);

INSERT INTO k_payment

(payment_num, bill_num, payment_date, payment_sum)

VALUES(1, 4, '2012-01-12', 1000);

INSERT INTO k_payment

(payment_num, bill_num, payment_date, payment_sum)

VALUES(1, 7, '2012-01-05', 100);

INSERT INTO k_payment

(payment_num, bill_num, payment_date, payment_sum)

VALUES(2, 7, '2012-01-12', 900);

INSERT INTO k_payment

(payment_num, bill_num, payment_date, payment_sum)

VALUES(1, 8, '2011-12-25', 1000);


Посмотрим результат заполнения, для этого выполним следующую команду:

SELECT * FROM k_payment;


payment_num bill_num payment_date payment_sum

-----------------------------------------------------------

1 1 2011-12-01 00:00:00.000 1000.00

1 2 2011-12-15 00:00:00.000 1000.00

1 3 2012-01-13 00:00:00.000 1500.00

1 4 2012-01-12 00:00:00.000 1000.00

1 7 2012-01-05 00:00:00.000 100.00

1 8 2011-12-25 00:00:00.000 1000.00

2 3 2012-01-15 00:00:00.000 500.00

2 7 2012-01-12 00:00:00.000 900.00


(8 row(s) affected)


^ Таблица "Товары/услуги" (или "Прайс-лист")


INSERT INTO k_price (price_name, price_sum, type_num)

VALUES('Материализация духов',1000, 2);

INSERT INTO k_price (price_name, price_sum, type_num)

VALUES('Раздача слонов',100, 2);

INSERT INTO k_price (price_name, price_sum, type_num)

VALUES('Слоновий бивень',3000, 1);

INSERT INTO k_price (price_name, price_sum, type_num)

VALUES('Моржовый клык',1500, 1);

INSERT INTO k_price (price_name, price_sum, type_num)

VALUES('Копыто Пегаса',5000, 1);


Посмотрим результат заполнения, для этого выполним следующую команду:

SELECT * FROM k_price;


price_num price_name price_sum type_num

-----------------------------------------------------------

1 Материализация духов 1000.00 2

2 Раздача слонов 100.00 2

3 Слоновий бивень 3000.00 1

4 Моржовый клык 1500.00 1

5 Копыто Пегаса 5000.00 1


(5 row(s) affected)


^ Таблица "Протоколы счетов"


INSERT INTO k_protokol

(price_num, bill_num, kolvo, price_sum)

VALUES(1, 1, 1, 1000);

INSERT INTO k_protokol

(price_num, bill_num, kolvo, price_sum)

VALUES(1, 2, 2, 1000);

INSERT INTO k_protokol

(price_num, bill_num, kolvo, price_sum)

VALUES(2, 3, 20, 100);

INSERT INTO k_protokol

(price_num, bill_num, kolvo, price_sum)

VALUES(3, 4, 2, 3000);

INSERT INTO k_protokol

(price_num, bill_num, kolvo, price_sum)

VALUES(1, 5, 1, 1000);

INSERT INTO k_protokol

(price_num, bill_num, kolvo, price_sum)

VALUES(2, 5, 10, 100);

INSERT INTO k_protokol

(price_num, bill_num, kolvo, price_sum)

VALUES(1, 6, 2, 1000);

INSERT INTO k_protokol

(price_num, bill_num, kolvo, price_sum)

VALUES(2, 6, 5, 100);

INSERT INTO k_protokol

(price_num, bill_num, kolvo, price_sum)

VALUES(4, 7, 1, 1500);

INSERT INTO k_protokol

(price_num, bill_num, kolvo, price_sum)

VALUES(1, 8, 1, 1000);

INSERT INTO k_protokol

(price_num, bill_num, kolvo, price_sum)

VALUES(2, 8, 2, 100);

INSERT INTO k_protokol

(price_num, bill_num, kolvo, price_sum)

VALUES(5, 9, 2, 5000);


Посмотрим результат заполнения, для этого выполним следующую команду:

SELECT * FROM k_ protokol;


price_num bill_num kolvo price_sum

-----------------------------------------------------------

1 1 1 1000.00

1 2 2 1000.00

1 5 1 1000.00

1 6 2 1000.00

1 8 1 1000.00

2 3 20 100.00

2 5 10 100.00

2 6 5 100.00

2 8 2 100.00

3 4 2 3000.00

4 7 1 1500.00

5 9 2 5000.00


(12 row(s) affected)

Вопрос


Можно ли для таблицы, в которой имеется поле IDENTITY, выполнить команду INSERT, не указывая явно список полей? Проверьте.
^ Задание для индивидуальной работы 4

Напишите и отладьте сценарий, который вставляет по несколько строк в каждую таблицу вашей базы данных.


disciplini-po-viboru-osnovnaya-obrazovatelnaya-programma-visshego-professionalnogo-obrazovaniya-napravlenie-podgotovki.html
disciplini-po-viboru-studenta-osnovnaya-obrazovatelnaya-programma-napravlenie-080100-ekonomika-profil-ekonomika.html
disciplini-po-viboru-studenta-ustanavlivaemie-vuzom-diplomirovannogo-specialista.html
disciplini-specializacii-diplomirovannogo-specialista.html
disciplini-specializacii-universitetskij-obrazovatelnij-standart-visshego-professionalnogo-obrazovaniya.html
disciplini-specialnosti-perechen-obrazovatelnih-programm-specialnostej-realizuemih-v-ramkah-dannogo.html
  • write.bystrickaya.ru/eta-kniga-yavlyaetsya-bazovim-uchebnikom-po-kursu-finansov-kotorij-izuchaetsya-na-pervom-kurse-instituta-pri-podgotovke-specialistov-po-programme-mba-vknige-rassmat.html
  • laboratornaya.bystrickaya.ru/programma-razvitiya-sistemi-obrazovaniya-moskovskogo-rajona-sankt-peterburga-stranica-3.html
  • crib.bystrickaya.ru/i-sluzhebnik-varlaama-hutinskogo-konec-xiinachalo-xiiiv-gim-sin-6043431-ezhegodnaya-bogoslovskaya-konferenciya-2000-g-bogoslovie.html
  • paragraph.bystrickaya.ru/laboratornaya-rabota-4-razrabotka-v-delphi-programmi-dlya-raboti-s-subd-interbase.html
  • school.bystrickaya.ru/bankovskie-operacii-s-ispolzovaniem-vekselej-chast-14.html
  • prepodavatel.bystrickaya.ru/tip-evm-pentium-iv-tip-i-versiya-os-programma-rascheta-temperaturnih-polej-i-okisleniya-metalla-v-radioelektronnih.html
  • lecture.bystrickaya.ru/42-rasshirenie-mobilnosti-v-visshem-obrazovanii-rossijskaya-federaciya-prisoedinilas-k-bolonskim-reformam-v-sentyabre.html
  • writing.bystrickaya.ru/g-asklepejon-metodicheskie-rekomendacii-dlya-studentov-3-kursa-zaochnogo-otdeleniya-po-specialnosti-farmaciya-moskva-2010-g.html
  • predmet.bystrickaya.ru/richard-mills-pravo-sobstvennosti-v-ssha-federalnij-podhod-sovremennie-tendencii-razvitiya-prava-sobstvennosti.html
  • thescience.bystrickaya.ru/klassnij-chas-na-temu-privichki-horoshie-i-plohie.html
  • writing.bystrickaya.ru/kurdyumov-umnij-ogorod-v-detalyah-stranica-12.html
  • college.bystrickaya.ru/34-analiz-urovnya-motivacii-personala-kompanii-ooo-kbk-posle-vnedreniya-programmi.html
  • nauka.bystrickaya.ru/vladimir-levi-stranica-5.html
  • znanie.bystrickaya.ru/aili7ra-i-sush-razvod-rastorzhenie-braka.html
  • vospitanie.bystrickaya.ru/zakon-o-tamozhennom-tarife-stranica-22.html
  • institute.bystrickaya.ru/gazetaru-27032012-mmvb-rts-razrabotala-indeks-dohodnosti-pensionnih-nakoplenij.html
  • tests.bystrickaya.ru/lekciya-osnovnie-uravneniya-teorii-obolochek.html
  • bukva.bystrickaya.ru/osobennosti-strukturi-medicinskih-uchrezhdenij-sankt-peterburga-na-sovremennom-etape-razvitiya-goroda.html
  • education.bystrickaya.ru/114-planirovanie-remonta-tehnicheskij-komitet-po-standartizacii.html
  • shkola.bystrickaya.ru/osnovnie-trebovaniya-primernij-obem-i-kriterii-ocenki-pismennoj-raboti-visshaya-shkola-ekonomiki.html
  • ucheba.bystrickaya.ru/prilozhenie-1-konkursnaya-dokumentaciya.html
  • student.bystrickaya.ru/2-nauchnaya-indukciya-metod-razlichiya-1-logika-nauka-o-mishlenii.html
  • pisat.bystrickaya.ru/tema-formirovanie-navika.html
  • otsenki.bystrickaya.ru/rossijskoj-federacii-fgbou-vpo-saratovskij-gosudarstvennij-universitet-imeni-n-g-chernishevskogo-ekonomicheskij-fakultet-utverzhdayu.html
  • report.bystrickaya.ru/itogi-socialno-ekonomicheskogo-razvitiya-naurzumskogo-rajona-stranica-2.html
  • ucheba.bystrickaya.ru/prilozhenie-17-itogi-razvitiya-sistemi-obrazovaniya-klyuchevskogo-rajona-za-2010-god.html
  • tests.bystrickaya.ru/literatura-i-zhivopis-l-nauka-1982-s31-65.html
  • desk.bystrickaya.ru/plan-molodezhnih-i-profilakticheskih-meropriyatij-otdela-molodezhnih-i-profilakticheskih-programm-departamenta-po-sportu-i-molodezhnoj-politike-tyumenskoj-oblasti-na-2010-god-pp.html
  • abstract.bystrickaya.ru/-student-radi-zacheta-idet-na-vse-dazhe-na-zachet--lat-gaudeamus-budem-radovatsya-nazvanie-srednevekovoj.html
  • school.bystrickaya.ru/analiz-mehanizacii-skladskih-rabot-na-predpriyatii.html
  • student.bystrickaya.ru/14organizaciya-pitaniya-ezhegodnij-publichnij-doklad.html
  • upbringing.bystrickaya.ru/literaturno-muzikalnaya-gostinaya.html
  • tasks.bystrickaya.ru/1-aleksandr-velikij-goryachie-illyustracii-dlya-molodyozhnih-sluzhenij.html
  • znanie.bystrickaya.ru/avtor-sostavitel-n-a-ionina-stranica-3.html
  • report.bystrickaya.ru/h-obyazatelstva-profkoma-na-period-s-1-dekabrya-2008-goda-po-1-dekabrya-2011-goda.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.