Синтаксис sql insert: INSERT | SQL | SQL-tutorial.ru
Содержание
Команда INSERT — вставка записей в базу данных
Команда INSERT вставляет записи в базу данных.
Можно вставить или одну запись, или сразу несколько.
См. также команды
SELECT,
UPDATE,
DELETE,
которые отвечают за получение, редактирование и удаление записей.
См. также команду
SELECT INTO,
которая копирует данные из одной таблицы в другую.
Синтаксис
Первый синтаксис:
INSERT INTO имя_таблицы SET поле1=значение1, поле2=значение2, поле3=значение3...
Второй синтаксис:
INSERT INTO имя_таблицы (поле1, поле2...) VALUES (значение1, значение2...)
Одновременно много записей:
INSERT INTO имя_таблицы (поле1, поле2...)
VALUES (значение1, значение2...), (значение1, значение2...)..."
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
Пример
Добавим с помощью первого синтаксиса
нового работника Васю с возрастом 23 и зарплатой 500:
INSERT INTO workers SET name='Вася', age=23, salary=500
Таблица workers станет выглядеть так:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
Пример
Добавим с помощью второго синтаксиса
нового работника Васю с возрастом 23 и зарплатой 500:
INSERT INTO workers (name, age, salary) VALUES ('Вася', 23, 500)
Таблица workers станет выглядеть так:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
Пример
Добавим одновременно
нового работника Васю с возрастом 23 и зарплатой 500
и работника Колю с возрастом 30 и зарплатой 1000:
INSERT INTO workers (name, age, salary) VALUES ('Вася', 23, 500), ('Коля', 30, 1000)
Таблица workers станет выглядеть так:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
Пример
Давайте добавим
нового работника Васю с возрастом 23, но не указав ему зарплату.
Вместо нее вставится значение по умолчанию:
INSERT INTO workers (name, age) VALUES ('Вася', 23)
Таблица workers станет выглядеть так:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 0 |
SQL INSERT INTO SELECT, заявление
С помощью SQL можно скопировать информацию из одной таблицы в другую.
INSERT INTO SELECT, заявление копирует данные из одной таблицы и вставляет его в существующую таблицу.
Заявление SQL INSERT INTO SELECT,
INSERT INTO SELECT, оператор выбирает данные из одной таблицы и вставляет его в существующую таблицу. Любые существующие строки в целевой таблице не изменяются.
SQL 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» таблицы:
SupplierID | Наименование поставщика | Контактное лицо | Адрес | город | Почтовый индекс | Страна | Телефон |
---|---|---|---|---|---|---|---|
1 | Экзотические Liquid | Шарлотта Купер | 49 Гилберта St. | Londona | EC1 4SD | Великобритания | (171) 555-2222 |
2 | Новый Орлеан Cajun наслаждений | Shelley Берк | PO Box 78934 | Жители Нового Орлеана | 70117 | США | (100) 555-4822 |
3 | Homestead Бабушка Келли | Regina Мерфи | 707 Oxford Rd. | Ann Arbor | 48104 | США | (313) 555-5735 |
SQL INSERT INTO SELECT, Примеры
Копирование только несколько столбцов из «Suppliers» Into «Customers» :
пример
INSERT INTO Customers (CustomerName, Country)
SELECT SupplierName, Country FROM Suppliers;
Попробуй сам »
Копирование только немецких поставщиков в «Customers» :
пример
INSERT INTO Customers (CustomerName, Country)
SELECT SupplierName, Country FROM Suppliers
WHERE Country=’Germany’;
Попробуй сам »
Insert into sql пример oracle
Итак, приступим к более детальному разбору операторов DML. Без применения этих операторов было бы вообще бессмысленна вся эта затея с серверами БД. Начать лучше всего с оператора DML – INSERT. Оператор INSERT, служит для заполнения таблиц БД данными и является достаточно простым в использовании. Давайте посмотрим, на синтаксис оператора INSERT:
Я думаю, понятно, что «таблица» – это имя таблицы, куда вводятся данные. «имя столбца» – это список столбцов, в которые вводятся данные. «Выражение» – это собственно сами данные. «Оператор выбора» – это предложение SELECT, для заполнения таблицы. Используется без части VALUES. Давайте удалим все таблицы, которые вы создавали в прошлый раз, так как сейчас мы будем рассматривать их новый вариант. Удалять таблицы вы уже умеете. Если вы не сделали этого в прошлый раз то просто введите:
Затем создаем таблицу PEOPLE с новыми параметрами:
Обратите внимание на поле ID таблицы PEOPLE! Оно имеет атрибут PRIMARY KEY, то есть является первичным ключом таблицы. В него можно записывать только отличные друг от друга значения. И это поле не принимает значения типа NULL! Теперь, применив оператор INSERT, согласно его синтаксического разбора введем в таблицу шесть значений:
В части INTO PEOPLE(ID, NM, FM, OT) оператора INSERT указаны поля в порядке ввода данных, если есть необходимость порядок следования полей можно изменить или вообще исключить некоторые из них. В части VALUES(6, ‘Avtomatov’, ‘Kolya’, ‘Pricelovich’) оператора INSERT указаны собственно данные для ввода. Вот так работает оператор INSERT.
Я думаю, ничего сложного в этом нет. В результате таблица PEOPLE получила шесть записей. А что, если у вас есть данные, которые быстро нужно загрузить не путая с тем, что уже было в таблице. Для этого можно применить оператор INSERT с выражением SELECT. Создадим промежуточную таблицу и перебросим содержимое основной в нее:
Получаем: SQL> CREATE TABLE OLD_PEOPLE 2 ( 3 ID NUMBER PRIMARY KEY, 4 NM VARCHAR2(50), 5 FM VARCHAR2(50), 6 OT VARCHAR2(50) 7 ) 8 / Таблица создана. SQL> COMMIT 2 / Фиксация обновлений завершена.
Теперь применяя INSERT с выражением, перегрузим данные в новую таблицу:
Теперь в обеих таблицах одинаковые данные. Вот таким образом можно, применяя оператор SELECT со всей его мощью, получать результаты разнообразных запросов. Но при этом количество, имена и типы данных обеих таблиц должны быть одинаковы. Например, таким оператором я часто пользуюсь при сливании таблиц телефонных номеров. Очень удобно. Таким образом, мы рассмотрели первый из трех основных операторов, DML – INSERT. Пока не удаляйте таблицы PEOPLE и OLD_PEOPLE, в следующем шаге они нам еще понадобятся. Пока можете поработать с тем материалом, который рассмотрели сейчас.
Инструкция SQL INSERT INTO и INSERT SELECT используются для вставки новых строк в таблицу. Существует два способа использования инструкций:
- Только значения : Первый метод предусматривает указание только значений данных, которые нужно вставить без имен столбцов.
- Имена столбцов и значения : При втором методе указываются имена столбцов и значения строк для вставки:
Запросы :
Способ 1 ( вставка только значений ):
После использования 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 ( вставка значений только в указанные столбцы ):
Таблица 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 .
Использование SELECT в инструкции INSERT INTO
Можно использовать инструкцию MySQL INSERT SELECT для копирования строк из одной таблицы и их вставки в другую.
Использование этого оператора аналогично использованию INSERT INTO . Разница в том, что оператор SELECT применяется для выборки данных из другой таблицы. Ниже приведены различные способы использования INSERT INTO SELECT :
- Вставка всех столбцов таблицы : можно скопировать все данные таблицы и вставить их в другую таблицу.
Мы использовали инструкцию SELECT для копирования данных из одной таблицы и инструкцию INSERT INTO для их вставки в другую.
- Вставка отдельных столбцов таблицы . Можно скопировать только те столбцы таблицы, которые необходимо вставить в другую таблицу.
Мы использовали инструкцию SELECT для копирования данных только из выбранных столбцов второй таблицы и инструкцию MySQL INSERT INTO SELECT для их вставки в первую таблицу.
- Копирование определенных строк из таблицы . Можно скопировать определенные строки из таблицы для последующей вставки в другую таблицу с помощью условия WHERE с оператором SELECT . В этом случае нужно использовать соответствующее условие в WHERE .
Таблица 2: LateralStudent
ROLL_NO | NAME | ADDRESS | PHONE | Age |
7 | SOUVIK | DUMDUM | 9876543210 | 18 |
8 | NIRAJ | NOIDA | 9786543210 | 19 |
9 | SOMESH | ROHTAK | 9687543210 | 20 |
Способ 1 ( вставка всех строк и столбцов ):
Этот запрос вставит все данные таблицы 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 ( вставка отдельных столбцов ):
Этот запрос вставит данные из столбцов 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 таблица будет выглядеть следующим образом:
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 |
Данная публикация представляет собой перевод статьи « SQL INSERT INTO Statement » , подготовленной дружной командой проекта Интернет-технологии.ру
Оператор INSERT вставляет новые записи в таблицу. При этом значения столбцов могут представлять собой литеральные константы, либо являться результатом выполнения подзапроса. В первом случае для вставки каждой строки используется отдельный оператор INSERT ; во втором случае будет вставлено столько строк, сколько возвращается подзапросом.
Синтаксис оператора следующий:
Как видно из представленного синтаксиса, список столбцов не является обязательным (об этом говорят квадратные скобки в описании синтаксиса). В том случае, если он отсутствует, список вставляемых значений должен быть полный, то есть обеспечивать значения для всех столбцов таблицы. При этом порядок значений должен соответствовать порядку, заданному оператором CREATE TABLE для таблицы, в которую вставляются строки. Кроме того, эти значения должны относиться к тому же типу данных, что и столбцы, в которые они вносятся. В качестве примера рассмотрим вставку строки в таблицу Product, созданную следующим оператором CREATE TABLE :
Пусть требуется добавить в эту таблицу модель ПК 1157 производителя B. Это можно сделать следующим оператором:
Если задать список столбцов, то можно изменить «естественный» порядок их следования:
Казалось бы, это совершенно излишняя возможность, которая делает конструкцию только более громоздкой. Однако она становится выигрышной, если столбцы имеют значения по умолчанию. Рассмотрим следующую структуру таблицы:
Отметим, что здесь значения всех столбцов имеют значения по умолчанию (первые два — NULL, а последний столбец — type — PC). Теперь мы могли бы написать:
В этом случае отсутствующее значение при вставке строки будет заменено значением по умолчанию — PC. Заметим, что если для столбца в операторе CREATE TABLE не указано значение по умолчанию и не указано ограничение NOT NULL , запрещающее использование NULL в данном столбце таблицы, то подразумевается значение по умолчанию NULL .
Возникает вопрос: а можно ли не указывать список столбцов и, тем не менее, воспользоваться значениями по умолчанию? Ответ положительный. Для этого нужно вместо явного указания значения использовать зарезервированное слово DEFAULT :
Поскольку все столбцы имеют значения по умолчанию, для вставки строки со значениями по умолчанию можно было бы написать:
Однако для этого случая предназначена специальная конструкция DEFAULT VALUES (см. синтаксис оператора), с помощью которой вышеприведенный оператор можно переписать в виде
Заметим, что при вставке строки в таблицу проверяются все ограничения, наложенные на данную таблицу. Это могут быть ограничения первичного ключа или уникального индекса, проверочные ограничения типа CHECK , ограничения ссылочной целостности. В случае нарушения какого-либо ограничения вставка строки будет отклонена. Рассмотрим теперь случай использования подзапроса. Пусть нам требуется вставить в таблицу Product_D все строки из таблицы Product, относящиеся к моделям персональных компьютеров (type = ‘PC’). Поскольку необходимые нам значения уже имеются в некоторой таблице, то формирование вставляемых строк вручную, во-первых, является неэффективным, а, во-вторых, может допускать ошибки ввода. Использование подзапроса решает эти проблемы:
Использование в подзапросе символа «*» является в данном случае оправданным, так как порядок следования столбцов является одинаковым для обеих таблиц. Если бы это было не так, следовало бы применить список столбцов либо в операторе INSERT , либо в подзапросе, либо в обоих местах, который приводил бы в соответствие порядок следования столбцов:
Здесь, также как и ранее, можно указывать не все столбцы, если требуется использовать имеющиеся значения по умолчанию, например:
В данном случае в столбец type таблицы Product_D будет подставлено значение по умолчанию PC для всех вставляемых строк.
Отметим, что при использовании подзапроса, содержащего предикат, будут вставлены только те строки, для которых значение предиката равно TRUE (не UNKNOWN !). Другими словами, если бы столбец type в таблице Product допускал бы NULL -значение, и это значение присутствовало бы в ряде строк, то эти строки не были бы вставлены в таблицу Product_D.
Преодолеть ограничение на вставку одной строки в операторе INSERT при использовании конструктора строки в предложении VALUES позволяет искусственный прием использования подзапроса, формирующего строку с предложением UNION ALL . Так если нам требуется вставить несколько строк при помощи одного оператора INSERT , можно написать:
Использование UNION ALL предпочтительней UNION даже, если гарантировано отсутствие строк-дубликатов, так как в этом случае не будет выполняться проверка для исключения дубликатов.
Следует отметить, что вставка нескольких кортежей с помощью конструктора строк уже реализована в Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server 2008. С учетом этой возможности, последний запрос можно переписать в виде:
Заметим, что MySQL допускает еще одну нестандартную синтаксическую конструкцию, выполняющую вставку строки в таблицу в стиле оператора UPDATE:
Рассмотренный в начале параграфа пример с помощью этого оператора можно переписать так:
Вставить в… значения (ВЫБРАТЬ… ОТ…)
Оба ответа, которые я вижу, отлично работают в Informix, и в основном это стандартный SQL. То есть обозначение:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
отлично работает с Informix и, как я ожидал, со всеми СУБД. (Когда-то 5 или более лет назад, MySQL не всегда поддерживал такую ситуацию; теперь он имеет достойную поддержку для такого рода стандартного синтаксиса SQL и, AFAIK, будет работать нормально в этой записи.) Список столбцов является необязательным, но указывает целевые столбцы в последовательности, поэтому первый столбец результата SELECT перейдет в первый перечисленный столбец и т. д. При отсутствии списка столбцов первый столбец результата SELECT перейдет в первый столбец целевой таблицы.
Что может отличаться в разных системах, так это нотация, используемая для идентификации таблиц в разных базах данных — стандарт не имеет ничего общего с операциями между базами данных (не говоря уже о базах данных). С Informix вы можете использовать следующие обозначения для идентификации таблицы:
[dbase[@server]:][owner.]table
Таким образом, вы можете указать базу данных, опционально идентифицируя сервер, на котором размещена эта база данных, если его нет на текущем сервере, за которым следует необязательный владелец, точка и, наконец, фактическое имя таблицы. Стандарт SQL использует термин схема для того, что Informix называет владельцем. Таким образом, в Informix любая из следующих нотаций может идентифицировать таблицу:
table
"owner".table
dbase:table
dbase:owner.table
dbase@server:table
dbase@server:owner.table
Владелец вообще не должен быть указан; однако, если вы используете кавычки, вам нужно правильно написать имя владельца — оно становится чувствительным к регистру. Это:
someone.table
"someone".table
SOMEONE.table
все идентифицируют одну и ту же таблицу. С Informix есть небольшое осложнение с базами данных MODE ANSI, где имена владельцев обычно преобразуются в верхний регистр (informix является исключением). То есть в базе данных MODE ANSI (обычно не используется) вы можете написать:
CREATE TABLE someone.table ( ... )
и имя владельца в системном каталоге будет «НЕКОТОРЫЙ», а не «кто-то». Если вы заключаете имя владельца в двойные кавычки, оно действует как идентификатор с разделителями. В стандартном SQL идентификаторы с разделителями могут использоваться во многих местах. В Informix вы можете использовать их только вокруг имен владельцев — в других контекстах Informix обрабатывает как строки в одинарных кавычках, так и строки в двойных кавычках как строки, а не разделяет строки в одинарных кавычках как строки, а строки в двойных кавычках — как идентификаторы с разделителями. (Конечно, просто для полноты есть переменная окружения DELIMIDENT, которую можно установить на любое значение, но Y безопаснее всего — указать, что двойные кавычки всегда окружают идентификаторы с разделителями, а одинарные кавычки всегда окружают строки.)
Обратите внимание, что MS SQL Server удается использовать [идентификаторы с разделителями], заключенные в квадратные скобки. Это выглядит странно для меня, и, конечно, не является частью стандарта SQL.
Инструкция INSERT INTO в Transact-SQL – несколько способов добавления данных в таблицу | Info-Comp.ru
Всем привет! В данной статье речь пойдет о том, как можно добавлять данные в таблицу в Microsoft SQL Server, если Вы уже хоть немного знакомы с языком T-SQL, то наверно поняли, что сейчас мы будем разговаривать об инструкции INSERT, а также о том, как ее можно использовать для добавления данных в таблицу.
Начнем по традиции с небольшой теории.
Инструкция 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, поэтому если Вам что-то непонятно, рекомендую ознакомиться со следующими материалами:
Пример 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, а у меня все, пока!
Нравится7Не нравится
Insert into where sql пример
Инструкция SQL INSERT INTO и INSERT SELECT используются для вставки новых строк в таблицу. Существует два способа использования инструкций:
- Только значения : Первый метод предусматривает указание только значений данных, которые нужно вставить без имен столбцов.
- Имена столбцов и значения : При втором методе указываются имена столбцов и значения строк для вставки:
Запросы :
Способ 1 ( вставка только значений ):
После использования 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 ( вставка значений только в указанные столбцы ):
Таблица 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 .
Использование SELECT в инструкции INSERT INTO
Можно использовать инструкцию MySQL INSERT SELECT для копирования строк из одной таблицы и их вставки в другую.
Использование этого оператора аналогично использованию INSERT INTO . Разница в том, что оператор SELECT применяется для выборки данных из другой таблицы. Ниже приведены различные способы использования INSERT INTO SELECT :
- Вставка всех столбцов таблицы : можно скопировать все данные таблицы и вставить их в другую таблицу.
Мы использовали инструкцию SELECT для копирования данных из одной таблицы и инструкцию INSERT INTO для их вставки в другую.
- Вставка отдельных столбцов таблицы . Можно скопировать только те столбцы таблицы, которые необходимо вставить в другую таблицу.
Мы использовали инструкцию SELECT для копирования данных только из выбранных столбцов второй таблицы и инструкцию MySQL INSERT INTO SELECT для их вставки в первую таблицу.
- Копирование определенных строк из таблицы . Можно скопировать определенные строки из таблицы для последующей вставки в другую таблицу с помощью условия WHERE с оператором SELECT . В этом случае нужно использовать соответствующее условие в WHERE .
Таблица 2: LateralStudent
ROLL_NO | NAME | ADDRESS | PHONE | Age |
7 | SOUVIK | DUMDUM | 9876543210 | 18 |
8 | NIRAJ | NOIDA | 9786543210 | 19 |
9 | SOMESH | ROHTAK | 9687543210 | 20 |
Способ 1 ( вставка всех строк и столбцов ):
Этот запрос вставит все данные таблицы 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 ( вставка отдельных столбцов ):
Этот запрос вставит данные из столбцов 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 таблица будет выглядеть следующим образом:
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 |
Данная публикация представляет собой перевод статьи « SQL INSERT INTO Statement » , подготовленной дружной командой проекта Интернет-технологии.ру
Всем привет! В данной статье речь пойдет о том, как можно добавлять данные в таблицу в Microsoft SQL Server, если Вы уже хоть немного знакомы с языком T-SQL, то наверно поняли, что сейчас мы будем разговаривать об инструкции INSERT, а также о том, как ее можно использовать для добавления данных в таблицу.
Начнем по традиции с небольшой теории.
Инструкция INSERT в T-SQL
INSERT – это инструкция языка T-SQL, которая предназначена для добавления данных в таблицу, т.е. создания новых записей. Данную инструкцию можно использовать как для добавления одной строки в таблицу, так и для массовой вставки данных. Для выполнения инструкции INSERT требуется разрешение на вставку данных (INSERT) в целевую таблицу.
Существует несколько способов использования инструкции INSERT в части данных, которые необходимо вставить:
- Перечисление конкретных значений для вставки;
- Указание набора данных в виде запроса SELECT;
- Указание набора данных в виде вызова процедуры, которая возвращает табличные данные.
Упрощённый синтаксис
- INSERT INTO – это команда добавления данных в таблицу;
- Таблица – это имя целевой таблицы, в которую необходимо вставить новые записи;
- Список столбцов – это перечень имен столбцов таблицы, в которую будут вставлены данные, разделенные запятыми;
- VALUES – это конструктор табличных значений, с помощью которого мы указываем значения, которые будем вставлять в таблицу;
- Список значений – это значения, которые будут вставлены, разделенные запятыми. Они перечисляются в том порядке, в котором указаны столбцы в списке столбцов;
- SELECT – это запрос на выборку данных для вставки в таблицу. Результирующий набор данных, который вернет запрос, должен соответствовать списку столбцов;
- EXECUTE – это вызов процедуры на получение данных для вставки в таблицу. Результирующий набор данных, который вернет хранимая процедура, должен соответствовать списку столбцов.
Вот примерно так и выглядит упрощённый синтаксис инструкции INSERT INTO, в большинстве случаев именно так Вы и будете добавлять новые записи в таблицы.
Список столбцов, в которые Вы будете вставлять данные, можно и не писать, в таком случае их порядок будет определен на основе фактического порядка столбцов в таблице. При этом необходимо помнить этот порядок, когда Вы будете указывать значения для вставки или писать запрос на выборку. Лично я Вам рекомендую все-таки указывать список столбцов, в которые Вы планируете добавлять данные.
Также следует помнить и то, что в списке столбцов и в списке значений, соответственно, должны присутствовать так называемые обязательные столбцы, это те, которые не могут содержать значение NULL. Если их не указать, и при этом у столбца отсутствует значение по умолчанию, будет ошибка.
Еще хотелось бы отметить, что тип данных значений, которые Вы будете вставлять, должен соответствовать типу данных столбца, в который будет вставлено это значение, ну или, хотя бы, поддерживал неявное преобразование. Но я Вам советую контролировать тип данных (формат) значений, как в списке значений, так и в запросе SELECT.
Хватит теории, переходим к практике.
Исходные данные
Для того чтобы добавлять данные в таблицу, нам нужна соответственно сама таблица, давайте ее создадим, и уже в нее будем пробовать добавлять записи.
Примечание! Все примеры будут выполнены в Microsoft SQL Server 2016 Express.
Наша тестовая таблица, будет содержать перечень товаров с ценой.
Также в примерах мы будем использовать процедуру, которая возвращает табличное значение, для добавления данных в таблицу, поэтому давайте ее тоже создадим.
Для примера она у нас будет возвращать данные из только что созданной таблицы TestTable.
Примечание!
Как Вы понимаете, чтение данного материала подразумевает наличные определенных знаний по языку T-SQL, поэтому если Вам что-то непонятно, рекомендую ознакомиться со следующими материалами:
Пример 1 – Добавляем новую запись в таблицу с использованием конструктора табличных значений
Сначала давайте попробуем добавить одну запись и сразу посмотрим на результат, т.е. напишем запрос на выборку.
Вы видите, что мы после названия таблицы перечислили через запятую имена столбцов, в которые мы будем добавлять данные, затем мы указали ключевое слово VALUES и в скобочках также, в том же порядке, через запятую написали значения, которые мы хотим вставить.
После инструкции INSERT я написал инструкцию SELECT и разделил их командой GO.
А теперь давайте представим, что нам нужно добавить несколько строк. Мы для этого напишем следующий запрос.
В данном случае мы добавили три записи, т.е. три строки. После VALUES значения каждой новой строки указаны в скобочках, разделили мы их запятыми.
Пример 2 – Добавляем новые строки в таблицу с использованием запроса SELECT
Очень часто возникает необходимость добавлять много данных в таблицу, например, на основе запроса на выборку, т.е. SELECT. Для этого вместо VALUES нам всего лишь нужно указать запрос.
В данном примере мы написали запрос SELECT, который возвращает данные из таблицы TestTable, но не все, а только те, у которых идентификатор больше 2. А результат вставили все в ту же таблицу TestTable.
В качестве примера того, как можно добавлять записи в таблицу без указания списка столбцов, давайте напишем еще один запрос на вставку данных, который сделает равно то же самое что и запрос выше, только в нем не будет перечисления столбцов для вставки.
В данном случае мы уверены в том, что в таблице TestTable первый столбец это ProductName, а второй Price, поэтому мы можем позволить себе написать именно так. Но, снова повторюсь, на практике лучше указывать список столбцов.
Если Вы заметили, я во всех примерах не указывал столбец Id, а он у нас есть, ошибки не возникло, так как данный столбец со свойством IDENTITY, он автоматически генерирует идентификаторы, поэтому в такой столбец вставить данные просто не получится.
Пример 3 – Добавляем новые записи в таблицу с использованием хранимой процедуры
Сейчас давайте вставим в таблицу данные, которые нам вернёт хранимая процедура. Смысл здесь такой же, вместо VALUES и вместо запроса мы указываем вызов процедуры. Но как Вы понимаете, порядок и количество столбцов, возвращаемых процедурой, должен строго совпадать со списком столбцов для вставки (даже если список столбцов не указан).
Надеюсь, данный материал помог Вам разобраться с инструкцией INSERT INTO, а у меня все, пока!
Главное меню » Базы данных » База данных MySQL » 12 основных примеров команды INSERT в MySQL
В этом руководстве объясняется, как использовать команду INSERT в MySQL и несколько практических и полезных примеров.
Рассматриваются в данном руководстве следующие примеры:
- Основные примеры команды Insert
- Вставьте значения только для выбранных столбцов
- Пример INSERT с SET
- Вставка записей на основе строк из другой таблицы
- Вставка значений выбранных столбцов из другой таблицы
- Вставить записи в определенный раздел
- Вставка записи в несколько разделов в таблице
- Игнорировать сообщение об ошибке во время ввода текста
- Значения по умолчанию в Insert
- Экспрессия в вставки значений
- Сделайте приоритет команды Insert ниже или выше
- При найденном дубликате, обновить значение столбца
В следующем примере мы подключимся к базу данных andreyexbase с именем пользователя devuser и паролем mysecretpwd
Для этого урока мы вставим значения в таблице сотрудников. Это структура таблицы сотрудников.
Если вы новичок в MySQL, используйте это Как создать MySQL базу данных и таблицу, чтобы начать работу.
1. Основные примеры команды Insert
Следующая команда вставит три новых записей в таблице сотрудников. В этом примере, после “values”, укажет значения для всех столбцов в таблице.
С помощью команды SELECT в MySQL, убедитесь, что записи был успешно установлены.
2. Вставьте значения только для выбранных столбцов
Если вы хотите, вставить значения только выбранных столбцов, следует указать имена столбцов в команде вставки.
Ниже будет вставлены две записи только для столбцов идентификатора и имени.
Для “отдела” и столбца “зарплаты”, мы не указали никаких значений для этой конкретной записи. Таким образом, мы будем видеть NULL в качестве значения в нашем выводе команды SELECT. Обратите внимание, что это не строка “NULL”, именно значение столбца в строке действительно нулевая.
3. Пример INSERT с SET
Вместо того чтобы использовать ключевого слова “values” в вашей команде выбора, вы можете также использовать ключевое слово “set” в вашей команде выбора, как показано ниже.
Следующая команда вставки точно так же, как и в предыдущем примере. Но, вместо значения, использует набор.
4. Вставка записей на основе строк из другой таблицы
В этом примере мы будем использовать INSERT … SELECT метод, который будет выбирать строки из другой таблицы, и вставлять его в нашу таблицу.
В следующем примере будет принимать все записи из таблицы подрядчика и вставить его в таблицу сотрудников.
Вы можете также использовать различные условия в “where” выберите команду, чтобы выбрать записи из таблицы подрядной и вставить в таблицу служащих, как показано ниже.
Примечание: Если вы привыкли к базе данных Oracle, вы будете использовать “insert into worker AS select * from contractor”. Обратите внимание, что MySQL не использует ключевого слова “AS” в данном контексте.
5. Вставка значений выбранных столбцов из другой таблицы
Кроме того, можно выбрать только выбранные значения столбцов строк из другой таблицы и вставить его в таблицу.
В следующем примере будет принимать значения “ID” и “name” для всех строк в таблице подрядчика и вставлять его в таблицу сотрудников.
Так же, как и в предыдущем примере, вы можете также использовать, когда есть условие и ограничение на записи.
Обратите внимание, что если запись уже существует для первичного ключа (что идентификатор) в таблице сотрудников, вы получите следующее сообщение об ошибке. Следующее сообщение об ошибке указывает на то, что идентификационный номер сотрудника “100” уже существует в таблице сотрудников.
6. Вставить записи в определенный раздел
Если вы создали таблицу, используя раздел по диапазону, то вы можете указать раздел в вашей команде вставки, как показано ниже.
В следующем примере будет вставлять записи в таблицу служащих в разделе p1
Обратите внимание, что строка уже существует в данном конкретном разделе. Например, в данном примере p1, вы получите следующее сообщение об ошибке:
Примечание: Эта функция будет работать только на MySQL 5.6 и выше.
7. Вставка записи в несколько разделов в таблице
Вы также можете вставлять записи на несколько разделов с помощью одного оператора вставки.
Следующий оператор вставки вставляет запись с идентификатором “100” в разделе p1, и запись с идентификатором “200” в разделе p2.
Обратите внимание, что в приведенном выше примере, если по каким-либо причинам MySQL не может вставить одну из записей в раздел, весь оператор вставки не получится, и обе записи не будут вставлены.
Опять же, это будет работать только на MySQL 5.6 и выше.
8. Игнорировать сообщение об ошибке во время ввода текста
Если по какой-то причине вы хотите проигнорировать сообщение об ошибке MySQL во время вставки, вы можете использовать игнорирование вставки.
Например, следующая команда выдаст сообщение об ошибке, так как запись уже существует в таблице.
Чтобы проигнорировать выше сообщение об ошибке, вы можете использовать “insert ignore” (вместо того, чтобы просто вставить), как показано ниже. Обратите внимание, что это еще не вставит запись в таблицу, поскольку есть primary key в идентификаторе столбца. Но, это просто игнорирует сообщение об ошибке.
9. Значения по умолчанию в Insert
Если MySQL работает в строгом режиме, и когда мы не указываем значения по умолчанию, он выдаст сообщение об ошибке.
Однако, если строгий режим не включен (который по умолчанию), и когда вы делаете команду вставки и не указываете значение столбца, он будет использовать значение по умолчанию для этого конкретного типа данных столбца.
Например, в бонусной таблице, оба значения столбца установлены в положение “not null”.
Давайте вставим запись в эту таблицу для столбца идентификаторов.
Когда вы выполните команду select, вы заметите, что колонка “сумма” автоматически устанавливается неявной значением 0 по умолчанию.
Если вы не указываете как для идентификатора и суммы, будет установлено на 0 автоматически, как показано ниже. Если значения не заданы, то MySQL будет использовать значения по умолчанию.
Примечание: Вы можете также использовать ключевое слово “DEFAULT” в значениях, как показано ниже, что позволит достичь выхода, как описано выше.
Для строки столбца, значение по умолчанию пустая строка. Кроме того, обратите внимание, что, когда числовой столбец имеет множество AUTO_INCREMENT, то значение по умолчанию будет следующее значение соответствующей последовательности.
10. Экспрессия в вставки значений
В следующем примере для значения бонуса, мы определили “5000 + идентификатор” в качестве значения. Таким образом, это добавит значение идентификатор служащего к значению бонуса и вставит окончательное значение в колонке бонуса, как показано ниже.
Вы можете использовать “+”, “-“, “*”, или любой другой действующий оператор выражения MySQL в значениях. В следующем примере, он использует “50 * 2” для столбца идентификаторов. Таким образом, идентификатор, который будет вставлен в “100”
Вы можете также обратиться к значениям других столбцов. В следующем примере, он использует “5000 + id” для бонусного столбца. Таким образом, это будет иметь значение столбца идентификаторов (который является 100), и добавить его к 5000. Таким образом, окончательное значение бонуса “5100”, как показано ниже.
11. Сделайте приоритет команды Insert ниже или выше
Для движка, которая поддерживает блокировку таблицы (например, MyISAM), вы можете указать приоритет вашей вставки.
Например, эта команда Insert будет задерживать вставку (сделать его низкий приоритет) до тех пор, никто ни кто не будет читать таблицу.
Можно также указать высокий приоритет, как показано ниже, который будет вести себя противоположно низким приоритетом вставки.
Пожалуйста, имейте в виду, что если ваша база данных интенсивно считывается и если вы укажете LOW_PRIORITY в команде Insert, то ваша вставка может длится в течение очень долгого времени.
Кроме того, обратите внимание, что это немного отличается от “INSERT … DELAYED”, который является устаревшим, начиная с MySQL 5.6.6. Таким образом, не следует больше использовать “insert … delayed”.
12. При найденном дубликате, обновить значение столбца
Во время вставки, если есть дубликат ключа, она не будет выполнена, как показано ниже, в качестве идентификатора “100” уже существует в таблице.
Тем не менее, вы можете сделать некоторые обновления для этой конкретной записи (если дубликат обнаружен) с помощью “ON DUPLICATE KEY UPDATE”, как показано ниже.
Как показано в следующем примере, когда вставка не удалось (из-за дубликата ключа), мы обновляем столбец заработной платы путем добавления 500 к его стоимости.
Обратите внимание, что в приведенном выше примере, при вставке, даже если обновляется только одна запись, то выход будет такой: “2 rows affected”.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Рекомендуем к прочтению
Заявление SQL INSERT INTO SELECT,
С помощью SQL, вы можете копировать информацию из одной таблицы в другую.
INSERT INTO ЗЕЬЕСТ, чтобы скопировать данные из таблицы, а затем вставить данные в существующую таблицу.
Заявление SQL INSERT INTO SELECT,
INSERT INTO ЗЕЬЕСТ, чтобы скопировать данные из таблицы, а затем вставить данные в существующую таблицу. Целевая таблица все строки, которые уже существуют, не затрагиваются.
Синтаксис SQL INSERT INTO SELECT,
Мы можем повторить все столбцы из таблицы в другую существующую таблицу:
INSERT INTO table2
SELECT * FROM table1;
Или же мы можем просто скопировать нужные столбцы в другую существующую таблицу:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
Демонстрационная база данных
В этом уроке мы будем использовать w3big образец базы данных.
Ниже приводится выбранные «сайты» таблица данных:
+----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | 本教程 | http://www.w3big.com/ | 4689 | CN | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+
Вот «приложения» Данные APP:
mysql> SELECT * FROM apps; +----+------------+-------------------------+---------+ | id | app_name | url | country | +----+------------+-------------------------+---------+ | 1 | QQ APP | http://im.qq.com/ | CN | | 2 | 微博 APP | http://weibo.com/ | CN | | 3 | 淘宝 APP | https://www.taobao.com/ | CN | +----+------------+-------------------------+---------+ 3 rows in set (0.00 sec)
SQL INSERT INTO SELECT, Примеры
Копирование данных «приложения» вставляются в «сайты» в:
примеров
INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps;
QQ только комплекс APP на «Сайты» в:
примеров
INSERT INTO Websites (name, country)
SELECT app_name, country FROM p
WHERE id=1;
SQL INSERT — Dofactory
Заявление SQL INSERT
Оператор INSERT добавляет в таблицу новую строку .
INSERT может содержать значения для некоторых или всех своих столбцов.
INSERT можно комбинировать с SELECT для вставки записей.
Проблема: Добавить нового поставщика в базу данных.
скопировано в буфер обмена
INSERT INTO Поставщик (CompanyName, ContactName, Город, Страна, Телефон) ЦЕННОСТИ (Broodjes Huis, Henk de Groot, 'Амстердам', 'Нидерланды', '31-1-382-8847 ')
INSERT INTO поставщик (CompanyName, ContactName,
Город, Страна, Телефон)
ЦЕННОСТИ (Broodjes Huis, Henk de Groot,
'Амстердам', 'Нидерланды', '31-1-382-8847 ')
Попробуйте вживую
INSERT синтаксис.
INSERT INTO имя-таблицы (имена столбцов) ЗНАЧЕНИЯ (значения)
INSERT с синтаксисом SELECT.
INSERT INTO имя-таблицы (имена столбцов) ВЫБЕРИТЕ имена столбцов ОТ имя-таблицы ГДЕ условие
SQL INSERT
КЛИЕНТ |
---|
Идентификатор |
Имя |
Фамилия |
Город |
Страна |
Телефон |
Задача : Добавить нового клиента Крейга Смита в базу данных.
скопировано в буфер обмена
ВСТАВИТЬ клиента (имя, фамилия, город, страна, телефон) ЦЕННОСТИ («Крейг», «Смит», «Нью-Йорк», «США», «1-01-993 7800»)
ВСТАВИТЬ клиента (имя, фамилия, город, страна, телефон)
ЦЕННОСТИ («Крейг», «Смит», «Нью-Йорк», «США», «1-01-993 7800»)
Попробуйте вживую
Результат: Добавлена 1 запись
SQL INSERT SELECT
ПОСТАВЩИК |
---|
Идентификатор |
Название компании |
Контактное имя |
Город |
Страна |
Телефон |
Факс |
КЛИЕНТ |
---|
Id |
Имя |
Фамилия |
Город |
Страна |
Телефон |
Проблема : Поставщик пивоварни Bigfoot
также стать клиентом.Добавить покупателя
запись со значениями из таблицы поставщиков.
скопировано в буфер обмена
ВСТАВИТЬ клиента (имя, фамилия, город, страна, телефон) ВЫБРАТЬ ВЛЕВО (ContactName, CHARINDEX ('', ContactName) - 1), ПОДСТРОКА (ContactName, CHARINDEX ('', ContactName) + 1, 100), Город, Страна, Телефон ОТ поставщика ГДЕ CompanyName = 'Bigfoot Breweries'
ВСТАВИТЬ клиента (имя, фамилия, город, страна, телефон)
ВЫБРАТЬ ВЛЕВО (ContactName, CHARINDEX ('', ContactName) - 1),
ПОДСТРОКА (ContactName, CHARINDEX ('', ContactName) + 1, 100),
Город, Страна, Телефон
ОТ поставщика
ГДЕ CompanyName = 'Bigfoot Breweries'
Попробуйте вживую
Примечание : ContactName разбирается на FirstName и LastName.
Разбор осуществляется с помощью встроенных функций: LEFT, SUBSTRING и CHARINDEX.
Результат: Добавлена 1 запись
Лучший способ заполнения таблиц базы данных
Таблицы являются основой любой системы баз данных и могут хранить более 30 типов данных. Таблицы обеспечивают систематический способ хранения данных, чтобы ваша база данных была организована.Команда вставки SQL является неотъемлемой частью SQL, и если пользователи не выполнят ее должным образом, невозможно сохранить данные в таблицах базы данных.
Что такое вставка SQL?
Команда «INSERT INTO» является частью языка манипулирования данными (DML), подъязыка SQL, который позволяет изменять и извлекать информацию из объектов базы данных. Эта команда позволяет sus вставлять строки в таблицы.
С помощью этой команды вы можете вставить значения во все столбцы или выбранные столбцы таблицы.Эту вставку можно выполнить в существующую таблицу или таблицу, которую вы создаете с помощью команды «CREATE TABLE».
Давайте рассмотрим синтаксис команды вставки SQL.
Магистерская программа для бизнес-аналитиков
Получите знания в области инструментов бизнес-аналитикиПрограмма для изучения
Синтаксис команды SQL Insert INTO
У команды «INSERT INTO» два синтаксиса. Первый синтаксис выглядит следующим образом:
- Оператор INSERT INTO сообщает системе базы данных, что вы хотите вставить строки в таблицу, указанную в параметре table_name
- Укажите столбцы таблицы, значения которых вы хотите вставить в квадратные скобки.Используйте запятые для разделения столбцов
- Оператор «VALUES» сообщает системе базы данных, что значения, которые должны быть вставлены, указаны
- Затем соответствующие значения каждого столбца указываются в том же порядке, что и столбцы в скобках — с использованием запятых для разделения этих значений
Если вы хотите вставить значения во все столбцы таблицы, указывать столбцы в команде необязательно. Для этого можно использовать следующий синтаксис:
- Здесь важно убедиться, что все указанные значения находятся в правильном порядке, соответствующем их соответствующим столбцам в таблице
Вставляемые значения должны быть типами данных, соответствующими тем, которые были определены в соответствующих столбцах при создании таблицы.
Давайте попробуем заполнить всю таблицу, используя эти концепции.
Вставка значений во все столбцы таблицы
- Первое, что мы сделаем, это создадим нашу собственную таблицу с помощью команды «CREATE TABLE»
Мы создадим таблицу с именем «Сотрудник», используя следующий запрос:
Как видите, «EmployeeID» — это первичный ключ, а для «Name» определено NULL CONSTRAINT, поэтому ни один из этих атрибутов не может оставаться пустым во время вставки.Кроме того, «EmployeeID» не может иметь одно и то же значение для нескольких строк.
«Имя» и «Город» будут содержать типы данных символьной строки, поэтому во время вставки значения будут заключены в одиночные кавычки. В противном случае значения не будут приняты.
- Давайте вставим значения в нашу таблицу, используя следующий запрос:
Если какое-либо из правил не соблюдается, система отобразит сообщение об ошибке, объясняющее, в чем проблема. Например, если мы попытаемся вставить другую запись со столбцом «EmployeeID» как единое целое, это приведет к следующему:
- Давайте вставим больше действительных значений в нашу таблицу «Сотрудник»
- Чтобы увидеть нашу таблицу, мы будем использовать следующий запрос:
Это приведет к следующему:
Иногда у нас нет информации обо всех атрибутах, и мы хотим вставить значения только для нескольких столбцов.Посмотрим, как этого можно достичь.
Вставка значений в определенные столбцы
В нашей таблице «Сотрудник» EmployeeID является первичным ключом, а «Имя» имеет ОГРАНИЧЕНИЕ NULL, поэтому нам нужно ввести явные значения для каждой строки столбца. Столбцы «Город» и «Заработная плата» могут содержать значения NULL.
- Например, если у вас есть информация только об идентификаторе и имени конкретного сотрудника, вы можете использовать следующий запрос для вставки этих значений:
Если мы не вставляем точное значение для атрибута NULL CONSTRAINT, такого как «Имя», мы видим следующую ошибку:
Как показывает это сообщение об ошибке, мы должны ввести явные значения для каждой записи в этих столбцах с ограничениями.
- Давайте вставим дополнительные строки в нашу таблицу, используя следующий запрос:
- Чтобы увидеть таблицу, воспользуемся командой SELECT.
Если вы не вводите явное значение ни для одной из записей в столбце без ограничений, они будут представлены как значения NULL, поскольку значение по умолчанию для любого столбца без ограничений — «NULL».
Иногда требуется скопировать значения одной таблицы в другую.Посмотрим, как это можно сделать.
Заполнение таблицы с помощью другой таблицы
Вы можете заполнить таблицу, используя другую таблицу, с помощью команды «INSERT INTO SELECT». Синтаксис этой команды следующий:
INSERT INTO target_table (столбец_1, столбец_2, … столбец_n) ВЫБРАТЬ столбец_1, столбец_2, … столбец_n ИЗ исходной_таблицы ГДЕ [условие]; |
- Параметр destination_table указывает таблицу, в которую мы хотим вставить значения, а параметр source_table указывает таблицу, из которой вставляются значения
- Здесь нам нужно убедиться, что мы копируем только типы данных из столбцов, которые происходят из одной и той же исходной и целевой таблиц
- Столбцы, которые имеют ограничения первичного ключа или NOT NULL в исходной таблице, также должны присутствовать в целевой таблице и скопированы.
- Эта команда содержит необязательное предложение «WHERE».
Из исходной таблицы вы можете указать условие, в соответствии с которым должны быть выбраны строки, в параметре «условие» этого предложения.Если этого нет в запросе, все строки столбцов вставляются в целевую таблицу.
Например, если мы хотим вставить значения из нашей таблицы «Сотрудник» «в таблицу« Заработная плата », которая имеет только три столбца (идентификатор сотрудника, имя и зарплата), мы будем использовать следующий запрос:
Чтобы просмотреть нашу таблицу «Зарплата», воспользуемся командой SELECT следующим образом:
Это показывает, что все значения из указанных столбцов таблицы Employee были вставлены в таблицу Salary.
Вы также можете вставлять записи из всех столбцов таблицы в другую таблицу. Синтаксис этой команды следующий:
ВСТАВИТЬ В таблицу_ назначения ВЫБРАТЬ * ИЗ исходной_таблицы ГДЕ [условие]; |
Например, если мы продублируем нашу таблицу Employee и назовем ее «EmployeeCopy», и эта копия будет включать те же столбцы из оригинала, мы можем использовать следующий запрос для вставки значений всех столбцов из исходной таблицы в таблицу новая таблица :.
ВСТАВИТЬ В EmployeeCopy ВЫБРАТЬ * ОТ Сотрудника; |
Чтобы просмотреть нашу новую таблицу, мы воспользуемся командой SELECT.
Теперь, когда мы знаем различные способы вставки строк в таблицу, давайте посмотрим, как удалить эти строки.
Удаление строк из таблицы
Иногда нам нужно удалить некоторые (или все) строки из таблицы. Это можно сделать с помощью команды «УДАЛИТЬ», которая является частью языка управления данными.Синтаксис этой команды следующий:
УДАЛИТЬ ИЗ имя_таблицы ГДЕ [условие]; |
В этой команде используется предложение WHERE. Вы можете указать условие, согласно которому должны удаляться строки, в параметре «condition» этого предложения. Если этого нет в запросе, все строки таблицы будут удалены.
Например, если мы хотим удалить все записи о сотрудниках с зарплатой меньше или равной 25000 из нашей таблицы «Сотрудник», мы будем использовать следующий запрос:
Это приведет к следующей таблице:
Как видно, две строки были удалены.
Если мы хотим удалить все строки из таблицы, мы будем использовать следующий запрос:
Все строки из этой таблицы удаляются, но таблицу все еще можно использовать для вставки новых строк.
Получите опыт работы с новейшими инструментами и методами бизнес-аналитики с помощью магистерской программы Business Analyst. Запишитесь сейчас!
Следующие шаги
В заключение, крайне важно вставить в столбцы значения правильного типа, так как это данные, с которыми вы собираетесь работать.Любые ошибки при вставке потенциально могут привести к ошибкам.
Теперь, когда вы знаете, как заполнять таблицы, следующим шагом в вашем путешествии по SQL будет запрос данных для получения полезной информации. Если вам понравилась эта статья и вы хотите получить сертификат, ознакомьтесь с магистерской программой бизнес-аналитика Simplilearn, в которой подробно рассматривается SQL.
У вас есть к нам вопросы? Оставьте комментарий, и наши специалисты ответят на него за вас.
ВСТАВИТЬ | Databricks на AWS
Вставляет новые строки в таблицу.Вы указываете вставленные строки выражениями значений или результатом запроса.
Синтаксис
ВСТАВИТЬ В [ТАБЛИЦУ] идентификатор_таблицы [спецификация_раздела] [(список_столбцов)] {ЗНАЧЕНИЯ ({значение | NULL} [, ...]) [, (...)] | запрос }
Примечание
Когда вы вставляете INSERT INTO
, поддерживается соблюдение и развитие схемы дельта-таблицы. Если тип данных столбца не может быть безопасно приведен к типу данных дельта-таблицы, генерируется исключение времени выполнения. Если включено развитие схемы, новые столбцы могут существовать в качестве последних столбцов вашей схемы (или вложенных столбцов) для развития схемы.
Вставки динамических перегородок
В part_spec
значения столбца раздела являются необязательными. Когда спецификация раздела part_spec
предоставлена не полностью, такие вставки называются вставками динамических разделов или вставками нескольких разделов. Если значения не указаны, эти столбцы называются столбцами динамического раздела; в противном случае это столбцы статического раздела. Например, спецификация раздела (p1 = 3, p2, p3)
имеет столбец статического раздела ( p1
) и два столбца динамического раздела ( p2
и p3
).
В part_spec
ключи статических разделов должны стоять перед ключами динамических разделов. Это означает, что все столбцы раздела, имеющие постоянные значения, должны появляться перед другими столбцами раздела, которым не присвоено постоянное значение.
Значения разделов столбцов динамического раздела определяются во время выполнения. Столбцы динамического раздела должны быть указаны последними как в part_spec
, так и во входном наборе результатов (списков значений строк или запроса выбора).Они решаются по должности, а не по именам. Таким образом, заказы должны быть точно согласованы.
API-интерфейсы DataFrameWriter не имеют интерфейса для указания значений секций. Следовательно, API insertInto ()
всегда использует режим динамического разделения.
Важно
В режиме динамического раздела набор результатов ввода может привести к большому количеству динамических разделов и, таким образом, сгенерировать большое количество каталогов разделов.
ПЕРЕЗАПИСАТЬ
Значения для вставки.Может быть вставлено либо явно указанное значение, либо NULL.
Для разделения каждого значения в предложении необходимо использовать запятую. Для вставки нескольких строк можно указать несколько наборов значений.
Семантика различается в зависимости от типа целевой таблицы:
- Таблицы Hive SerDe:
INSERT OVERWRITE
не удаляет разделы заранее, а перезаписывает только те разделы, в которые во время выполнения записаны данные. Это соответствует семантике Apache Hive. Для таблиц Hive SerDe Spark SQL учитывает конфигурацию, связанную с Hive, включая куст.exec.dynamic.partition
иhive.exec.dynamic.partition.mode
. - Таблицы собственных источников данных:
INSERT OVERWRITE
сначала удаляет все разделы, соответствующие спецификации раздела (например, PARTITION (a = 1, b)), а затем вставляет все оставшиеся значения. Вы можете изменить поведение таблиц собственных источников данных, чтобы они соответствовали таблицам Hive SerDe, изменив конфигурацию сеансаspark.sql.sources.partitionOverwriteMode
наDYNAMIC
.Режим по умолчанию —STATIC
.
sql — Вставить в … значения (ВЫБРАТЬ … ИЗ …)
Оба ответа, которые я вижу, отлично работают в Informix и в основном представляют собой стандартный SQL. То есть обозначение:
INSERT INTO target_table [()] ВЫБРАТЬ ... ИЗ ...;
отлично работает с Informix и, как я ожидал, со всеми СУБД. (Когда-то 5 или более лет назад MySQL не всегда поддерживал подобные вещи; теперь он имеет достойную поддержку такого рода стандартного синтаксиса SQL, и, AFAIK, он будет нормально работать с этой нотацией.) Список столбцов является необязательным, но в нем последовательно указываются целевые столбцы, поэтому первый столбец результата SELECT перейдет в первый перечисленный столбец и т. Д. При отсутствии списка столбцов первый столбец результата SELECT переходит в первый столбец целевой таблицы.
Что может отличаться между системами, так это нотация, используемая для идентификации таблиц в разных базах данных — в стандарте ничего не говорится об операциях между базами данных (не говоря уже об операциях между СУБД).В Informix вы можете использовать следующую нотацию для обозначения таблицы:
[dbase [@server]:] [владелец] таблица
То есть вы можете указать базу данных, опционально указав сервер, на котором размещена эта база данных, если он не находится на текущем сервере, за которым следует необязательный владелец, точка и, наконец, фактическое имя таблицы. Стандарт SQL использует термин «схема» для обозначения того, что Informix называет владельцем. Таким образом, в Informix любую из следующих нотаций можно определить для таблицы:
стол
"владелец".стол
база данных: таблица
база данных: owner.table
база данных @ сервер: таблица
dbase @ server: owner.table
Собственник вообще не нуждается в цитировании; однако, если вы все же используете кавычки, вам нужно, чтобы имя владельца было написано правильно — оно становится чувствительным к регистру. То есть:
кто-то. Стол
"кто-то" .table
SOMEONE.table
идентифицируют одну и ту же таблицу. В Informix есть легкие сложности с базами данных MODE ANSI, где имена владельцев обычно переводятся в верхний регистр (за исключением informix).То есть в базе данных MODE ANSI (обычно не используется) вы можете написать:
СОЗДАТЬ ТАБЛИЦУ something.table (...)
, а имя владельца в системном каталоге будет «КТО-ТО», а не «кто-то». Если вы заключите имя владельца в двойные кавычки, оно действует как идентификатор с разделителями. В стандартном SQL идентификаторы с разделителями можно использовать во многих местах. В Informix вы можете использовать их только вокруг имен владельцев — в других контекстах Informix обрабатывает строки в одинарных и двойных кавычках как строки, а не разделяет строки в одинарных кавычках как строки и строки в двойных кавычках как идентификаторы с разделителями.(Конечно, для полноты картины существует переменная среды DELIMIDENT, которой можно присвоить любое значение, но Y является наиболее безопасным вариантом — чтобы указать, что двойные кавычки всегда окружают идентификаторы с разделителями, а одинарные кавычки всегда окружают строки.)
Обратите внимание, что MS SQL Server может использовать [идентификаторы с разделителями], заключенные в квадратные скобки. Мне это кажется странным и, конечно же, не является частью стандарта SQL.
вставить несколько строк в синтаксис таблицы sql
Узнайте, как вставлять данные в таблицу SQL ,
Мы можем вставить одну строку или несколько строк с помощью одного запроса, мы также можем вставить данные в таблицу sql из другой таблицы.
Перед написанием любого запроса на вставку помните о следующих моментах, чтобы избежать ошибок.
- Вставленные значения должны соответствовать типу данных этого столбца. Это означает, что если вы попытаетесь вставить строковое значение в столбец целочисленного типа, это приведет к ошибке.
- Длина вставленного значения больше, чем длина данных, указанная в этом столбце, предположим, что если вы попытаетесь вставить строку из 100 символов, а столбец принимает только 50 символов, запрос также выдаст ошибку.
- Если какой-либо столбец имеет отношения, определенные с другим столбцом таблицы, и это отношение не выполняется, то запрос на вставку также завершится ошибкой.
Вставка новой записи в таблицу sql
Вот пример синтаксиса запроса вставки в таблицу sql в базе данных ms sql.
ВСТАВИТЬ В имя таблицы (поле1, поле2, поле3, поле4) ЦЕННОСТИ (значение1, значение2, значение3, значение4)
При указании значений в запросе вставки, если тип значения — строка, вам необходимо передать значение в одинарной кавычке.
Вот практический пример того, как будет выглядеть ваш SQL-запрос.
ВСТАВИТЬ В [tbContactList] ( [полное имя] ,[Эл. адрес] , [Организация] ,[Адрес] ,[Город] , [lastNotified] ) ЦЕННОСТИ («Мистер Алекса» , 'alexa @ google.com ' , "Google INC" ,'СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ' , "Калькутта" , getdate () ) GO
Теперь, если вы заметили в приведенном выше запросе, для всех типов значений мы использовали одинарные кавычки, кроме типа даты
Вставить запрос с помощью оператора Select
Вы также можете написать запрос вставки , используя оператор выбора , этот тип оператора вставки очень полезен, когда вы хотите вытащить данные из одной таблицы в другую и сопоставить структуру таблицы, вы также можете вставлять данные из представления в таблицу, взгляните на пример ниже
Вставить в [dbo].[tbOldStudent] ВЫБЕРИТЕ [Имя] ,[Фамилия] ,[Эл. адрес] ,[Контактный телефон] , [DOB] ОТ [dbo]. [TbStudent]
Вставить причину сбоя запроса
Иногда вы можете столкнуться с ошибкой запроса вставки. Вот некоторые из причин, по которым нужно искать основную причину.
- Если тип данных столбца и тип данных значения не совпадают
- Если длина данных значения больше, чем указано в столбце
Если вы вставляете более одной таблицы, вам может потребоваться использовать транзакцию
Sql вставить синтаксис запроса нескольких строк
Вы можете вставить несколько записей в таблицу SQL с помощью одного оператора, этот метод будет очень полезен, когда вы хотите вставить основные данные или данные тестирования.
ВСТАВИТЬ В [dbo]. [TbSoldProduct] (ProductId, [ProductName], [UnitPrice], [SoldQuantity], [SDate]) ЦЕННОСТИ (1, 'Банан', 3,50,400, getdate ()), (2, 'Апельсин', 4,50,300, getdate ()), (3, 'яблоко', 5.20,200, getdate ()), (4, 'вишня', 1.20,900, getdate ()), (5, 'черника', 0,50,1500, getdate ()), (1, 'Банан', 2,50,900, DATEADD (месяц, -1, getdate ())), (2, 'Оранжевый', 4.10 400, DATEADD (месяц, -1, getdate ())), (3, 'яблоко', 5.10,700, DATEADD (месяц, -1, getdate ())), (4, 'вишня', 1.00,500, DATEADD (месяц; -1, getdate ())), (5, 'черника', 0,90,1400, DATEADD (месяц, -1, getdate ())), (1, 'Банан', 2.10,550, DATEADD (месяц, -2, getdate ())), (2, 'Апельсин', 3,50,700, DATEADD (месяц, -2, getdate ())), (3, 'яблоко', 4,75,500, DATEADD (месяц, -2, getdate ())), (4, 'вишня', 1.16,950, DATEADD (месяц, -2, getdate ())), (5, 'черника', 1.10,1200, DATEADD (месяц, -2, getdate ())),
Вы также должны прочитать следующий пост
ВСТАВИТЬ — SQL
ВСТАВИТЬ — SQL
— Выписки —
Общий синтаксис набора:
Синтаксис расширенного набора:
Этот документ охватывает следующие темы:
Объяснение символов, используемых на синтаксической диаграмме, см.
Синтаксис
Символы.
относится к функциональной группе:
Доступ к базе данных и
Обновление
См. Также следующие разделы в Руководстве по управлению базой данных .
Документация по системным интерфейсам :
Функция
Оператор SQL INSERT
используется для добавления одного или нескольких новых
строк в таблицу.
Описание синтаксиса
INTO имя-таблицы | Пункт INTO: В предложении См. Дополнительную информацию на |
---|---|
список столбцов | Список столбцов: Синтаксис: имя столбца ... В списке столбцов один или несколько Если указан список столбцов , Если список столбцов опущен, |
ЗНАЧЕНИЯ — пункт | Пункт о значениях: С предложением |
вставить-список-элементов | INSERT Однорядный: В insert-item-list вы можете указать Если не указан список столбцов , Значения, которые необходимо указать в См. Раздел Основные синтаксические элементы для Если было присвоено значение Пример — INSERT одиночная строка: ... ВСТАВИТЬ В SQL-ПЕРСОНАЛ (ИМЯ, ВОЗРАСТ) ЦЕННОСТИ ('АДКИНСОН'; 35) ... |
ПЕРЕХОД ПОЛЬЗОВАТЕЛЬСКАЯ ЦЕННОСТЬ | ПРЕИМУЩЕСТВО ПОЛЬЗОВАТЕЛЬСКОЙ ЗНАЧЕНИЯ Пункт: Этот пункт относится к SQL Extended Этот пункт приводит к тому, что значение, указанное в |
ЗНАЧЕНИЙ
Пункт
С предложением VALUES
вы вставляете одиночную строку
в стол.В зависимости от того, звездочка (*) или
список столбцов был указан,
ЗНАЧЕНИЯ Пункт
может принимать одну из следующих форм:
Предложение
VALUES с предшествующей звездочкой
Обозначение
Если указано обозначение звездочки, представление должно быть указано в .
пункт ЗНАЧЕНИЯ
. Со значениями полей этого представления новая строка
вставляется в указанную таблицу с использованием имен полей представления как
имена столбцов строки.
Пункт
VALUES с предшествующей
Список столбцов
[( список столбцов )] [ ПРЕИМУЩЕСТВЕННОЕ ЗНАЧЕНИЕ ПОЛЬЗОВАТЕЛЯ ]СПИСОК ЗНАЧЕНИЙ |
Если указан список столбцов , и представление
указанное в разделе ЗНАЧЕНИЯ
, количество позиций, указанных в
список столбцов должен соответствовать количеству полей, определенных в представлении
в СПИСКЕ ЗНАЧЕНИЙ .
Если не указан список столбцов , поля
определенные в представлении, вставляются в соответствии с неявным списком всех
столбцы в том порядке, в котором они существуют в указанной таблице.
СПИСОК ЗНАЧЕНИЙ
Общий синтаксис набора:
Синтаксис расширенного набора:
Описание синтаксиса:
ПРОСМОТР название просмотра | Со значениями полей этого представления новая строка вставлен в указанную таблицу с использованием имен полей представления в качестве столбца названия ряда. |
---|---|
вставить список позиций | INSERT Однорядный: В списке вставки элементов вы можете Если не указан список столбцов , Значения, которые необходимо указать в См. Раздел Основные синтаксические элементы для Если было присвоено значение Пример — INSERT одиночная строка: ... ВСТАВИТЬ В SQL-ПЕРСОНАЛ (ИМЯ, ВОЗРАСТ) ЦЕННОСТИ ('АДКИНСОН'; 35) ... |
Предложение FOR-n-ROWS | Необязательный пункт, см. Ниже. |
WITH_CTE общее-табличное-выражение | Этот пункт принадлежит SQL Это необязательное предложение позволяет определить таблицу результатов, которая может быть Для получения дополнительной информации см. SELECT — |
выражение выбора | ВСТАВИТЬ несколько строк: Этот пункт принадлежит SQL Используя выражение выбора , вы вставляете Для получения дополнительной информации см. Пример — ВСТАВИТЬ несколько строк: ... ВСТАВИТЬ В SQL-RETIREE (ИМЯ, ВОЗРАСТ, ПОЛ) ВЫБЕРИТЕ ФАМИЛИЯ, ВОЗРАСТ, ПОЛ ОТ SQL-СОТРУДНИКОВ ГДЕ ВОЗРАСТ> 60 ... Примечание: |
С RR / RS / CS | С условием уровня изоляции: Этот пункт принадлежит SQL Этот пункт допускает явную спецификацию изоляции |
QUERYNO_ целое число | QUERYNO Пункт: Этот пункт принадлежит SQL В этом пункте явно указывается номер, который будет использоваться в |
FOR-
n -ROWS-Clause
ДЛЯ | [:] _ переменная хоста | РЯД | ATOMIC | ||||||
целое | НЕ АТОМНЫЙ |
Этот раздел состоит из следующих подпунктов:
ДЛЯ [:]
переменная хоста / целое число
Статья ROWS
ДЛЯ | [:] _ переменная хоста | РЯД | ||
целое |
Спецификация этого пункта не является обязательной.Это должно быть только
указано, если
указана опция компилятора
DB2ARRY
и несколько строк должны быть вставлены из массивов, указанных в
insert-item-list из
ЦЕННОСТИ
Пункт.
Если указано, [:] _ переменная хоста / целое число
определяет количество строк, которые нужно вставить в таблицу DB2 из массивов
указанные в insert-item-list
ЗНАЧЕНИЯ Пункт , начиная с первого вхождения.
Целью данного пункта является повышение производительности программ.
вставка строк из массивов Natural в цикл. Используя это предложение, строки
содержащиеся в массивах могут быть вставлены одним оператором SQL.
См. Пример ниже.
См. Также
Естественный для
Часть DB2 в системе управления базами данных
Документация по интерфейсам .
ATOMIC Пункт
ATOMIC | ||||
НЕ АТОМНЫЙ |
Этот пункт определяет, должна ли вставка нескольких строк быть
обрабатывается DB2 как атомарная операция или нет.
Указывается только в том случае, если
указана опция компилятора DB2ARRY
и несколько строк должны быть вставлены из массивов, указанных в
insert-item-list из
ЦЕННОСТИ
Пункт.
Описание синтаксиса:
ATOMIC | Указывает, что в случае любой ошибки ни одна строка не вставлен в целевую таблицу.Это значение по умолчанию. |
---|---|
НЕ АТОМНЫЙ ПРОДОЛЖИТЬ О SQLEXCEPTION | Указывает, что в случае ошибок все строки для которые не произошли ошибки, вставляются, а те строки, для которых произошли ошибки отбрасываются DB2. |
Для получения информации о кодах sql, возвращаемых в таких случаях, см. СПРАВОЧНИК по SQL DB2.
Пример
ОПРЕДЕЛЕНИЕ ЛОКАЛЬНЫХ ДАННЫХ 01 ИМЯ (A20 / 1: 10) INIT <'ZILLER1', 'ZILLER2', 'ZILLER3', 'ZILLER4' , 'ZILLER5', 'ZILLER6', 'ZILLER7', 'ZILLER8' , 'ZILLER9', 'ZILLERA'> 01 АДРЕС (A100 / 1: 10) INIT <'УЛИЦА АНГЕЛА 1', 'УЛИЦА АНГЕЛА 2' , 'УЛИЦА АНГЕЛА 3', 'УЛИЦА АНГЕЛА 4' , 'УЛИЦА АНГЕЛА 5', 'УЛИЦА АНГЕЛА 6' , 'УЛИЦА АНГЕЛА 7', 'УЛИЦА АНГЕЛА 8' , 'УЛИЦА АНГЕЛА 9', 'УЛИЦА АНГЕЛА 10'> 01 DATENATD (D / 1: 10) INIT01 ЗАРПЛАТА (P4.2/1: 10) INIT <1000,2000,3000,4000,5000 , 6000,7000,8000,9000,9999> 01 L§АДРЕС (I2 / 1: 10) INIT <14,14,14,14,14,14,14,14,14,15> 01 N§АДРЕС (I2 / 1: 10) INIT <00,00,00,00,00,00,00,00,00,00> 01 РЯД (I4) 01 ИНДЕКС (I4) 01 V1 ВИД НА NAT-DEMO_ID 02 НАЗВАНИЕ 02 АДРЕС (EM = X (20)) 02 ДАТА РОЖДЕНИЯ 02 ЗАРПЛАТА 01 ROWCOUNT (I4) КОНЕЦ-ОПРЕДЕЛЕНИЕ ОПЦИИ DB2ARRY = ON / * <- ВКЛЮЧИТЬ массив DB2 ROWCOUNT: = 10 ВСТАВИТЬ В NAT-DEMO_ID (ИМЯ, АДРЕС, ДАТА РОЖДЕНИЯ, ЗАРПЛАТА) ЦЕННОСТИ (: ИМЯ (*), / * <- МАССИВ : АДРЕС (*) / * <- МАССИВ ИНДИКАТОР: N§АДРЕС (*) / * <- МАССИВ ЛИНДИКАТОР: L§АДРЕС (*), / * <- ARRAY DB2 VCHAR : DATENATD (1:10), / * <- ARRAY NATURAL DATES : SALARY (01:10) / * <- ARRAY NATURAL PACKED ) ДЛЯ: ROWCOUNT ROWS ВЫБЕРИТЕ * В ПРОСМОТР V1 ОТ NAT-DEMO_ID, ГДЕ ИМЯ> 'Z' ДИСПЛЕЙ V1 / * <- ПРОВЕРЬТЕ ВСТАВКУ КОНЕЦ-ВЫБОР КОНЕЦ
SQL INSERT Инструкция более подробно
Теперь, когда вы установили MySQL, мы рассмотрим инструкцию SQL INSERT более подробно.
Создать запись
Давайте попрактикуемся во вставке нескольких записей в таблицу «Сотрудники». (Если вам интересно, в нашем руководстве «Что такое повторяющиеся записи в SQL» есть дополнительная информация о записях).
Мы можем извлечь 10 записей из таблицы «Сотрудники», чтобы увидеть, как там организована информация. Большой! Итак…
Мы получили 10 строк, каждая из которых содержала информацию в следующих столбцах: «номер сотрудника», «дата рождения», «имя» и «фамилия», «пол» и «дата найма».Всего шесть столбцов. Ok.
Давайте посмотрим, как мы создаем запись в таблице «Сотрудники».
После ключевой фразы INSERT INTO, мы должны указать имя таблицы, в которую мы хотим добавить информацию. Затем в круглых скобках мы должны указать имена столбцов, в которые будут вставлены данные.
Обратите внимание - имена всех шести столбцов использовать необязательно! Вы можете указать только те, в которые хотите вставить данные.
Следующее интуитивно понятно - ключевое слово VALUES , за которым следует такое же количество значений данных, как количество столбцов, указанное в скобках после оператора INSERT INTO . Обратите внимание, что значения данных также следует вводить в круглых скобках.
Вы уже знакомы с синтаксисом, который мы только что обсудили. Теперь давайте применим это на практике - мы создадим запись о человеке по имени Джон Смит.
Введите INSERT INTO «Сотрудники», а затем в скобках укажите столбцы, в которые мы хотим добавить информацию, разделяя их запятыми.Эти столбцы - «номер сотрудника», «дата рождения», «имя», «фамилия», «пол» и «дата приема на работу». Затем после ключевого слова VALUES, в круглых скобках введите значения данных, которые будут частью этих столбцов, снова разделяя их запятой.
Чтобы увидеть типы данных для значений, которые вы вставляете, вы должны проверить типы данных в полях этой таблицы. Вы можете сделать это, перейдя в раздел информации и посмотрев на типы данных на вкладке «Столбцы».
Номер сотрудника - целое число; тогда у вас есть два значения даты, два значения VARCHAR, и ENUM. Следовательно, при вставке новых записей все значения, кроме номера сотрудника, должны быть записаны в одинарные кавычки.
Давайте присвоим номер 9-9-9-9-0-1 и дату рождения 21 -й апреля 1986 года. Эта запись будет относиться к Джону Смиту, мужчине, который был нанят на 1 -й улице. от января 2011 г.
Чтобы зарегистрировать эту строку в таблице данных, нам нужно выполнить запрос INSERT.
Дополнительное примечание: Если вы хотите узнать, как включать подзапросы SQL в запросы, ознакомьтесь со связанным руководством.
Хорошо, мы видим, что затронута одна строка.
Теперь давайте выберем 10 сотрудников с наибольшим количеством сотрудников, чтобы посмотреть, появится ли там наша запись.
Отлично! А вот и он! Джон Смит на вершине!
Позвольте мне прокомментировать это странное число, 9-9-9-9-0-1.
Очевидно, это не следующий номер подряд в нашем сверхдлинном списке сотрудников, не так ли? Помните, что использование такого номера сотрудника - изящный профессиональный трюк. Когда данные создаются для тестирования системы базы данных, вставленное значение должно быть довольно высоким. Таким образом, очевидно, где были размещены новые данные. (Если вам нужно что-то напомнить, перейдите по ссылке на наш учебник «Первые шаги в обработке данных и операторах в SQL».)
По этой причине мы увидели Джона Смита на вершине списка «сотрудников» с наибольшим числом сотрудников.
Теперь позвольте мне поделиться с вами еще одной функцией MySQL. Вопреки всему, что мы говорили до сих пор, оказывается, что целые числа тоже можно записывать в кавычки. При желании можно попробовать вставить другую запись с номером сотрудника в кавычках; вы увидите, что данные по-прежнему зарегистрированы как целое число. Объяснение этому состоит в том, что MySQL автоматически (или, как сказали бы некоторые профессионалы, прозрачно) преобразует строку в целое число. Лучше всего избегать записи целых чисел в кавычки, поскольку это преобразование требует времени и препятствует бесперебойной работе более продвинутых функций MySQL.(А пока, если вы хотите узнать, как ускорить работу MySQL, ознакомьтесь с нашим учебным пособием Работа с индексами в MySQL.)
В заключение, идея состоит в том, что да, вы можете написать целое число в кавычках, но это не считается лучшей практикой. Вот почему мы хотели бы дать вам следующий совет. Не забывайте вводить целые числа как простые числа, без кавычек.
Отлично! Давайте продолжим в таком же темпе и перейдем к следующему разделу.
INSERT статья
Хорошо.Идеально. Давайте продолжим с предложением INSERT .
Обычно администраторы баз данных следят за порядком столбцов в соответствии с тем, как они отображаются в данной таблице данных.
Однако в некоторых случаях они предпочитают вставлять значения данных в другом порядке. MySQL допускает такие типы вставки данных. Например, если мы создадим запись данных о Патрисии Лоуренс, мы можем сначала вставить дату ее рождения, , затем ее номер сотрудника, а затем указать остальные значения в указанном порядке.
Посмотрим, сработает ли…
Стопроцентно! Последняя созданная нами строка содержит информацию о Патрисии Лоуренс!
Итак, имейте в виду, что мы должны поместить ЗНАЧЕНИЯ в точном порядке, в котором мы указали имена столбцов.
Потрясающе!
Хорошо. Давайте рассмотрим интересную особенность синтаксиса INSERT . Технически первую пару круглых скобок, а также имена столбцов между ними можно опустить.Только INSERT INTO, имя таблицы и VALUES являются обязательными.
Если вы его опустите, в разделе ЗНАЧЕНИЯ вам нужно будет указать столько значений данных, сколько столбцов в таблице данных. Кроме того, вам нужно будет добавить их в том же порядке, в котором они появляются в таблице.
Например, если мы воспользуемся этой структурой и попытаемся создать запись в таблице «Сотрудники» только с четырьмя столбцами вместо всех шести, MySQL отобразит ошибку.
Если мы попытаемся добавить шесть значений данных в новую запись, все в правильном порядке, запрос должен работать нормально.
Давай проверим.
Хорошо. Появилась новая информация.
В следующем разделе мы покажем вам очень мощную функцию оператора INSERT .
Вставка данных в новую таблицу
В этом разделе мы покажем вам еще один способ вставки данных в таблицу.
Соответствующий синтаксис:
INSERT INTO, имя таблицы и имена столбцов в скобках. Затем идет новая часть. Вы можете использовать классический оператор SELECT для извлечения информации из таблицы_1 и вставки ее в таблицу_2.
Это не обязательно должны быть все данные из этой другой таблицы - используя WHERE , вы сможете установить условия, которые уточнят копируемые данные.
Давайте посмотрим на пример.
Сначала проверьте столбцы таблицы «отделы». У нас есть две колонки - код отдела, код и название отдела.
Итак, следующее, что нужно сделать, это создать еще одну таблицу, названную «дубликаты отделов», сократив ее до «отделы подчеркивают D.U.P.»
Это будет точная копия таблицы «отделы», которую мы только что видели. Наша задача - импортировать все данные из «отделов» в его дубликат.
Код, который нам понадобится для создания таблицы копирования: CREATE TABLE «Departments Duplicate», открытые круглые скобки, «номер отдела», тип CHAR 4, добавлено ограничение NOT NULL, затем «имя отдела», VARCHAR 40, NOT NULL снова ограничение, закрывающие круглые скобки.
Execute…, а затем обновите раздел схем в Workbench.
Вот и мы!
В список добавлена новая таблица. Кроме того, также видны столбцы «номер отдела» и «название отдела».
Чтобы убедиться, что это все еще пустая таблица, нам нужно выбрать из нее всю информацию.
Видите? Нет информации.
Пришло время реализовать структуру, которую мы представили в этом посте.Мы вставим В столбцы «Номер отдела» и «Название отдела» из таблицы «Дубликаты отделов» все, что мы можем выбрать из таблицы «Отделы».
Обратите внимание, что, поскольку «Отделы» содержат одинаковое количество и тип столбцов, нет необходимости добавлять определенные условия к данным, полученным из этой таблицы. Следовательно, подстановочный знак звездочка (*) будет работать правильно. (Вы можете изучить основные типы отношений между таблицами в SQL в связанном руководстве.)
Верно! Итак, давайте запустим этот запрос.
Хорошо! Код был выполнен без ошибок.
Посмотрим, правильно ли была выполнена операция.
Было. Определенно! Мы видим, что вновь созданная таблица «дубликаты отделов» заполнена информацией из «таблицы отделов». Это потрясающе!
Другими словами, наша работа сделана!
Я хотел бы завершить этот пост напоминанием об ограничениях MySQL.Мы почти не упомянули о них в этом разделе. Однако вы знаете, что если новые данные, которые вы вставляете, не удовлетворяют ограничениям, которые уже были установлены в базе данных, MySQL всегда будет показывать ошибку.
Для простоты мы тщательно разработали наш код, и подобных ошибок удалось избежать. Другими словами, мы позаботились о том, чтобы не вставлять данные, не удовлетворяющие существующим ограничениям. Тем не менее, имейте в виду, что соблюдение ограничений очень важно - они всегда будут играть важную роль при вставке данных.
***
Хотите отточить свои навыки работы с SQL? Узнайте, как применить теорию на практике, с помощью наших практических руководств !
Ознакомьтесь с нашим следующим учебным пособием: инструкция SQL UPDATE
.