КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |