» »

Sql синтаксис команды вставки строки. SQL запрос INSERT INTO — наполнить базу данных информацией

15.10.2023

Эта инструкция добавляет одну или несколько записей в таблицу (выполняет запрос на добавление).

Синтаксис

Запрос на добавление нескольких записей:

INSERT INTO конечный_объект [(поле1 [, поле2 [, ...]])]
SELECT [источник .]поле1 [, поле2 [, ...]
FROM выражение_таблицы

Запрос на добавление одной записи:

INSERT INTO конечный_объект [(поле1 [, поле2 [, ...]])]
VALUES (поле1 [, поле2 [, ...])

Инструкция INSERT INTO состоит из следующих элементов:

Часть

Описание

конечный_объект

Имя таблицы или запроса, куда добавляются записи.

поле1 , поле2

После аргумента конечный_объект - имена полей, в которые добавляются данные; после аргумента источник - имена полей, из которых извлекаются данные.

внешняя_база_данных

Путь к внешней базе данных. Описание пути см. в статье, посвященной предложению IN.

источник

Имя таблицы или запроса, откуда копируются записи.

выражение_таблицы

Одно или несколько имен таблиц, из которых требуется получить записи. Этот аргумент может представлять собой имя отдельной таблицы, результирующее выражение, составленное с использованием операций INNER JOIN, LEFT JOIN или RIGHT JOIN, или сохраненный запрос.

значение1 , значение2

Значения, которые будут добавлены в определенные поля новой записи. Каждое значение вставляется в поле, соответствующее его положению в списке: значение1 добавляется в поле1 новой записи, значение2 - в поле2 и т. д. Необходимо разделять значения запятой и заключать текстовые поля в кавычки (" ").

Замечания

С помощью инструкции INSERT INTO можно добавить в таблицу одну запись, используя указанный выше синтаксис. В этом случае указываются имена и значения для каждого поля записи. Необходимо указать все поля записи, которым присваиваются значения, и соответствующие значения. Если не указать значение поля, ему будет присвоено значение по умолчанию или NULL. Записи добавляются в конец таблицы.

Инструкцией INSERT INTO можно также воспользоваться для добавления набора записей из другой таблицы или запроса с помощью предложения SELECT... FROM, как показано выше (см. синтаксис запроса на добавление нескольких записей). В этом случае предложение SELECT задает поля для добавления в указанный конечный_объект .

Источник или конечный_объект может быть таблицей или запросом. Если задан запрос, ядро СУБД Microsoft Access добавляет записи ко всем таблицам, которые он возвращает.

Использование инструкции INSERT INTO не является обязательным. Если она указана, она должна предшествовать инструкции SELECT.

Если конечная таблица содержит первичный ключ, убедитесь, что значения, добавляемые в одно или несколько полей первичного ключа, уникальны и отличны от NULL ; в противном случае записи не будут добавлены.

Если записи добавляются в таблицу с полем "Счетчик" и вы хотите изменить их нумерацию, не включайте поле "Счетчик" в запрос. Включите поле "Счетчик" в запрос, если вы хотите сохранить исходные значения из поля.

Добавить записи в таблицу другой базы данных можно с помощью предложения IN.

Чтобы создать таблицу, используйте инструкцию SELECT... INTO для получения запроса на создание таблицы.

Перед тем как выполнить запрос на добавление, воспользуйтесь запросом на выборку с такими же условиями отбора, чтобы по полученным результатам определить, какие записи будут добавлены.

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

Вместо добавления записей из другой таблицы можно задать значение каждого поля в отдельной новой записи с помощью предложения VALUES. Если список полей опущен, в предложение VALUES необходимо включить соответствующие значения каждого поля таблицы; в противном случае операция INSERT не будет выполнена. Воспользуйтесь инструкцией INSERT INTO вместе с предложением VALUES для каждой дополнительной записи, которую требуется создать.

Команда добавляет строки в таблицу или представление основной таблицы.

Синтаксис команды Sql INSERT

Синтаксис команды Insert


Основные ключевые слова и параметры команды INSERT
  • schema - идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
  • table view - имя таблицы, в которую строки должны быть вставлены; если указано представление, то строки вставляются в основную таблицу представления
  • subquery_1 - подзапрос, который сервер обрабатывает тем же самым способом как представление
  • column - столбец таблицы или представления, в который для каждой вставленной строки вводится значение из фразы VALUES или подзапроса; если один из столбцов таблицы опускается из этого списка, значением столбца для вставленной строки является значение по умолчанию столбца, определенное при создании таблицы. Если полностью опускается список столбца, предложение VALUES или запрос должен определить значения для всех столбцов в таблице
  • VALUES - определяет строку значений, которые будут вставлены в таблицу или представление; значение должно быть определено в предложении VALUES для каждого столбца в списке столбцов
  • subquery_2 - подзапрос, который возвращает строки, вставляемые в таблицу; выборочный список этого подзапроса должен иметь такое же количество столбцов, как в списке столбцов утверждения

Утверждение с фразой VALUES добавляет одиночную строку к таблице. Эта строка содержит значения, определенные фразой VALUES .
Утверждение с подзапросом вместо фразы VALUES добавляет к таблице все строки, возвращенные подзапросом. Сервер обрабатывает подзапрос и вставляет каждую возвращенную строку в таблицу. Если подзапрос не выбирает никакие строки, сервер не вставляет никакие строки в таблицу.
Подзапрос может обратиться к любой таблице или представлению, включая целевую таблицу утверждения . Сервер назначает значения полям в новых строках, основанных на внутренней позиции столбцов в таблице и порядке значений фразы VALUES или в списке выбора запроса. Если какие-либо столбцы пропущены в списке столбцов, сервер назначает им значения по умолчанию, определенные при создании таблицы. Если любой из этих столбцов имеет NOT NULL ограничение то сервер возвращает ошибку, указывающую, что ограничение было нарушено и отменяет утверждение INSERT.
При выдаче утверждения INSERT включается любой INSERT — триггер, определенный на таблице.

INSERT INTO Пример 1

INSERT INTO dept VALUES (50, «ПРОДУКЦИЯ», «САН-ФРАНЦИСКО»);

INSERT INTO Customers (city, cname, cnum) VALUES (‘London’, ‘Hoffman’, 2001);

INSERT INTO Пример 2
Нижеприведенная команда копирует данные сотрудников фирмы, комисионные которых превышают 25% от дохода в таблицу bonus:

INSERT INTO bonus SELECT ename, job, sal, comm FROM emp WHERE comm > 0.25 * sal;

INSERT INTO Пример 3
Если нужно вставить NULL -значение, необходимо указать его как обычное значение следующим образом:

INSERT INTO Salespeople VALUES (1001,’Peel’,NULL,12);

INSERT INTO Пример 4
Команду можно применить для того, чтобы извлечь значения из одной таблицы и разместить их в другой, воспользовавшись для этого запросом. Для этого достаточно заменить предложение VALUES на соответствующий запрос:

INSERT INTO Londonstaff SELECT * FROM Salespeople WHERE city = ‘London’;

MySQL INSERT

Для вставки новых строк в базу данных MySQL используется команда INSERT , примеры команды приведены ниже:
INSERT INTO Пример 1.
Вставка новой строки в таблицу table_name.

INSERT INTO

INSERT INTO Пример 2.
Вставка новой строки в таблицу table_name с указанием вставки данных в нужные нам колонки.

INSERT INTO table_name VALUES (‘1′,’165′,’0′,’name’);

В базе данных MySQL имеется возможность вставлять множество новых строк, используя одну команду .
INSERT INTO Пример 3.
Вставка несколько строк в таблицу table_name.

INSERT INTO table_name (tbl_id, chislo, chislotwo, name) VALUES (‘1′,’159′,’34’,’name1′), (‘2′,’14’,’61’,’name2′), (‘3′,’356′,’8′,’name3’);

Оператор INSERT вставляет новые записи в таблицу. При этом значения столбцов могут представлять собой литеральные константы, либо являться результатом выполнения подзапроса. В первом случае для вставки каждой строки используется отдельный оператор INSERT ; во втором случае будет вставлено столько строк, сколько возвращается подзапросом.

Синтаксис оператора следующий:

    INSERT INTO [ (,...) ]

    { VALUES (,…) }

  1. | { DEFAULT VALUES }

Как видно из представленного синтаксиса, список столбцов не является обязательным (об этом говорят квадратные скобки в описании синтаксиса). В том случае, если он отсутствует, список вставляемых значений должен быть полный, то есть обеспечивать значения для всех столбцов таблицы. При этом порядок значений должен соответствовать порядку, заданному оператором CREATE TABLE для таблицы, в которую вставляются строки. Кроме того, эти значения должны относиться к тому же типу данных, что и столбцы, в которые они вносятся. В качестве примера рассмотрим вставку строки в таблицу Product, созданную следующим оператором CREATE TABLE :

    CREATE TABLE product

    maker char (1 ) NOT NULL ,

    model varchar (4 ) NOT NULL ,

    type varchar (7 ) NOT NULL

Пусть требуется добавить в эту таблицу модель ПК 1157 производителя B. Это можно сделать следующим оператором:

    INSERT INTO Product

    VALUES ("B" , 1157 , "PC" ) ;

Если задать список столбцов, то можно изменить «естественный» порядок их следования:

    INSERT INTO Product (type, model, maker)

    VALUES ("PC" , 1157 , "B" ) ;

Казалось бы, это совершенно излишняя возможность, которая делает конструкцию только более громоздкой. Однако она становится выигрышной, если столбцы имеют значения по умолчанию. Рассмотрим следующую структуру таблицы:

    CREATE TABLE product_D

    maker char (1 ) NULL ,

    model varchar (4 ) NULL ,

    type varchar (7 ) NOT NULL DEFAULT "PC"

Отметим, что здесь значения всех столбцов имеют значения по умолчанию (первые два - NULL, а последний столбец - type - PC). Теперь мы могли бы написать:

    INSERT INTO Product_D (model, maker)

    VALUES (1157 , "B" ) ;

В этом случае отсутствующее значение при вставке строки будет заменено значением по умолчанию - PC. Заметим, что если для столбца в операторе CREATE TABLE не указано значение по умолчанию и не указано ограничение NOT NULL , запрещающее использование NULL в данном столбце таблицы, то подразумевается значение по умолчанию NULL .

Возникает вопрос: а можно ли не указывать список столбцов и, тем не менее, воспользоваться значениями по умолчанию? Ответ положительный. Для этого нужно вместо явного указания значения использовать зарезервированное слово DEFAULT :

    INSERT INTO Product_D

    VALUES ("B" , 1158 , DEFAULT ) ;

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

    INSERT INTO Product_D

    VALUES (DEFAULT , DEFAULT , DEFAULT ) ;

Однако для этого случая предназначена специальная конструкция DEFAULT VALUES (см. синтаксис оператора), с помощью которой вышеприведенный оператор можно переписать в виде

    INSERT INTO Product_D 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 , можно написать:

    INSERT INTO Product_D

    SELECT "B" AS maker, 1158 AS model, "PC" AS type

    UNION ALL

    SELECT "C" , 2190 , "Laptop"

    UNION ALL

    SELECT "D" , 3219 , "Printer" ;

Использование UNION ALL предпочтительней UNION даже, если гарантировано отсутствие строк-дубликатов, так как в этом случае не будет выполняться проверка для исключения дубликатов.

Следует отметить, что вставка нескольких кортежей с помощью конструктора строк уже реализована в Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) - универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server 2008. С учетом этой возможности, последний запрос можно переписать в виде:

    INSERT INTO Product_D VALUES

    ("B" , 1158 , "PC" ) ,

    ("C" , 2190 , "Laptop" ) ,

Инструкция SQL INSERT INTO и INSERT SELECT используются для вставки новых строк в таблицу. Существует два способа использования инструкций:

  1. Только значения : Первый метод предусматривает указание только значений данных, которые нужно вставить без имен столбцов.

Синтаксис :

INSERT INTO имя_таблицы VALUES (значение1, значение2, значение3,...); имя_таблицы: имя таблицы. значение1, значение2,.. : значения первого столбца, второго столбца,... для новой записи

  1. Имена столбцов и значения : При втором методе указываются имена столбцов и значения строк для вставки:

Синтаксис :

INSERT INTO имя_таблицы (столбец1, столбец2, столбец3,..) VALUES (значение1, значение2, значение3,...); имя_таблицы: имя таблицы. столбец1: имя первого столбцы, второго столбца... значение1, значение2,.. : значения первого столбца, второго столбца,... для новой записи

Запросы :

Способ 1 (вставка только значений ):

INSERT INTO Student VALUES ("5","HARSH","WEST BENGAL","8759770477","19");

Результат :

После использования INSERT INTO SELECT таблица Student теперь будет выглядеть следующим образом:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
5 HARSH WEST BENGAL 8759770477 19

Способ 2 (вставка значений только в указанные столбцы ):

INSERT INTO Student (ROLL_NO, NAME, Age) VALUES ("5","PRATIK","19");

Результат :

Таблица Student теперь будет выглядеть следующим образом:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
5 PRATIK null null 19

Обратите внимание, что для столбцов, значения для которых не указаны, задается null .

Использование SELECT в инструкции INSERT INTO

Можно использовать инструкцию MySQL INSERT SELECT для копирования строк из одной таблицы и их вставки в другую.

Использование этого оператора аналогично использованию INSERT INTO . Разница в том, что оператор SELECT применяется для выборки данных из другой таблицы. Ниже приведены различные способы использования INSERT INTO SELECT :

  • Вставка всех столбцов таблицы : можно скопировать все данные таблицы и вставить их в другую таблицу.

Синтаксис :

INSERT INTO первая_таблица SELECT * FROM вторая_таблица; первая_таблица: имя первой таблицы. вторая_таблица: имя второй таблицы.

Мы использовали инструкцию SELECT для копирования данных из одной таблицы и инструкцию INSERT INTO для их вставки в другую.

  • Вставка отдельных столбцов таблицы . Можно скопировать только те столбцы таблицы, которые необходимо вставить в другую таблицу.

Синтаксис :

INSERT INTO первая_таблица(имена_столбцов1) SELECT имена_столбцов2 FROM вторая_таблица; первая_таблица: имя первой таблицы. вторая_таблица: имя второй таблицы. имена_столбцов1: имена столбцов, разделенные запятой(,) для таблицы 1. имена_столбцов2: имена столбцов, разделенные запятой(,) для таблицы 2.

Мы использовали инструкцию SELECT для копирования данных только из выбранных столбцов второй таблицы и инструкцию MySQL INSERT INTO SELECT для их вставки в первую таблицу.

  • Копирование определенных строк из таблицы . Можно скопировать определенные строки из таблицы для последующей вставки в другую таблицу с помощью условия 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 (вставка всех строк и столбцов ):

INSERT INTO Student SELECT * FROM LateralStudent;

Результат :

Этот запрос вставит все данные таблицы LateralStudent в таблицу Student . После применения SQL INSERT INTO SELECT таблица Student будет выглядеть следующим образом:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
7 SOUVIK DUMDUM 9876543210 18
8 NIRAJ NOIDA 9786543210 19
9 SOMESH ROHTAK 9687543210 20

Способ 2 (вставка отдельных столбцов ):

INSERT INTO Student(ROLL_NO,NAME,Age) SELECT ROLL_NO, NAME, Age FROM LateralStudent;

Результат :

Этот запрос вставит данные из столбцов ROLL_NO , NAME и Age таблицы LateralStudent в таблицу Student . Для остальных столбцов таблицы Student будет задано значение null . После применения SQL INSERT SELECT таблица будет выглядеть следующим образом:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
7 SOUVIK Null null 18
8 NIRAJ Null null 19
9 SOMESH Null null 20
  • Выбор определенных строк для вставки :

Результат :

Этот запрос выберет только первую строку из таблицы LateralStudent для вставки в таблицу Student . После применения INSERT SELECT таблица будет выглядеть следующим образом.