Вметнете во синтаксата. SQL INSERT INTO SELECT исказ. Примери на sql барање INSERT INTO во MySQL база на податоци

Користејќи SQL, можете да копирате информации од една табела на друга.

Изјавата INSERT INTO SELECT копира податоци од една табела и ги вметнува во постоечка табела.

SQL INSERT INTO SELECT изјава,

Изјавата INSERT INTO SELECT избира податоци од една табела и ги вметнува во постоечка табела. Сите постоечки редови во целната табела не се менуваат.

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

Можеме да ги копираме сите колони од една табела во друга, постоечка табела:

Вметнете ВО табела2
ИЗБЕРИ * ОД табела1;

Или можеме да ги копираме само колоните што ги сакаме во друга, постоечка табела:

Вметнете ВО табела2
(име(и) на_колона)
ИЗБЕРИ Колона_име(и)
ОД табела1;

Демо верзија на базата на податоци

Во ова упатство ќе ја користиме добро познатата база на податоци Northwind.

Подолу е избор од табелата „Клиенти“:

Кориснички IDИме на клиентотЛицето за контактАдресаградПоштенски кодЗемја
1 Алфредс Футеркиште Марија Андерс Обере ул. 57 Берлин 12209 Германија
2 Ана Трухило Емпаредос и хеладос Ана Трухиљо Авда. de la Constitucion 2222 Мексико Д.Ф. 05021 Мексико
3 Антонио Морено Такерија Антонио Морено Матадерос 2312 Мексико Д.Ф. 05023 Мексико

И изборот од табелата „Добавувачи“:

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

Копирање само неколку колони од „Добавувачи“ во „Клиенти“:

Копирање само германски добавувачи на „Клиенти“.

sql барањето INSERT INTO има смисла кога е креирана табела со база на податоци. Тоа е, табелата постои, има име, креирани редови и колони. табелата ја креира операторот: , табелата ја менува операторот .

sql барање INSERT INTO - синтакса на барање

sql барањето INSERT INTO ја има следнава синтакса:

INSERT INTO table_name (во загради, доколку е потребно, вметнете листа на колони каде што сакате да вметнете податоци) VALUES вметнати податоци1, вметнати податоци2, вметнати податоци3.

Можете да вметнете опција IGNORE помеѓу INSERT и INTRO. Тоа не е потребно. Потребни се за заштита на примарните клучеви при уредување табела. Во спротивно, ако при уредувањето се случи дуплирање на примарните клучеви, тогаш при вметнување на опцијата ИГНОРИ, првиот ред со примарниот клуч ќе остане во табелата што се уредува.Другите примарни клучеви ќе бидат избришани. Стандардно, ја испуштаме оваа опција.

Има изборни опции LOW_PRIORITY и DELAYED. Тие ги одредуваат приоритетите за додавање информации во базата на податоци. Првиот специфицира чекање за објавување на базата на податоци, вториот значи баферирање на информации.

Линијата во барањето: INSERT со фразата VALUES ќе ви овозможи да додадете еден ред во табелата со база на податоци. Клаузулата VALUES ги содржи вредностите на овие податоци.

Подпрашањата може да се наведат наместо фразата VALUES. INSERT со подпрашање ги додава редовите вратени од подпрашањето во табелата. Серверот на базата на податоци го обработува подпрашањето и ги вметнува сите вратени редови во табелата. Серверот не вметнува редови освен ако подпрашањето не ги избере.

  • subquery_1 - подпрашање што серверот го обработува на ист начин како приказот
  • subquery_2 е подпрашање што враќа редови вметнати во табелата. Списокот на ова подпрашање мора да има ист број на колони како и списокот со колони INSERT.

Подпрашањата практично не се користат во базата на податоци на MySQL.

Примери на sql барање INSERT INTO во MySQL база на податоци

Вметнуваме нови редови во базата на податоци MySQL користејќи ја командата INSERT INTRO.

Прв пример.

Вметнете нови редови во табела table_name.

INSERT INTO table_name VALUES ('2','145','1', 'име');

Ова значи дека сакаме да ги вметнеме вредностите 2,145,1, name во колоните табела_име на табелата. Бидејќи колоните не се наведени, вредностите се пополнуваат во сите колони од табелата.

Пример два.

Вметнете информации во бараните (наведени) колони од табелата име на табела.

INSERT INTO табела_име (клиент_клиент, клиент_подклиент, клиент_пошта) VALUES („име1“, „подиме 1“,“ [заштитена е-пошта]"), ("име 2", "потиме 2"," [заштитена е-пошта]'), ('име3','потиме3',(' [заштитена е-пошта]′);

Игор Серов специјално за страницата "".

Последно ажурирање: 13.07.2017

За да додадете податоци, користете ја командата INSERT, која ја има следната формална синтакса:

Внесете име на табела [(список_колона)] VALUES (вредност1, вредност2, ... вредностN)

Прво доаѓа изразот INSERT INTO, потоа во загради можете да наведете список на колони одвоени со запирки на кои треба да се додадат податоците, а на крајот, по зборот VALUES, вредностите што треба да се додадат за колоните се наведени во загради.

На пример, да претпоставиме дека следнава база на податоци е претходно креирана:

КРЕИРАЈ БАЗА НА ПОДАТОЦИ производиdb; GO USE productsdb; КРЕИРАЈ ТАБЕСКИ производи (ID INT ИДЕНТИТЕТСКИ ПРИМАРЕН КЛУЧ, Име на производ NVARCHAR(30) НЕ NULL, Производител NVARCHAR(20) НЕ NULL, Број на производи ИНТ ПОСТАНДНО 0, Цена ПАРИ НЕ NULL)

Ајде да додадеме една линија на неа користејќи ја командата INSERT:

INSERT Products VALUES („iPhone 7“, „Apple“, 5, 52000)

По успешното извршување во SQL Server Management Studio, пораката „1 ред(и) е засегнат“ треба да се појави во полето за порака:

Вреди да се земе предвид дека вредностите за колоните во загради по клучниот збор VALUES се пренесуваат по редоследот по кој се декларирани. На пример, во изјавата CREATE TABLE погоре, можете да видите дека првата колона е Id. Но, бидејќи за него е наведен атрибутот IDENTITY, вредноста на оваа колона автоматски се генерира и може да се изостави. Втората колона го претставува ProductName, така што првата вредност, низата „iPhone 7“, ќе биде предадена на таа колона. Втората вредност - низата „Apple“ ќе биде предадена на третата колона Производител и така натаму. Тоа е, вредностите се пренесуваат во колоните на следниов начин:

    Име на производ: „iPhone 7“

    Производител: „Епл“

Исто така, кога внесувате вредности, можете да ги наведете непосредните колони на кои ќе се додадат вредностите:

ВНЕСЕТЕ ВО Производите (име на производ, цена, производител) ВРЕДНОСТИ („iPhone 6S“, 41000, „Apple“)

Овде вредноста е наведена само за три колони. Покрај тоа, сега вредностите се пренесуваат по редоследот на колоните:

    Име на производ: „iPhone 6S“

    Производител: „Епл“

За неодредени колони (во овој случај ProductCount), ќе се додаде стандардна вредност ако е наведен атрибутот DEFAULT или NULL вредност. Сепак, неодредените колони мора да бидат поништени или да имаат Атрибут DEFAULT.

Исто така, можеме да додадеме неколку линии одеднаш:

ВНЕСЕТЕ ВО ВРЕДНОСТИ ВО производите („iPhone 6“, „Apple“, 3, 36000), („Galaxy S8“, „Samsung“, 2, 46000), („Galaxy S8 Plus“, „Samsung“, 1, 56000)

Во овој случај, три реда ќе бидат додадени на табелата.

Исто така, при додавање, можеме да одредиме дека колоната треба да има стандардна вредност користејќи го клучниот збор DEFAULT или NULL вредност:

ВНЕСЕТЕ ВО Производите (Име на производот, производител, Број на производи, Цена) ВРЕДНОСТИ („Mi6“, „Xiaomi“, STAFAULT, 28000)

Во овој случај, ќе се користи стандардната вредност за колоната ProductCount (ако е поставена, ако не е, тогаш NULL).

Ако сите колони имаат DEFAULT атрибут што ја одредува стандардната вредност или се поништливи, можете да вметнете стандардни вредности за сите колони:

Вметнете ги стандардните вредности во производите

Но, ако ја земеме табелата Производи, тогаш таквата команда ќе пропадне со грешка, бидејќи неколку полиња го немаат атрибутот DEFAULT и во исто време не ја дозволуваат вредноста NULL.

Што е INSERT INTO?

Главната цел на системите за бази на податоци е да складираат податоци во табелите. Податоците обично се обезбедуваат од апликативни програми кои работат на врвот на базата на податоци. За таа цел, SQL ја има командата INSERT која се користи за складирање податоци во табела. На Командата INSERT создава нов редво табелата за складирање податоци.

Основна синтакса

Да ја погледнеме основната синтакса на командата SQL INSERT прикажана подолу.

INSERT INTO `Table_name`(колона_1,колона_2,...) VALUES (вредност_1,вредност_2,...);

  • Вметнете ВО `име на табела`е командата што му кажува на MySQL серверот да додаде нов ред во табела со име „име на табела“.
  • (колона_1,колона_2,...)ги одредува колоните што треба да се ажурираат во новиот ред
  • VALUES (вредност_1, вредност_2,...)ги одредува вредностите што треба да се додадат во новиот ред

Кога се доставуваат вредностите на податоците што треба да се вметнат во новата табела, треба да се земе предвид следново додека се работи со различни типови податоци.

  • Видови на стринг податоци- сите вредности на низата треба да бидат затворени во единечни наводници.
  • Нумерички типови на податоци- сите нумерички вредности треба да се доставуваат директно без да се ставаат во единечни или двојни наводници.
  • Типови на податоци за датум- приложете ги вредностите на датумот во единечни наводници во формат „ГГГГ-ММ-ДД“.

Пример:

Да претпоставиме дека ја имаме следната листа на нови членови на библиотеката кои треба да се додадат во базата на податоци.

Целосни имиња Дата на раѓање полот Физичка адреса поштенска адреса Број за контакт И-мејл адреса
Леонард Хофштатер Машки Дрвенест 0845738767
Шелдон Купер Машки Дрвенест 0976736763
Рајеш Кутрапали Машки Fairview 0938867763
Лесли Винкл 14/02/1984 Машки 0987636553
Хауард Воловиц 24/08/1981 Машки Јужен Парк П.О. Кутија 4563 0987786553

Ајде" ВНЕСЕТЕ податоци еден по еден. Ќе започнеме со Леонард Хофстадтер. Бројот за контакт ќе го третираме како тип на нумерички податок и нема да го ставаме бројот во единечни наводници.

INSERT INTO `членови` (`полни_имиња`,`род`,`физичка_адреса`,`контакт_број`) ВРЕДНОСТИ („Леонард Хофстадтер“, „Машко“, „Вудкрест“,0845738767);

Извршувањето на горната скрипта го исфрла 0 од контактниот број на Леонард. Тоа е затоа што вредноста ќе се третира како нумеричка вредност и нулата (0) на почетокот е исфрлена бидејќи не е значајна.

За да се избегнат вакви проблеми, вредноста мора да биде затворена во единечни наводници како што е прикажано подолу -

ВНЕСЕТЕ ВО `членови` (`полни_имиња`,`род`,`физичка_адреса`,`контакт_број`) ВРЕДНОСТИ („Шелдон Купер“, „Машко“, „Вудкрест“, „0976736763“);

Во горенаведениот случај, нула (0) нема да се исфрли

Промената на редоследот на колоните нема ефект врз барањето INSERT се додека точните вредности се мапирани на правилните колони.

Прашањето прикажано подолу ја покажува горната точка.

INSERT INTO `членови` (`контакт_број`,`род`,`полни_имиња`,`физичка_адреса`) VALUES („0938867763“, „Машко“, „Рајеш Кутрапали“, „Дрвено крест“);

Горенаведените прашања ја прескокнаа колоната за датум на раѓање, стандардно MySQL ќе вметне NULL вредности во колоните што се прескокнуваат во барањето INSERT.

Ајде сега да го вметнеме записот за Лесли во кој е даден датумот на раѓање. Вредноста на датумот треба да биде затворена во единечни наводници користејќи го форматот „ГГГГ-ММ-ДД“.

ВНЕСЕТЕ ВО „членови“ („полни_имиња“, „датум_на_раѓање“, „пол“, „физичка_адреса“, „контакт_број“) ВРЕДНОСТИ („Лесли Винкл“, „1984-02-14“, „Машко“, „Дрвено крзно“,“ 0987636553");

Сите горенаведени прашања ги специфицираа колоните и ги мапираа на вредностите во изјавата за вметнување. Ако даваме вредности за СИТЕ колони во табелата, тогаш можеме да ги изоставиме колоните од барањето за вметнување.

ВНЕСЕТЕ ВО ВРЕДНОСТИ НА „членови“ (9,"Howard Wolowitz", "Male", "1981-08-24", "SouthPark", "P.O. Box 4563", "0987786553", "lwolowitzemail.me");

Ајде сега да ја користиме изјавата SELECT за да ги прикажеме сите редови во табелата за членови. SELECT * FROM `members`;

членски_бројцелосни_имињаполотДата на раѓањефизичка адресапоштенска адресаконтакт_броје-пошта
1 Џенет ЏонсЖенски21-07-1980 Прва улица Парцела бр.4Приватна торба0759 253 542 Оваа адреса на е-пошта е заштитена од спамботови. Треба да вклучите JavaScript за да го видите.
2 Џенет Смит ЏонсЖенски23-06-1980 Мелроуз 123НУЛАНУЛАОваа адреса на е-пошта е заштитена од спамботови. Треба да вклучите JavaScript за да го видите.
3 Роберт ФилМашки12-07-1989 Трета улица 34НУЛА12345 Оваа адреса на е-пошта е заштитена од спамботови. Треба да вклучите JavaScript за да го видите.
4 Глорија ВилијамсЖенски14-02-1984 Втора улица 23НУЛАНУЛАНУЛА
5 Леонард ХофштатерМашкиНУЛАДрвенестНУЛА845738767 НУЛА
6 Шелдон КуперМашкиНУЛАДрвенестНУЛА976736763 НУЛА
7 Рајеш КутрапалиМашкиНУЛАДрвенестНУЛА938867763 НУЛА
8 Лесли ВинклМашки14-02-1984 ДрвенестНУЛА987636553 НУЛА
9 Хауард ВоловицМашки24-08-1981 Јужен ПаркП.О. Кутија 4563987786553 Оваа адреса на е-пошта е заштитена од спамботови. Треба да вклучите JavaScript за да го видите.

Забележете дека бројот за контакт за Леонард Хофстадтер ја исфрли нулата (0) од бројот за контакт. Останатите броеви за контакт не ја намалија нулата (0) на почетокот.

Вметнување во табела од друга табела

Командата INSERT може да се користи и за вметнување податоци во табела од друга табела. Основната синтакса е како што е прикажано подолу.

INSERT INTO table_1 SELECT * FROM table_2;

Ајде сега да погледнеме практичен пример, ќе создадеме лажна табела за категории на филмови за целите на демонстрација. Табелата за новите категории ќе ја наречеме категории_архива. Скриптата прикажана подолу ја креира табелата.

КРЕИРАЈ ТАБЕЛА „Архива_категории“ („категорија_ид“ int(11) AUTO_INCREMENT, „име на_категорија“ varchar(150) DEFAULT NULL, `забелешки` varchar(500) STAFAULT NULL, ПРИМАРЕН КЛУЧ (`id_категорија`)

Извршете ја горната скрипта за да ја креирате табелата.

Ајде сега да ги вметнеме сите редови од табелата со категории во табелата со архиви на категории. Скриптата прикажана подолу ни помага да го постигнеме тоа.

INSERT INTO `categories_archive` SELECT * FROM `categories`;

Извршувањето на горната скрипта ги вметнува сите редови од табелата со категории во табелата со архиви на категории. Забележете дека структурите на табелата ќе мора да бидат исти за сценариото да работи. Поцврста скрипта е онаа што ги мапира имињата на колоните во табелата за вметнување со оние во табелата што ги содржат податоците.

Прашањето прикажано подолу ја покажува неговата употреба.

INSERT INTO `categories_archive`(category_id,category_name,remarks) ИЗБЕРИ ИД на категорија_категорија,име на_категорија,забелешки ОД „категории“;

Извршување на барањето SELECT

ИЗБЕРЕТЕ * ОД „Архива_категории“.

ги дава следните резултати прикажани подолу.

категорија_идкатегорија_имезабелешки
1 КомедијаФилмови со хумор
2 РомантичниЉубовни приказни
3 ЕпПриказни за антички филмови
4 УжасНУЛА
5 Научна фантастикаНУЛА
6 ТрилерНУЛА
7 АкцијаНУЛА
8 Романтична комедијаНУЛА
9 Цртани филмовиНУЛА
10 Цртани филмовиНУЛА

Резиме

  • Командата INSERT се користи за додавање нови податоци во табела
  • Вредностите на датумот и низата треба да бидат затворени во единечни наводници.
  • Нумеричките вредности не треба да се ставаат во наводници.
  • Командата INSERT може да се користи и за вметнување податоци од една табела во друга.

Покрај изјавата SELECT што беше дискутирана претходно, јазикот за манипулација со податоци (DML) содржи три други изјави: INSERT, UPDATE и DELETE. Како и изјавата SELECT, овие три изјави функционираат или на табели или на прегледи. Оваа статија ја покрива изјавата INSERT, а другите две изјави се опфатени во следната статија.

Внесете изјававметнува редови (или делови од редови) во табела. Постојат две различни форми на оваа инструкција:

Внесете го_името на јазичето [(col_list)] СТАНДАРНИ ВРЕДНОСТИ | ВРЕДНОСТИ (( Стандардно | NULL | израз ) [ ,...n]) Вметни ВО tab_име | view_name [(col_list)] (select_statement | execute_statement) Конвенции на синтакса

Првата форма на инструкцијата ви овозможува да вметнете еден ред (или дел од него) во табелата. И втората форма на изјавата INSERT ви овозможува да го вметнете во табела множеството резултати од изјавата SELECT или складирана процедура извршена со изјава EXECUTE. Зачуваната процедура мора да врати податоци што треба да се вметнат во табелата. Кога се користи со изјава INSERT, изјавата SELECT може да избере вредности од различна или иста табела во која се вметнуваат податоците, се додека типовите на податоци на соодветните колони се компатибилни.

За двата формулари, типот на податоци на секоја вметната вредност мора да биде компатибилен со типот на податоци од соодветната колона од табелата. Сите низи и привремени податоци мора да бидат затворени во наводници; Нумеричките вредности не треба да се ставаат во наводници.

Вметнување на еден ред

За двете форми на изјавата INSERT, експлицитното наведување на списокот со колони е изборно. Да не се наведуваат колони е исто како да се специфицираат сите колони во табелата.

DEFAULT VALUES параметарвметнува стандардни вредности за сите колони. Колоните со типот на податоци TIMESTAMP или својството IDENTITY стандардно се вметнуваат со вредности кои автоматски се генерираат од системот. За колони од други типови податоци, соодветната не-нулта стандардна вредност се вметнува ако е достапна, или NULL во спротивно. Ако колоната не дозволува нула вредности и нема дефинирана стандардна вредност, изјавата INSERT не успее и се прикажува порака.

Примерот подолу вметнува редови во табелата Employee во базата на податоци SampleDb, демонстрирајќи ја употребата на изјава INSERT за вметнување мала количина на податоци во базата на податоци:

КОРИСТЕТЕ SampleDb; ВНЕСЕТЕ ВО ВРЕДНОСТИ НА ВРАБОТНИЦИТЕ (34990, „Андреј“, „Батонов“, „д1“); ВНЕСЕТЕ ВО ВРЕДНОСТИ НА ВРАБОТНИЦИТЕ (38640, „Алексеј“, „Васин“, „д3“);

Постојат два различни начинивметнување вредности во нова линија. Изјавата INSERT во примерот подолу експлицитно го користи клучниот збор NULL и вметнува NULL вредност во соодветната колона:

КОРИСТЕТЕ SampleDb; INSERT INTO Employee VALUES (34991, "Andrey", "Batonov", NULL);

За да внесете вредности во некои (но не сите) колони од табелата, обично треба експлицитно да ги наведете тие колони. Неодредените колони мора или да дозволуваат NULL вредности или да имаат дефинирана стандардна вредност.

КОРИСТЕТЕ SampleDb; INSERT INTO Employee(Id, FirstName, LastName) VALUES (34992, „Андреј“, „Батонов“);

Претходните два примери се еквивалентни. Во табелата Employee, единствената колона што дозволува NULL вредности е колоната DepartmentNumber, а сите други колони беа оневозможени со клаузулата NOT NULL во изјавата CREATE TABLE.

Ред на вредности во VALUES понуда INSERT изјавите може да се разликуваат од редоследот наведен во изјавата CREATE TABLE. Во овој случај, нивниот редослед мора да одговара на редоследот по кој соодветните колони се наведени во списокот со колони. Подолу е пример за вметнување податоци по различен редослед од оригиналот:

КОРИСТЕТЕ SampleDb; INSERT INTO Employee (Departament Number, LastName, Id, FirstName) ВРЕДНОСТИ ("d1", "Batonov", 34993, "Andrey");

Вметнување повеќе редови

Втората форма на изјавата INSERT вметнува еден или повеќе редови избрани од подпрашање во табелата. Примерот подолу покажува како да вметнете редови во табела користејќи ја втората форма на изјавата INSERT. Во овој случај, се извршува барање за избор на броеви и имиња на одделенијата лоцирани во Москва, а добиениот сет на резултати се вчитува во нова табела создадена порано.

Новата табела MoscowDepartment создадена во примерот погоре ги има истите колони како и постоечката табела на Одделот, освен колоната Локација што недостасува. Подпрашањето во изјавата INSERT ги избира сите редови во табелата Оддел за кои вредноста на колоната Локација е „Москва“, кои потоа се вметнуваат во новата табела создадена на почетокот на барањето.

Примерот подолу покажува друг начин за вметнување редови во табела користејќи ја втората форма на изјавата INSERT. Во овој случај, се извршува барање за избор на персонални броеви, броеви на проекти и датуми за започнување на проектот за сите вработени со позиција „Менаџер“ кои работат на проектот p2 и потоа се вчитува добиениот резултат поставен во нова табела создадена на почетокот на барањето:

КОРИСТЕТЕ SampleDb; CREATE TABLE ManagerTeam (EmpId INT NOT NULL, Project Number CHAR (4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam (EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = "Manager";

Пред да вметнете редови користејќи ја изјавата INSERT, табелите на MoscowDepartment и ManagerTeam (во примерите погоре) беа празни. Ако табелата веќе постоела и содржела редови со податоци, тогаш на неа би се додале нови редови.


Врв