В предыдущих разделах мы рассматривали работу по получению данных из заранее созданных таблиц. Теперь пора разобрать, каким же образом мы можем создавать/удалять таблицы, добавлять новые записи и удалять старые.
Для этих целей в SQL есть такие операторы, как:
Начнём знакомство с данной группой операторов с оператора INSERT.
Как видно из названия, оператор INSERT INTO используется для вставки (добавления) строк в таблицу базы данных.
Добавление можно осуществить несколькими путями:
Итак, чтобы добавить новую строку в таблицу, нам нужно указать название таблицы, перечислить названия колонок и указать значение для каждой колонки с помощью конструкции 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')
Можно также изменять порядок указания названий колонок, однако одновременно нужно изменять и порядок значений в параметре VALUES.
В предыдущем примере при использовании оператора INSERT мы явно указывали имена столбцов таблицы. Используя этот синтаксис, мы можем пропустить некоторые столбцы. Это означает, что вы вводите значение для одних столбцов и не предлагаете их для других. К примеру:
INSERT INTO Sellers (ID, City, Seller_name)
VALUES ('6', 'Los Angeles', 'Harry Monroe')
В данном примере мы не указали значения для двух столбцов Address и Country. Некоторые столбцы можно исключать из оператора ааа, если это позволяет делать определение таблицы. В этом случае должно соблюдаться одно из условий: этот столбец определен как допускающий значение 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
В отличие от предыдущей конструкции INSERT INTO...SELECT..., когда данные добавляются в существующую таблицу, конструкция SELECT...INTO...FROM... копирует данные в новую таблицу. Также можно сказать, что первая конструкция импортирует данные, а вторая – экспортирует.
При использовании конструкции SELECT...INTO...FROM... следует учитывать следующее: