ВГОРУ

SQL-Урок 13. Додавання даних (INSERT INTO)

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

Для цих цілей в SQL існують такі оператори, як:

Почнемо знайомство з даною групою операторів з оператора 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 ... слід враховувати наступне: