SQLShack (Suomi)

Tämä artikkeli käsittelee SQL INSERT INTO SELECT -käskyä yhdessä sen syntaksin, esimerkkien ja käyttötapausten kanssa.

Aiemmassa artikkelissani SQL SELECT INTO Statement tutkimme seuraavia tehtäviä.

  • Luo SQL-taulukko lennossa samalla, kun lisäät tietueita sopivilla tietotyypeillä
  • Käytä SQL SELECT INTO -toimintoa lisätäksesi tietueita tiettyyn FileGroupiin
  • Emme voi käyttää sitä tietojen lisäämiseen olemassa olevaan taulukkoon

INSERT INTO SELECT -käsky

Haluamme lisätä tietueet tavalliseksi tietokantatoiminnoksi. Voimme lisätä tietoja suoraan asiakastyökaluilla, kuten SSMS, Azure Data Studio, tai suoraan sovelluksesta. SQL: ssä käytämme SQL INSERT INTO -käskyä tietueiden lisäämiseen.

INSERT INTO -syntaksi

Kun olemme lisänneet tietoja taulukkoon, voimme käyttää seuraavaa syntaksia SQL INSERT INTO -käsky.

1
2

INSERT INTO table_name (sarake1, sarake 2 ….)
ARVOT (arvo1, arvo2, …);

Jos olemme määrittäneet kaikki sarakearvot taulukon sarakkeiden mukaan tilauksia, meidän ei tarvitse määrittää sarakkeiden nimiä. Voimme lisätä tietueita suoraan taulukkoon.

1
2

INSERT INTO taulukon_nimi
ARVOT (arvo1, arvo2, …);

Luodaan mallitaulukko ja lisätään siihen tietoja .

1
2
3
4

LUO TAULUKKO Työntekijät
(ID INT,
Nimi VARCHAR (20)
);

Voimme lisätä tietoja seuraavien kyselyjen avulla. Molemmat kyselyt ovat kelvollisia tietojen lisäämiseen.

1
2

Lisää työntekijöiden arvoihin (ID, nimi) arvot (1, ”raj”)
Lisää työntekijöiden arvoihin (2, ”raj”)

Emme voi lisätä tietoja määrittelemättä sarakkeiden nimiä, jos tietojen lisäys ja sarakearvojen järjestys eroavat toisistaan. Voimme saada seuraavan virhesanoman.

  • Viesti 213, taso 16, tila 1, rivi 6

    Sarakkeen nimi tai annettujen arvojen määrä ei ole vastaavuustaulukon määritelmä.

  • Msg 245, taso 16, tila 1, rivi 6

    Muunnos epäonnistui muunnettaessa varchar-arvo raj tietotyypiksi int.

Tässä esimerkissä käytämme SQL INSERT INTO -käskyä toimittamalla arvot suoraan lauseessa. Oletetaan, että haluamme lisätä tietoja toisesta taulukosta. Voimme silti käyttää SQL INSERT INTO -käskyä select-käskyn kanssa. Tutkitaan tätä seuraavassa osassa.

INSERT INTO SELECT-lauseen syntakse

Voimme lisätä tietoja muista SQL-taulukoista taulukkoon, jossa on seuraava INSERT INTO SELECT -käsky.

1
2
3

INSERT INTO table1 (col1, col2, col3,…)
SELECT col1, col2, col3,…
taulukosta2

Tämä kysely suorittaa seuraavat tehtävät:

  • Se valitsee ensin tietueet taulukosta (Valitse käsky)
  • Seuraavaksi se lisää taulukkoon, joka on määritetty INSERT INTO
  • Huomaa: Sarakerakenteen on vastattava SELECT-käskyn palauttamaa saraketta ja kohdetaulukkoa.

INSERT INTO SELECT esimerkkejä

Esimerkki 1: lisää tiedot kaikista lähdetaulukon sarakkeista kohdetaulukkoon

Meillä on seuraavat tietueet olemassa oleva työntekijätaulukko.

Luo uusi taulukko Asiakkaat seuraavalla kyselyllä.

1
2
3
4

LUO TAULUKKO Asiakkaat
(ID INT,
Nimi VARCHAR (20)
);

Haluamme lisätä kaikki tietueet Työntekijät-taulukosta Asiakkaat-taulukossa. Voimme käyttää SQL INSERT INTO SELECT -käskyä tähän.

1
2
3

INSERT INTO Asiakkaat
SELECT *
työntekijöiltä;

Se lisää kaikki tietueet Asiakkaat-taulukkoon. Voimme varmistaa, että Asiakkaat-taulukon tietueet ovat samanlaisia kuin Työntekijät-taulukko.

Tässä esimerkissä lisäsimme tietueet kaikille sarakkeet Asiakkaat-taulukkoon.

Esimerkki 2: Lisää rivejä lähteestä kohdetaulukkoon määrittämällä sarakkeiden nimet

Pudotetaan olemassa oleva Asiakkaat-taulukko ennen kuin siirrymme eteenpäin. Haluamme nyt luoda taulukon, jossa on yksi ylimääräinen TUNNUS-sarake. IDENTITY-sarake lisää identiteettiarvot automaattisesti taulukkoon. Lisäsimme myös Kaupunki -sarakkeen, joka sallii NULL-arvot

1
2
3
4
5
6

LUO PÖYTÄ Asiakkaat
(ID INT-TUNNUS (1, 1),
Emp_ID INT,
Nimi VARCHAR (20),
Kaupunki VARCHAR (20) NULL,
);

Emme voi käyttää INSERT INTO SELECT -käskyä, joka on samanlainen kuin yllä oleva esimerkki. Jos yritämme suorittaa tämän koodin, saat virheilmoituksen.

1
2
3

INSERT INTO Asiakkaat
SELECT *
työntekijöiltä ;

Tässä tapauksessa meidän on määritettävä sarakkeen nimi INSERT INTO -käskyllä.

1
2
3

INSERT INTO Asiakkaat (Emp_ID, Nimi)
SELECT *
työntekijöiltä;

Asiakkaat-taulukossa on ylimääräinen sarake sallii NULL-arvot. Suoritetaan Valitse asiakkailla -taulukko. Seuraavassa kuvakaappauksessa NULL-arvot näkyvät Kaupunki-sarakkeessa.

Oletetaan, että lähdetaulukossa on toinen sarake. Voit silti lisätä tietueita kohdetaulukkoon määrittämällä sarakkeiden nimet INSERT INTO SELECT -käskyyn. Meillä pitäisi olla asianmukainen tietotyyppi tietojen lisäämiseksi. Et voi lisätä varchar-saraketietoja INT-sarakkeeseen.

Lisää uusi sarake Työntekijät-taulukkoon käyttämällä ALTER TABLE -käskyä.

1
2

VAIHTOTAULUKKO Työntekijät
LISÄÄ maa varchar (50);

Päivitä taulukon tietueet maa-arvolla Intia.

1

Päivitä työntekijät Maa = ”Intia”

Suorita INSERT INTO uudelleen SELECT-käsky. Voit huomata, että käytämme SELECT * -saraketta sarakkeiden nimien määrittelemisen sijaan.

1
2
3

INSERT INTO Asiakkaat (Emp_ID, Nimi)
SELECT *
työntekijöiltä;

Saamme seuraavan virhesanoman. Tämä virhe johtuu lähdetaulukon ja kohdetaulukon sarakkeiden ristiriitaisuudesta.

Voimme kartoittaa lähde- ja kohdetaulukon välisen sarakkeen seuraavalla kyselyllä.

1
2
3
4
5
6

INSERT INTO Asiakkaat
(Emp_ID,
Nimi
)
SELECT ID, Nimi
työntekijöiltä;

Esimerkki 3: Lisää ylimmät rivit INSERT INTO SELECT lause

Oletetaan, että haluamme lisätä Top N riviä lähdetaulusta kohdetaulukkoon. Voimme käyttää Top-lausetta INSERT INTO SELECT -lausekkeessa. Seuraavassa kyselyssä se lisää ensimmäisen ylemmän rivin Työntekijät-taulukosta Asiakkaat-taulukkoon.

1
2
3
4
5
6

INSERT TOP (1) Asiakkaisiin
(Emp_ID,
Nimi
)
SELECT Henkilötunnus, nimi
työntekijöiltä;

Esimerkki 4: Lisää molempiin sarakkeisiin ja määritettyihin arvoihin SQL INSERT INTO SELECT -käsky

Aikaisemmissa esimerkeissä joko määritimme tietyt arvot INSERT INTO -käskyyn tai käytimme INSERT INTO SELECT -toimintoa saadaksesi tietueita lähdetaulukosta ja lisäämällä sen kohdetaulukkoon.

Voimme yhdistää sekä sarakkeet että määritetyt arvot SQL INSERT INTO SELECT -käskyyn.

Meillä on seuraavat sarakkeet Asiakkaat ja työntekijät -taulukossa. Aikaisemmin emme lisänneet arvoja Kaupunki-sarakkeeseen. Meillä ei ole vaadittuja arvoja myös työntekijän taulukossa. Meidän on määritettävä kaupunki-sarakkeelle selkeä arvo.

Seuraavassa kyselyssä määritimme kaupungin arvon sarake samalla kun loput arvoista lisäsimme Työntekijät-taulukosta.

1
2

INSERT TOP (1) INTO Asiakkaat (Emp_ID, Nimi, Kaupunki)
SELECT ID, Name, ”Delhi” Työntekijöiltä;

Seuraavassa kyselyssä voimme nähdä, että se lisää yhden rivi (Top (1) -lausekkeen takia) ja Kaupunki -sarakkeen arvo.

Esimerkki 5: INSERT INTO SELECT lause liittymislausekkeella tietojen saamiseksi useista taulukoista

Voimme käyttää JOIN-lausetta tietojen saamiseksi useista taulukoista. Nämä taulukot yhdistetään ON-lausekkeessa määriteltyihin ehtoihin. Oletetaan, että haluamme saada tietoja useista taulukoista ja lisätä ne taulukkoon.

Tässä esimerkissä käytän AdventureWorks2017-tietokantaa. Luo ensin uusi taulukko sopivilla tietotyypeillä.

Tämän taulukon tulisi sisältää tietueita useiden taulukoiden liittymiskyselyn tulosteesta. Suorita seuraava kysely lisätäksesi tietoja HumanResources.EmployeeData-taulukkoon.

Esimerkki 6: INSERT INTO SELECT -käsky common table expression

Käytämme Common Table Expressions (CTE) -toimintoa yksinkertaistamaan monimutkaisia liittymiä useista sarakkeista. Edellisessä esimerkissä käytimme JOINSia Select-käskyssä tietojen lisäämiseen SQL-taulukkoon. Tässä osassa kirjoitamme kyselyn uudelleen CTE: llä.

CTE: ssä voimme jakaa koodin kahteen osaan.

  1. CTE määritetään WITH-lauseella ennen SELECT-, INSERT-, UPDATE-, DELETE-käskyä
  2. Kun määritämme CTE: n, voimme ottaa viitteellisen CTE: n samanlaiseksi kuin relaatio-SQL-taulukossa.

Suorita seuraava koodi lisätäksesi tietoja CTE: n avulla.

Esimerkki 7 : INSERT INTO SELECT -käsky taulukon muuttujalla

Käytämme Taulukko-muuttujia samalla tavalla kuin väliaikainen taulukko. Voimme ilmoittaa ne taulukon tietotyypillä. Tätä taulukkoa voidaan käyttää toimintojen suorittamiseen SQL Serverissä, joissa emme vaadi pysyvää taulukkoa. Voit jakaa seuraavan kyselyn kolmeen osaan.

  1. Luo SQL-taulukon muuttuja sopivilla saraketietotyypeillä. Meidän on käytettävä tietotyyppiä TABLE taulukon muuttujalle
  2. Suorita INSERT INTO SELECT -käsky, jotta voit lisätä tietoja taulukon muuttujaan
  3. Näytä taulukon muuttujan tulosjoukko

Johtopäätös

Tässä artikkelissa tutkitaan INSERT INTO SELECT -käskyn käyttötapauksia. Toivottavasti pidit tästä artikkelista hyödyllistä. Anna palautetta alla olevissa kommenteissa.

  • Kirjoittaja
  • Viimeisimmät viestit
MCSA-sertifikaattina ja Intian Gurgaonissa toimiva Microsoft Certified Trainer, jolla on 13 vuoden kokemus, Rajendra työskentelee useissa suurissa yrityksissä, jotka keskittyvät suorituskyvyn optimointiin, seurantaan, korkeaan käytettävyyteen sekä hätäpalautumisstrategioihin ja toteutukseen. Hän on kirjoittanut satoja arvovaltaisia artikkeleita SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS / Amazon RDS, Git ja niihin liittyvistä tekniikoista, joita tähän mennessä on lukenut yli 10 miljoonaa lukijaa.
Hän on luonut yhden suurimmista ilmaisista online-artikkelikokoelmista yhdestä aiheesta, 50-osaisella sarjallaan SQL Server Always On Availability Groups -ryhmissä. Hänen osuutensa perusteella SQL Server -yhteisöön hänet on tunnustettu useilla palkinnoilla, kuten arvostettu ”Vuoden paras kirjailija” jatkuvasti vuosina 2020 ja 2021 SQLShackissa.
Raj on aina kiinnostunut uusista haasteista, joten jos tarvitset konsultointia apua mistä tahansa hänen kirjoituksissaan käsitellystä aiheesta, hän on tavoitettavissa osoitteessa [email protected]
Näytä kaikki käyttäjän Rajendra Gupta viestit

Viimeisimmät viestit, jotka on kirjoittanut Rajendra Gupta (katso kaikki)
  • Pienien ja suurten versiopäivitysten tekeminen AWS: lle RDS SQL Server – 29. tammikuuta 2021
  • AWS RDS PostgreSQL -esiintymien käyttöönotto – 27. tammikuuta 2021
  • Paikallisten SQL-tietokantojen siirtäminen AWS RDS SQL Serveriin AWS DMS: n avulla – 25. tammikuuta , 2021

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *