Синтаксис insert into sql

INSERT — оператор языка SQL, который позволяет добавить строки в таблицу, заполняя их значениями. Значения можно вставлять перечислением с помощью слова values и перечислив их в круглых скобках через запятую или оператором select.

Содержание

Примеры использования [ править | править код ]

Используя перечисление значений, с указанием столбцов:

Используя перечисление значений, без указания столбцов:

не работает если использовать с set identity_insert

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

Альтернативный синтаксис оператора INSERT [ править | править код ]

В некоторых СУБД, например, MySQL, существует альтернативный синтаксис оператора INSERT, в котором значения присваиваются столбцам при помощи ключевого слова SET:

Особенности [ править | править код ]

Во время выполнения оператора могут возникнуть ошибки:

  • если при создании таблицы для поля был указан параметр not null и не было определено значение по умолчанию (см. create), то при отсутствии для него вставляемого значения возникнет ошибка. Решение очевидно:
  • либо убрать параметр not null
  • либо указать значение по умолчанию
  • либо вставить значение
  • если произойдет попытка вставки в поле с типом > Опция identity_insert (MS SQL Server) [ править | править код ]
  • эта инструкция не будет работать, нужно указывать имя таблицы.

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

    Включать эту опцию без явной необходимости не рекомендуется. Однако, её следует использовать в записях, в которых нужно сменить некоторые столбцы, не поменяв её identity столбец (например, если по этому столбцу делается связь с другой таблицей)

    Получение ключа [ править | править код ]

    Разработчики, которые используют суррогатный ключ в качестве первичного ключа, часто сталкиваются со сценарием, когда необходимо получить первичный ключ (для использования в других запросах), сгенерированный базой данных в ответ на оператор SQL INSERT. Но большинство систем не позволяют оператору SQL INSERT возвращать данные. Возможные способы решения:

      Использовать характерную для данной БД хранимую процедуру, которая генерирует суррогатный ключ, исполняет операцию INSERT, и возвращает сгенерированный ключ. Например, в Microsoft SQL Server, ключ возвращается специальной функцией SCOPE_ >

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

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


    Запросы :

    Способ 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:

    Рассмотренный в начале параграфа пример с помощью этого оператора можно переписать так:

    Leave a Reply

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    You may use these HTML tags and attributes:

    <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>