Заявление 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, если не сказано иное:
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
Пример
Добавим с помощью первого синтаксиса нового работника Васю с возрастом 23 и зарплатой 500:
INSERT INTO workers SET name='Вася', age=23, salary=500Таблица workers станет выглядеть так:
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
Пример
Добавим с помощью второго синтаксиса нового работника Васю с возрастом 23 и зарплатой 500:
INSERT INTO workers (name, age, salary) VALUES ('Вася', 23, 500)Таблица workers станет выглядеть так:
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
Пример
Добавим одновременно нового работника Васю с возрастом 23 и зарплатой 500 и работника Колю с возрастом 30 и зарплатой 1000:
INSERT INTO workers (name, age, salary) VALUES ('Вася', 23, 500), ('Коля', 30, 1000)1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
Пример
Давайте добавим нового работника Васю с возрастом 23, но не указав ему зарплату. Вместо нее вставится значение по умолчанию:
INSERT INTO workers (name, age) VALUES ('Вася', 23)Таблица workers станет выглядеть так:
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 | +----+---------------+---------------------------+-------+---------+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 одним запросом
Часто на практике приходится выполнять копирование каких либо данных. Например вместо того, чтобы создавать нового пользователя можно скопировать существующего и просто внести в его профиль нужные изменения - так экономится много времени, особенно если эту задачу приходится повторять часто. Конечно в данной статье речь идёт о копировании сущностей данные которых находятся в пределах одной таблицы.
Вопрос в том как это сделать лучше и проще, да желательно одним запросом?
В 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 может быть произведена в рамках одной таблицы.
Ниже мы копируем и вставляем данные в пределах одной и той же таблицы. Согласитесь, это уже имеет больший практический смысл, чем пример выше.
В случае, если вы работаете с одной таблицей и, если она имеет поле с уникальным индексом, его дублирование нужно как-то обрабатывать. Обычно уникальное поле это исскуственный первичный ключ с 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` - уникальное целочисленное поле) :
Т.е. к строке мы просто конкатенируем "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;Но в любом случае это просто примеры - на практике все может оказаться сложнее и там все будет зависеть от конкретной ситуации.
Кстати! Примеры выше будут работать даже без использования псевдонимов:
Но в более сложных запросах псевдонимы всё же придётся использовать, в любом случае запрос не должен противоречить синтаксису и правилам 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)И получаем такую таблицу с заполненными данными:
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)Дополнительная информация
Если вы ввели неправильные данные в таблицу, то всю таблицу можно очистить с помощью SQL оператора TRUNCATE:
TRUNCATE TABLE ordersЕсли же вы хотите удалить определенную строку, то нужно воспользоваться оператором DELETE, а также указать какую то информацию, описывающую данную строку, например в salespeople это будет snum:
DELETE FROM salespeople WHERE snum = 1При таком запросе удалится одна строка. В принципе можно удалять несколько строк, если в WHERE указать условие, подходящее для нескольких строк.
Заключение
Итак, мы познакомились с оператором INSERT языка SQL, который вставляет данные в таблицы, на примерах сами научились это делать. На этом все, если у вас остались вопросы, то оставляйте их в комментариях.
Поделиться ссылкой:
Похожее
codetown.ru