Всем привет! В данной статье речь пойдет о том, как можно добавлять данные в таблицу в Microsoft SQL Server, если Вы уже хоть немного знакомы с языком T-SQL, то наверно поняли, что сейчас мы будем разговаривать об инструкции INSERT, а также о том, как ее можно использовать для добавления данных в таблицу.
Начнем по традиции с небольшой теории.
INSERT – это инструкция языка T-SQL, которая предназначена для добавления данных в таблицу, т.е. создания новых записей. Данную инструкцию можно использовать как для добавления одной строки в таблицу, так и для массовой вставки данных. Для выполнения инструкции INSERT требуется разрешение на вставку данных (INSERT ) в целевую таблицу.
Существует несколько способов использования инструкции INSERT в части данных, которые необходимо вставить:
Упрощённый синтаксис
INSERT [таблица] (список столбцов, … ) VALUES (список значений, … ) Или SELECT запрос на выборку Или EXECUTE процедура
Вот примерно так и выглядит упрощённый синтаксис инструкции INSERT INTO, в большинстве случаев именно так Вы и будете добавлять новые записи в таблицы.
Список столбцов, в которые Вы будете вставлять данные, можно и не писать, в таком случае их порядок будет определен на основе фактического порядка столбцов в таблице. При этом необходимо помнить этот порядок, когда Вы будете указывать значения для вставки или писать запрос на выборку. Лично я Вам рекомендую все-таки указывать список столбцов, в которые Вы планируете добавлять данные.
Также следует помнить и то, что в списке столбцов и в списке значений, соответственно, должны присутствовать так называемые обязательные столбцы, это те, которые не могут содержать значение NULL. Если их не указать, и при этом у столбца отсутствует значение по умолчанию, будет ошибка.
Еще хотелось бы отметить, что тип данных значений, которые Вы будете вставлять, должен соответствовать типу данных столбца, в который будет вставлено это значение, ну или, хотя бы, поддерживал неявное преобразование. Но я Вам советую контролировать тип данных (формат ) значений, как в списке значений, так и в запросе SELECT.
Хватит теории, переходим к практике.
Для того чтобы добавлять данные в таблицу, нам нужна соответственно сама таблица, давайте ее создадим, и уже в нее будем пробовать добавлять записи.
Примечание! Все примеры будут выполнены в Microsoft SQL Server 2016 Express .
CREATE TABLE TestTable( IDENTITY(1,1) NOT NULL, (100) NOT NULL, NOT NULL)
Наша тестовая таблица, будет содержать перечень товаров с ценой.
Также в примерах мы будем использовать процедуру, которая возвращает табличное значение, для добавления данных в таблицу, поэтому давайте ее тоже создадим.
CREATE PROCEDURE TestProcedure AS BEGIN SELECT ProductName, Price FROM TestTable END
Для примера она у нас будет возвращать данные из только что созданной таблицы TestTable.
Примечание!
Как Вы понимаете, чтение данного материала подразумевает наличные определенных знаний по языку T-SQL, поэтому если Вам что-то непонятно, рекомендую ознакомиться со следующими материалами:
Сначала давайте попробуем добавить одну запись и сразу посмотрим на результат, т.е. напишем запрос на выборку.
INSERT INTO TestTable(ProductName, Price) VALUES ("Компьютер", 100) GO SELECT * FROM TestTable
Вы видите, что мы после названия таблицы перечислили через запятую имена столбцов, в которые мы будем добавлять данные, затем мы указали ключевое слово VALUES и в скобочках также, в том же порядке, через запятую написали значения, которые мы хотим вставить.
После инструкции INSERT я написал инструкцию SELECT и разделил их командой GO.
А теперь давайте представим, что нам нужно добавить несколько строк. Мы для этого напишем следующий запрос.
INSERT INTO TestTable(ProductName, Price) VALUES ("Компьютер", 100), ("Клавиатура", 20), ("Монитор", 50) GO SELECT * FROM TestTable
Очень часто возникает необходимость добавлять много данных в таблицу, например, на основе запроса на выборку, т.е. SELECT. Для этого вместо VALUES нам всего лишь нужно указать запрос.
INSERT INTO TestTable(ProductName, Price) SELECT ProductName, Price FROM TestTable WHERE Id >
В данном примере мы написали запрос SELECT, который возвращает данные из таблицы TestTable, но не все, а только те, у которых идентификатор больше 2. А результат вставили все в ту же таблицу TestTable.
В качестве примера того, как можно добавлять записи в таблицу без указания списка столбцов, давайте напишем еще один запрос на вставку данных, который сделает равно то же самое что и запрос выше, только в нем не будет перечисления столбцов для вставки.
INSERT INTO TestTable SELECT ProductName, Price FROM TestTable WHERE Id > 2 GO SELECT * FROM TestTable
В данном случае мы уверены в том, что в таблице TestTable первый столбец это ProductName, а второй Price, поэтому мы можем позволить себе написать именно так. Но, снова повторюсь, на практике лучше указывать список столбцов.
Если Вы заметили, я во всех примерах не указывал столбец Id, а он у нас есть, ошибки не возникло, так как данный столбец со свойством IDENTITY, он автоматически генерирует идентификаторы, поэтому в такой столбец вставить данные просто не получится.
Сейчас давайте вставим в таблицу данные, которые нам вернёт хранимая процедура. Смысл здесь такой же, вместо VALUES и вместо запроса мы указываем вызов процедуры. Но как Вы понимаете, порядок и количество столбцов, возвращаемых процедурой, должен строго совпадать со списком столбцов для вставки (даже если список столбцов не указан ).
INSERT INTO TestTable(ProductName, Price) EXEC TestProcedure GO SELECT * FROM TestTable
Надеюсь, данный материал помог Вам разобраться с инструкцией INSERT INTO , а у меня все, пока!
Эта инструкция добавляет одну или несколько записей в таблицу (выполняет запрос на добавление).
Запрос на добавление нескольких записей:
INSERT INTO конечный_объект
[(поле1
[, поле2
[, ...]])]
SELECT [источник
.]поле1
[, поле2
[, ...]
FROM выражение_таблицы
Запрос на добавление одной записи:
INSERT INTO конечный_объект
[(поле1
[, поле2
[, ...]])]
VALUES (поле1
[, поле2
[, ...])
Инструкция INSERT INTO состоит из следующих элементов:
Часть | Описание |
---|---|
конечный_объект |
Имя таблицы или запроса, куда добавляются записи. |
поле1 , поле2 |
После аргумента конечный_объект - имена полей, в которые добавляются данные; после аргумента источник - имена полей, из которых извлекаются данные. |
внешняя_база_данных |
Путь к внешней базе данных. Описание пути см. в статье, посвященной предложению IN. |
источник |
Имя таблицы или запроса, откуда копируются записи. |
выражение_таблицы |
Одно или несколько имен таблиц, из которых требуется получить записи. Этот аргумент может представлять собой имя отдельной таблицы, результирующее выражение, составленное с использованием операций INNER JOIN, LEFT JOIN или RIGHT JOIN, или сохраненный запрос. |
значение1 , значение2 |
Значения, которые будут добавлены в определенные поля новой записи. Каждое значение вставляется в поле, соответствующее его положению в списке: значение1 добавляется в поле1 новой записи, значение2 - в поле2 и т. д. Необходимо разделять значения запятой и заключать текстовые поля в кавычки (" "). |
С помощью инструкции INSERT INTO можно добавить в таблицу одну запись, используя указанный выше синтаксис. В этом случае указываются имена и значения для каждого поля записи. Необходимо указать все поля записи, которым присваиваются значения, и соответствующие значения. Если не указать значение поля, ему будет присвоено значение по умолчанию или NULL. Записи добавляются в конец таблицы.
Инструкцией INSERT INTO можно также воспользоваться для добавления набора записей из другой таблицы или запроса с помощью предложения SELECT... FROM, как показано выше (см. синтаксис запроса на добавление нескольких записей). В этом случае предложение SELECT задает поля для добавления в указанный конечный_объект .
Источник или конечный_объект может быть таблицей или запросом. Если задан запрос, ядро СУБД Microsoft Access добавляет записи ко всем таблицам, которые он возвращает.
Использование инструкции INSERT INTO не является обязательным. Если она указана, она должна предшествовать инструкции SELECT.
Если конечная таблица содержит первичный ключ, убедитесь, что значения, добавляемые в одно или несколько полей первичного ключа, уникальны и отличны от NULL ; в противном случае записи не будут добавлены.
Если записи добавляются в таблицу с полем "Счетчик" и вы хотите изменить их нумерацию, не включайте поле "Счетчик" в запрос. Включите поле "Счетчик" в запрос, если вы хотите сохранить исходные значения из поля.
Добавить записи в таблицу другой базы данных можно с помощью предложения IN.
Чтобы создать таблицу, используйте инструкцию SELECT... INTO для получения запроса на создание таблицы.
Перед тем как выполнить запрос на добавление, воспользуйтесь запросом на выборку с такими же условиями отбора, чтобы по полученным результатам определить, какие записи будут добавлены.
Запрос на добавление копирует записи из одной или нескольких таблиц в другую таблицу. При этом таблицы, содержащие добавляемые записи, остаются без изменений.
Вместо добавления записей из другой таблицы можно задать значение каждого поля в отдельной новой записи с помощью предложения VALUES. Если список полей опущен, в предложение VALUES необходимо включить соответствующие значения каждого поля таблицы; в противном случае операция INSERT не будет выполнена. Воспользуйтесь инструкцией INSERT INTO вместе с предложением VALUES для каждой дополнительной записи, которую требуется создать.
sql запрос INSERT INTO имеет смысл при созданной таблицы базы данных. То есть, таблица существует, имеет название, созданные строки и столбцы. создается таблица оператором: , модифицируется таблица оператором .
sql запрос INSERT INTO имеет следующий синтаксис:
INSERT INTO название_таблицы (в скобки, если нужно, вставляем список колонок куда нужно вставить данные) VALUES вставляемые данные1, вставляемые данные2, вставляемые данные3.
Между INSERT и INTRO можно вставить опцию IGNORE. Она не обязательная. Нужна для защиты первичных ключей при редактировании таблицы. Иначе, если при редактировании происходит дублирование первичных ключей, то при вставке опции IGNORE первая строка с первичным ключом останется в изменяемой таблице, Другие первичные ключи удаляются. По умолчанию эту опцию опускаем.
Есть необязательные опции LOW_PRIORITY и DELAYED. Они определяют приоритеты добавления информации в БД. Первая задает ожидание освобождения БД, вторая означает буферизацию информации.
Строка в запросе: INSERT с фразой VALUES позволит добавить одиночную строку в таблицу БД. Фраза VALUES содержит значения этих данных.
Вместо фразы VALUES могут указываться подзапросы. INSERT с подзапросом добавляет к таблице строки, возвращенные подзапросом. Сервер базы данных обрабатывает подзапрос и вставляет все возвращенные строки в таблицу. Сервер не вставляет строки, если подзапрос их не выбирает.
Подзапросы практически не используются в базе данных MySQL.
Вставляем новые строки в БД MySQL командой INSERT INTRO.
Первый пример.
Вставляем новые строки в таблицу table_name.
INSERT INTO table_name VALUES (‘2′,’145′,’1′,’name’);
Это значит, что мы хотим в таблицу table_name вставить в столбцы значения 2,145,1,name. Так как, столбцы не указаны значения заполяются во все столбцы таблицы.
Пример второй.
Вставка информации в нужные (указанные) столбцы таблицы table_name.
INSERT INTO table_name (client_customer, client_subclient, client_mail) VALUES (‘name1′,’subname1′,’[email protected]′), (‘name2′,’subname2′,’[email protected]′), (‘name3′,’subname3′,(’[email protected]′);
Игорь Серов специально для сайта « ».
Инструкция SQL INSERT INTO и INSERT SELECT используются для вставки новых строк в таблицу. Существует два способа использования инструкций:
Синтаксис :
INSERT INTO имя_таблицы VALUES (значение1, значение2, значение3,...); имя_таблицы: имя таблицы. значение1, значение2,.. : значения первого столбца, второго столбца,... для новой записи
Синтаксис :
INSERT INTO имя_таблицы (столбец1, столбец2, столбец3,..) VALUES (значение1, значение2, значение3,...); имя_таблицы: имя таблицы. столбец1: имя первого столбцы, второго столбца... значение1, значение2,.. : значения первого столбца, второго столбца,... для новой записи
Запросы :
Способ 1 (вставка только значений ):
INSERT INTO Student VALUES ("5","HARSH","WEST BENGAL","8759770477","19");
Результат :
После использования INSERT INTO SELECT таблица Student теперь будет выглядеть следующим образом:
ROLL_NO | NAME | ADDRESS | PHONE | Age |
1 | Ram | Delhi | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Delhi | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
5 | HARSH | WEST BENGAL | 8759770477 | 19 |
Способ 2 (вставка значений только в указанные столбцы ):
INSERT INTO Student (ROLL_NO, NAME, Age) VALUES ("5","PRATIK","19");
Результат :
Таблица Student теперь будет выглядеть следующим образом:
ROLL_NO | NAME | ADDRESS | PHONE | Age |
1 | Ram | Delhi | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Delhi | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
5 | PRATIK | null | null | 19 |
Обратите внимание, что для столбцов, значения для которых не указаны, задается null .
Можно использовать инструкцию MySQL INSERT SELECT для копирования строк из одной таблицы и их вставки в другую.
Использование этого оператора аналогично использованию INSERT INTO . Разница в том, что оператор SELECT применяется для выборки данных из другой таблицы. Ниже приведены различные способы использования INSERT INTO SELECT :
Синтаксис :
INSERT INTO первая_таблица SELECT * FROM вторая_таблица; первая_таблица: имя первой таблицы. вторая_таблица: имя второй таблицы.
Мы использовали инструкцию SELECT для копирования данных из одной таблицы и инструкцию INSERT INTO для их вставки в другую.
Синтаксис :
INSERT INTO первая_таблица(имена_столбцов1) SELECT имена_столбцов2 FROM вторая_таблица; первая_таблица: имя первой таблицы. вторая_таблица: имя второй таблицы. имена_столбцов1: имена столбцов, разделенные запятой(,) для таблицы 1. имена_столбцов2: имена столбцов, разделенные запятой(,) для таблицы 2.
Мы использовали инструкцию SELECT для копирования данных только из выбранных столбцов второй таблицы и инструкцию MySQL INSERT INTO SELECT для их вставки в первую таблицу.
Синтаксис :
Таблица 2: LateralStudent
ROLL_NO | NAME | ADDRESS | PHONE | Age |
7 | SOUVIK | DUMDUM | 9876543210 | 18 |
8 | NIRAJ | NOIDA | 9786543210 | 19 |
9 | SOMESH | ROHTAK | 9687543210 | 20 |
Запросы :
Способ 1 (вставка всех строк и столбцов ):
INSERT INTO Student SELECT * FROM LateralStudent;
Результат :
Этот запрос вставит все данные таблицы LateralStudent в таблицу Student . После применения SQL INSERT INTO SELECT таблица Student будет выглядеть следующим образом:
ROLL_NO | NAME | ADDRESS | PHONE | Age |
1 | Ram | Delhi | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Delhi | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
7 | SOUVIK | DUMDUM | 9876543210 | 18 |
8 | NIRAJ | NOIDA | 9786543210 | 19 |
9 | SOMESH | ROHTAK | 9687543210 | 20 |
Способ 2 (вставка отдельных столбцов ):
INSERT INTO Student(ROLL_NO,NAME,Age) SELECT ROLL_NO, NAME, Age FROM LateralStudent;
Результат :
Этот запрос вставит данные из столбцов ROLL_NO , NAME и Age таблицы LateralStudent в таблицу Student . Для остальных столбцов таблицы Student будет задано значение null . После применения SQL INSERT SELECT таблица будет выглядеть следующим образом:
ROLL_NO | NAME | ADDRESS | PHONE | Age |
1 | Ram | Delhi | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Delhi | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
7 | SOUVIK | Null | null | 18 |
8 | NIRAJ | Null | null | 19 |
9 | SOMESH | Null | null | 20 |
Результат :
Этот запрос выберет только первую строку из таблицы LateralStudent для вставки в таблицу Student . После применения INSERT SELECT таблица будет выглядеть следующим образом.
С помощью SQL можно скопировать информацию из одной таблицы в другую.
INSERT INTO SELECT, заявление копирует данные из одной таблицы и вставляет его в существующую таблицу.
INSERT INTO SELECT, оператор выбирает данные из одной таблицы и вставляет его в существующую таблицу. Любые существующие строки в целевой таблице не изменяются.
Мы можем скопировать все столбцы из одной таблицы в другую, существующую таблицу:
INSERT INTO table2
SELECT * FROM table1;
Или же мы можем скопировать только те столбцы, которые мы хотим в другую, существующую таблицу:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
В этом уроке мы будем использовать хорошо известную базу данных Борей.
Ниже приводится подборка из "Customers" таблицы:
Пользовательский ИД | Имя Клиента | Контактное лицо | Адрес | город | Почтовый индекс | Страна |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitucion 2222 | Mexico D.F. | 05021 | Mexico |
3 | Antonio Moreno Taqueria | Antonio Moreno | Mataderos 2312 | Mexico D.F. | 05023 | Mexico |
И выбор из "Suppliers" таблицы:
Копирование только несколько столбцов из "Suppliers" Into "Customers" :
Копирование только немецких поставщиков в "Customers" .