Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
|
insert [2021/01/30 16:09] dja |
insert [2021/01/30 16:24] (текущий) dja |
| ===== Добавление целых строк. ===== |
| |
| Как видно из названия, оператор **INSERT** используется для вставки (добавления) строк в таблицу базы данных. Добавление можно осуществить несколькими способами: |
| |
- Добавление целых строк. | * добавить одну полную строку |
| |
Как видно из названия, оператор **INSERT** используется для вставки (добавления) строк в таблицу базы данных. Добавление можно осуществить несколькими способами: | |
| |
* добавить одну полную строку | |
* добавить часть строки | * добавить часть строки |
* добавить результаты запроса. | * добавить результаты запроса. |
**<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|Источник]] |
| |
| |