Stavek SQL INSERT INTO SELECT. Transact-SQL - vstavljanje podatkov Dodajanje dela vrstic

Z uporabo SQL lahko kopirate informacije iz ene tabele v drugo.

Stavek INSERT INTO SELECT kopira podatke iz ene tabele in jih vstavi v obstoječo tabelo.

Izjava SQL INSERT INTO SELECT,

Stavek INSERT INTO SELECT izbere podatke iz ene tabele in jih vstavi v obstoječo tabelo. Vse obstoječe vrstice v ciljni tabeli se ne spremenijo.

SQL INSERT INTO SELECT, sintaksa

Vse stolpce lahko kopiramo iz ene tabele v drugo, obstoječo tabelo:

VSTAVITE V tabela2
IZBERI * IZ tabela1;

Lahko pa kopiramo samo želene stolpce v drugo obstoječo tabelo:

VSTAVITE V tabela2
(ime_stolpca(-a))
IZBERI ime_stolpca(-a)
OD tabela1;

Demo različica baze podatkov

V tej vadnici bomo uporabili dobro znano bazo podatkov Northwind.

Spodaj je izbor iz tabele »Stranke«:

Uporabniško imeIme strankeKontaktna osebaNaslovmestoPoštna številkaDržava
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Nemčija
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitucion 2222 Mehika D.F. 05021 Mehika
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Mehika D.F. 05023 Mehika

In izbor iz tabele "Dobavitelji":

SQL INSERT INTO SELECT, Primeri

Kopiranje le nekaj stolpcev iz »Dobavitelji« v »Stranke«:

Kopiranje samo nemških dobaviteljev na "Kupce".

Zadnja posodobitev: 13.7.2017

Če želite dodati podatke, uporabite ukaz INSERT, ki ima naslednjo formalno sintakso:

VSTAVITE ime_tabele [(seznam_stolpcev)] VREDNOSTI (vrednost1, vrednost2, ... vrednostN)

Najprej pride izraz INSERT INTO, nato lahko v oklepajih podate z vejicami ločen seznam stolpcev, v katere naj se dodajo podatki, na koncu pa so za besedo VALUES navedene vrednosti, ki jih je treba dodati za stolpce. oklepaji.

Recimo, da je bila prej ustvarjena naslednja zbirka podatkov:

CREATE DATABASE productsdb; POJDI UPORABITI productsdb; CREATE TABLE Products (Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Manufacturer NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL)

Dodajmo mu eno vrstico z ukazom INSERT:

VSTAVITE VREDNOSTI izdelkov ("iPhone 7", "Apple", 5, 52000)

Po uspešni izvedbi v programu SQL Server Management Studio bi se moralo v polju za sporočila prikazati sporočilo »Prizadeta je 1 vrstica(e):

Upoštevati je treba, da se vrednosti za stolpce v oklepajih za ključno besedo VALUES posredujejo v vrstnem redu, v katerem so deklarirane. Na primer, v zgornjem stavku CREATE TABLE lahko vidite, da je prvi stolpec Id. Ker pa je zanj določen atribut IDENTITY, je vrednost tega stolpca samodejno ustvarjena in jo je mogoče izpustiti. Drugi stolpec predstavlja ProductName, zato bo prva vrednost, niz »iPhone 7«, posredovana temu stolpcu. Druga vrednost - niz "Apple" bo posredovan v tretji stolpec Proizvajalec in tako naprej. To pomeni, da se vrednosti posredujejo v stolpce na naslednji način:

    Ime izdelka: "iPhone 7"

    Proizvajalec: "Apple"

Pri vnosu vrednosti lahko določite tudi takojšnje stolpce, v katere bodo vrednosti dodane:

INSERT INTO Products (ProductName, Price, Manufacturer) VREDNOSTI ("iPhone 6S", 41000, "Apple")

Tu je vrednost navedena samo za tri stolpce. Poleg tega se zdaj vrednosti prenašajo po vrstnem redu stolpcev:

    Ime izdelka: "iPhone 6S"

    Proizvajalec: "Apple"

Za nedoločene stolpce (v tem primeru ProductCount) bo dodana privzeta vrednost, če je naveden atribut DEFAULT, ali vrednost NULL. Nedoločeni stolpci pa morajo biti ničelni ali imeti atribut DEFAULT.

Dodamo lahko tudi več vrstic hkrati:

VSTAVITE V VREDNOSTI izdelkov ("iPhone 6", "Apple", 3, 36000), ("Galaxy S8", "Samsung", 2, 46000), ("Galaxy S8 Plus", "Samsung", 1, 56000)

V tem primeru bodo v tabelo dodane tri vrstice.

Pri dodajanju lahko tudi določimo, da mora imeti stolpec privzeto vrednost s ključno besedo DEFAULT ali vrednost NULL:

INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price) VREDNOSTI (»Mi6«, »Xiaomi«, PRIVZETO, 28000)

V tem primeru bo uporabljena privzeta vrednost za stolpec ProductCount (če je nastavljena, če ni, potem NULL).

Če imajo vsi stolpci atribut DEFAULT, ki določa privzeto vrednost, ali so ničelni, lahko vstavite privzete vrednosti za vse stolpce:

VSTAVITE PRIVZETE VREDNOSTI IZDELKOV

Če pa vzamemo tabelo Products, potem bo tak ukaz neuspešen z napako, saj več polj nima atributa DEFAULT in hkrati ne dovoljujejo vrednosti NULL.

Poleg izjave SELECT, o kateri smo govorili prej, jezik za manipulacijo podatkov (DML) vsebuje tri druge stavke: INSERT, UPDATE in DELETE. Tako kot stavek SELECT tudi ti trije stavki delujejo na tabelah ali pogledih. Ta članek obravnava stavek INSERT, druga dva stavka pa v naslednjem članku.

Izjava INSERT vstavi vrstice (ali dele vrstic) v tabelo. Obstajata dve različni obliki tega navodila:

VSTAVITE ime_zavihka [(col_list)] PRIVZETE VREDNOSTI | VREDNOSTI ((DEFAULT | NULL | izraz) [,...n]) INSERT INTO tab_name | view_name [(col_list)] (select_statement | execute_statement) Sintaksne konvencije

Prva oblika navodila omogoča vstavljanje ene vrstice (ali njenega dela) v tabelo. In druga oblika stavka INSERT vam omogoča, da v tabelo vstavite niz rezultatov stavka SELECT ali shranjene procedure, ki jo izvede stavek EXECUTE. Shranjena procedura mora vrniti podatke, ki jih je treba vstaviti v tabelo. Če se uporablja s stavkom INSERT, lahko stavek SELECT izbere vrednosti iz druge ali iste tabele, v katero se vstavljajo podatki, če so podatkovni tipi ustreznih stolpcev združljivi.

Pri obeh oblikah mora biti podatkovni tip vsake vstavljene vrednosti združljiv s podatkovnim tipom ustreznega stolpca tabele. Vsi nizi in začasni podatki morajo biti v narekovajih; Številskih vrednosti ni treba zapisati v narekovaje.

Vstavljanje ene vrstice

Za obe obliki stavka INSERT je izrecna podaja seznama stolpcev neobvezna. Nenavajanje stolpcev je enako kot podajanje vseh stolpcev v tabeli.

Parameter PRIVZETE VREDNOSTI vstavi privzete vrednosti za vse stolpce. Stolpci s podatkovnim tipom TIMESTAMP ali lastnostjo IDENTITY so privzeto vstavljeni z vrednostmi, ki jih samodejno ustvari sistem. Za stolpce drugih tipov podatkov je ustrezna privzeta vrednost, ki ni ničelna, vstavljena, če je na voljo, sicer pa NULL. Če stolpec ne dovoljuje ničelnih vrednosti in nima definirane privzete vrednosti, stavek INSERT ne uspe in prikaže se sporočilo.

Spodnji primer vstavi vrstice v tabelo Employee v bazi podatkov SampleDb in prikazuje uporabo stavka INSERT za vstavljanje majhne količine podatkov v bazo podatkov:

UPORABA SampleDb; VSTAVITE V VREDNOSTI zaposlenih (34990, "Andrey", "Batonov", "d1"); VSTAVITE V VREDNOSTI zaposlenih (38640, "Aleksej", "Vasin", "d3");

Obstajata dva različna načina za vstavljanje vrednosti v novo vrstico. Stavek INSERT v spodnjem primeru izrecno uporablja ključno besedo NULL in v ustrezen stolpec vstavi vrednost NULL:

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

Če želite vstaviti vrednosti v nekatere (vendar ne v vse) stolpce tabele, morate običajno te stolpce izrecno določiti. Nedoločeni stolpci morajo dovoljevati vrednosti NULL ali imeti definirano privzeto vrednost.

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

Prejšnja dva primera sta enakovredna. V tabeli Employee je edini stolpec, ki dovoljuje vrednosti NULL, stolpec DepartmentNumber, vse druge stolpce pa je onemogočil stavek NOT NULL v stavku CREATE TABLE.

Vrstni red vrednosti v Ponudba VALUES Stavki INSERT se lahko razlikujejo od vrstnega reda, določenega v stavku CREATE TABLE. V tem primeru se mora njihov vrstni red ujemati z vrstnim redom, v katerem so ustrezni stolpci navedeni na seznamu stolpcev. Spodaj je primer vstavljanja podatkov v drugačnem vrstnem redu od izvirnika:

UPORABA SampleDb; INSERT INTO Employee(DepartamentNumber, LastName, Id, FirstName) VALUES ("d1", "Batonov", 34993, "Andrey");

Vstavljanje več vrstic

Druga oblika stavka INSERT v tabelo vstavi eno ali več vrstic, izbranih s podpoizvedbo. Spodnji primer prikazuje, kako vstaviti vrstice v tabelo z uporabo druge oblike stavka INSERT. V tem primeru se izvede poizvedba za izbiro številk in imen oddelkov v Moskvi, dobljeni niz rezultatov pa se naloži v novo tabelo, ki je bila ustvarjena prej.

Nova tabela MoscowDepartment, ustvarjena v zgornjem primeru, ima enake stolpce kot obstoječa tabela Department, razen manjkajočega stolpca Location. Podpoizvedba v stavku INSERT izbere vse vrstice v tabeli Oddelek, za katere je vrednost stolpca Lokacija »Moskva«, ki so nato vstavljene v novo tabelo, ustvarjeno na začetku poizvedbe.

Spodnji primer prikazuje drug način za vstavljanje vrstic v tabelo z uporabo druge oblike stavka INSERT. V tem primeru se izvede poizvedba za izbiro osebnih številk, številk projektov in datumov začetka projekta za vse zaposlene s položajem »vodja«, ki delajo na projektu p2, in nato naloži nastali niz rezultatov v novo tabelo, ustvarjeno na začetku poizvedba:

UPORABA 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 Job = "Manager";

Pred vstavljanjem vrstic s stavkom INSERT sta bili tabeli MoscowDepartment in ManagerTeam (v zgornjih primerih) prazni. Če bi tabela že obstajala in vsebovala vrstice s podatki, bi ji bile dodane nove vrstice.

V prejšnjih razdelkih smo si ogledali delo pri pridobivanju podatkov iz vnaprej ustvarjenih tabel. Zdaj je čas, da ugotovimo, kako lahko ustvarimo/izbrišemo tabele, dodamo nove zapise in izbrišemo stare. Za te namene v SQL Obstajajo operaterji, kot so: USTVARJANJE- izdela tabelo, SPREMINJATI- spremeni strukturo tabele, DROP- izbriše tabelo ali polje, VSTAVI- dodaja podatke v tabelo. Začnimo se seznanjati s to skupino operaterjev pri operaterju VSTAVI.

1. Dodajanje celih vrstic

Kot že ime pove, operater VSTAVI uporablja se za vstavljanje (dodajanje) vrstic v tabelo zbirke podatkov. Dodajanje je možno na več načinov:

  • - dodajte eno polno vrstico
  • - dodajte del črte
  • - dodajte rezultate poizvedbe.

Torej, če želimo dodati novo vrstico v tabelo, moramo podati ime tabele, navesti imena stolpcev in določiti vrednost za vsak stolpec z uporabo konstrukta VSTAVITE V ime_tabele (polje1, polje2 ...) VREDNOTE (vrednost1, vrednost2 ...). Poglejmo si primer.

VSTAVITE V VREDNOSTI prodajalcev (ID, naslov, mesto, ime prodajalca, država).("6", "1st Street", "Los Angeles", "Harry Monroe", "ZDA")

Prav tako lahko spremenite vrstni red imen stolpcev, vendar morate hkrati spremeniti vrstni red vrednosti v parametru VREDNOTE.

2. Dodajanje dela črt

V prejšnjem primeru pri uporabi operatorja VSTAVI smo izrecno označili imena stolpcev tabele. Z uporabo te sintakse lahko preskočimo nekatere stolpce. To pomeni, da vnesete vrednosti za nekatere stolpce, za druge pa jih ne podate. Na primer:

VSTAVITE V VREDNOSTI prodajalcev (ID, mesto, ime prodajalca).("6", "Los Angeles", "Harry Monroe")

V tem primeru nismo podali vrednosti za dva stolpca Naslov in Država. Nekatere stolpce lahko izključite iz izjave VSTAVITE V, če to omogoča definicijo tabele. V tem primeru mora biti izpolnjen eden od pogojev: ta stolpec je opredeljen kot veljaven NIČ(odsotnost katere koli vrednosti) ali podane privzete vrednosti v definiciji tabele. To pomeni, da bo uporabljena privzeta vrednost, če ni podana nobena vrednost. Če v tabeli manjka stolpec, ki ne dovoljuje prikazovanja vrednosti v svojih vrsticah NIČ in nima definirane privzete vrednosti, bo DBMS ustvaril sporočilo o napaki in vrstica ne bo dodana.

3. Dodajanje izbranih podatkov

V prejšnjem primeru smo podatke vnesli v tabele tako, da smo jih ročno vnesli v poizvedbo. Vendar operater VSTAVITE V omogoča avtomatizacijo tega procesa, če želimo vstaviti podatke iz druge tabele. V ta namen v SQL obstaja taka konstrukcija, kot je VSTAVI V ... IZBERI .... Ta zasnova vam omogoča, da istočasno izberete podatke iz ene tabele in jih vstavite v drugo. Recimo, da imamo drugo mizo Sellers_EU s seznamom prodajalcev našega blaga v Evropi in jih moramo dodati v splošno tabelo Prodajalci. Struktura teh tabel je enaka (enako število stolpcev in enaka imena), podatki pa so različni. Če želite to narediti, lahko napišemo naslednjo poizvedbo:

VSTAVI V prodajalce (ID, naslov, mesto, ime prodajalca, država) IZBERIID, naslov, mesto, ime prodajalca, država FROM Sellers_EU

Paziti morate, da se vrednosti notranjih ključev ne ponavljajo (polje ID), sicer bo prišlo do napake. Operater IZBERI lahko vključuje tudi predloge KJE za filtriranje podatkov. Upoštevati je treba tudi, da DBMS ni pozoren na imena stolpcev, ki jih vsebuje izjava IZBERI, pomemben ji je le vrstni red, v katerem so razporejeni. Zato so podatki v prvem določenem stolpcu, ki je bil izbran zaradi IZBERI, bo v vsakem primeru izpolnjen prvi stolpec tabele Prodajalci, naveden za operatorjem VSTAVITE V, ne glede na ime polja.

4. Kopiranje podatkov iz ene tabele v drugo

Pri delu z bazami podatkov je pogosto treba ustvariti kopije katere koli tabele za varnostno kopiranje ali spreminjanje. Če želite narediti popolno kopijo tabele, SQL zagotovi ločen stavek IZBERI V. Na primer, ustvariti moramo kopijo tabele Prodajalci, boste morali napisati zahtevo na naslednji način:

IZBERITE * INTO Sellers_new FROM Sellers

Za razliko od prejšnje zasnove VSTAVI V ... IZBERI ... Ko so podatki dodani v obstoječo tabelo, načrt kopira podatke v novo tabelo. Lahko tudi rečete, da prvi konstrukt uvozi podatke, drugi pa izvozi. Pri uporabi dizajna IZBERI ... V ... IZ ... Upoštevati je treba naslednje:

  • - v operaterju lahko uporabite poljubne stavke IZBERI, kot naprimer ZDRUŽI PO in IMATI
  • - združevanje lahko uporabite za dodajanje podatkov iz več tabel
  • - podatke je mogoče dodati le v eno tabelo, ne glede na to, iz koliko tabel so bili vzeti.

Ta stavek doda enega ali več zapisov v tabelo (izvede poizvedbo za dodajanje).

Sintaksa

Zahteva za dodajanje več zapisov:

VSTAVITE V končni_objekt [(polje1[, polje2[, ...]])]
IZBERI [ vir.]polje1[, polje2[, ...]
OD tabelni_izraz

Zahteva za dodajanje enega zapisa:

VSTAVITE V končni_objekt [(polje1[, polje2[, ...]])]
VREDNOTE ( polje1[, polje2[, ...])

Stavek INSERT INTO je sestavljen iz naslednjih elementov:

del

Opis

končni_objekt

Ime tabele ali poizvedbe, v katero so dodani zapisi.

polje1, polje2

Po prepiru končni_objekt- imena polj, v katera se dodajajo podatki; po prepiru vir- imena polj, iz katerih se črpajo podatki.

zunanja_baza_podatkov

Pot do zunanje baze podatkov. Za opis poti si oglejte članek o stavku IN.

vir

Ime tabele ali poizvedbe, iz katere so zapisi kopirani.

tabelni_izraz

Eno ali več imen tabel, iz katerih želite pridobiti zapise. Ta argument je lahko ime posamezne tabele, izraz rezultata, izdelan z uporabo INNER JOIN, LEFT JOIN ali RIGHT JOIN, ali shranjena poizvedba.

vrednost1, vrednost2

Vrednosti, ki bodo dodane določenim poljem novega zapisa. Vsaka vrednost se vstavi v polje, ki ustreza njenemu položaju na seznamu: vrednost1 dodano polje1 nov vnos, vrednost2- V polje2 itd. Vrednosti morate ločiti z vejico in besedilna polja vstaviti v narekovaje (" ").

Opombe

Stavek INSERT INTO lahko doda en zapis v tabelo z uporabo zgornje sintakse. V tem primeru določite imena in vrednosti za vsako polje v zapisu. Določiti morate vsa polja v zapisu, katerim so dodeljene vrednosti, in ustrezne vrednosti. Če ne podate vrednosti polja, mu bo dodeljena privzeta vrednost ali NULL. Zapisi se dodajo na konec tabele.

Stavek INSERT INTO lahko uporabite tudi za dodajanje nabora zapisov iz druge tabele ali poizvedbe z uporabo člena SELECT... FROM, kot je prikazano zgoraj (glejte Sintaksa poizvedbe za dodajanje več zapisov). V tem primeru klavzula SELECT podaja polja, ki jih je treba dodati podanemu končni_objekt.

Vir oz končni_objekt je lahko tabela ali poizvedba. Ko je podana poizvedba, motor zbirke podatkov Microsoft Access doda zapise v vse tabele, ki jih vrne.

Uporaba stavka INSERT INTO ni obvezna. Če je podana, mora biti pred stavkom SELECT.

Če ciljna tabela vsebuje primarni ključ, se prepričajte, da so vrednosti, ki jih dodate v eno ali več polj primarnega ključa, edinstvene in se razlikujejo od NIČ; sicer vnosi ne bodo dodani.

Če so zapisi dodani v tabelo s poljem števca in jih želite preštevilčiti, polja števca ne vključite v poizvedbo. V poizvedbo vključite polje Števec, če želite ohraniti izvirne vrednosti iz polja.

Zapise lahko dodate v tabelo v drugi bazi podatkov s klavzulo IN.

Če želite ustvariti tabelo, uporabite stavek SELECT... INTO za poizvedbo za ustvarjanje tabele.

Preden zaženete poizvedbo za dodajanje, uporabite izbirno poizvedbo z istimi izbirnimi kriteriji, da na podlagi rezultatov določite, kateri zapisi bodo dodani.

Poizvedba za dodajanje kopira zapise iz ene ali več tabel v drugo tabelo. V tem primeru ostanejo tabele z dodanimi zapisi nespremenjene.

Namesto dodajanja zapisov iz druge tabele lahko nastavite vrednost vsakega polja v ločenem novem zapisu s klavzulo VALUES. Če je seznam polj izpuščen, mora klavzula VALUES vsebovati ustrezne vrednosti za vsako polje tabele; sicer operacija INSERT ne bo uspela. Uporabite stavek INSERT INTO skupaj s členom VALUES za vsak dodaten zapis, ki ga želite ustvariti.