Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




DML – Data Manipulation Language – язык манипулирования данными, составная часть SQL. Рассмотрим команды добавления, изменения и удаления данных INSERT, UPDATE и DELETE.

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

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

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

Например,

INSERT k_firm (firm_name, firm_addr)

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

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

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

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

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, значения не задаются – они будут генерироваться автоматически.

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

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, GETDATE(), 'Менеджер');

INSERT INTO k_staff

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

INSERT INTO k_staff

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

 

После того, как мы заполнили таблицу "Сотрудники", мы можем в таблице "Отделы" заполнить столбец 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) VALUES('A', 1, 1);

INSERT INTO k_contract

(contract_type, firm_num, staff_num) VALUES('B', 1, 2);

INSERT INTO k_contract

(contract_type, firm_num, staff_num) VALUES('C', 1, 1);

INSERT INTO k_contract

(contract_type, firm_num, staff_num) VALUES('A', 2, 2);

INSERT INTO k_contract

(contract_type, firm_num, staff_num) VALUES('B', 2, 2);

INSERT INTO k_contract

(contract_type, firm_num, staff_num) VALUES('C', 3, 1);

INSERT INTO k_contract

(contract_type, firm_num, staff_num) VALUES('A', 4, 1);

 

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

SELECT * FROM k_contract;

 

contract_num contract_date contract_type firm_num staff_num

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

1 2006-03-03 16:42:55.170 A 1 1

2 2006-03-03 16:42:55.190 B 1 2

3 2006-03-03 16:42:55.190 C 1 1

4 2006-03-03 16:42:55.190 A 2 2

5 2006-03-03 16:42:55.190 B 2 2

6 2006-03-03 16:42:55.190 C 3 1

7 2006-03-03 16:42:55.190 A 4 1

 

(7 row(s) affected)

 

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

 

 

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

INSERT INTO k_bill (contract_num, bill_date, bill_sum)

VALUES(1, GETDATE()-60, 1000);

INSERT INTO k_bill (contract_num, bill_date, bill_sum)

VALUES(1, GETDATE()-30, 2000);

INSERT INTO k_bill (contract_num, bill_date, bill_sum)

VALUES(1, GETDATE(), 2000);

INSERT INTO k_bill (contract_num, bill_date, bill_sum)

VALUES(2, GETDATE()-30, 6000);

INSERT INTO k_bill (contract_num, bill_date, bill_sum)

VALUES(2, GETDATE(), 2000);

INSERT INTO k_bill (contract_num, bill_date, bill_sum)

VALUES(3, GETDATE(), 2500);

INSERT INTO k_bill (contract_num, bill_date, bill_sum)

VALUES(4, GETDATE()-30, 1500);

INSERT INTO k_bill (contract_num, bill_date, bill_sum)

VALUES(5, GETDATE()-30, 1200);

INSERT INTO k_bill (contract_num, bill_date, bill_sum)

VALUES(5, GETDATE(), 10000);

 

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

INSERT INTO k_payment

(payment_num, bill_num, payment_sum) VALUES(1, 1, 1000);

INSERT INTO k_payment

(payment_num, bill_num, payment_sum) VALUES(1, 2, 1000);

INSERT INTO k_payment

(payment_num, bill_num, payment_sum) VALUES(1, 3, 1500);

INSERT INTO k_payment

(payment_num, bill_num, payment_sum) VALUES(2, 3, 500);

INSERT INTO k_payment

(payment_num, bill_num, payment_sum) VALUES(1, 4, 1000);

INSERT INTO k_payment

(payment_num, bill_num, payment_sum) VALUES(1, 7, 1000);

INSERT INTO k_payment

(payment_num, bill_num, payment_sum) VALUES(2, 7, 500);

INSERT INTO k_payment

(payment_num, bill_num, payment_sum) VALUES(1, 8, 1000);

 

 

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

INSERT INTO k_price (price_name, price_sum)

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

INSERT INTO k_price (price_name, price_sum)

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

INSERT INTO k_price (price_name, price_sum)

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

INSERT INTO k_price (price_name, price_sum)

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

INSERT INTO k_price (price_name, price_sum)

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

 

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

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);

Вопрос.

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

 

Задание для индивидуальной работы 5

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

 





Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 752; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.