Программирование >>  Sql: полное руководство 

1 ... 73 74 75 [ 76 ] 77 78 79 ... 264


выборку таблицы salesreps, но В таблице результатов запроса она может находиться в любом месте

Инструкция SQL

INSERT INTO SALESREPS (NAME, AGE EMPL NUH, )

VALUES (Henry Jacobsen,36,111,0 00, Sales Kgr .25-July-90, 13)

Новая строка

Henry Jacobsen

Sales Kgr

25-JUL-1990

NULL

NULL

0 00

Таблица SALESREPS

EMPL NUM

НАИЕ

REP OFFICE

TITLE

HIBE DATE

HANAGER

QUOTA

SALES

Bill Adams

Sales Rep

12-FEB-88

$350,000 00

$367,911 00

Hary Jones

Sales Rep

12-0CT-89

$300,000 00

$392,725 00

Sue Smith

Sales Rep

10-DEC-86

$350,000 00

$474,050 00

Sam Clark

VP Sales

14-JUN-08

NULL

$275,000 00 $200,000 00

$299,912 00 $142,594 00

Bob Smith

Sales Hgr

19-HAV-87

Dan Roberts

Sales Rep

20-0CT-86

$300,000 00

$305,673 00

Tom Snyder

NULL

Sales Rep

13 JAH-90

NULL

$75.985 00

Larry Fitcb

Sales Hgr

12 OCT 89

$350, ООО 00

$361,865 00

Paul Cruz

Sales Rep

01-HAR-87

$275,000 00

$286,775 00

Nancy Angel 11

Sales Rep

14-N0V-88

$300,000 00

$186,042 00

Рис. 102 Добавление в таблицу одной строки

Предположим, что служащий Якобсен получает свой первый заказ от компании 1п1егСоф, нового клиента, которому присвоен идентификатор 2126 Это заказ на 20 изделий ACI-41004 общей стоимостью $2340, и ему присваивается номер 113069 Ниже приведены инструкции insert, добавляющие в базу данных информацию о новом клиенте и заказе

Добавить для служащего Якобсена информацию о новом клиенте и заказе

INSERT INTO CUSTOMERS (COMPANY, CUST NUM, CREDIT LIMIT, CUST REP) VALUES ClnterCorp, 2126, 15000.00, 111)

1 row inserted.

INSERT INTO ORDERS (AMOUNT, MFR, PRODUCT, QTY, ORDER DATE, ORDER NUM, CUST, REP) VALUES (2340.00, ACI, 41004, 20, CURRENT DATE, 113069, 2126, 111)

1 row inserted.

Как показывает приведенный пример, если в таблице много столбцов, то инструкция insert может оказаться довольно длинной, однако ее структура по-прежнему останется очень простой. Во второй инструкции insert в предложении values используется системная константа current date, что обеспечивает ввод текущей даты в качестве даты получения заказа. Эта системная константа определена в стандарте SQL2 и поддерживается многими ведущими СУБД В остальных СУБД для получения текущих даты и времени используются другие системные константы или встроенные функции



Инструкцию insert можно использовать в интерактивном режиме для добавления строк в таблицы, которые изменяются очень редко, например в таблицу offices Однако на практике данные о новом клиенте, заказе или служащем почти всегда добавляются в базу данных с помощью программ ввода данных, использующих специальные формы После окончания ввода данных в форму приложение добавляет новую строку данных с помощью программного SQL Независимо от того, какой SQL используется, интерактивный или программный, инструкция insert имеет один и хот же вид

Как правило, в инструкции insert указывается простое имя таблицы, определяющее вапу собственную таблицу Чтобы вставить данные в таблицу, созданную другим пользователем, необходимо указать ее полное имя И конечно же, необходимо иметь разрещение на ввод данных в эту таблицу, иначе вьшолнение инструкции insert закончиггся неудачей

Список столбцов в инструкции insert служит для того, чтобы установить соответствие между значениями данных, содержащимися в предложении values, и столбцами, для которых эти данные предназначены Списки значений и столбцов должны содержать одинаковое число элементов, а тип данных каждого значения должен быть совместимым с типом соответствующего столбца, иначе произойдет ошибка Стандарт ANSI/ISO требует, чтобы в списке столбцов использовались простые имена, но во многих СУБД допускаются и полные Ясно, что в именах столбцов в любом случае не может быть неоднозначности, потому что все они являются ссылками на столбцы целевой таблицы.

Добавление значений NULL

При добавлении в таблицу новой строки всем столбцам, имена которых отсутствуют в списке столбцов инструкции insert, автоматически присваивается значение null в инструкции insert, с помощью которой в таблицу salesreps была добавлена информация о служащем Якобсене, бьши опущены столбцы quota и manager-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)

Из-за этого новая строка в столбцах quota и manager содержит значение null, как показано на рис 10 2 Значение null можно присвоить и явным образом, включив эти столбцы в список столбцов, а в списке значений задав для них ключевое слово null Применение следующей инструкции insert приведет к тому же результату, что и в предыдущем случае-

INSERT INTO SALESREPS (NAME, AGE, EMPL NUM, SALES, QUOTA, TITLE, MANAGER, HIRE date, REP OFFICE) VALUES (Henry Jacobsen, 36, 111, 0.00, NULL, Sales Mgr , NULL, 25-JUL-90, 13)

Добавление всех столбцов

Для удобства в SQL разрешается не включать список столбцов в инструкцию Insert Если список столбцов опущен, он генерируется автоматически и в нем слева Направо перечисляются все столбцы таблицы При выполнении инструкции select *



генерируется такой же список столбцов. Пользуясь этой сокращенной формой записи, предыдущую инструкцию insert можно переписать таким образом:

INSERT INTO SALESREPS

VALUES (111, Henry Jacobsen, 36, 13, Sales Mgr, 25-JUL-90, NULL, NULL, 0.00)

Как видно из данного гфимера, если список столбцов опущен, то в списке значений необходимо явно указывать значения null. Кроме того, последовательность значений данных должна в точности соответствовать порядку столбцов в таблице.

В интерактивном режиме удобно не включать в инструкцию insert список столбцов, так как это уменьшает длину инструкции. В случае программного SQL список столбцов должен быть задан всегда, поскольку такую программу легче читать и понимать.

Многосгрочная инструкция INSERT

Многострочная инструкция insert, синтаксическая диаграмма которой изображена на рис. 10.3, добавляет в целевую таблицу несколько строк (более одной). В этой разновидности инструкции insert значения для новых строк явно не задаются. Источником новых строк служит запрос на выборку, содержащийся внутри инструкции insert.

I-INSERT INTO имя таблицы

запрос

иш столбца - -

Риг 103 йнхок-ичоскаи лтгрсмшю&рочйойфо-рут

Процедура добавления строк со значениями, взятыми из той же базы данных, может сперва показаться странной, но иногда оказывается необходимой. Предположим, что нам требуется скопировать номера, даты и стоимости всех заказов, сделанных до 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 < Ol-JAN-90

9 rows inserted.

Хотя многострочная инструкция insert выглядит сложнее однострочной, в действительности она является очень простой. В ней, как и в однострочной инструкции insert, задаются таблица и столбцы, в которые заносятся новые элементы данных. Оставшаяся часть инструкции представляет собой запрос, извлекающий данные из таблицы orders. На рис. 10.4 изображена графическая схема выполнения инструкции insert, гфиведенной выше. Вначале выполняется запрос к таблице



1 ... 73 74 75 [ 76 ] 77 78 79 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика