Transact-SQL – вставка даних. Основи T-SQL. DML Записати дані в таблицю SQL

У цій статті ми розберемо, мабуть, одні з найважливіших SQL-запитів. Це запити на додавання та видалення записів з таблиці бази даних. Оскільки, ДУЖЕ часто доводиться додавати нові записи до таблиці, причому робити це автоматично, то цей матеріал обов'язковий до вивчення.

Для початку SQL-запит на додавання нового запису до таблиці:

INSERT INTO users (login, pass) values("TestUser", "123456")

При додаванні запису спочатку йде команда " INSERT INTO", потім назва таблиці, в яку ми вставляємо запис. Далі йде у круглих дужках назви полів, які ми хочемо заповнити. А потім у круглих дужках після слова valuesпочинаємо перераховувати значення тих полів, які ми вибрали. Після виконання цього запиту в нашій таблиці з'явиться новий запис.

Іноді потрібно оновити запис у таблицідля цього існує наступний SQL-запит:

UPDATE users SET login="TestUser2", pass="1234560" WHERE login="TestUser"

Цей запит є більш складним, тому що він має конструкцію " WHERE", але про неї трохи нижче. Спочатку йде команда" UPDATE", потім ім'я таблиці, а після " SETМи описуємо значення всіх полів, які ми хочемо змінити. Було б все просто, але постає питання: А який саме запис слід оновлювати?". Для цього існує" WHERE". В даному випадку ми оновлюємо запис, поле" login"у якої має значення" TestUserЗверніть увагу, що якщо таких записів буде кілька, то оновляться абсолютно всі! Це дуже важливо розуміти, інакше ви ризикуєте втратити свою таблицю.

Давайте трохи ще поговоримо про " WHEREКрім простих перевірок на рівність існують так само і нерівності, а також логічні операції: ANDі OR.

UPDATE users SET login = "TestUser2", pass="1234560" WHERE id< 15 AND login="TestUser"

Даний SQL-запитоновить ті записи, idяких менше 15 Іполе " login" має значення " TestUser". Сподіваюся, Ви розібралися з конструкцією" WHERE", тому що це дуже важливо. Саме " WHERE"використовується при вибірці записів із таблиць, а це завдання, що найчастіше використовується при роботі з базами даних.

І, насамкінець, простий SQL-запит видалення записів з таблиці:

DELETE FROM users WHERE login="TestUser2"

Після команди " DELETE FROM" йде ім'я таблиці, у якій потрібно видалити записи. Далі описуємо конструкцію " WHERE " . Якщо запис буде відповідати описаним умовам, вона буде видалена. Знову ж таки зверніть увагу, залежно кількості записів, задовольняють умові після " WHERE", може вийти будь-яка їх кількість.

У попередніх розділах ми розглядали роботу з отримання даних із заздалегідь створених таблиць. Тепер настав час розібрати, яким чином ми можемо створювати/видаляти таблиці, додавати нові записи і видаляти старі. Для цих цілей у SQLіснують такі оператори, як: CREATE- Створює таблицю, ALTER- Змінює структуру таблиці, DROP- видаляє таблицю чи поле, INSERT- Додає дані в таблицю. Почнемо знайомство з цією групою операторів із оператора INSERT.

1. Додавання цілих рядків

Як видно з назви, оператор INSERTвикористовується для вставки (додавання) рядків у таблицю бази даних. Додавання можна здійснити кількома способами:

  • - додати один повний рядок
  • - додати частину рядка
  • - Додати результати запиту.

Отже, щоб додати новий рядок до таблиці, нам необхідно вказати назву таблиці, перерахувати назви колонок та вказати значення для кожної колонки за допомогою конструкції 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. Ви можете виключати деякі стовпці з оператора INSERT INTOякщо це дозволяє проводити визначення таблиці. У цьому випадку має дотримуватися одна з умов: цей стовпець визначений як такий, що допускає значення NULL(відсутність будь-якого значення) або визначення таблиці вказане значення за замовчуванням. Це означає, що, якщо не вказано жодне значення, буде використано значення за промовчанням. Якщо ви пропускаєте стовпець таблиці, яка не допускає появи у своїх рядках значень NULLі не має значення, визначеного для використання за умовчанням, СУБД видасть повідомлення про помилку, і цей рядок не буде додано.

3. Додавання відібраних даних

У попередніх прикладах ми вставляли дані до таблиць, прописуючи їх вручну в запиті. Проте оператор INSERT INTOдозволяє автоматизувати цей процес, якщо ми хочемо вставляти дані з іншої таблиці. Для цього в SQL існує така кострукція як INSERT INTO ... SELECT .... Дана конструкція дозволяє одночасно вибирати дані з однієї таблиці і вставити їх в іншу. Припустимо, ми маємо ще одну таблицю Sellers_EUз переліком продавців нашого товару в Європі і нам потрібно їх додати до загальної таблиці Sellers. Структура цих таблиць однакова (та сама кількість колонок і самі їх назви), проте інші дані. Для цього ми можемо прописати наступний запит:

INSERT INTO Sellers (ID, Address, City, Seller_name, Country) SELECTID, 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, такі як GROUP BYі HAVING
  • - для додавання даних із кількох таблиць можна використовувати об'єднання
  • - Дані можна додати лише одну таблицю, незалежно від того, з скількох таблиць вони були взяті.

Ця ж стаття присвячена наповненню таблиць БД даними, тобто вивчатимемо SQL-команди для вставки нових записів. Слід сказати, що запис таблицю можна зробити двома способами:

Спосіб №1.
Спробуємо внести запис про нову країну до таблиці countries. Синтаксис додавання буде наступним:
INSERT INTO Назва_таблиці (поле_1, поле_2, …) VALUES (Значення_1, Значення_2, …); Виходячи з нашої структури таблиці, SQL-запит буде таким:
INSERT INTO countries (country_name, acronym_name) VALUES ("Russia", "RU"); Ось так ми внесли до нашої таблиці запис про країну «Росія». Тут має бути все зрозуміло і просто, головне уважно дивитися які поля вказуєте в перших дужках, і в такому порядку прописувати значення по-друге.

Спосіб №2.
Другий спосіб, на мій погляд, трохи простіше, оскільки ви бачите що і якому полю надаєте. Повірте, якщо в таблиці величезна кількість стовпців, то дуже просто переплутати або недоглянути порядок полів у перших і порядок значень у дужках. Синтаксис другого методу такий:
INSERT INTO Назва_таблиці SET поле_1 = Значення_1, поле_2 = Значення_2, … ; Давайте на даному прикладі внесемо якусь інформацію до таблички persons, оскільки там більше полів, і відразу відчуватиметься перевага другого способу:
INSERT INTO persons SET first_name="Ivan", last_name="Dulin", registration_date="2012-06-14", country="1"; Тепер у нашій табличці є такі дані:


Ви, напевно, помітили, що ми не вказали значення для age, а воно виявилося заповненим... Все правильно – для даного поля ми встановлювали значення за замовчуванням як 25. Отже, тепер наш Ivan Dulin значиться в базі з віком 25 років. Можливо, не найвдаліший приклад робити значення за умовчанням для поля віку, але можна такі властивості встановлювати до таких полів, як, наприклад, рейтинг користувача сайту чи кількість переглядів сторінки. Їх спочатку ставиться значення 0.

Слід звернути увагу на формат дати в MySQL: YYYY-MM-DD. Якщо його не дотримуватися, ваші записи просто не будуть внесені в таблицю.

Як бачимо, поле profession заповнене як NULL, це пусте значення. Для цього поля.

Як додаток, розглянемо таку команду:
LOAD DATA LOCAL INFILE "D:\zapros.txt" INTO TABLE persons; Як ви вважаєте, що ми зараз зробили?! А зробили ми таке: додали дані до таблиці personsз файлу zapros.txt, який знаходиться на диску D. Інформація у файлі повинна бути наступною структурою:


Структура даних файлу повинна відповідати таким вимогам:
  1. Кожен новий запис повинен описуватися з нового рядка
  2. Дані повинні бути вказані для всіх полів. Як ви можете помітити, для поля id ми вказали значення NULL, адже воно у нас є автоінкрементним, так що MySQL сам внесе потрібне значення.
  3. Поля відокремлюються один від одного символом табуляції (клавіша Tab).
  4. Введена інформація повинна відповідати типу даних конкретного поля. Тобто, наприклад, дата у форматі РРРР-ММ-ДД, ціле число для integer і т.д.
Таким чином, ви навчилися вносити нові дані до таблиць своєї БД. Для закріплення вивченого матеріалу внесіть самостійно такі дані:

Таблиця professions:

Таблиця людей:

first_name last_name age registration_date country profession
Leonid Bilak 45 2012-06-20 2 1
Yuri Назаров 22 2012-06-21 3 1
Alla Savenko 25 2012-06-22 2 3
Іріна Nikolaeva 31 2012-06-22 1 3

Обов'язково додайте ці записи, оскільки вони знадобляться для вивчення оператора SELECT (вибору інформації з БД), який ми розглянемо в наступній (четвертій) статті з вивчення SQL-запитів.

Запити на зміну використовуються для додавання (INSERT INTO), видалення (DELETE) та оновлення (UPDATE) записів у таблицях.

Команда INSERT INTO

Команда INSERT INTO може бути використана для додавання одного або кількох записів до кінця таблиці.

Синтаксис команди INSERT INTO має такий вигляд:
INSERT INTO Назва_Таблиці [(Назва_Полів)] VALUES (Значення_даних);

Наприклад, помістимо в таблицю "Групи" запис, що містить дані (1, БФ-16а, 1, 1) відповідні стовпці (КодГрупи, Назва, Курс, Семестр).

Для цього запит у форматі:
INSERT INTO Групи (КодГрупи, Назва, Курс, Семестр) VALUES (1, БФ-16а, 1, 1);
введемо на бланку запиту, виконавши команду "Конструктор запитів" на вкладці "Створення", у режимі "Режим SQL" з меню Вид.

Зберігаємо запит з ім'ям "Добав_1_запису". В результаті в "Області переходів" з'явиться незв'язаний об'єкт - "Добав_1_записи" (Рис.1.).


Рис. 1.

Після збереження запиту необхідно виконати запит, клацнувши на піктограмі «Виконати». В результаті виконання команди «Добав_1_запису» у порожній таблиці з'явиться перший запис (Рис. 2.)



Рис. 2.

Команда UPDATE

Команда UPDATE призначена для зміни вже існуючих записів у стовпцях таблиці, що дозволяє оновлювати значення заданих стовпчиків таблиці.

Синтаксис команди UPDATE має такий вигляд:
UPDATE Назва_Таблиці SET Назва_Стовпця = Нова_Значення WHERE Умова_Відбору;

У пропозиції SET вказуються імена стовпців, дані у яких треба змінити. Оператор WHERE не є обов'язковим, але за його допомогою можна вказати тільки на рядки стовпців (таблиць), які необхідно оновити.

Створимо запит на зміну запису у таблиці "Групи" бази даних sql_training_st.mdb.

Наприклад, змінимо вже існуючий запис першого ключового поля id в стовпці "Назва" таблиці "Групи".

Запит у форматі:
UPDATE Групи SET Назва = "БФ-16б" WHERE ID = 1;

Зберігаємо запит з ім'ям "Зміна_запису_1". В результаті в області переходів з'явиться об'єкт - Зміна_запису_1 (Рис. 3.).



Рис. 3.

Після збереження запиту необхідно виконати запит, клацнувши на піктограмі «Виконати». В результаті виконання команди «Зміна_запису_1» з'явиться вікно діалогу, в якому необхідно ввести значення ID=1 і натиснути кнопку ОК. Після цих дій у таблиці "Групи" зміниться запис у полі "Назва" з БФ-16а до БФ-16б (Рис. 4.).



Рис. 4.

Команда DELETE

Команда DELETE призначена для видалення записів із таблиці.

Формат запиту на видалення записів:
DELETE FROM Назва_Таблиці WHERE Умова_Відбору;

Створимо запит на зміну запису у таблиці "Групи" бази даних sql_training_st.mdb.

Наприклад, видалимо існуючий запис першого ключового поля id у всіх стовпцях (полях) таблиці "Групи".

Для цього запит у форматі:
DELETE FROM Групи WHERE ID=1;
створюємо на бланку запиту, виконавши команду "Конструктор запитів" на вкладці "Створення" у режимі "Режим SQL" з меню Вид.

Зберігаємо запит на ім'я "Видалення_запису_1". В результаті в області переходів з'явиться об'єкт - Видалення_запису_1 (Рис. 5.).



Рис. 5.

Після збереження запиту необхідно виконати запит, клацнувши на піктограмі «Виконати». В результаті виконання команди «Видалення_запису_1» з'явиться вікно діалогу, в якому необхідно ввести значення ID=1 і натиснути кнопку ОК. Після цього відкриється вікно діалогу "Підтвердіть видалення записів". Після підтвердження таблиці " Групи " буде видалено дані у всіх полях, тобто. видалено запис (Мал. 6.).



Рис. 6.

Слід зазначити, що для видалення даних у конкретних полях таблиці доцільно скористатися командою UPDATE та замінити значення у полях на Null. Якщо необхідно видалити таблицю в цілому, слід використовувати оператор DROP TABLE (синтаксис оператора: DROP TABLE Назва_Таблиці;).

Відновимо перший запис у таблиці "Групи", виконавши команду "Добав_1_запису", в результаті відновимо перший запис (Рис. 7.).



Рис. 7.



Зміст статті
1. Найпростіші MySQL запити
2. Прості SELECT (вибрати) запити
3. Прості INSERT (новий запис) запити
4. Прості UPDATE (перезаписати, дописати) запити
5. Прості DELETE (видалити запис) запити
6. Прості DROP (видалити таблицю) запити
7. Складні MySQL запити
8. MySQL запити та змінні PHP

1. Найпростіші SQL запити

1. Виведе список ВСІХ баз.

SHOW databases;
2. Виведе список ВСІХ таблиць у базі даних base_name.

SHOW tables in base_name;

2. Прості SELECT (вибрати) запити до бази MySQL

SELECT- Запит, який вибирає вже існуючі дані з БД. Можна вибрати певні параметри вибору. Наприклад, суть запиту російською мовою звучить так - ВИБРАТИ такі колонки З такої таблиці ДЕ параметр такої колонки дорівнює значенню.

1. Вибирає ВСІ дані у таблиці tbl_name.

SELECT * FROM tbl_name;
2. Виведе кількість записів у таблиці tbl_name.

SELECT count(*) FROM tbl_name;
3. Вибирає (SELECT) з (FROM) таблиці tbl_name ліміт (LIMIT) 3 записи, починаючи з 2.

SELECT * FROM tbl_name LIMIT 2,3;
4. Вибирає (SELECT) ВСІ (*) записи з (FROM) таблиці tbl_name та сортує їх (ORDER BY) по полю id по порядку.

SELECT * FROM tbl_name ORDER BY id;
5. Вибирає (SELECT) ВСІ записи з (FROM) таблиці tbl_name і сортує їх (ORDER BY) по полю id у ЗВОРОТНОМУ порядку.

SELECT * FROM tbl_name ORDER BY id DESC;
6. Вибирає ( SELECT) ВСІ (*) записи з ( FROM) таблиці usersі сортує їх ( ORDER BY) полем idу порядку зростання, ліміт ( LIMIT) перші 5 записів.

SELECT * FROM users ORDER BY id LIMIT 5;
7. Вибирає всі записи з таблиці users, де поле fnameвідповідає значенню Gena.

SELECT * FROM users WHERE fname="Gena";
8. Вибирає всі записи з таблиці users, де значення поля fnameпочинається з Ge.

SELECT * FROM users WHERE fname LIKE "Ge%";
9. Вибирає всі записи з таблиці users, де fnameзакінчується на na, і впорядковує записи у порядку зростання значення id.

SELECT * FROM users WHERE fname LIKE "%na" ORDER BY id;
10. Вибирає всі дані із колонок fname, lnameз таблиці users.

SELECT fname, lname FROM users;

11. Допустимо у Вас у таблиці даних користувача є країна. Так от якщо Ви хочете вивести ТІЛЬКИ список значень, що зустрічаються (щоб, наприклад, Росія не виводилося 20 разів, а тільки один), то використовуємо DISTINCT. Виведе, з маси значень, що повторюються Росія, Україна, Білорусь. Таким чином, з таблиці usersколонки countryбудуть виведені ВСІ УНІКАЛЬНІ значення

SELECT DISTINCT country FROM users;
12. Вибирає всі дані рядків з таблиці usersде ageмає значення 18,19 та 21.

SELECT * FROM users WHERE age IN (18,19,21);
13. Вибирає МАКСИМАЛЬНЕ значення ageв таблиці users. Тобто якщо у Вас у таблиці найбільше значення age(з англ. вік) одно 55, то результатом запиту буде 55.

SELECT max(age) FROM users;
14. Вибере дані з таблиці usersпо полях nameі ageДЕ ageнабуває найменшого значення.

SELECT name, min(age) FROM users;
15. Вибере дані з таблиці usersполем nameДЕ idНЕ РІВНИЙ 2.

SELECT name FROM users WHERE id!="2";

3. Прості INSERT (новий запис) запити

INSERT– запит, який дозволяє ПЕРШОПОЧАТКОВО вставити запис у БД. Тобто створює НОВИЙ запис (рядок) у БД.

1. Робить новий запис у таблиці users, в полі nameвставляє Сергій, а в полі ageвставляє 25. Таким чином, до таблиці дописується новий рядок з даними значеннями. Якщо колонок більше, то вони залишаться або порожніми, або зі встановленими за замовчуванням значеннями.

INSERT INTO users (name, age) VALUES ("Сергій", "25");

4. Прості UPDATE запити до бази MySQL

UPDATE– запит, який дозволяє ПЕРЕЗАПИСАТИ значення полів або ДОПИСАТИ щось у вже існуючому рядку в БД. Наприклад, є готовий рядок, але в ньому потрібно перезаписати параметр віку, оскільки він змінився з часом.

1. У таблиці users ageстає 18.

UPDATE users SET age = "18" WHERE id = "3";
2. Все те саме, що й у першому запиті, просто показаний синтаксис запиту, де перезаписуються два і більше поля.
В таблиці usersДЕ id дорівнює 3 значення поля ageстає 18, а countryРосія.

UPDATE users SET age = "18", country = "Росія" WHERE id = "3";

5. Прості DELETE (видалити запис) запити до бази даних MySQL

DELETE– запит, який видаляє рядок із таблиці.

1. Видаляє рядок із таблиці usersДЕ idдорівнює 10.

DELETE FROM users WHERE id = "10";

6. Прості DROP (видалити таблицю) запити до бази даних MySQL

DROP- Запит, який видаляє таблицю.

1. Видаляє повністю таблицю tbl_name.

DROP TABLE tbl_name;

7. Складні запити до бази даних MySQL

Цікаві запити, які можуть стати в нагоді навіть досвідченим користувачам

SELECT id,name,country FROM users,admins WHERE TO_DAYS(NOW()) - TO_DAYS(registration_date)<= 14 AND activation != "0" ORDER BY registration_date DESC;
Даний складний запит ВИБИРАЄ колонки id,name,countryУ ТАБЛИЦЯХ users,adminsДЕ registration_date(дата) не старше 14 днів І activationНЕ ДОРІВНЮЄ 0 , Сортувати за registration_dateу зворотному порядку (нове на початку).

UPDATE users SET age = "18+" WHERE age = (SELECT age FROM users WHERE male = "man");
Вище вказано приклад так званого запиту у запитіу SQL. Оновити вік серед користувачів на 18+, де стать - чоловіча. Подібних варіантів запиту не рекомендую. З власного досвіду скажу, краще створити кілька окремих - вони будуть опрацьовуватися швидше.

8. Запити до бази даних MySQL та PHP

У MySQL запити в PHP сторінці можна вставляти змінні як порівнювані і тп значень. Пара прикладів

1. Вибирає всі записи з таблиці users, де поле fnameвідповідає значенню змінної $name.

SELECT * FROM users WHERE fname="$name";
2. У таблиці usersДЕ id дорівнює 3 значення поля ageзмінюється значення змінної $age.

UPDATE users SET age = "$age" WHERE id = "3";

Увага!Якщо Вам цікавий ще якийсь приклад, то пишіть питання в коментарі!