Заявление SQL INSERT INTO SELECT,. Values insert into sql пример


Команда INSERT - вставка записей в базу данных

Команда INSERT вставляет записи в базу данных. Можно вставить или одну запись, или сразу несколько.

См. также команды SELECT, UPDATE, DELETE, которые отвечают за получение, редактирование и удаление записей.

См. также команду SELECT INTO, которая копирует данные из одной таблицы в другую.

Синтаксис

Первый синтаксис:

INSERT INTO имя_таблицы SET поле1=значение1, поле2=значение2, поле3=значение3...

Второй синтаксис:

INSERT INTO имя_таблицы (поле1, поле2...) VALUES (значение1, значение2...)

Одновременно много записей:

INSERT INTO имя_таблицы (поле1, поле2...) VALUES (значение1, значение2...), (значение1, значение2...)..."

Примеры

Все примеры будут по этой таблице workers, если не сказано иное:

id айди name имя age возраст salary зарплата
1 Дима 23 400
2 Петя 25 500

Пример

Добавим с помощью первого синтаксиса нового работника Васю с возрастом 23 и зарплатой 500:

INSERT INTO workers SET name='Вася', age=23, salary=500

Таблица workers станет выглядеть так:

id айди name имя age возраст salary зарплата
1 Дима 23 400
2 Петя 25 500
3 Вася 23 500

Пример

Добавим с помощью второго синтаксиса нового работника Васю с возрастом 23 и зарплатой 500:

INSERT INTO workers (name, age, salary) VALUES ('Вася', 23, 500)

Таблица workers станет выглядеть так:

id айди name имя age возраст salary зарплата
1 Дима 23 400
2 Петя 25 500
3 Вася 23 500

Пример

Добавим одновременно нового работника Васю с возрастом 23 и зарплатой 500 и работника Колю с возрастом 30 и зарплатой 1000:

INSERT INTO workers (name, age, salary) VALUES ('Вася', 23, 500), ('Коля', 30, 1000)

Таблица workers станет выглядеть так:

id айди name имя age возраст salary зарплата
1 Дима 23 400
2 Петя 25 500
3 Вася 23 500
4 Коля 30 1000

Пример

Давайте добавим нового работника Васю с возрастом 23, но не указав ему зарплату. Вместо нее вставится значение по умолчанию:

INSERT INTO workers (name, age) VALUES ('Вася', 23)

Таблица workers станет выглядеть так:

id айди name имя age возраст salary зарплата
1 Дима 23 400
2 Петя 25 500
3 Вася 23 0

code.mu

Заявление SQL INSERT INTO SELECT,

С помощью SQL, вы можете копировать информацию из одной таблицы в другую.

INSERT INTO ЗЕЬЕСТ, чтобы скопировать данные из таблицы, а затем вставить данные в существующую таблицу.

Заявление SQL INSERT INTO SELECT,

INSERT INTO ЗЕЬЕСТ, чтобы скопировать данные из таблицы, а затем вставить данные в существующую таблицу. Целевая таблица все строки, которые уже существуют, не затрагиваются.

Синтаксис SQL INSERT INTO SELECT,

Мы можем повторить все столбцы из таблицы в другую существующую таблицу:

INSERT INTO table2 SELECT * FROM table1;

Или же мы можем просто скопировать нужные столбцы в другую существующую таблицу:

INSERT INTO table2 (column_name(s)) SELECT column_name(s) FROM table1;

Демонстрационная база данных

В этом уроке мы будем использовать w3big образец базы данных.

Ниже приводится выбранные "сайты" таблица данных:

+----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | 本教程 | http://www.w3big.com/ | 4689 | CN | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+

Вот "приложения" Данные APP:

mysql> SELECT * FROM apps; +----+------------+-------------------------+---------+ | id | app_name | url | country | +----+------------+-------------------------+---------+ | 1 | QQ APP | http://im.qq.com/ | CN | | 2 | 微博 APP | http://weibo.com/ | CN | | 3 | 淘宝 APP | https://www.taobao.com/ | CN | +----+------------+-------------------------+---------+ 3 rows in set (0.00 sec)

SQL INSERT INTO SELECT, Примеры

Копирование данных "приложения" вставляются в "сайты" в:

примеров

INSERT INTO Websites (name, country) SELECT app_name, country FROM apps;

QQ только комплекс APP на "Сайты" в:

примеров

INSERT INTO Websites (name, country) SELECT app_name, country FROM pWHERE id=1;

www.w3big.com

MySql INSERT SELECT одним запросом

В этой заметке хочу рассказать об одной особенности использования SQL операторов INSERT SELECT. Конечно для подобных вещей мне бы выделить отдельную категорию, и назвать её, скажем, SQL, но так как статей на эту тему у меня пока мало поместим её сюда.

Часто на практике приходится выполнять копирование каких либо данных. Например вместо того, чтобы создавать нового пользователя можно скопировать существующего и просто внести в его профиль нужные изменения - так экономится много времени, особенно если эту задачу приходится повторять часто. Конечно в данной статье речь идёт о копировании сущностей данные которых находятся в пределах одной таблицы.

Вопрос в том как это сделать лучше и проще, да желательно одним запросом?

В MySql для этого в операторе INSERT можно использовать оператор SELECT следующим образом (здесь мы копируем данные из одной таблицы в другую, имеющую такую же структуру):

INSERT INTO `some_table` (`fld1`,`fld2`,`fld3`) SELECT `some_table2`.`fld1`, `some_table2`.`fld2`, `some_table2`.`fld3` FROM `some_table2` WHERE `some_table2`.`fld` > 100;

Стоит заметить, что операция INSERT SELECT может быть произведена в рамках одной таблицы.

Ниже мы копируем и вставляем данные в пределах одной и той же таблицы. Согласитесь, это уже имеет больший практический смысл, чем пример выше.

INSERT INTO `some_table` (`fld1`,`fld2`,`fld3`) SELECT `src`.`fld1`, `src`.`fld2`, `src`.`fld3` FROM `some_table` AS `src` WHERE `src`.`fld` > 100;

В случае, если вы работаете с одной таблицей и, если она имеет поле с уникальным индексом, его дублирование нужно как-то обрабатывать. Обычно уникальное поле это исскуственный первичный ключ с AUTO_INCREMENT, и как правило в этой ситуации его можно просто не указывать - система его создаст самостоятельно. Но, если у вас есть ещё уникальные индексы, то при копировании необходимо о них позаботиться. Например как вариант следующим образом (`unic_int_field` - уникальное целочисленное поле):

INSERT INTO `some_table` (`fld1`,`fld2`,`fld3`,`unic_int_field`) SELECT `src`.`fld1`, `src`.`fld2`, `src`.`fld3` , (`unic_int_field` + 1) FROM `some_table` AS `src` WHERE `src`.`fld` > 100;

Если поле имеет один из строковых типов данных, то как вариант можно использовать следующий маневр (`unic_name` - уникальное поле с символьным типом данных,`unic_int_field` - уникальное целочисленное поле) :

INSERT INTO `some_table` (`name`,`ins_payment`,`description`,`franchise`,`checked_out`) SELECT CONCAT("COPY ", SYSDATE(), " : ", `unic_name`), `src`.`fld1`, `src`.`fld2`, `src`.`fld3` , (`unic_int_field` + 1) FROM `some_table` AS `src` WHERE `src`.`fld` > 100;

Т.е. к строке мы просто конкатенируем "COPY " и текущее дату-время. Таким образом вновь созданное поле с большой долей вероятности будет иметь уникальное значение, и дублирования, и как следствия ошибки запроса не произойдёт. Но что бы система работала более стабильно можно использовать ключевое слово IGNORE. Тогда, если вдруг у вас всё таки, что-то продублируется - ошибки не произойдёт, а MySql сообщит что запрос выполнен, но эффект затронул 0 строк. А эту ситуацию вы легко обработаете в клиентском коде:

INSERT IGNORE INTO `some_table` (`name`,`ins_payment`,`description`,`franchise`,`checked_out`) SELECT CONCAT("COPY ", SYSDATE(), " : ", `unic_name`), `src`.`fld1`, `src`.`fld2`, `src`.`fld3` , (`unic_int_field` + 1) FROM `some_table` AS `src` WHERE `src`.`fld` > 100;

Но в любом случае это просто примеры - на практике все может оказаться сложнее и там все будет зависеть от конкретной ситуации.

Кстати! Примеры выше будут работать даже без использования псевдонимов:

INSERT INTO `some_table` (`name`,`ins_payment`,`description`,`franchise`,`checked_out`) SELECT CONCAT("COPY ", SYSDATE(), " : ", `unic_name`), `fld1`, `fld2`, `fld3` , (`unic_int_field` + 1) FROM `some_table` WHERE `fld` > 100;

Но в более сложных запросах псевдонимы всё же придётся использовать, в любом случае запрос не должен противоречить синтаксису и правилам SQL

Справка на английском (увы) по INSERT SELECT для MySql

Надеюсь статья окажется вам полезной.

php-zametki.ru

Оператор INSERT в SQL, примеры

Здравствуйте, уважаемые читатели. Продолжаем изучать запросы на языке SQL, и сегодня мы затронем еще один важный оператор — INSERT SQL. Разберем примеры, связанные с этим оператором.

Введение

Напомним, что в прошлый раз мы создали базу данных и три таблицы с помощью оператора CREATE, подробнее вы можете почитать об этом здесь.

Таблицы, которые были созданы (Salespeople (Продавцы), Customers (Заказчики), Orders (Заказы)) пока что не содержат никаких данных. И, конечно, следует заполнить их данными, подходящими для каждой таблицы в отдельности.

Общая информация об INSERT в SQL

В SQL заполнение таблиц данными можно осуществить с помощью оператора INSERT INTO. В общем виде, запрос в базе данных можно представить так:

INSERT INTO имя_таблицы (список_столбцов_для_вставки) VALUES (список_вставляемых_значений)

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

INSERT INTO salespeople (snum, sname) VALUES (1001, "Колованов", "Москва")

то система, в которой выполняется этот SQL запрос, выдаст ошибку.

Примеры с оператором INSERT

Для начала мы выполним SQL запросы, которые добавят данные в наши таблицы, чтобы в следующих статьях мы могли к ним обращаться и каким либо образом взаимодействовать. Начнем с таблицы salespeople, у которой 4 столбца:

INSERT INTO salespeople (snum, sname, city, comm) VALUES (1, "Колованов", "Москва", 10), (2, "Петров", "Тверь", 25), (3, "Плотников", "Москва", 22), (4, "Кучеров", "Санкт-Петербург", 28), (5, "Малкин", "Санкт-Петербург", 18), (6, "Шипачев", "Челябинск", 30), (7, "Мозякин", "Одинцово", 25), (8, "Проворов", "Москва", 25)

Примечание: чтобы понять, правильно ли сработал запрос, нужно вывести данные таблицы. Это делается с помощью оператора SQL — SELECT (это тема следующих статей, поэтому здесь разберем кратко). Выполняем запрос:

SELECT * FROM salespeople

И получаем такую таблицу с заполненными данными:

snumsnamecitycomm
1КоловановМосква10
2ПетровТверь25
3ПлотниковМосква22
4КучеровСанкт-Петербург28
5МалкинСанкт-Петербург18
6ШипачевЧелябинск30
7МозякинОдинцово25
8ПроворовМосква25

Итак, далее заполним остальные таблицы:

INSERT INTO customers (cnum, cname, city, rating, snum) VALUES (1, "Деснов", "Москва", 90, 6), (2, "Краснов", "Москва", 95, 7), (3, "Кириллов", "Тверь", 96, 3), (4, "Ермолаев", "Обнинск", 98, 3), (5, "Колесников", "Серпухов", 98, 5), (6, "Пушкин", "Челябинск", 90, 4), (7, "Лермонтов", "Одинцово", 85, 1), (8, "Белый", "Москва", 89, 3), (9, "Чудинов", "Москва", 96, 2), (10, "Лосев", "Одинцово", 93, 8) INSERT INTO orders (onum, amt, odate, cnum, snum) VALUES (1001, 128, '2016-01-01', 9, 4), (1002, 1800, '2016-04-10', 10, 7), (1003, 348, '2017-04-08', 2, 1), (1004, 500, '2016-06-07', 3, 3), (1005, 499, '2017-12-04', 5, 4), (1006, 320, '2016-03-03', 5, 4), (1007, 80, '2017-09-02', 7, 1), (1008, 780, '2016-03-07', 1, 3), (1009, 560, '2017-10-07', 3, 7), (1010, 900, '2016-01-08', 6, 8)

На всякий случай напомню, что в таблице orders(заказы) колонка amt означает стоимость заказа, cnum — номер покупателя, snum — номер продавца, оформившего сделку.

Дополнительная информация

Если вы ввели неправильные данные в таблицу, то всю таблицу можно очистить с помощью SQL оператора TRUNCATE:

TRUNCATE TABLE orders

Если же вы хотите удалить определенную строку, то нужно воспользоваться оператором DELETE, а также указать какую то информацию, описывающую данную строку, например в salespeople это будет snum:

DELETE FROM salespeople WHERE snum = 1

При таком запросе удалится одна строка. В принципе можно удалять несколько строк, если в WHERE указать условие, подходящее для нескольких строк.

Заключение

Итак, мы познакомились с оператором INSERT языка SQL, который вставляет данные в таблицы, на примерах сами научились это делать. На этом все, если у вас остались вопросы, то оставляйте их в комментариях.

Поделиться ссылкой:

Похожее

codetown.ru