TOP

SQL-Урок 13. Добавление данных (INSERT INTO)

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

Для этих целей в SQL есть такие операторы, как:

  • CREATE – создает таблицу;
  • ALTER – изменяет структуру таблицы;
  • DROP – удаляет таблицу или поле;
  • INSERT – добавляет данные в таблицу.
  • Начнём знакомство с данной группой операторов с оператора INSERT.


    1. Добавление целых строк

    Как видно из названия, оператор 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.

    2. Добавление части строк

    В предыдущем примере при использовании оператора INSERT мы явно указывали имена столбцов таблицы. Используя этот синтаксис, мы можем пропустить некоторые столбцы. Это означает, что вы вводите значение для одних столбцов и не предлагаете их для других. К примеру:

    INSERT INTO Sellers (ID, City, Seller_name) 
    VALUES ('6', 'Los Angeles', 'Harry Monroe')
    

    В данном примере мы не указали значения для двух столбцов Address и Country. Некоторые столбцы можно исключать из оператора ааа, если это позволяет делать определение таблицы. В этом случае должно соблюдаться одно из условий: этот столбец определен как допускающий значение null (отсутствие какого-либо значения) или в определении таблицы указанное значение по умолчанию. Это означает, что если не указано никакое значение, будет использовано значение по умолчанию. Если вы пропускаете столбец таблицы, не допускающей появления в своих строках значений NULL и не имеющего значения, определенного для использования по умолчанию, СУБД выдаст сообщение об ошибке, и эта строка не будет добавлена.

    3. Добавление отобранных данных

    В предыдущих примерах мы вставляем данные в таблице, прописывая их вручную в запросе. Однако оператор 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, независимо от названия поля.

    4. Копирование данных из одной таблицы в другую

    Часто при работе с базами данных возникает необходимость в создании копий любых таблиц с целью резервирования или модификации. Чтобы сделать полную копию таблицы в SQL, предусмотрен отдельный оператор SELECT INTO. Например, нам нужно создать копию таблицы Sellers, нужно будет прописать запрос следующим образом:

    SELECT * INTO Sellers_new 
    FROM Sellers
    

    В отличие от предыдущей конструкции INSERT INTO...SELECT..., когда данные добавляются в существующую таблицу, конструкция SELECT...INTO...FROM... копирует данные в новую таблицу. Также можно сказать, что первая конструкция импортирует данные, а вторая – экспортирует.

    При использовании конструкции SELECT...INTO...FROM... следует учитывать следующее:

  • можно использовать любые предложения в операторе SELECT, такие как GROUP BY и HAVING;
  • для добавления данных из нескольких таблиц можно использовать объединение;
  • данные можно добавить только в одну таблицу, независимо от того, из скольких таблиц они были взяты.