Insert несколько строк sql: примеры вставки строк в таблицу БД MySQL
Содержание
Инструкция INSERT INTO в Transact-SQL – несколько способов добавления данных в таблицу | Info-Comp.ru
Всем привет! В данной статье речь пойдет о том, как можно добавлять данные в таблицу в Microsoft SQL Server, если Вы уже хоть немного знакомы с языком T-SQL, то наверно поняли, что сейчас мы будем разговаривать об инструкции INSERT, а также о том, как ее можно использовать для добавления данных в таблицу.
Начнем по традиции с небольшой теории.
Содержание
- Инструкция INSERT в T-SQL
- Исходные данные
- Пример 1 – Добавляем новую запись в таблицу с использованием конструктора табличных значений
- Пример 2 – Добавляем новые строки в таблицу с использованием запроса SELECT
- Пример 3 – Добавляем новые записи в таблицу с использованием хранимой процедуры
Инструкция INSERT в T-SQL
INSERT – это инструкция языка T-SQL, которая предназначена для добавления данных в таблицу, т.е. создания новых записей. Данную инструкцию можно использовать как для добавления одной строки в таблицу, так и для массовой вставки данных. Для выполнения инструкции INSERT требуется разрешение на вставку данных (INSERT) в целевую таблицу.
Существует несколько способов использования инструкции INSERT в части данных, которые необходимо вставить:
- Перечисление конкретных значений для вставки;
- Указание набора данных в виде запроса SELECT;
- Указание набора данных в виде вызова процедуры, которая возвращает табличные данные.
Заметка! Начинающим рекомендую посмотреть мой видеокурс по T-SQL.
Упрощённый синтаксис
INSERT [INTO] [таблица] (список столбцов, …) VALUES (список значений, …) Или SELECT запрос на выборку Или EXECUTE процедура
Где,
- INSERT INTO – это команда добавления данных в таблицу;
- Таблица – это имя целевой таблицы, в которую необходимо вставить новые записи;
- Список столбцов – это перечень имен столбцов таблицы, в которую будут вставлены данные, разделенные запятыми;
- VALUES – это конструктор табличных значений, с помощью которого мы указываем значения, которые будем вставлять в таблицу;
- Список значений – это значения, которые будут вставлены, разделенные запятыми. Они перечисляются в том порядке, в котором указаны столбцы в списке столбцов;
- SELECT – это запрос на выборку данных для вставки в таблицу. Результирующий набор данных, который вернет запрос, должен соответствовать списку столбцов;
- EXECUTE – это вызов процедуры на получение данных для вставки в таблицу. Результирующий набор данных, который вернет хранимая процедура, должен соответствовать списку столбцов.
Вот примерно так и выглядит упрощённый синтаксис инструкции INSERT INTO, в большинстве случаев именно так Вы и будете добавлять новые записи в таблицы.
Список столбцов, в которые Вы будете вставлять данные, можно и не писать, в таком случае их порядок будет определен на основе фактического порядка столбцов в таблице. При этом необходимо помнить этот порядок, когда Вы будете указывать значения для вставки или писать запрос на выборку. Лично я Вам рекомендую все-таки указывать список столбцов, в которые Вы планируете добавлять данные.
Также следует помнить и то, что в списке столбцов и в списке значений, соответственно, должны присутствовать так называемые обязательные столбцы, это те, которые не могут содержать значение NULL. Если их не указать, и при этом у столбца отсутствует значение по умолчанию, будет ошибка.
Еще хотелось бы отметить, что тип данных значений, которые Вы будете вставлять, должен соответствовать типу данных столбца, в который будет вставлено это значение, ну или, хотя бы, поддерживал неявное преобразование. Но я Вам советую контролировать тип данных (формат) значений, как в списке значений, так и в запросе SELECT.
Хватит теории, переходим к практике.
Исходные данные
Для того чтобы добавлять данные в таблицу, нам нужна соответственно сама таблица, давайте ее создадим, и уже в нее будем пробовать добавлять записи.
Примечание! Все примеры будут выполнены в Microsoft SQL Server 2016 Express.
CREATE TABLE TestTable( [Id] [INT] IDENTITY(1,1) NOT NULL, [ProductName] [VARCHAR](100) NOT NULL, [Price] [Money] NOT NULL )
Наша тестовая таблица, будет содержать перечень товаров с ценой.
Также в примерах мы будем использовать процедуру, которая возвращает табличное значение, для добавления данных в таблицу, поэтому давайте ее тоже создадим.
CREATE PROCEDURE TestProcedure AS BEGIN SELECT ProductName, Price FROM TestTable END
Для примера она у нас будет возвращать данные из только что созданной таблицы TestTable.
Примечание!
Как Вы понимаете, чтение данного материала подразумевает наличные определенных знаний по языку T-SQL, поэтому если Вам что-то непонятно, рекомендую ознакомиться со следующими материалами:
- Справочник по Transact-SQL;
- Основы программирования на T-SQL;
- SQL код – самоучитель по SQL для начинающих программистов;
- Видеокурсы по T-SQL.
Пример 1 – Добавляем новую запись в таблицу с использованием конструктора табличных значений
Сначала давайте попробуем добавить одну запись и сразу посмотрим на результат, т. е. напишем запрос на выборку.
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
В данном случае мы добавили три записи, т.е. три строки. После VALUES значения каждой новой строки указаны в скобочках, разделили мы их запятыми.
Пример 2 – Добавляем новые строки в таблицу с использованием запроса SELECT
Очень часто возникает необходимость добавлять много данных в таблицу, например, на основе запроса на выборку, т.е. SELECT. Для этого вместо VALUES нам всего лишь нужно указать запрос.
INSERT INTO TestTable(ProductName, Price) SELECT ProductName, Price FROM TestTable WHERE Id > 2 GO SELECT * FROM TestTable
В данном примере мы написали запрос SELECT, который возвращает данные из таблицы TestTable, но не все, а только те, у которых идентификатор больше 2. А результат вставили все в ту же таблицу TestTable.
В качестве примера того, как можно добавлять записи в таблицу без указания списка столбцов, давайте напишем еще один запрос на вставку данных, который сделает равно то же самое что и запрос выше, только в нем не будет перечисления столбцов для вставки.
INSERT INTO TestTable SELECT ProductName, Price FROM TestTable WHERE Id > 2 GO SELECT * FROM TestTable
В данном случае мы уверены в том, что в таблице TestTable первый столбец это ProductName, а второй Price, поэтому мы можем позволить себе написать именно так. Но, снова повторюсь, на практике лучше указывать список столбцов.
Если Вы заметили, я во всех примерах не указывал столбец Id, а он у нас есть, ошибки не возникло, так как данный столбец со свойством IDENTITY, он автоматически генерирует идентификаторы, поэтому в такой столбец вставить данные просто не получится.
Пример 3 – Добавляем новые записи в таблицу с использованием хранимой процедуры
Сейчас давайте вставим в таблицу данные, которые нам вернёт хранимая процедура. Смысл здесь такой же, вместо VALUES и вместо запроса мы указываем вызов процедуры. Но как Вы понимаете, порядок и количество столбцов, возвращаемых процедурой, должен строго совпадать со списком столбцов для вставки (даже если список столбцов не указан).
INSERT INTO TestTable(ProductName, Price) EXEC TestProcedure GO SELECT * FROM TestTable
Надеюсь, данный материал помог Вам разобраться с инструкцией INSERT INTO, а у меня все, пока!
Оператор INSERT в SQL, примеры
Здравствуйте, уважаемые читатели. Продолжаем изучать запросы на языке SQL, и сегодня мы затронем еще один важный оператор — INSERT SQL. Разберем примеры, связанные с этим оператором.
Введение
Напомним, что в прошлый раз мы создали базу данных и три таблицы с помощью оператора CREATE, подробнее вы можете почитать об этом здесь.
Таблицы, которые были созданы (Salespeople (Продавцы), Customers (Заказчики), Orders (Заказы)) пока что не содержат никаких данных. И, конечно, следует заполнить их данными, подходящими для каждой таблицы в отдельности.
Общая информация об INSERT в SQL
В SQL заполнение таблиц данными можно осуществить с помощью оператора INSERT INTO. В общем виде, запрос в базе данных можно представить так:
INSERT INTO имя_таблицы (список_столбцов_для_вставки) VALUES (список_вставляемых_значений)
Очевидно, что количество элементов в списке столбцов должно быть одинаковым с количеством вставляемых значений, чтобы было соответствие. То есть если вы попробуете выполнить следующий запрос:
INSERT INTO salespeople (snum, sname) VALUES (1001, "Колованов", "Москва")
то система, в которой выполняется этот SQL запрос, выдаст ошибку.
Примеры с оператором INSERT
Для начала мы выполним SQL запросы, которые добавят данные в наши таблицы, чтобы в следующих статьях мы могли к ним обращаться и каким либо образом взаимодействовать. Начнем с таблицы salespeople, у которой 4 столбца:
INSERT INTO salespeople (snum, sname, city, comm) VALUES (1, "Колованов", "Москва", 10), (2, "Петров", "Тверь", 25), (3, "Плотников", "Москва", 22), (4, "Кучеров", "Санкт-Петербург", 28), (5, "Малкин", "Санкт-Петербург", 18), (6, "Шипачев", "Челябинск", 30), (7, "Мозякин", "Одинцово", 25), (8, "Проворов", "Москва", 25)
Примечание: чтобы понять, правильно ли сработал запрос, нужно вывести данные таблицы. Это делается с помощью оператора SQL — SELECT (это тема следующих статей, поэтому здесь разберем кратко). Выполняем запрос:
SELECT * FROM salespeople
И получаем такую таблицу с заполненными данными:
snum | sname | city | comm |
---|---|---|---|
1 | Колованов | Москва | 10 |
2 | Петров | Тверь | 25 |
3 | Плотников | Москва | 22 |
4 | Кучеров | Санкт-Петербург | 28 |
5 | Малкин | Санкт-Петербург | 18 |
6 | Шипачев | Челябинск | 30 |
7 | Мозякин | Одинцово | 25 |
8 | Проворов | Москва | 25 |
Итак, далее заполним остальные таблицы:
INSERT INTO customers (cnum, cname, city, rating, snum) VALUES (1, "Деснов", "Москва", 90, 6), (2, "Краснов", "Москва", 95, 7), (3, "Кириллов", "Тверь", 96, 3), (4, "Ермолаев", "Обнинск", 98, 3), (5, "Колесников", "Серпухов", 98, 5), (6, "Пушкин", "Челябинск", 90, 4), (7, "Лермонтов", "Одинцово", 85, 1), (8, "Белый", "Москва", 89, 3), (9, "Чудинов", "Москва", 96, 2), (10, "Лосев", "Одинцово", 93, 8)
INSERT INTO orders (onum, amt, odate, cnum, snum) VALUES (1001, 128, '2016-01-01', 9, 4), (1002, 1800, '2016-04-10', 10, 7), (1003, 348, '2017-04-08', 2, 1), (1004, 500, '2016-06-07', 3, 3), (1005, 499, '2017-12-04', 5, 4), (1006, 320, '2016-03-03', 5, 4), (1007, 80, '2017-09-02', 7, 1), (1008, 780, '2016-03-07', 1, 3), (1009, 560, '2017-10-07', 3, 7), (1010, 900, '2016-01-08', 6, 8)
На всякий случай напомню, что в таблице orders(заказы) колонка amt означает стоимость заказа, cnum — номер покупателя, snum — номер продавца, оформившего сделку.
Дополнительная информация
Если вы ввели неправильные данные в таблицу, то всю таблицу можно очистить с помощью SQL оператора TRUNCATE:
TRUNCATE TABLE orders
Если же вы хотите удалить определенную строку, то нужно воспользоваться оператором DELETE, а также указать какую то информацию, описывающую данную строку, например в salespeople это будет snum:
DELETE FROM salespeople WHERE snum = 1
При таком запросе удалится одна строка. В принципе можно удалять несколько строк, если в WHERE указать условие, подходящее для нескольких строк.
Заключение
Итак, мы познакомились с оператором INSERT языка SQL, который вставляет данные в таблицы, на примерах сами научились это делать. На этом все, если у вас остались вопросы, то оставляйте их в комментариях.
Вставка нескольких строк с помощью одного оператора INSERT с использованием конструктора табличных значений SQL Server
При управлении системой управления запасами для организации я столкнулся с ситуацией, когда мне пришлось выполнить массовую загрузку таблицы в SQL Server. Массовая загрузка требует вставки нескольких строк данных в таблицу.
Приложение, которое требовалось для извлечения данных, находилось в облаке. Следовательно, повторное написание операторов INSERT для отдельных строк было плохой идеей. Мне нужно было лучшее решение для вставки нескольких строк вместе без потери данных в процессе.
Решение пришло в виде конструктора табличных значений, функции, представленной в SQL Server 2008. Эта функция имеет множество применений. Однако в этой статье мы увидим, как TVC полезен для вставки нескольких строк в таблицу с помощью одного оператора.
Потеря данных при извлечении или сохранении в базе данных является серьезной головной болью, и ни один администратор баз данных или программист базы данных не хотел бы оказаться в такой ситуации. Поэтому, как только мы извлекли и получили данные на сервере, мы хотели бы быстро и эффективно вставить данные в таблицу без какой-либо суеты.
Быстрый и эффективный способ сделать это — написать одну инструкцию INSERT для вставки нескольких строк в таблицу SQL Server.
Если вы программист .net и хотите выполнять массовую загрузку в таблицу базы данных с помощью Asp.Net, я рекомендую вам ознакомиться с этой статьей о загрузке больших объемов данных с использованием класса SqlBulkCopy в Asp.Net. В этой статье есть код, написанный как на C#, так и на Vb.Net. SqlBulkCopy — это более быстрое и эффективное решение для загрузки больших данных в таблицу SQL Server.
Оператор INSERT с использованием TVC (конструктор табличных значений)
Представленный в SQL Server 2008 (поддерживается в текущих версиях, таких как 2014), мы можем определить TVC в наших операторах DML. TVC представляет собой набор данных, организованных в табличном формате. Мы будем использовать TVC в качестве предложения VALUES в нашем операторе INSERT.
“ Я рекомендую использовать фиктивную базу данных SQL Server с таблицами и небольшим количеством фиктивных данных. Я разработал специально для таких моментов. ”
СОЗДАТЬ ТАБЛИЦУ dbo.Employee (EmpID INT NOT NULL, EmpName VARCHAR(50) НЕ NULL, Обозначение VARCHAR(50) NULL ОГРАНИЧЕНИЕ [PK_Employee] ПЕРВИЧНЫЙ КЛЮЧ КЛАСТЕРИРОВАННЫЙ (EmpID) )
ВСТАВИТЬ В dbo. Employee (EmpID, EmpName, Обозначение) ЦЕННОСТИ (1, «АРУН БАНИК», «ПРОГРАММИСТ»), (2, «МАЙК ПЕРЛ», «СТАРШИЙ БУХГАЛТЕР»), (3, 'ЗЕЛЕНОЕ ПОЛЕ', 'БУХГАЛТЕР'), (4, «ДЕВАН ПОЛ», «ПРОГРАММИСТ»), (5, «МЭТТС», «СТАРШИЙ ПРОГРАММИСТ»), (6, 'ПЛАН ОТО', 'БУХГАЛТЕР') SELECT *FROM dbo.Employee
Внимательно посмотрите на него, и вы увидите, что он имеет сходство с ранее использовавшимся оператором INSERT с предложением VALUES. Разработчики, использующие версии SQL Server до 2008 года, должны были использовать несколько предложений SELECT OR VALUES вместе с оператором INSERT.
Использование предложения SELECT с оператором INSERT
INSERT INTO Сотрудник (EmpID, EmpName, Должность) ВЫБЕРИТЕ 1, «АРУН БАНИК», «ПРОГРАММИСТ» INSERT INTO Сотрудник (EmpID, EmpName, Должность) SELECT 2, 'MIKE PEARL', 'СТАРШИЙ БУХГАЛТЕР'
Использование предложения VALUES с оператором INSERT
INSERT INTO Сотрудник (EmpID, EmpName, Должность) ЗНАЧЕНИЯ (1, 'АРУН БАНИК', 'ПРОГРАММИСТ') INSERT INTO Сотрудник (EmpID, EmpName, Должность) ЦЕННОСТИ (2, «МАЙК ПЕРЛ», «СТАРШИЙ БУХГАЛТЕР»)
Заключение
Простота? Да, это просто, так как вы можете выполнить несколько INSERT, используя один оператор. Это никак не влияет на производительность. Однако с помощью TVC вы можете ВСТАВИТЬ набор из 1000 строк за раз. При превышении лимита SQL Server выдаст ошибку.
← ПредыдущийСледующий →
Вставка нескольких строк в таблицу SQL с использованием Excel в качестве шаблона
Надеюсь, вы следовали предыдущему руководству, в котором мы проверяли Создали несколько новых таблиц базы данных, используя Excel в качестве шаблона.
Давайте заполним эти таблицы значимыми данными. Хорошо, это может быть не самый значимый набор данных, поскольку я только что создал эти данные с помощью Mockaroo.com. (Отличный сайт для создания образцов данных «на лету».)
В этом упражнении используйте данные из трех таблиц Excel для заполнения таблиц в Microsoft SQL Server.
Мы предоставили образцы данных, чтобы вам было проще следовать моим шаблонам или полностью украсть их и создавать собственные плавные SQL-запросы.
Вот образцы наших столов.
Экспертная таблица — хранит идентификатор, имя и день рождения наших экспертов Эксперты владеют
Давайте заполним нашу первую таблицу, используя эту вкладку «Вставка заявления 1» из примера рабочего листа. Вот наш шаблон.
Строка зеленого цвета предназначена только для маркировки.
Чтобы увидеть, что происходит, переключитесь на представление формулы, сочетание клавиш (CTRL + `).
Преимущество использования Excel для форматирования заключается в том, что вам нужно настроить только один столбец данных, а затем вы можете перетащить формулу в конец набора данных.
Форматирование строки 5, строки 6 и ниже различается, поскольку строка 5 содержит заголовки, а шестая и ниже содержит импортированную информацию.
Вторая половина таблицы-вкладыша
Обратите внимание, что эти поля метаданных также имеют разный формат.
Столбец N готов к вырезанию и вставке в Microsoft SQL Server.
Прежде чем вырезать и вставлять, вы заслуживаете объяснения, что только что произошло.
Для лучшего понимания следуйте примерам данных.
Наша первая вкладка, вкладка «исходные данные», — это то, что мы хотим загрузить. Вкладка «Вставить выписку 1» выполняет следующие задачи:
- Вызывает значения ячеек из Исходных данных — Сначала, используя кавычки и символы &, мы форматируем каждый фрагмент данных, готовый к загрузке.
- Форматирование их как строки для нашей загрузки SQL — Затем мы используем формулу Concat, чтобы соединить все вместе.
Наш полезный друг, метаданные
Как упоминалось ранее, три столбца являются метаданными:
- Изменено пользователем — отслеживает последнего человека, редактировавшего столбец
- Timestamp — отслеживает дату последнего редактирования столбца
- Rowversion — это поле используется несколькими способами. Сохраняйте повторяющиеся строки и полагайтесь на последнюю версию строки, чтобы указать самую новую запись, или замените старые строки, и пусть версия строки сигнализирует, сколько раз эта строка была изменена.
Теперь разместите этот сценарий в MSSQL и запустите эту присоску.
Сценарии наших операторов вставки, сформулированных в Excel, в Microsoft SQL
После успешного выполнения запроса в окне сообщения отображается 20 обновленных строк.
Поскольку первые сценарии отработаны, попробуйте тот же процесс с двумя другими сценариями вставки.
Таблица 2 Загружено.
Таблица 3 Загружено.
Проверьте свою работу
Пришло время перепроверить наши результаты.
Используйте сценарии ниже, чтобы проверить первые три результата из каждой таблицы, потому что мы не хотим просматривать каждую строку!
В этих сценариях используются подзапросы, что более интересно для последующего обсуждения.
– Получить первые 3 записи для каждой из вновь созданных таблиц ГДЕ Exp_TECH_ID IN (ВЫБЕРИТЕ ТОП 3 Exp_TECH_ID ИЗ testExpert.dbo.experttech)
ВЫБЕРИТЕ * ИЗ testExpert.dbo.technology
ГДЕ Technology_ID В (ВЫБЕРИТЕ ТОП 3 Technology_ID ИЗ testExpert.