Umetnite sql sintaksu. SQL INSERT INTO SELECT izraz. SQL INSERT INTO SELECT, Primjeri

Ova izjava dodaje jedan ili više zapisa u tabelu (izvodi upit za dodavanje).

Sintaksa

Zahtjev za dodavanje više zapisa:

INSERT INTO konačni_objekat [(polje1[, polje2[, ...]])]
ODABIR [ izvor.]polje1[, polje2[, ...]
OD izraz_tablice

Zahtjev za dodavanje jednog zapisa:

INSERT INTO konačni_objekat [(polje1[, polje2[, ...]])]
VRIJEDNOSTI ( polje1[, polje2[, ...])

Naredba INSERT INTO se sastoji od sljedećih elemenata:

dio

Opis

konačni_objekat

Ime tabele ili upita u koji se dodaju zapisi.

polje1, polje2

Nakon svađe konačni_objekat- nazivi polja u koja se dodaju podaci; nakon svađe izvor- nazivi polja iz kojih se izvlače podaci.

vanjska_baza podataka

Put do eksterne baze podataka. Za opis putanje pogledajte članak o IN klauzuli.

izvor

Ime tabele ili upita iz koje se kopiraju zapisi.

izraz_tablice

Jedno ili više imena tablica iz kojih želite dohvatiti zapise. Ovaj argument može biti ime pojedinačne tablice, rezultatski izraz konstruiran korištenjem INNER JOIN, LEFT JOIN ili RIGHT JOIN ili pohranjeni upit.

vrijednost1, vrijednost2

Vrijednosti koje će se dodati određenim poljima novog zapisa. Svaka vrijednost se ubacuje u polje koje odgovara njenoj poziciji na listi: vrijednost1 dodano polje1 novi ulaz, vrijednost2- V polje2 itd. Morate odvojiti vrijednosti zarezom i staviti tekstualna polja u navodnike (" ").

Bilješke

Naredba INSERT INTO može dodati jedan zapis u tablicu koristeći gornju sintaksu. U tom slučaju navedete imena i vrijednosti za svako polje u zapisu. Morate navesti sva polja u zapisu kojima su dodijeljene vrijednosti i odgovarajuće vrijednosti. Ako ne navedete vrijednost polja, bit će joj dodijeljena zadana vrijednost ili NULL. Zapisi se dodaju na kraj tabele.

Naredba INSERT INTO se takođe može koristiti za dodavanje skupa zapisa iz druge tabele ili upita koristeći klauzulu SELECT... FROM kao što je prikazano iznad (pogledajte Sintaksu upita za dodavanje više zapisa). U ovom slučaju, SELECT klauzula specificira polja koja treba dodati navedenom konačni_objekat.

Izvor ili konačni_objekat može biti tabela ili upit. Kada se zada upit, mehanizam baze podataka Microsoft Access dodaje zapise svim tabelama koje vraća.

Upotreba naredbe INSERT INTO je opciona. Ako je navedeno, mora prethoditi SELECT izrazu.

Ako ciljna tabela sadrži primarni ključ, osigurajte da su vrijednosti koje dodate jednom ili više polja primarnog ključa jedinstvene i različite od NULL; inače unosi neće biti dodani.

Ako se zapisi dodaju u tabelu sa poljem Brojač i želite da ih prenumerirate, nemojte uključivati ​​polje Brojač u upit. Uključite polje Brojač u upit ako želite da sačuvate originalne vrijednosti iz polja.

Možete dodati zapise u tablicu u drugoj bazi podataka koristeći IN klauzulu.

Da kreirate tablicu, koristite naredbu SELECT... INTO za upit za kreiranje tablice.

Prije nego što pokrenete upit za dodavanje, upotrijebite upit za odabir sa istim kriterijima odabira da biste koristili rezultate da odredite koji će zapisi biti dodati.

Upit za dodavanje kopira zapise iz jedne ili više tabela u drugu tabelu. U ovom slučaju, tabele koje sadrže dodane zapise ostaju nepromijenjene.

Umjesto dodavanja zapisa iz druge tabele, možete postaviti vrijednost svakog polja u poseban novi zapis koristeći klauzulu VALUES. Ako je lista polja izostavljena, klauzula VALUES mora uključivati ​​odgovarajuće vrijednosti za svako polje tabele; u suprotnom, INSERT operacija neće uspjeti. Koristite izraz INSERT INTO zajedno sa klauzulom VALUES za svaki dodatni zapis koji želite da kreirate.

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 tablicu umetnete skup rezultata SELECT naredbe 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 ubacuju prema zadanim postavkama sa vrijednostima 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čita načina za umetanje vrijednosti u novi red. 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.

SQL INSERT INTO i INSERT SELECT izrazi se koriste za umetanje novih redova u tablicu. Postoje dva načina korištenja instrukcija:

  1. Samo vrijednosti: Prva metoda uključuje specificiranje samo vrijednosti podataka koje treba umetnuti bez imena kolona.

sintaksa:

INSERT INTO table_name VRIJEDNOSTI (vrijednost1, vrijednost2, vrijednost3,...); table_name: ime tabele. vrijednost1, vrijednost2,.. : vrijednosti prve kolone, druge kolone,... za novi zapis

  1. Imena i vrijednosti kolona: Druga metoda specificira nazive stupaca i vrijednosti redova za umetanje:

sintaksa:

INSERT INTO table_name (kolona1, kolona2, kolona3,..) VRIJEDNOSTI (vrijednost1, vrijednost2, vrijednost3,...); table_name: ime tabele. stupac1: naziv prve kolone, druge kolone... vrijednost1, vrijednost2,.. : vrijednosti prve kolone, druge kolone,... za novi zapis

Zahtjevi:

Metoda 1 ( ubacivanje samo vrijednosti):

UMETNI U VRIJEDNOSTI učenika ("5","HARSH","WEST BENGAL","8759770477","19");

Rezultat :

Nakon upotrebe INSERT INTO SELECT, tabela učenika će sada izgledati ovako:

ROLL_NO NAME ADRESA TELEFON Dob
1 RAM Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
5 HARSH WEST BENGAL 8759770477 19

Metoda 2 ( umetanje vrijednosti samo u određene kolone):

INSERT INTO Student (ROLL_NO, NAME, Age) VRIJEDNOSTI ("5","PRATIK","19");

Rezultat :

Studentska tabela će sada izgledati ovako:

ROLL_NO NAME ADRESA TELEFON Dob
1 RAM Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
5 PRATIK null null 19

Imajte na umu da su kolone za koje nisu navedene vrijednosti postavljene na null.

Korištenje SELECT u INSERT INTO izrazu

Možete koristiti MySQL INSERT SELECT izraz da kopirate redove iz jedne tabele i umetnete ih u drugu.

Korištenje ove izjave je slično korištenju INSERT INTO. Razlika je u tome što se izraz SELECT koristi za odabir podataka iz druge tablice. Ispod su različiti načini korištenja INSERT INTO SELECT:

  • Umetnite sve kolone tabele: Možete kopirati sve podatke u tabeli i zalijepiti ih u drugu tabelu.

sintaksa:

INSERT INTO first_table SELECT * FROM second_table; first_table: ime prve tablice. second_table: ime druge tabele.

Koristili smo naredbu SELECT za kopiranje podataka iz jedne tablice i naredbu INSERT INTO da bismo ih umetnuli u drugu.

  • Umetanje pojedinačnih kolona tabele. Možete kopirati samo one kolone tabele koje želite da zalijepite u drugu tabelu.

sintaksa:

INSERT INTO first_table(column_names1) SELECT column_names2 FROM second_table; first_table: ime prve tablice. second_table: ime druge tabele. col_names1: nazivi stupaca odvojeni zarezom(,) za tablicu 1. col_names2: nazivi stupaca odvojeni zarezom(,) za tablicu 2.

Koristili smo naredbu SELECT da kopiramo podatke samo iz odabranih stupaca druge tablice i MySQL INSERT INTO SELECT izraz da ih ubacimo u prvu tablicu.

  • Kopiranje određenih redova iz tabele. Možete kopirati određene redove iz tabele da biste ih kasnije zalijepili u drugu tabelu koristeći klauzulu WHERE sa klauzulom SELECT. U ovom slučaju, trebate koristiti odgovarajući uvjet u WHERE.

sintaksa:

Tabela 2: LateralStudent

ROLL_NO NAME ADRESA TELEFON Dob
7 SOUVIK DUMDUM 9876543210 18
8 NIRAJ NOIDA 9786543210 19
9 SOMESH ROHTAK 9687543210 20

Zahtjevi:

Metoda 1 ( umetnite sve redove i kolone):

INSERT INTO Student SELECT * FROM LateralStudent;

Rezultat :

Ovaj upit će umetnuti sve podatke iz tabele LateralStudent u tabelu Student. Nakon upotrebe SQL INSERT INTO SELECT, Studentska tabela će izgledati ovako:

ROLL_NO NAME ADRESA TELEFON Dob
1 RAM Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
7 SOUVIK DUMDUM 9876543210 18
8 NIRAJ NOIDA 9786543210 19
9 SOMESH ROHTAK 9687543210 20

Metoda 2 ( ubacivanje pojedinačnih kolona):

INSERT INTO Student(ROLL_NO,NAME,Age) SELECT ROLL_NO, NAME, Age FROM LateralStudent;

Rezultat :

Ovaj upit će umetnuti podatke iz kolona ROLL_NO, NAME i Age iz tabele LateralStudent u tabelu Student. Preostale kolone Studentske tabele biće postavljene na null. Nakon upotrebe SQL INSERT SELECT, tabela će izgledati ovako:

ROLL_NO NAME ADRESA TELEFON Dob
1 RAM Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
7 SOUVIK Null null 18
8 NIRAJ Null null 19
9 SOMESH Null null 20
  • Odabir određenih redova za umetanje:

Rezultat :

Ovaj upit će odabrati samo prvi red iz tabele LateralStudent za umetanje u tabelu Student. Nakon upotrebe INSERT SELECT, tabela će izgledati ovako.

Naredba INSERT umeće nove zapise u tabelu. U ovom slučaju, vrijednosti stupca mogu biti literalne konstante ili biti rezultat izvršavanja potupita. U prvom slučaju, poseban INSERT izraz se koristi za umetanje svakog reda; u drugom slučaju, onoliko redova će biti umetnuto koliko ih vrati podupit.

Sintaksa operatora je sljedeća:

    UMETNI U [ (,...) ]

    (VRIJEDNOSTI(,…))

  1. | (ZADANE VRIJEDNOSTI)

Kao što možete vidjeti iz predstavljene sintakse, lista kolona je opciona (uglaste zagrade u opisu sintakse to ukazuju). Ako nedostaje, lista umetnutih vrijednosti mora biti potpuna, odnosno navesti vrijednosti za sve stupce tabele. U ovom slučaju, redoslijed vrijednosti mora odgovarati redoslijedu navedenom u naredbi CREATE TABLE za tablicu u koju su umetnuti redovi. Osim toga, ove vrijednosti moraju biti istog tipa podataka kao i kolone u koje su unesene. Kao primjer, razmislite o umetanju reda u tablicu proizvoda kreiranu sljedećim CREATE TABLE izrazom:

    CREATE TABLE proizvod

    maker char (1) NOT NULL,

    model varchar(4) NOT NULL,

    tip varchar(7) NOT NULL

Pretpostavimo da u ovu tabelu želite da dodate PC model 1157 proizvođača B. To se može učiniti sa sljedećom naredbom:

    INSERT INTO Product

    VRIJEDNOSTI ("B" , 1157 , "PC" ) ;

Ako navedete listu kolona, ​​možete promijeniti njihov „prirodni“ redoslijed:

    UMETNI U proizvod (tip, model, proizvođač)

    VRIJEDNOSTI ("PC" , 1157 , "B" ) ;

Čini se da je ovo potpuno nepotrebna karakteristika, koja samo čini dizajn glomaznijim. Međutim, pobjeđuje ako kolone imaju zadane vrijednosti. Razmotrite sljedeću strukturu tabele:

    CREATE TABLE proizvod_D

    proizvođač char (1) NULL,

    model varchar(4) NULL,

    tip varchar (7 ) NOT NULL DEFAULT "PC"

Imajte na umu da ovdje vrijednosti svih kolona imaju zadane vrijednosti (prve dvije su NULL, a posljednja kolona je tip - PC). Sada bismo mogli napisati:

    INSERT INTO Product_D (model, proizvođač)

    VRIJEDNOSTI(1157, "B");

U ovom slučaju, vrijednost koja nedostaje prilikom umetanja reda bit će zamijenjena zadanom vrijednošću - PC. Imajte na umu da ako stupcu nije data zadana vrijednost u izrazu CREATE TABLE i ako je ograničenje NOT NULL specificirano da zabrani korištenje NULL u toj koloni tablice, tada se pretpostavlja zadana vrijednost NULL.

Postavlja se pitanje: da li je moguće ne specificirati listu kolona i, ipak, koristiti zadane vrijednosti? Odgovor je da. Da biste to učinili, umjesto eksplicitnog navođenja vrijednosti, koristite rezerviranu riječ DEFAULT :

    INSERT INTO Product_D

    VRIJEDNOSTI ("B" , 1158 , DEFAULT ) ;

Pošto sve kolone imaju zadane vrijednosti, da biste umetnuli red sa zadanim vrijednostima možete napisati:

    INSERT INTO Product_D

    VRIJEDNOSTI(DEFAULT, DEFAULT, DEFAULT);

Međutim, za ovaj slučaj postoji posebna konstrukcija DEFAULT VALUES (pogledajte sintaksu operatora), pomoću koje se gornji operator može prepisati u obliku

    INSERT INTO Product_D DEFAULT VRIJEDNOSTI ;

Imajte na umu da se prilikom umetanja reda u tabelu provjeravaju sva ograničenja nametnuta ovoj tablici. To mogu biti ograničenja primarnog ključa ili jedinstvenog indeksa, ograničenja CHECK ili ograničenja referentnog integriteta. Ako je bilo koje ograničenje prekršeno, umetanje reda će biti odbijeno. Razmotrimo sada slučaj korištenja podupita. Pretpostavimo da treba da ubacimo u tabelu Product_D sve redove iz tabele proizvoda koji se odnose na modele personalnih računara (tip = 'PC'). Budući da se vrijednosti koje su nam potrebne već nalaze u nekoj tabeli, ručno generiranje umetnutih redova je, prvo, neučinkovito, a drugo, može dopustiti greške u unosu. Korištenje podupita rješava ove probleme:

Upotreba simbola “*” u potupitu je u ovom slučaju opravdana, jer je redoslijed kolona isti za obje tabele. Da to nije slučaj, lista kolona bi morala biti primijenjena u INSERT izrazu, podupitu ili u oba, što bi odgovaralo redoslijedu kolona:

Ovdje, kao i prije, možete specificirati ne sve stupce ako želite koristiti postojeće zadane vrijednosti, na primjer:

U ovom slučaju, kolona tipa u tablici Product_D će biti zamijenjena zadanom vrijednošću PC za sve umetnute redove.

Imajte na umu da kada koristite potupit koji sadrži predikat, samo oni redovi za koje je vrijednost predikata TRUE (ne UNKNOWN!) će biti umetnuti. Drugim riječima, ako je stupac tipa u tablici Product bio NULLable i ta vrijednost je bila prisutna u više redova, onda ti redovi ne bi bili umetnuti u tablicu Product_D.

Umjetna tehnika korištenja potupita koji formira red s klauzulom UNION ALL omogućava vam da prevaziđete ograničenje umetanja jednog reda u INSERT izraz kada koristite konstruktor reda u klauzuli VALUES. Dakle, ako trebamo umetnuti nekoliko redova koristeći jednu INSERT naredbu, možemo napisati:

    INSERT INTO Product_D

    SELECT "B" AS proizvođač, 1158 AS model, "PC" AS tip

    UNION ALL

    ODABERITE "C" , 2190 , "Laptop"

    UNION ALL

    SELECT "D" , 3219 , "Printer" ;

Korištenje UNION ALL je poželjnije od UNION čak i ako je zajamčeno odsustvo duplikata, jer u ovom slučaju neće biti izvršena provjera da bi se eliminirali duplikati.

Treba napomenuti da je umetanje više tuple-ova pomoću konstruktora reda već implementirano Sistem za upravljanje relacionim bazama podataka (DBMS), razvijen od strane Microsoft Corporation.Structured Query Language) je univerzalni kompjuterski jezik koji se koristi za kreiranje, modifikovanje i manipulaciju podacima u relacionim bazama podataka. SQL Server 2008. S obzirom na ovu mogućnost, posljednji upit se može prepisati kao:

    INSERT INTO Product_D VRIJEDNOSTI

    ("B", 1158, "PC"),

    ("C", 2190, "Laptop"),