Инструменты пользователя

Инструменты сайта


insert

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
insert [2021/01/30 16:10]
dja
insert [2021/01/30 16:24] (текущий)
dja
Строка 1: Строка 1:
 +===== Добавление целых строк. =====
  
 +Как видно из названия, оператор **INSERT** используется для вставки (добавления) строк в таблицу базы данных. Добавление можно осуществить несколькими способами:
  
-  - Добавление целых строк. +   * добавить одну полную строку
- +
-Как видно из названия, оператор **INSERT**  используется для вставки (добавления) строк в таблицу базы данных. Добавление можно осуществить несколькими способами: +
- +
-  * добавить одну полную строку+
   * добавить часть строки   * добавить часть строки
   * добавить результаты запроса.   * добавить результаты запроса.
Строка 13: Строка 11:
 **<font inherit/inherit;;#2980b9;;inherit>INSERT INTO</font> Sellers (ID, Address, City, Seller_name, Country) <font inherit/inherit;;#2980b9;;inherit>VALUES</font>**** ('6', '1st Street', 'Los Angeles', 'Harry Monroe', 'USA')** **<font inherit/inherit;;#2980b9;;inherit>INSERT INTO</font> Sellers (ID, Address, City, Seller_name, Country) <font inherit/inherit;;#2980b9;;inherit>VALUES</font>**** ('6', '1st Street', 'Los Angeles', 'Harry Monroe', 'USA')**
  
-{{https://i.imgur.com/HtATTE2.png?nolink&505x140}}+{{https://i.imgur.com/HtATTE2.png?nolink&}}
  
 Также можно изменять порядок указания названий колонок, однако одновременно нужно менять и порядок значений в параметре **VALUES**. Также можно изменять порядок указания названий колонок, однако одновременно нужно менять и порядок значений в параметре **VALUES**.
  
-  - Элемент ненумерованного списка+===== Добавление части строк. ===== 
 + 
 +В предыдущем примере при использовании оператора **INSERT**  мы явно отмечали имена столбцов таблицы. Используя данный синтаксис, мы можем пропустить некоторые столбцы. Это значит, что вы вводите значение для одних столбцов но не предлагаете их для других. Например: 
 + 
 +**<font inherit/inherit;;#2980b9;;inherit>INSERT INTO</font> Sellers (ID, City, Seller_name) <font inherit/inherit;;#2980b9;;inherit>VALUES</font> ('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**. Структура этих таблиц одинакова (то же количество колонок и те же их названия), однако другие данные. Для этого мы можем прописать следующий запрос: 
 + 
 +**<font inherit/inherit;;#2980b9;;inherit>INSERT INTO</font> Sellers (ID, Address, City, Seller_name, Country) <font inherit/inherit;;#2980b9;;inherit>SELECT</font>****ID, Address, City, Seller_name, Country <font inherit/inherit;;#2980b9;;inherit>FROM</font> Sellers_EU** 
 + 
 +Нужно обратить внимание, чтобы значение внутренних ключей не повторялись (поле ** ID**), в противном случае произойдет ошибка. Оператор ** SELECT **  также может включать предложения ** WHERE **  для фильтрации данных. Также следует отметить, что СУБД не обращает внимания на названия колонок, которые содержатся в операторе ** SELECT**, для нее важно только порядок их расположения. Поэтому данные в первом указанном столбце, что были выбраны из-за ** SELECT**, будут в любом случае заполнены в первый столбец таблицы ** Sellers**, указанной после оператора ** INSERT INTO**, независимо от названия поля. 
 + 
 +===== Копирование данных из одной таблицы в другую. ===== 
 + 
 +Часто при работе с базами данных возникает необходимость в создании копий любых таблиц, с целью резервирования или модификации. Чтобы сделать полную копию таблицы в SQL предусмотрен отдельный оператор ** SELECT INTO**. Например, нам нужно создать копию таблицы ** Sellers**, нужно будет прописать запрос следующим образом: 
 + 
 +**<font inherit/inherit;;#2980b9;;inherit>SELECT</font> * <font inherit/inherit;;#2980b9;;inherit>INTO</font> Sellers_new <font inherit/inherit;;#2980b9;;inherit>FROM</font> 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|Источник]]
  
  
insert.1612012254.txt.gz · Последнее изменение: 2021/01/30 16:10 — dja