Компьютерные технологии подготовки текстовых документов, обработки экономической информации на основе табличных процессоров, использования систем управления базами данных (СУБД), интегрированных программных пакетов.
Обработка информации средствами структурированного языка запросов SQL.
1. Добавление данных
2. Удаление данных
3. Обновление данных
1. Добавление данных
SQL представляет собой полноценный язык, предназначенный для работы с данными и позволяющий не только извлекать информацию из базы данных, выполняя запросы на выборку, но и изменять содержащуюся в ней информацию с помощью запросов на добавление, удаление и обновление. По сравнению с инструкцией SELECT, с помощью которой выполняются запросы на выборку, инструкции SQL, изменяющие содержимое базы данных, являются более простыми. Однако при изменении содержимого базы данных к СУБД предъявляется ряд дополнительных требований. При внесении изменений СУБД должна сохранять целостность данных и разрешать ввод в базу данных только допустимых значений, а также обеспечивать непротиворечивость базы данных даже в случае системной ошибки. Помимо этого, СУБД должна обеспечивать возможность одновременного изменения базы данных несколькими пользователями таким образом, чтобы они не мешали друг другу.
Добавление новой строки в реляционную базу данных происходит тогда, когда во "внешнем мире" появляется новый объект, представляемый этой строкой. На примере учебной базы данных это выглядит следующим образом:
• если принимается на работу новый служащий, в таблицу salesreps необходимо добавить новую строку с данными о нем;
• если служащий заключает договор с новым клиентом, в таблицу customers должна быть добавлена новая строка, представляющая этого клиента;
• если клиент делает заказ, в таблицу orders требуется добавить новую строку, содержащую информацию об этом заказе.
Во всех приведенных примерах новая строка добавляется для того, чтобы база данных оставалась точной моделью реального мира. Наименьшей единицей информации, которую можно добавить в реляционную базу данных, является одна строка. В реляционной СУБД существует три способа добавления новых строк в базу данных:
• Однострочная инструкция INSERT позволяет добавить в таблицу одну новую строку;
• Многострочная инструкция INSERT обеспечивает извлечение строк из одной части базы данных и добавление их в другую таблицу. Она обычно используется в конце месяца или года, когда "старые" строки таблицы пересылаются в неиспользуемую таблицу для сохранения;
• Утилита пакетной загрузки служит для добавления в таблицу данных из внешнего файла. Эта утилита обычно используется для первоначального наполнения базы данных, а также для загрузки данных, либо содержащихся в другой компьютерной системе, либо собранных из различных источников.
Однострочная инструкция INSERT добавляет в таблицу новую строку. В предложении INTO указывается таблица (целевая таблица), в которую добавляется новая строка, а в предложении VALUES содержатся значения данных для новой строки. Список столбцов определяет какие значения в какой столбец заносятся.
Пример.
Имя Возраст Идентификатор Должность Офис Дата приема Личный план Объем продаж на текущую дату |
Генри Якобсен 36 111 Менеджер по продажам Атланта (идентификатор офиса 13) 25 июля 1990 года Еще не установлен $0.00
|
Добавить информацию о новом служащем Генри Якобсене.
INSERT INTO salesreps (name, age, empl_num, sales, title,
hire_date, rep_office)
VALUES ('Henry Jacobsen', 36, 111, 0.00, 'Sales Mgr', '25-JUL-90', 13)
Добавление информации в БД для служащего Якобсена – самостоятельно
Служащий Якобсен получает свой первый заказ от компании Inter Corp, нового клиента, которому присвоен идентификатор 2126. Это заказ на 20 изделий ACI-41004 общей стоимостью $2340, и ему присваивается номер 113069.
INSERT INTO CUSTOMERS (COMPANY, CUST_NUM, CREDIT_LIMIT, CUST_REP) VALUES ('InterCorp', 2126, 15000.00, 111)
INSERT INTO ORDERS (AMOUNT, MFR, PRODUCT, QTY, ORDER_DATE,
ORDER_NUM, CUST, REP)
VALUES (2340.00, 'ACI', '41004', 20, CURRENT DATE, 113069, 2126, 111)
Current date ® date ( ) – для ACCESS.
В инструкции INSERT в предложении VALUES можно использовать системную константу current date, что обеспечивает ввод текущей даты в качестве даты получения заказа. Эта системная константа определена в стандарте SQL2.
Инструкцию INSERT можно использовать в интерактивном режиме для добавления строк в таблицы, которые изменяются очень редко. Однако на практике данные о новом клиенте, заказе или служащем почти всегда добавляются в базу данных с помощью программ ввода данных, использующих специальные формы. После окончания ввода данных в форму приложение добавляет новую строку данных с помощью программного SQL. Независимо от того, какой SQL используется, интерактивный или программный, инструкция INSERT имеет один и тот же вид.
Как правило, в инструкции INSERT указывается простое имя таблицы, определяющее собственную таблицу пользователя. Чтобы вставить данные в таблицу, созданную другим пользователем, необходимо указать ее полное имя. Кроме того, необходимо иметь разрешение на ввод данных в эту таблицу.
Список столбцов в инструкции INSERT служит для того, чтобы установить соответствие между значениями данных, содержащимися в предложении VALUES, и столбцами, для: которых эти данные предназначены. Списки значений и столбцов должны содержать одинаковое число элементов, а тип данных каждого значения должен быть совместимым с типом соответствующего столбца, иначе произойдет ошибка. Стандарт ANSI/ISO требует, чтобы в списке столбцов использовались простые имена, но во многих СУБД допускаются и полные. Ясно, что в именах столбцов в любом случае не может быть неоднозначности, потому что все они являются ссылками на столбцы целевой таблицы.
При добавлении в таблицу новой строки всем столбцам, имена которых отсутствуют в списке столбцов инструкции INSERT, автоматически присваивается значение NULL.
Для удобства в SQL разрешается не включать список столбцов в инструкцию INSERT. Если список столбцов опущен, он генерируется автоматически и в нем слева направо перечисляются все столбцы таблицы.
Многострочная инструкция INSERT добавляет в целевую таблицу несколько строк (более одной). В этой разновидности инструкции INSERT значения для новых строк явно не задаются. Источником новых строк служит запрос на выборку, содержащийся внутри инструкции INSERT.
Процедура добавления строк со значениями, взятыми из той же базы данных, может сперва показаться странной, но иногда оказывается необходимой. Предположим, что нам требуется скопировать номера, даты и стоимости всех заказов, сделанных до 1 января 1990 года, из таблицы orders в другую таблицу с именем oldorders. Многострочная инструкция INSERT позволяет скопировать данные компактно и быстро:
Скопировать старые заказы в таблицу oldorders.
INSERT INTO oldorders (order_num, order_date, amount) SELECT order_num, order_date, amount
FROM orders
WHERE order_date < '01-jan-90'
Хотя многострочная инструкция INSERT выглядит сложнее однострочной, в действительности она является очень простой. В ней, как и в однострочной инструкции INSERT, задаются таблица и столбцы, в которые заносятся новые элементы данных. Оставшаяся часть инструкции представляет собой запрос, извлекающий данные из таблицы с помощью инструкции SELECT.
Многострочную инструкцию INSERT можно также использовать, если, например, требуется проанализировать, что именно приобретают клиенты, и для этого необходимо просмотреть информацию о клиентах и служащих, имеющих большие заказы – стоимостью свыше $15000. Запросы, которые необходимо для этого выполнить, объединяют информацию из таблиц customers, salesreps и orders. В учебной базе данных эти трехтабличные запросы будут выполняться довольно быстро, но в реальной корпоративной базе данных, содержащей тысячи строк информации, выполнение таких запросов заняло бы длительное время.
Вместо выполнения нескольких длинных трехтабличных запросов лучше создать для требуемых данных новую таблицу с новым именем и имеющую новую структуру, соответствующую запросу. Следует отметить, что запрос с использованием инструкции INSERT будет выполняться намного быстрее, чем при использовании объединения инструкций SELECT.
На запрос, содержащийся внутри многострочной инструкции INSERT, стандарт SQL1 накладывает несколько логических ограничений:
§ в запрос нельзя включать предложение ORDER BY. He имеет смысла сортировать таблицу результатов запроса, поскольку она добавляется в таблицу, которая, как и все остальные, не упорядочена;
§ таблица результатов запроса должна содержать количество столбцов, равное длине списка столбцов в инструкции INSERT (или полностью всю целевую таблицу, если список столбцов опущен), а типы данных соответствующих столбцов таблицы результатов запроса и целевой таблицы должны быть совместимыми;
§ запрос не может быть запросом на объединение (UNION) нескольких различных инструкций SELECT.
§ имя целевой таблицы инструкции INSERT не может присутствовать в предложении FROM запроса на выборку или любого запроса, вложенного в него. Тем самым запрещается добавление таблицы самой к себе.
Первые два ограничения очевидны, а последние два были добавлены только для того, чтобы избежать излишней сложности инструкции INSERT. Как результат, в стандарте SQL2 они были ослаблены, и в запросе допускаются операции UNION и JOIN; разрешается также "самодобавление".
Утилиты пакетной загрузки.
Часто возникает необходимость загрузить в базу данных информацию из другого компьютера или из файла, в который она была собрана из различных источников. Для загрузки данных в таблицу можно было бы написать программу с циклом, в котором из файла считывается одна запись, а затем с помощью однострочной инструкции INSERT эта запись добавляется в таблицу. Однако «накладные расходы», связанные с циклическим выполнением однострочной инструкции INSERT, могут оказаться очень высокими. Если принять, что в типичном случае ввод одной строки занимает полсекунды, то для интерактивного режима это, по-видимому, допустимое быстродействие. Но если необходимо загрузить 50000 строк данных, то такое быстродействие неприемлемо. Загрузка данных в этом случае заняла бы свыше шести часов. По этой причине во всех коммерческих СУБД имеются средства пакетной загрузки, которые с высокой скоростью загружают данные из файла в таблицу. В стандарте SQL этот тип загрузки не упоминается, и обычно она осуществляется автономными служебными утилитами без участия SQL. Утилиты различных поставщиков СУБД немного отличаются набором функций, команд и свойств.
2. Удаление данных
Удалять ту или иную строку из реляционной базы данных приходится тогда, когда объект, представляемый этой строкой, исчезает из "внешнего мира". Скажем, в случае учебной базы возможны следующие варианты:
• если клиент отменяет заказ, необходимо удалить соответствующую строку из таблицы orders;
• если служащий увольняется из компании, должна быть удалена соответствующая строка из таблицы salesreps;
• если ликвидируется офис, необходимо удалить соответствующую строку из таблицы offices; в случае, когда служащие этого офиса увольняются, их строки в таблице salesreps также должны быть удалены; если служащие переводятся в другой офис, то соответствующие значения в столбце office необходимо обновить.
Наименьшей единицей информации, которую можно удалить из реляционной базы данных, является одна строка.
Инструкция DELETE предназначена для удаления выбранной строки из одной таблицы.