===== Добавление целых строк. ===== Как видно из названия, оператор **INSERT** используется для вставки (добавления) строк в таблицу базы данных. Добавление можно осуществить несколькими способами: * добавить одну полную строку * добавить часть строки * добавить результаты запроса. Итак, чтобы добавить новую строку в таблицу, нам необходимо указать название таблицы, перечислить названия колонок и указать значение для каждой колонки с помощью конструкции ** INSERT INTO ** // название_таблицы (поле1, поле2 … ) // ** VALUES ** // (значение1, значение2 …)//. Рассмотрим на примере. **INSERT INTO Sellers (ID, Address, City, Seller_name, Country) VALUES**** ('6', '1st Street', 'Los Angeles', 'Harry Monroe', 'USA')** {{https://i.imgur.com/HtATTE2.png?nolink&}} Также можно изменять порядок указания названий колонок, однако одновременно нужно менять и порядок значений в параметре **VALUES**. ===== Добавление части строк. ===== В предыдущем примере при использовании оператора **INSERT** мы явно отмечали имена столбцов таблицы. Используя данный синтаксис, мы можем пропустить некоторые столбцы. Это значит, что вы вводите значение для одних столбцов но не предлагаете их для других. Например: **INSERT INTO Sellers (ID, City, Seller_name) VALUES ('6', 'Los Angeles', 'Harry Monroe')** {{https://i.imgur.com/cg9SLET.png?nolink&}} В данном примере мы не указали значение для двух столбцов **Address** и **Country** . Вы можете исключать некоторые столбцы из оператора **INSERT INTO**, если это позволяет производить определение таблицы. В этом случае должно соблюдаться одно из условий: этот столбец определен как допускающий значение **NULL** (отсутствие какого-либо значения) или в определение таблицы указанное значение по умолчанию. Это означает, что, если не указано никакое значение, будет использовано значение по умолчанию. Если вы пропускаете столбец таблицы, которая не допускает появления в своих строках значений **NULL** и не имеет значения, определенного для использования по умолчанию, СУБД выдаст сообщение об ошибке, и это строка не будет добавлена. ===== Добавление отобранных данных. ===== В предыдущей примерах мы вставляли данные в таблицы, прописывая их вручную в запросе. Однако оператор ** INSERT INTO ** позволяет автоматизировать этот процесс, если мы хотим вставлять данные из другой таблицы. Для этого в SQL существует такая кострукция как ** INSERT INTO … SELECT … **. Данная конструкция позволяет одновременно выбирать данные из одной таблицы, и вставить их в другую. Предположим мы имеем еще одну таблицу ** Sellers_EU ** с перечнем продавцов нашего товара в Европе и нам нужно их добавить в общую таблицу ** Sellers**. Структура этих таблиц одинакова (то же количество колонок и те же их названия), однако другие данные. Для этого мы можем прописать следующий запрос: **INSERT INTO Sellers (ID, Address, City, Seller_name, Country) SELECT****ID, Address, City, Seller_name, Country FROM Sellers_EU** Нужно обратить внимание, чтобы значение внутренних ключей не повторялись (поле ** ID**), в противном случае произойдет ошибка. Оператор ** SELECT ** также может включать предложения ** WHERE ** для фильтрации данных. Также следует отметить, что СУБД не обращает внимания на названия колонок, которые содержатся в операторе ** SELECT**, для нее важно только порядок их расположения. Поэтому данные в первом указанном столбце, что были выбраны из-за ** SELECT**, будут в любом случае заполнены в первый столбец таблицы ** Sellers**, указанной после оператора ** INSERT INTO**, независимо от названия поля. ===== Копирование данных из одной таблицы в другую. ===== Часто при работе с базами данных возникает необходимость в создании копий любых таблиц, с целью резервирования или модификации. Чтобы сделать полную копию таблицы в SQL предусмотрен отдельный оператор ** SELECT INTO**. Например, нам нужно создать копию таблицы ** Sellers**, нужно будет прописать запрос следующим образом: **SELECT * INTO Sellers_new FROM Sellers** {{https://i.imgur.com/h1EvUgi.png?nolink&}} В отличие от предыдущей конструкции ** INSERT INTO … SELECT … **, когда данные добавляются в существующую таблицу, конструкция ** SELECT … INTO … FROM … ** копирует данные в новую таблицу. Также можно сказать, что первая конструкция импортирует данные, а вторая - экспортирует. При использовании конструкции ** SELECT … INTO … FROM … ** следует учитывать следующее: * - можно использовать любые предложения в операторе ** SELECT**, такие как ** GROUP BY ** и ** HAVING ** * - для добавления данных из нескольких таблиц можно использовать объединение * - данные возможно добавить только одну таблицу, независимо от того, из скольких таблиц они были взяты. [[http://moonexcel.com.ua/уроки-sql13-добавление-данных-insert-into_ru|Источник]]