Добавление новых данных в таблицу (оператор INSERT)
Существуют две формы оператора INSERT. Первая предназначена для вставки единственной строки в указанную таблицу. Эта форма оператора INSERT имеет следующий формат: # INSERT. INTO TableName Г ^VALUES Здесь параметр TableName (Имя таблицы) может представлять либо имя таблицы базы данных, либо имя обновляемого представления (раздел 6.4). Параметр colunmList (Список столбцов) представляет собой список, состоящий из имен одного или более столбцов, разделенных запятыми. Параметр coIumnLisC является необязательным. Если он опущен, то предполагается использование списка из имен всех столбцов таблицы, указанных в том порядке, в котором они были описаны в операторе CREATE TABLE. Если в операторе INSERT указывается конкретный список имен столбцов, то любые опущенные в нем столбцы должны быть объявлены при создании таблицы как допускающие значение NULL — за исключением случаев, когда при описании столбца использовался параметр DEFAULT (раздел 6.3.2). Параметр dataValueList (Список значений данных) должен следующим образом соответствовать параметру columnList: т количество элементов в обоих списках должно быть одинаковым; • должно существовать прямое соответствие между позицией одного и того же элемента в обоих списках, поэтому первый элемент списка da ta Val uebist считается относящимся к первому элементу списка columnList, второй элемент списка dataValuel/ist — ко второму элементу списка columnList и т.д.; • типы данных элементов списка dataValueList должны быть совместимы с типом данных соответствующих столбцов таблицы. Пример 5.35. Использование конструкции INSERT... VALUES Поместите в таблицу staff новую запись, содержащую данные во всех столбцах. INSERT INTO Staff VALUES('SG16', 'Alan', 'Brown', 'Assistant1, 'M1, DATE '1957-05-25', 8300, 'B003'); Если размещать вставляемые в каждый столбец таблицы данные в порядке их расположения в таблице, то указывать список столбцов необязательно. Помните, что символьные значения (например, 'Alan') должны быть заключены в одинарные кавычки.
I Пример 5.36. Вставка новой записи с использованием значений, принимаемых по умолчанию Поместите в таблицу staff новую запись, содержащую данные во всех обязательных столбцах: staffNo, ftfame, IName, position, salary и branchNo. INSERT INTO Staff (staffNo, fName, IName, position, salary, branchNo) VALUES {'SG441, 'Anne1, 'Jones', 'Assistant', 8100, ' Б О О З ' }; Глава 5. Язык SQL: манипулирование данными 203 Поскольку данные вставляются только в определенные столбцы таблицы, необходимо указать имена столбцов, в которые эти данные будут помещаться. Порядок следования имен столбцов несуществен, однако более естественно указать их в том порядке, в каком они следуют в таблице. Кроме того, оператор INSERT можно было бы записать и таким образом: INSERT INTO Staff VALUES ('SG441, 'Anne1, 'Jones1, 'Assistant1, NULL, NULL, 8100, NULL, 'BG03.'); В этом случае мы явно указали, что в столбцы sex и DOB должны быть помещены значения NULL. -т-цошт.. -". J Вторая форма оператора INSERT позволяет скопировать множество строк одной таблицы в другую. Этот оператор имеет следующий формат: rINSERT INTO. TableWame -•'.-SELECT.-•-.-•: ЖИННшШшЯВнШНШВННШ^ЖкЖ^ШН^^ШШНпНяПаВПЯЯВВкШшя Здесь параметры TableWame и columnList имеют тот же формат и смысл, что и при вставке в таблицу одной строки. Конструкция SELECT может представлять собой любой допустимый оператор SELECT. Строки, вставляемые в указанную таблицу, в точности соответствуют строкам результирующей таблицы, созданной при выполнении вложенного запроса. Все ограничения, указанные выше для первой формы оператора INSERT, применимы и в этом случае. Пример 5. 37. Использование конструкции INSERT... SELECT Предположим, что существует таблица Staff PropCount, содержащая имена работников компании и учетные номера сдаваемых в аренду объектов, за которые они отвечают:
Staff PropCount (staff No, fNarie, IName, propCount) Заполните таблицу staff PropCount данными, используя информацию из таблиц staff и PropertyForRent. INSERT INTO StaffPropCount {SELECT s.staffNo, fName, IName, COUNT(*) FROM Staff s. Proper t у ForRent p WHERE s.staffNo» p. staff No GROUP BY s.staffNo, fName, IName} UNION (SELECT staffNo, fName, INa-ne, 0 FROM Staff WHERE staffNo NOT IN (SELECT DISTINCT staffNo FROM PropertyForRent)); Этот пример достаточно сложен, поскольку нам требуется подсчитать количество сдаваемых в аренду объектов собственности, за которые отвечают работники компании. Если опустить вторую часть операции UNION, то будет создан список только тех работников компании, которые в настоящее время отвечают хотя бы за один объект. Иначе говоря, из результатов будут исключены все работники, которые в данный момент не отвечают ни на один сдаваемый в аренду объект. По этой причине для составления полного списка работников компании необходимо использовать оператор UNION, в котором второй оператор SELECT предназначен для выборки сведений именно о таких работниках, причем в столбец count соответствующих строк помещается значение 0. В табл. 5.41 представлено содержимое таблицы StaffPropCount после выполнения приведенного выше оператора. Таблица 5.41. Результат выполнения оператора SQL из примера 5.37 Отметим, что в некоторых диалектах языка SQL не допускается использовать оператор UNION в подзапросах оператора INSERT.
Читайте также: DML. Изменение данных Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|