Umetnuti u sintaksu. SQL INSERT INTO SELECT izraz. Primjeri sql upita INSERT INTO u MySQL bazi podataka

Koristeći SQL, možete kopirati informacije iz jedne tablice u drugu.

Naredba INSERT INTO SELECT kopira podatke iz jedne tablice i umeće ih u postojeću tablicu.

SQL INSERT INTO SELECT izraz,

INSERT INTO SELECT izraz bira podatke iz jedne tabele i umeće ih u postojeću tabelu. Svi postojeći redovi u ciljnoj tablici se ne mijenjaju.

SQL INSERT INTO SELECT, Sintaksa

Možemo kopirati sve kolone iz jedne tabele u drugu, postojeću tabelu:

INSERT INTO tabela 2
SELECT * FROM table1;

Ili možemo kopirati samo kolone koje želimo u drugu, postojeću tablicu:

INSERT INTO tabela 2
(naziv_stupca)
SELECT naziv(i) kolone
OD table1;

Demo verzija baze podataka

U ovom vodiču ćemo koristiti dobro poznatu bazu podataka Northwind.

Ispod je izbor iz tabele "Kupci":

Korisnički brojIme klijentaOsoba za kontaktAdresagradPoštanski brojZemlja
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Njemačka
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitucion 2222 Meksiko D.F. 05021 Meksiko
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Meksiko D.F. 05023 Meksiko

I izbor iz tabele "Dobavljači":

SQL INSERT INTO SELECT, Primjeri

Kopiranje samo nekoliko kolona iz "Dobavljači" u "Kupci":

Kopiranje samo njemačkih dobavljača na "Kupce".

sql upit INSERT INTO ima smisla kada je kreirana tablica baze podataka. Odnosno, tabela postoji, ima ime, kreirane redove i kolone. tablicu kreira operator: , tablicu mijenja operator .

sql upit INSERT INTO - sintaksa upita

sql upit INSERT INTO ima sljedeću sintaksu:

INSERT INTO table_name (u zagradama, ako je potrebno, umetnite listu kolona u koje želite da umetnete podatke) VRIJEDNOSTI umetnuti podaci1, umetnuti podaci2, umetnuti podaci3.

Možete umetnuti opciju IGNORE između INSERT i INTRO. Nije potrebno. Potrebno za zaštitu primarnih ključeva prilikom uređivanja tabele. U suprotnom, ako dođe do dupliciranja primarnih ključeva tokom uređivanja, tada će prilikom umetanja opcije IGNORE prvi red sa primarnim ključem ostati u tabeli koja se uređuje, a ostali primarni ključevi će biti obrisani. Podrazumevano izostavljamo ovu opciju.

Postoje opcione opcije LOW_PRIORITY i DELAYED. Oni određuju prioritete za dodavanje informacija u bazu podataka. Prvi specificira čekanje da se baza podataka oslobodi, drugi znači baferiranje informacija.

Red u upitu: INSERT sa frazom VALUES će vam omogućiti da dodate jedan red u tablicu baze podataka. Klauzula VALUES sadrži vrijednosti ovih podataka.

Podupiti se mogu specificirati umjesto fraze VALUES. INSERT sa potupitom dodaje redove koje je podupit vratio u tabelu. Poslužitelj baze podataka obrađuje podupit i umeće sve vraćene redove u tablicu. Server ne umeće redove osim ako ih potupit ne izabere.

  • podupit_1 - podupit koji server obrađuje na isti način kao i pogled
  • subquery_2 je potupit koji vraća redove umetnute u tablicu. Lista ovog potupita mora imati isti broj stupaca kao lista stupaca INSERT.

Potupiti se praktično ne koriste u MySQL bazi podataka.

Primjeri sql upita INSERT INTO u MySQL bazi podataka

Ubacujemo nove redove u MySQL bazu podataka pomoću naredbe INSERT INTRO.

Prvi primjer.

Umetnite nove redove u tablicu table_name.

INSERT INTO table_name VALUES ('2′,'145′,'1′,'name');

To znači da želimo umetnuti vrijednosti 2,145,1,name u kolone tablice table_name. Pošto kolone nisu specificirane, vrijednosti se popunjavaju u svim stupcima tabele.

Primjer dva.

Umetnite informacije u potrebne (specificirane) stupce tablice table_name.

INSERT INTO table_name (client_customer, client_subclient, client_mail) VRIJEDNOSTI ('name1','subname1',' [email protected]′), (‘ime2′,’podnaziv2′,’ [email protected]′), (‘ime3′,’podnaziv3′,(’ [email protected]′);

Igor Serov posebno za sajt "".

Posljednje ažuriranje: 13.07.2017

Za dodavanje podataka koristite naredbu INSERT, koja ima sljedeću formalnu sintaksu:

INSERT table_name [(column_list)] VRIJEDNOSTI (vrijednost1, vrijednost2, ... vrijednostN)

Prvo dolazi izraz INSERT INTO, zatim u zagradama možete navesti listu kolona odvojenih zarezima u koje treba dodati podatke, a na kraju, nakon riječi VRIJEDNOSTI, vrijednosti koje treba dodati za stupce su navedene u zagrade.

Na primjer, pretpostavimo da je sljedeća baza podataka prethodno kreirana:

CREATE DATABASE productsdb; IDI KORISTI productsdb; CREATE TABLE Proizvodi (Id INT IDENTITET PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Proizvođač NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL)

Dodajmo mu jedan red pomoću naredbe INSERT:

UMETNI VRIJEDNOSTI proizvoda ("iPhone 7", "Apple", 5, 52000)

Nakon uspješnog izvršenja u SQL Server Management Studiju, u polju poruke bi se trebala pojaviti poruka "1 red(ovi) pogođeni":

Vrijedi uzeti u obzir da se vrijednosti za stupce u zagradama nakon ključne riječi VALUES prosljeđuju redoslijedom kojim su deklarirane. Na primjer, u naredbi CREATE TABLE iznad, možete vidjeti da je prvi stupac Id. Ali pošto je za njega specificiran atribut IDENTITY, vrijednost ove kolone se automatski generira i može se izostaviti. Druga kolona predstavlja Naziv proizvoda, tako da će prva vrijednost, string "iPhone 7", biti proslijeđena toj koloni. Druga vrijednost - string "Apple" će biti proslijeđena trećoj koloni Manufacturer i tako dalje. Odnosno, vrijednosti se prosljeđuju u stupce na sljedeći način:

    Naziv proizvoda: "iPhone 7"

    Proizvođač: "Apple"

Također, prilikom unosa vrijednosti, možete odrediti neposredne stupce u koje će vrijednosti biti dodane:

UMETNI U proizvode (naziv proizvoda, cijena, proizvođač) VRIJEDNOSTI ("iPhone 6S", 41000, "Apple")

Ovdje je vrijednost specificirana za samo tri kolone. Štaviše, sada se vrijednosti prenose redoslijedom stupaca:

    Naziv proizvoda: "iPhone 6S"

    Proizvođač: "Apple"

Za nespecificirane stupce (u ovom slučaju ProductCount), zadana vrijednost će biti dodana ako je specificiran atribut DEFAULT ili NULL vrijednost. Međutim, nespecificirani stupci moraju biti nullable ili imati DEFAULT atribut.

Također možemo dodati nekoliko redova odjednom:

UMETNI U proizvode VRIJEDNOSTI ("iPhone 6", "Apple", 3, 36000), ("Galaxy S8", "Samsung", 2, 46000), ("Galaxy S8 Plus", "Samsung", 1, 56000)

U ovom slučaju, tri reda će biti dodana u tabelu.

Također, prilikom dodavanja, možemo odrediti da kolona treba imati zadanu vrijednost koristeći DEFAULT ključnu riječ ili NULL vrijednost:

UMETNI U proizvode (Naziv proizvoda, Proizvođač, Broj proizvoda, Cijena) VRIJEDNOSTI ("Mi6", "Xiaomi", ZADANO, 28000)

U ovom slučaju će se koristiti zadana vrijednost za stupac ProductCount (ako je postavljena, ako nije, onda NULL).

Ako svi stupci imaju DEFAULT atribut koji specificira zadanu vrijednost ili su nullable, možete umetnuti zadane vrijednosti za sve stupce:

INSERT INTO Products ZADANE VRIJEDNOSTI

Ali ako uzmemo tablicu Products, tada će takva naredba propasti s greškom, jer nekoliko polja nemaju atribut DEFAULT i istovremeno ne dozvoljavaju vrijednost NULL.

Šta je INSERT INTO?

Glavni cilj sistema baza podataka je pohranjivanje podataka u tabele. Podatke obično dostavljaju aplikativni programi koji se pokreću na vrhu baze podataka. U tom cilju, SQL ima naredbu INSERT koja se koristi za pohranjivanje podataka u tablicu. The Naredba INSERT kreira novi red u tabeli za pohranjivanje podataka.

Osnovna sintaksa

Pogledajmo osnovnu sintaksu naredbe SQL INSERT prikazanu ispod.

INSERT INTO `table_name`(kolona_1,kolona_2,...) VRIJEDNOSTI (vrijednost_1,vrijednost_2,...);

  • INSERT INTO `table_name` je naredba koja govori MySQL serveru da doda novi red u tablicu pod nazivom `table_name`.
  • (kolona_1,kolona_2,...) specificira kolone koje treba ažurirati u novom redu
  • VRIJEDNOSTI (vrijednost_1,vrijednost_2,...) specificira vrijednosti koje treba dodati u novi red

Prilikom dostavljanja vrijednosti podataka koje treba umetnuti u novu tablicu, treba uzeti u obzir sljedeće dok se bavite različitim tipovima podataka.

  • String tipovi podataka- sve vrijednosti niza treba staviti u jednostruke navodnike.
  • Numerički tipovi podataka- sve numeričke vrijednosti treba dostaviti direktno bez stavljanja u jednostruke ili dvostruke navodnike.
  • Tipovi podataka datuma- stavite vrijednosti datuma u jednostruke navodnike u formatu "GGGG-MM-DD".

primjer:

Pretpostavimo da imamo sljedeću listu novih članova biblioteke koje treba dodati u bazu podataka.

Puna imena Datum rođenja spol Fizička adresa poštanska adresa Kontakt broj E-mail adresa
Leonard Hofstadter Muško Woodcrest 0845738767
Sheldon Cooper Muško Woodcrest 0976736763
Rajesh Koothrappali Muško Fairview 0938867763
Leslie Winkle 14/02/1984 Muško 0987636553
Howard Wolowitz 24/08/1981 Muško južni park P.O. Kutija 4563 0987786553

Dozvolite" INSERT podatke jedan po jedan. Počećemo sa Leonardom Hofstadterom. Broj kontakta ćemo tretirati kao numerički tip podataka i nećemo ga stavljati u jednostruke navodnike.

UMETNI U `članove` (`puna_imena`,`pol`,`fizička_adresa`,`broj_kontakta`) VRIJEDNOSTI ("Leonard Hofstadter","Muški","Woodcrest",0845738767);

Izvođenje gornje skripte ispušta 0 sa Leonardovog kontakt broja. To je zato što će se vrijednost tretirati kao numerička vrijednost, a nula (0) na početku se ispušta jer nije značajna.

Kako bi se izbjegli takvi problemi, vrijednost mora biti zatvorena u jednostrukim navodnicima kao što je prikazano ispod -

UMETNI U `članove` (`puna_imena`,`pol`,`fizička_adresa`,`broj_kontakta`) VRIJEDNOSTI ("Sheldon Cooper","Muški","Woodcrest", "0976736763");

U gornjem slučaju, nula(0) neće biti ispuštena

Promjena redoslijeda kolona nema efekta na INSERT upit sve dok su ispravne vrijednosti mapirane u ispravne kolone.

Upit prikazan ispod pokazuje gornju tačku.

INSERT INTO `members` (`contact_number`,`gender`,`full_name`,`physical_address`)VRIJEDNOSTI ("0938867763","Muški","Rajesh Koothrappali","Woodcrest");

Gornji upiti su preskočili kolonu datuma rođenja, po defaultu će MySQL umetnuti NULL vrijednosti u stupce koji su preskočeni u INSERT upitu.

Hajde sada da ubacimo zapis za Leslie koji ima naveden datum rođenja. Vrijednost datuma treba staviti u jednostruke navodnike u formatu "GGGG-MM-DD".

UMETNI U `članove` (`puna_imena`,`datum_rođenja`,`pol`,`fizička_adresa`,`broj_kontakta`) VRIJEDNOSTI ("Leslie Winkle","1984-02-14","Muško","Woodcrest"," 0987636553");

Svi gornji upiti specificiraju stupce i mapiraju ih na vrijednosti u naredbi insert. Ako dajemo vrijednosti za SVE kolone u tabeli, onda možemo izostaviti kolone iz upita za umetanje.

UMETNI U VRIJEDNOSTI `članova` (9,"Howard Wolowitz","Muški","1981-08-24","SouthPark","P.O. Box 4563", "0987786553", "lwolowitzemail.me");

Koristimo sada naredbu SELECT za pregled svih redova u tabeli članova. SELECT * FROM `članovi`;

membership_numberpuna_imenaspoldatum rođenjafizička adresapoštanska adresakontakt_brojemail
1 Janet JonesŽensko21-07-1980 Prva ulica parcela br. 4Privatna torba0759 253 542 Ova adresa el. pošte je zaštićena od spambotova. Trebate omogućiti JavaScript da biste ga vidjeli.
2 Janet Smith JonesŽensko23-06-1980 Melrose 123NULLNULLOva adresa el. pošte je zaštićena od spambotova. Trebate omogućiti JavaScript da biste ga vidjeli.
3 Robert PhilMuško12-07-1989 3. ulica 34NULL12345 Ova adresa el. pošte je zaštićena od spambotova. Trebate omogućiti JavaScript da biste ga vidjeli.
4 Gloria WilliamsŽensko14-02-1984 2. ulica 23NULLNULLNULL
5 Leonard HofstadterMuškoNULLWoodcrestNULL845738767 NULL
6 Sheldon CooperMuškoNULLWoodcrestNULL976736763 NULL
7 Rajesh KoothrappaliMuškoNULLWoodcrestNULL938867763 NULL
8 Leslie WinkleMuško14-02-1984 WoodcrestNULL987636553 NULL
9 Howard WolowitzMuško24-08-1981 Južni parkP.O. Kutija 4563987786553 Ova adresa el. pošte je zaštićena od spambotova. Trebate omogućiti JavaScript da biste ga vidjeli.

Obratite pažnju da je kontakt broj Leonarda Hofstadtera izbacio nulu (0) iz kontakt broja. Ostali kontakt brojevi nisu ispustili nulu (0) na početku.

Umetanje u tabelu iz druge tabele

Naredba INSERT se također može koristiti za umetanje podataka u tablicu iz druge tablice. Osnovna sintaksa je kao što je prikazano ispod.

INSERT INTO table_1 SELECT * FROM table_2;

Pogledajmo sada praktičan primjer, napravit ćemo lažnu tabelu za filmske kategorije u svrhu demonstracije. Novu tablicu kategorija nazvat ćemo category_archive. Skripta prikazana ispod kreira tabelu.

CREATE TABLE `categories_archive` (`category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `napomene` varchar(500) DEFAULT NULL, PRIMARNI KLJUČ (`category_id`)

Izvršite gornju skriptu da kreirate tabelu.

Ubacimo sada sve redove iz tabele kategorija u tabelu arhive kategorija.U tome nam pomaže skripta prikazana ispod.

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

Izvođenje gornje skripte umeće sve redove iz tabele kategorija u tabelu arhive kategorija. Imajte na umu da strukture tablice moraju biti iste da bi skripta funkcionirala. Robusnija skripta je ona koja mapira nazive stupaca u tablici za umetanje u one u tablici koja sadrži podatke.

Upit prikazan ispod pokazuje njegovu upotrebu.

INSERT INTO `categories_archive`(category_id,category_name,remarks) SELECT category_id,category_name,napomene FROM `categories`;

Izvršavanje SELECT upita

SELECT * FROM `categories_archive`

daje sljedeće rezultate prikazane u nastavku.

kategorija_idnaziv_kategorijeprimjedbe
1 KomedijaFilmovi sa humorom
2 RomantičnoLjubavne priče
3 EpskiPriča drevnih filmova
4 UžasNULL
5 Naučna fantastikaNULL
6 TrilerNULL
7 AkcijaNULL
8 Romantična komedijaNULL
9 Crtani filmoviNULL
10 Crtani filmoviNULL

Sažetak

  • Naredba INSERT se koristi za dodavanje novih podataka u tablicu
  • Vrijednosti datuma i stringa trebaju biti stavljene u jednostruke navodnike.
  • Numeričke vrijednosti ne moraju biti stavljene u navodnike.
  • Naredba INSERT se također može koristiti za umetanje podataka iz jedne tablice u drugu.

Pored naredbe SELECT o kojoj smo ranije govorili, jezik za manipulaciju podacima (DML) sadrži još tri izraza: INSERT, UPDATE i DELETE. Poput naredbe SELECT, ova tri izraza rade na tablicama ili pogledima. Ovaj članak govori o naredbi INSERT, a o druge dvije izjave govori se u sljedećem članku.

INSERT izjava umeće redove (ili delove redova) u tabelu. Postoje dva različita oblika ove instrukcije:

INSERT tab_name [(col_list)] DEFAULT VRIJEDNOSTI | VRIJEDNOSTI (( DEFAULT | NULL | izraz ) [ ,...n]) INSERT INTO ime_kartice | view_name [(col_list)] (select_statement | execute_statement) Sintaksne konvencije

Prvi oblik instrukcije omogućava vam da ubacite jedan red (ili njegov dio) u tabelu. A drugi oblik INSERT naredbe omogućava vam da u tabelu umetnete skup rezultata SELECT izraza ili pohranjene procedure koju izvršava naredba EXECUTE. Pohranjena procedura mora vratiti podatke koji će biti umetnuti u tablicu. Kada se koristi s naredbom INSERT, naredba SELECT može odabrati vrijednosti iz različite ili iste tablice u koju se podaci ubacuju, sve dok su tipovi podataka odgovarajućih stupaca kompatibilni.

Za oba oblika, tip podataka svake umetnute vrijednosti mora biti kompatibilan s tipom podataka odgovarajuće kolone tablice. Svi nizovi i privremeni podaci moraju biti stavljeni u navodnike; Numeričke vrijednosti ne moraju biti stavljene u navodnike.

Umetanje jednog reda

Za oba oblika INSERT izraza, eksplicitno navođenje liste stupaca nije obavezno. Ne navođenje kolona je isto kao i navođenje svih stupaca u tabeli.

DEFAULT VALUES parametar umeće podrazumevane vrednosti za sve kolone. Kolone sa tipom podataka TIMESTAMP ili svojstvom IDENTITY se podrazumevano ubacuju sa vrednostima koje sistem automatski generiše. Za stupce drugih tipova podataka, odgovarajuća zadana vrijednost koja nije nula je umetnuta ako je dostupna, ili NULL u suprotnom. Ako kolona ne dozvoljava null vrijednosti i nema definiranu zadanu vrijednost, INSERT izraz ne uspijeva i prikazuje se poruka.

Primjer ispod umeće redove u tablicu Employee u bazi podataka SampleDb, demonstrirajući upotrebu INSERT izraza za umetanje male količine podataka u bazu podataka:

USE SampleDb; UMETNI U VRIJEDNOSTI Zaposlenih (34990, "Andrej", "Batonov", "d1"); UMETNI U VRIJEDNOSTI Zaposlenih (38640, "Aleksej", "Vasin", "d3");

Postoje dva Različiti putevi umetanje vrednosti u nova linija. Naredba INSERT u primjeru ispod eksplicitno koristi ključnu riječ NULL i umeće vrijednost NULL u odgovarajući stupac:

USE SampleDb; UMETNI U VRIJEDNOSTI zaposlenih (34991, "Andrey", "Batonov", NULL);

Da biste umetnuli vrijednosti u neke (ali ne sve) kolone tabele, obično morate eksplicitno navesti te kolone. Neodređene kolone moraju ili dozvoliti NULL vrijednosti ili imati definiranu zadanu vrijednost.

USE SampleDb; INSERT INTO Employee(Id, FirstName, LastName) VALUES (34992, "Andrey", "Batonov");

Prethodna dva primjera su ekvivalentna. U tabeli Employee, jedina kolona koja dozvoljava NULL vrijednosti je kolona DepartmentNumber, a sve ostale kolone su onemogućene klauzulom NOT NULL u naredbi CREATE TABLE.

Redoslijed vrijednosti u VALUES ponuda INSERT izrazi se mogu razlikovati od redoslijeda navedenog u izrazu CREATE TABLE. U ovom slučaju, njihov redoslijed mora odgovarati redoslijedu kojim su odgovarajuće kolone navedene u listi kolona. Ispod je primjer umetanja podataka drugačijim redoslijedom od originala:

USE SampleDb; INSERT INTO Employee(Broj odjeljenja, Prezime, Id, Ime) VRIJEDNOSTI ("d1", "Batonov", 34993, "Andrej");

Umetanje više redova

Drugi oblik INSERT izraza umeće jedan ili više redova odabranih podupitom u tabelu. Primjer ispod pokazuje kako umetnuti redove u tablicu koristeći drugi oblik INSERT izraza. U ovom slučaju, izvršava se upit za odabir brojeva i imena odjela koji se nalaze u Moskvi, a rezultirajući skup rezultata se učitava u novu tablicu kreiranu ranije.

Nova tabela MoscowDepartment kreirana u gornjem primjeru ima iste kolone kao i postojeća tabela odjela, osim kolone Lokacija koja nedostaje. Potupit u INSERT izrazu odabire sve redove u tabeli Departmenta za koje je vrijednost stupca Lokacija "Moskva", koji se zatim ubacuju u novu tablicu kreiranu na početku upita.

Primjer ispod pokazuje drugi način umetanja redova u tablicu koristeći drugi oblik INSERT izraza. U ovom slučaju, izvršava se upit za odabir kadrovskih brojeva, brojeva projekata i datuma početka projekta za sve zaposlenike na poziciji „Menadžer“ koji rade na projektu p2, a zatim se rezultujući skup rezultata učitava u novu tabelu kreiranu na početku upit:

USE SampleDb; CREATE TABLE ManagerTeam (EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam (EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Posao = "Menadžer";

Prije umetanja redova pomoću INSERT naredbe, tabele MoscowDepartment i ManagerTeam (u primjerima iznad) bile su prazne. Ako je tablica već postojala i sadržavala je redove s podacima, tada bi joj se dodavali novi redovi.


Top