SQL INSERT INTO SELECT izraz. SQL upit INSERT INTO - popuniti bazu podataka informacijama Sintaksa Sql komande za umetanje reda

24.03.2023

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

INSERT INTO SELECT izraz kopira podatke iz jedne tabele i umeće ih u postojeću tabelu.

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 baza podataka

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

Ispod je izbor iz tabele "Kupci":

Korisnički brojIme klijentaOsoba za kontaktAdresagradPoštanski brojZemlja
1 Alfred Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Njemačka
2 Ana Trujillo Emparedados i 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":

Kopirajte samo njemačke dobavljače u "Kupci".

Posljednje ažuriranje: 13.07.2017

Za dodavanje podataka koristi se naredba INSERT koja ima sljedeću formalnu sintaksu:

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

Na početku se nalazi naredba INSERT INTO, zatim u zagradama možete navesti listu kolona, ​​odvojenih zarezima, u koje treba dodati podatke, a na kraju, iza riječi VALUES, u zagradama, vrijednosti ​​ koje treba dodati za kolone su navedene.

Na primjer, recimo da je sljedeća baza podataka kreirana ranije:

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 završetka SQL Server Management Studio bi trebao prikazati "1 red(ovi) pogođeni" u okviru za poruke:

Imajte na umu 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 postavljen 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", bit će 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 se dodavati vrijednosti:

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

Ovdje je vrijednost specificirana za samo tri kolone. A sada se vrijednosti prosljeđuju redoslijedom kolona:

    Naziv proizvoda: "iPhone 6S"

    Proizvođač: Apple

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

Također možemo dodati više 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 se za kolonu koristi zadana vrijednost pomoću ključne riječi DEFAULT ili NULL:

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

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

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

INSERT INTO Products ZADANE VRIJEDNOSTI

Ali ako uzmete tablicu Products, onda takva naredba neće uspjeti, budući da nekoliko polja nemaju DEFAULT atribut i u isto vrijeme ne dozvoljavaju null vrijednosti.

U prethodnim odeljcima razmatrali smo rad na dobijanju podataka iz unapred kreiranih tabela. Sada je vrijeme da shvatimo kako možemo kreirati/brisati tabele, dodati nove zapise i izbrisati stare. Za ove namjene u SQL postoje operateri kao što su: STVORITI- kreira tabelu ALTER- mijenja strukturu tabele, DROP- briše tabelu ili polje, INSERT- dodaje podatke u tabelu. Počnimo naše upoznavanje sa ovom grupom operatora od operatora INSERT.

1. Dodavanje cijelih linija

Kao što ime govori, operater INSERT koristi se za umetanje (dodavanje) redova u tabelu baze podataka. Dodavanje se može izvršiti na nekoliko načina:

  • - dodati jedan puni red
  • - dodati dio reda
  • - dodati rezultate upita.

Pa da dodam novi red u tablicu, moramo specificirati naziv tablice, navesti imena kolona i specificirati vrijednost za svaku kolonu koristeći konstrukciju INSERT INTO table_name (polje1, polje2 ...) VRIJEDNOSTI (vrijednost1, vrijednost2 ...). Pogledajmo primjer.

INSERT INTO Sellers (ID, Adresa, Grad, Seller_name, Country) VRIJEDNOSTI("6", "1st Street", "Los Angeles", "Harry Monroe", "USA")

Također možete promijeniti redoslijed naziva kolona, ​​ali u isto vrijeme morate promijeniti redoslijed vrijednosti u parametru VRIJEDNOSTI.

2. Dodavanje dijela linija

U prethodnom primjeru, kada koristite operator INSERT eksplicitno smo označili nazive kolona tabele. Koristeći ovu sintaksu, možemo preskočiti neke kolone. To znači da unosite vrijednost za neke kolone, ali ne dajete vrijednosti za druge. Na primjer:

INSERT INTO Sellers (ID, City, Seller_name) VRIJEDNOSTI("6", "Los Angeles", "Harry Monroe")

IN ovaj primjer nismo naveli vrijednost za dvije kolone Adresa I Država. Neke kolone možete isključiti iz izjave INSERT INTO, ako dozvoljava definiciju tabele. U ovom slučaju mora biti ispunjen jedan od sljedećih uvjeta: ova kolona je definirana kao dopušta vrijednost NULL(odsustvo bilo koje vrijednosti) ili u definiciji tablice specificirana zadana vrijednost. To znači da ako nije navedena vrijednost, koristit će se zadana vrijednost. Ako preskočite kolonu u tabeli koja ne dozvoljava vrijednosti u svojim redovima NULL i nema definiranu zadanu vrijednost, DBMS će izdati poruku o grešci i ovaj red neće biti dodan.

3. Dodavanje odabranih podataka

U prethodnim primjerima umetnuli smo podatke u tabele tako što smo ih ručno upisali u upit. Međutim, operater INSERT INTO omogućava nam da automatizujemo ovaj proces ako želimo da ubacimo podatke iz druge tabele. Da biste to učinili, SQL ima strukturu poput ove: INSERT IN... SELECT .... Ovaj dizajn vam omogućava da istovremeno odaberete podatke iz jedne tabele i ubacite ih u drugu. Pretpostavimo da imamo drugi sto Sellers_EU sa listom prodavaca naše robe u Evropi i moramo ih dodati u opštu tabelu Prodavci. Struktura ovih tabela je ista (isti broj kolona i ista imena), ali različiti podaci. Da bismo to uradili, možemo napisati sljedeći upit:

INSERT INTO Sellers (ID, Adresa, Grad, Seller_name, Country) SELECTID, Adresa, Grad, Ime_prodavca, Država FROM Sellers_EU

Morate obratiti pažnju da se vrijednost internih ključeva ne ponavlja (polje ID), inače će doći do greške. Operater SELECT može uključivati ​​i prijedloge GDJE za filtriranje podataka. Takođe treba napomenuti da DBMS ne obraća pažnju na nazive kolona sadržanih u naredbi SELECT, njoj je bitan samo redosled njihovog rasporeda. Dakle, podaci u prvoj navedenoj koloni koja je odabrana zbog SELECT, ionako će biti popunjena u prvoj koloni tabele Prodavci navedeno nakon operatora INSERT INTO, bez obzira na naziv polja.

4. Kopiranje podataka iz jedne tabele u drugu

Često, kada radite sa bazama podataka, postaje neophodno kreirati kopije bilo koje tabele u svrhu pravljenja rezervne kopije ili modifikacije. Da biste napravili potpunu kopiju tablice u SQL-u, obezbjeđen je poseban izraz SELECT INTO. Na primjer, trebamo napraviti kopiju tabele Prodavci, moraćete da napišete zahtev na sledeći način:

SELECT * INTO Sellers_new FROM Sellers

Za razliku od prethodnog dizajna INSERT IN... SELECT ... kada se podaci dodaju postojećoj tabeli, konstrukcija kopira podatke u novu tabelu. Takođe se može reći da prvi konstrukt uvozi podatke, dok drugi konstrukt izvozi. Kada koristite strukturu ODABIR ... U ... IZ ... treba uzeti u obzir sljedeće:

  • - možete koristiti bilo koju rečenicu u operatoru SELECT, kao što je GROUP BY I HAVING
  • - spoj se može koristiti za dodavanje podataka iz više tabela
  • - podaci se mogu dodati samo jednoj tabeli, bez obzira iz koliko tabela su uzeti.

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

Sintaksa

Upit za dodavanje više unosa:

INSERT INTO ciljni_objekat [(polje1[, polje2[, ...]])]
ODABIR[ izvor.]polje1[, polje2[, ...]
OD izraz_tablice

Zahtjev za dodavanje jednog unosa:

INSERT INTO ciljni_objekat [(polje1[, polje2[, ...]])]
VRIJEDNOSTI ( polje1[, polje2[, ...])

Naredba INSERT INTO se sastoji od sljedećih elemenata:

dio

Opis

ciljni_objekat

Ime tabele ili upita u koji se dodaju zapisi.

polje1, polje2

Nakon svađe ciljni_objekat- nazive polja u koja se dodaju podaci; nakon svađe izvor- nazive polja iz kojih se preuzimaju podaci.

vanjska_baza podataka

Put do eksterna baza podaci. Za opis putanje pogledajte članak o IN klauzuli.

izvor

Ime tabele ili upita odakle se kopiraju zapisi.

izraz_tablice

Jedno ili više imena tablica iz kojih se preuzimaju zapisi. Ovaj argument može biti jedno ime tabele, rezultat izraza INNER JOIN, LEFT JOIN ili RIGHT JOIN ili sačuvani upit.

vrijednost1, vrijednost2

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

Napomene

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

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

Izvor ili ciljni_objekat može biti tabela ili upit. Ako je zadan upit, motor baze podataka Microsoft Access dodaje zapise u sve tabele koje vraća.

Upotreba naredbe INSERT INTO nije obavezna. Ako postoji, mora prethoditi naredbi SELECT.

Ako ciljna tabela sadrži primarni ključ, uvjerite se da su vrijednosti dodane jednom ili više polja primarnog ključa jedinstvene i različite od NULL; u suprotnom, neće biti dodani unosi.

Ako se zapisi dodaju u tabelu s poljem Count i želite da ih prenumerirate, nemojte uključivati ​​polje Count u upit. Uključite polje "Counter" u upit ako želite da zadržite originalne vrijednosti iz polja.

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

Da kreirate tabelu, koristite naredbu SELECT... INTO da dobijete upit za kreiranje tabele.

Prije pokretanja upita za dodavanje, koristite upit za odabir sa istim kriterijima odabira da odredite koji će zapisi biti dodati na osnovu rezultata.

Upit za dodavanje kopira zapise iz jedne ili više tabela u drugu tabelu. U isto vrijeme, 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 u tabeli; 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 se bavi naredbom INSERT, a druge dvije izjave razmatraju 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 naredbe omogućava vam da umetnete jedan red (ili njegov dio) u tablicu. 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.

Jednolinijski umetak

Za oba oblika INSERT izraza, eksplicitna lista stupaca nije obavezna. Odsustvo liste kolona je ekvivalentno specificiranju svih kolona tabele.

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, umetnuta je odgovarajuća zadana vrijednost koja nije null, ako postoji, ili NULL u suprotnom. Ako nulte vrijednosti nisu dozvoljene za kolonu i nije definirana zadana vrijednost za kolonu, INSERT izraz ne uspijeva i prikazuje se odgovarajuća poruka.

Sljedeći primjer umeće redove u tablicu Employee u bazi podataka SampleDb, demonstrirajući kako koristiti INSERT izraz za umetanje male količine podataka u bazu podataka:

USE SampleDb; INSERT INTO Employee VALUES(34990, "Andrey", "Batonov", "d1"); INSERT INTO Employee VALUES(38640, "Aleksey", "Vasin", "d3");

Postoje dva Različiti putevi umetanje vrijednosti u novi red. Naredba INSERT u primjeru ispod eksplicitno koristi ključna riječ NULL i umeće NULL vrijednost u odgovarajući stupac:

USE SampleDb; INSERT INTO Employee VALUES(34991, "Andrey", "Batonov", NULL);

Da biste umetnuli vrijednosti u neke (ali ne sve) kolone tabele, obično morate eksplicitno navesti te kolone. Kolone koje nisu navedene moraju ili dozvoliti NULL vrijednosti ili moraju imati definiranu zadanu vrijednost za njih.

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

Prethodna dva primjera su ekvivalentna. U tabeli Employee, jedina kolona koja dozvoljava nulte vrednosti je kolona DepartmentNumber, a za sve ostale kolone ova vrednost je zabranjena klauzulom NOT NULL u izjavi CREATE TABLE.

Redoslijed vrijednosti u rečenica VRIJEDNOSTI INSERT izrazi se mogu razlikovati od redoslijeda navedenog u izrazu CREATE TABLE. U tom slučaju njihov redoslijed mora odgovarati redoslijedu kojim su odgovarajuće kolone navedene u listi kolona. Slijedi 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, vrši se upit za odabir brojeva i imena odjela koji se nalaze u Moskvi i učitavanje rezultirajućeg skupa 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 tablici odjela 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 se izvršava upit za dohvaćanje brojeva osoblja, brojeva projekata i datuma početka projekta za sve zaposlene na poziciji "Menadžer" koji rade na p2 projektu, a zatim učitavanje rezultirajućeg skupa u novu tablicu kreiranu na početku od upita:

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 podataka, tada bi joj se dodavali novi redovi.