Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Bazat e T-SQL. DML

Pyetja sql INSERT INTO ka kuptim kur është krijuar një tabelë e bazës së të dhënave. Kjo do të thotë, tabela ekziston, ka një emër, ka krijuar rreshta dhe kolona. tabela krijohet nga operatori: , tabela modifikohet nga operatori .

sql query INSERT INTO - sintaksa e pyetjes

Kërkesa sql INSERT INTO ka sintaksën e mëposhtme:

INSERT INTO table_name (në kllapa, nëse është e nevojshme, futni një listë kolonash ku dëshironi të futni të dhëna) VALUES të dhëna të futura1, të dhëna të futura2, të dhëna të futura3.

Mund të futni një opsion IGNORE midis INSERT dhe INTRO. Nuk kërkohet. Nevojitet për të mbrojtur çelësat kryesorë kur redaktoni një tabelë. Përndryshe, nëse gjatë redaktimit ndodh dyfishimi i çelësave kryesorë, atëherë me rastin e futjes së opsionit IGNORE, rreshti i parë me çelësin kryesor do të mbetet në tabelën që po redaktohet. Çelësat e tjerë primar do të fshihen. Si parazgjedhje, ne e heqim këtë opsion.

Ka opsione opsionale LOW_PRIORITY dhe DELAYED. Ata përcaktojnë prioritetet për shtimin e informacionit në bazën e të dhënave. E para specifikon pritjen për lëshimin e bazës së të dhënave, e dyta nënkupton ruajtjen e informacionit.

Rreshti në pyetjen: INSERT me frazën VALUES do t'ju lejojë të shtoni një rresht të vetëm në tabelën e bazës së të dhënave. Klauzola VALUES përmban vlerat e këtyre të dhënave.

Nënpyetjet mund të specifikohen në vend të frazës VALUES. INSERT me një nënpyetje shton në tabelë rreshtat e kthyera nga nënpyetja. Serveri i bazës së të dhënave përpunon nënpyetjen dhe fut të gjitha rreshtat e kthyera në tabelë. Serveri nuk fut rreshta nëse nënpyetja nuk i zgjedh ato.

  • subquery_1 - një nënpyetje që serveri e përpunon në të njëjtën mënyrë si pamja
  • subquery_2 është një nënpyetje që kthen rreshtat e futur në tabelë. Lista e kësaj nënpyetje duhet të ketë të njëjtin numër kolonash si lista e kolonave INSERT.

Nënpyetjet praktikisht nuk përdoren në një bazë të dhënash MySQL.

Shembuj të pyetjes sql INSERT INTO në një bazë të dhënash MySQL

Ne futim rreshta të rinj në bazën e të dhënave MySQL duke përdorur komandën INSERT INTRO.

Shembulli i parë.

Futni rreshta të rinj në emrin e tabelës.

INSERT INTO VALUES emri i tabelës ('2','145','1','emri');

Kjo do të thotë që ne duam të fusim vlerat 2,145,1, emri në kolonat e tabelës_emri i tabelës. Meqenëse kolonat nuk janë të specifikuara, vlerat plotësohen në të gjitha kolonat e tabelës.

Shembulli dy.

Futni informacionin në kolonat e kërkuara (të specifikuara) të tabelës emri i tabelës.

INSERT INTO në emrin e tabelës (klienti_klienti, klienti_nënklienti, posta_klienti) VALUES ('emri1','nënemri1',' [email i mbrojtur]"), ("emri2", "nënemri2"," [email i mbrojtur]"), ('emri3','nënemri3',(' [email i mbrojtur]′);

Igor Serov posaçërisht për sitin "".

Pershendetje te gjitheve! Ky artikull do të diskutojë se si mundeni shtoni të dhëna në tabelë në Microsoft SQL Server, nëse tashmë jeni të paktën pak të njohur me gjuhën T-SQL, atëherë me siguri keni kuptuar që tani do të flasim për deklaratën INSERT, si dhe se si mund të përdoret për të shtuar të dhëna në një tabelë.

Le të fillojmë, si zakonisht, me një teori të vogël.

INSERT deklaratën në T-SQL

INSERTështë një instruksion T-SQL që është krijuar për të shtuar të dhëna në një tabelë, d.m.th. duke krijuar rekorde të reja. Ky udhëzim mund të përdoret si për të shtuar një rresht të vetëm në një tabelë ashtu edhe për të futur të dhëna në masë. Deklarata INSERT kërkon leje për të futur të dhëna ( INSERT) në tabelën e synuar.

Ka disa mënyra për të përdorur deklaratën INSERT në pjesën e të dhënave që duhet të futet:

  • Renditja e vlerave specifike për të futur;
  • Specifikimi i një grupi të dhënash si një pyetje SELECT;
  • Specifikimi i një grupi të dhënash në formën e një thirrjeje procedurash që kthen të dhënat tabelare.

Sintaksë e thjeshtuar

INSERT [tabela] ( lista e kolonave...) VLERAT ( lista e vlerave...) Ose SELECT kërkesë mostër Ose EKZEKUTON procedurë

  • INSERT INTO është një komandë për të shtuar të dhëna në një tabelë;
  • Tabela është emri i tabelës së synuar në të cilën dëshironi të futni të dhëna të reja;
  • Lista e kolonave është një listë e emrave të kolonave të tabelës në të cilën do të futen të dhënat, të ndara me presje;
  • VALUES është një konstruktor i vlerave të tabelës me të cilin ne specifikojmë vlerat që do të fusim në tabelë;
  • Lista e vlerave është vlerat që do të futen, të ndara me presje. Ato renditen sipas radhës që shfaqen kolonat në listën e kolonave;
  • SELECT është një pyetje për të zgjedhur të dhënat për të futur në një tabelë. Seti i rezultateve që kthen pyetja duhet të përputhet me listën e kolonave;
  • EXECUTE është një thirrje procedurë për të marrë të dhëna për futje në një tabelë. Seti i rezultateve që kthen procedura e ruajtur duhet të përputhet me listën e kolonave.

Kështu duket përafërsisht sintaksa e thjeshtuar e deklaratës INSERT INTO; në shumicën e rasteve, kështu do të shtoni regjistrime të reja në tabela.

Lista e kolonave në të cilat do të futni të dhëna nuk ka nevojë të shkruhet, me ç'rast renditja e tyre do të përcaktohet në bazë të renditjes aktuale të kolonave në tabelë. Ju duhet ta mbani mend këtë renditje kur specifikoni vlerat për të futur ose shkruar një pyetje për të zgjedhur. Personalisht, ju rekomandoj që të tregoni ende një listë kolonash në të cilat planifikoni të shtoni të dhëna.

Ju gjithashtu duhet të mbani mend se lista e kolonave dhe lista e vlerave, përkatësisht, duhet të përmbajnë të ashtuquajturat kolona të kërkuara; këto janë ato që nuk mund të përmbajnë vlerën NULL. Nëse nuk i specifikoni ato dhe kolona nuk ka një vlerë të paracaktuar, do të ndodhë një gabim.

Do të doja gjithashtu të vërej se lloji i të dhënave të vlerave që do të futni duhet të përputhet me llojin e të dhënave të kolonës në të cilën do të futet kjo vlerë, ose të paktën të mbështesë konvertimin e nënkuptuar. Por unë ju këshilloj të kontrolloni llojin e të dhënave ( format) vlerat, si në listën e vlerave ashtu edhe në pyetjen SELECT.

Mjaft teori, le të kalojmë në praktikë.

Të dhënat fillestare

Për të shtuar të dhëna në tabelë, na duhet tabela vetë, kështu që le ta krijojmë atë dhe të përpiqemi të shtojmë regjistrime në të.

Shënim! Të gjithë shembujt do të ekzekutohen në Microsoft SQL Server 2016 Express.

KRIJO TABELËN e testimit (IDENTITETI (1,1) JO NULL, (100) JO NULL, JO NULL)

Tabela jonë e provës do të përmbajë një listë të produkteve me çmime.

Gjithashtu në shembujt ne do të përdorim një procedurë që kthen një vlerë tabele për të shtuar të dhëna në tabelë, kështu që le ta krijojmë edhe atë.

KRIJO PROCEDURËN TestProcedurë SI FILLIM ZGJEDHJE Emri i produktit, Çmimi NGA FUNDI I TABELËS SË provës

Për shembull, ai do të kthejë të dhëna nga tabela e krijuar rishtazi TestTable.

Shënim!

Siç e kuptoni, leximi i këtij materiali nënkupton njohjen e gjuhës T-SQL, kështu që nëse diçka nuk është e qartë për ju, ju rekomandoj të njiheni me materialet e mëposhtme:

Shembulli 1 – Shtimi i një rekord të ri në një tabelë duke përdorur konstruktorin e vlerës së tabelës

Së pari le të provojmë të shtojmë një rekord dhe menjëherë të shikojmë rezultatin, d.m.th. Le të shkruajmë një kërkesë për një mostër.

INSERT INTO Test Table(ProductEmri, Price) VALUES ("Computer", 100) SHKO ZGJIDH * NGA TestTable

Ju shikoni që pas emrit të tabelës kemi renditur emrat e kolonave në të cilat do të shtojmë të dhëna, të ndara me presje, pastaj kemi treguar fjalën kyçe VLERAT dhe gjithashtu në kllapa, me të njëjtin rend, të ndara me presje, kemi shkruar vlerat që duam të fusim.

Pas deklaratës INSERT, unë shkrova një deklaratë SELECT dhe i ndava ato me një deklaratë GO.

Tani le të imagjinojmë se duhet të shtojmë disa rreshta. Ne do të shkruajmë kërkesën e mëposhtme për këtë.

INSERT INTO Test Table(ProductEmri, Price) VALUES ("Computer", 100), ("Keyboard", 20), ("Monitor", 50) GO SELECT * FROM Test Tabela


Shembulli 2 - Shtimi i rreshtave të rinj në një tabelë duke përdorur një pyetje SELECT

Shumë shpesh ka nevojë për të shtuar shumë të dhëna në një tabelë, për shembull, bazuar në një pyetje të zgjedhur, d.m.th. ZGJIDH. Për ta bërë këtë, në vend të VALUES, thjesht duhet të specifikojmë kërkesën.

INSERT INTO Test Table(ProductEmri, Price) SELECT Emri i produktit, Çmimi NGA Test Tabela WHERE ID >


Në këtë shembull, ne kemi shkruar një pyetje SELECT që kthen të dhëna nga tabela TestTable, por jo të gjitha, por vetëm ato me një ID më të madhe se 2. Dhe rezultati u fut në të njëjtën tabelë TestTable.

Si shembull se si mund të shtoni regjistrime në një tabelë pa specifikuar një listë kolonash, le të shkruajmë një pyetje tjetër për futjen e të dhënave që do të bëjë saktësisht të njëjtën gjë si pyetja e mësipërme, vetëm se nuk do të listojë kolonat për të futur.

INSERT NE TestTable SELECT Emri i produktit, Çmimi NGA Test Tabela WHERE Id > 2 GO SELECT * FROM TestTable


Në këtë rast, jemi të sigurt që në tabelën TestTable kolona e parë është Emri i produktit, dhe e dyta është Çmimi, kështu që mund të përballojmë ta shkruajmë në atë mënyrë. Por, përsëri, në praktikë është më mirë të specifikoni një listë kolonash.

Nëse e keni vënë re, në të gjithë shembujt nuk e kam specifikuar kolonën Id, por ne e kemi, nuk ka ndodhur asnjë gabim, pasi kjo kolonë ka vetinë IDENTITY, gjeneron automatikisht identifikues, kështu që futja e të dhënave në një kolonë të tillë thjesht nuk mund të bëhet.

Shembulli 3 - Shtimi i regjistrimeve të reja në një tabelë duke përdorur një procedurë të ruajtur

Tani le të futim të dhënat në tabelë që procedura e ruajtur do të na kthejë. Kuptimi këtu është i njëjtë, në vend të VLERAVE dhe në vend të një kërkese ne tregojmë një thirrje procedurë. Por siç e kuptoni, rendi dhe numri i kolonave të kthyera nga procedura duhet të përputhet rreptësisht me listën e kolonave që do të futen ( edhe nëse lista e kolonave nuk është e specifikuar).

INSERT INTO TestTable(ProductEmri, Price) EXEC TestProcedura SHKO SELECT * FROM TestTable


Shpresoj se ky material ju ka ndihmuar të kuptoni udhëzimet. INSERT NE, dhe kjo është gjithçka që kam tani për tani!

Kjo deklaratë shton një ose më shumë regjistrime në një tabelë (kryen një kërkesë shtesë).

Sintaksë

Kërkoni për të shtuar regjistrime të shumta:

INSERT NE objekt_final [(fusha1[, fusha2[, ...]])]
ZGJIDH [ burimi.]fusha1[, fusha2[, ...]
NGA shprehje_tabele

Kërkoni për të shtuar një regjistrim:

INSERT NE objekt_final [(fusha1[, fusha2[, ...]])]
VLERAT ( fusha1[, fusha2[, ...])

Deklarata INSERT INTO përbëhet nga elementët e mëposhtëm:

Pjesë

Përshkrim

objekt_final

Emri i tabelës ose pyetjes ku shtohen të dhënat.

fusha1, fusha2

Pas debatit objekt_final- emrat e fushave në të cilat shtohen të dhënat; pas debatit burimi- emrat e fushave nga të cilat nxirren të dhënat.

baza e_të dhënave të jashtme

Rruga drejt bazës së të dhënave të jashtme. Për një përshkrim të rrugës, shihni artikullin mbi klauzolën IN.

burimi

Emri i tabelës ose pyetësorit nga i cili kopjohen të dhënat.

shprehje_tabele

Një ose më shumë emra tabelash nga të cilat dëshironi të rikuperoni të dhënat. Ky argument mund të jetë emri i një tabele individuale, një shprehje rezultati e ndërtuar duke përdorur një BASHKIM TË BRENDSHËM, LEFT JOIN, ose RIGHT JOIN, ose një pyetje të ruajtur.

vlera 1, vlera 2

Vlerat që do të shtohen në fusha specifike të rekordit të ri. Çdo vlerë futet në fushën që korrespondon me pozicionin e saj në listë: vlera 1 shtuar në fusha1 hyrje e re, vlera 2- V fusha2 etj. Duhet t'i ndani vlerat me presje dhe t'i mbyllni fushat e tekstit në thonjëza (" ").

Shënime

Deklarata INSERT INTO mund të shtojë një rekord të vetëm në një tabelë duke përdorur sintaksën e mësipërme. Në këtë rast, ju specifikoni emrat dhe vlerat për secilën fushë në rekord. Duhet të specifikoni të gjitha fushat në rekord që u janë caktuar vlerat dhe vlerat përkatëse. Nëse nuk specifikoni vlerën e fushës, asaj do t'i caktohet vlera e paracaktuar ose NULL. Të dhënat shtohen në fund të tabelës.

Deklarata INSERT INTO mund të përdoret gjithashtu për të shtuar një grup regjistrimesh nga një tabelë ose pyetës tjetër duke përdorur klauzolën SELECT... FROM siç tregohet më sipër (shih Sintaksën e Pyetjes për Shtimin e Regjistrimeve të Shumëfishta). Në këtë rast, klauzola SELECT specifikon fushat për t'i shtuar të specifikuarit objekt_final.

Burimi ose objekt_final mund të jetë një tabelë ose një pyetje. Kur jepet një pyetje, motori i bazës së të dhënave Microsoft Access shton regjistrime në të gjitha tabelat që kthen.

Përdorimi i deklaratës INSERT INTO është opsional. Nëse specifikohet, duhet t'i paraprijë deklaratës SELECT.

Nëse tabela e synuar përmban një çelës primar, sigurohuni që vlerat që shtoni në një ose më shumë nga fushat kryesore të çelësit janë unike dhe të dallueshme nga I PAVLEFSHËM; përndryshe hyrjet nuk do të shtohen.

Nëse të dhënat shtohen në një tabelë me një fushë numërues dhe dëshironi t'i rinumëroni ato, mos e përfshini fushën Counter në pyetje. Përfshini fushën Counter në pyetje nëse dëshironi të ruani vlerat origjinale nga fusha.

Ju mund të shtoni të dhëna në një tabelë në një bazë të dhënash tjetër duke përdorur klauzolën IN.

Për të krijuar një tabelë, përdorni deklaratën SELECT... INTO për të kërkuar për të krijuar tabelën.

Përpara se të ekzekutoni një pyetje shtimi, përdorni një pyetje përzgjedhëse me të njëjtat kritere përzgjedhjeje për të përdorur rezultatet për të përcaktuar se cilat rekorde do të shtohen.

Një pyetje shtesë kopjon të dhënat nga një ose më shumë tabela në një tabelë tjetër. Në këtë rast, tabelat që përmbajnë të dhënat e shtuara mbeten të pandryshuara.

Në vend që të shtoni rekorde nga një tabelë tjetër, mund të vendosni vlerën e secilës fushë në një rekord të ri të veçantë duke përdorur klauzolën VALUES. Nëse një listë fushash është lënë jashtë, klauzola VALUES duhet të përfshijë vlerat përkatëse për secilën fushë të tabelës; përndryshe, operacioni INSERT do të dështojë. Përdorni deklaratën INSERT INTO së bashku me klauzolën VALUES për çdo regjistrim shtesë që dëshironi të krijoni.

Deklarata INSERT fut rekorde të reja në një tabelë. Në këtë rast, vlerat e kolonës mund të jenë konstante literale, ose të jenë rezultat i ekzekutimit të një nënpyetjeje. Në rastin e parë, një deklaratë e veçantë INSERT përdoret për të futur çdo rresht; në rastin e dytë, do të futen aq rreshta sa janë kthyer nga nënpyetja.

Sintaksa e operatorit është si më poshtë:

    INSERT NE [ (,...) ]

    (VALUES (,…))

  1. | (VLERAT E PARAKTUARA)

Siç mund ta shihni nga sintaksa e paraqitur, lista e kolonave është fakultative (kllapat katrore në përshkrimin e sintaksës tregojnë këtë). Nëse mungon, lista e vlerave të futura duhet të jetë e plotë, domethënë të japë vlera për të gjitha kolonat e tabelës. Në këtë rast, rendi i vlerave duhet të korrespondojë me rendin e specifikuar nga deklarata CREATE TABLE për tabelën në të cilën janë futur rreshtat. Për më tepër, këto vlera duhet të jenë të të njëjtit lloj të të dhënave si kolonat në të cilat janë futur. Si shembull, merrni parasysh futjen e një rreshti në tabelën e produktit të krijuar nga deklarata e mëposhtme CREATE TABLE:

    produkt CREATE TABLE

    karakteri krijues (1) JO NULL,

    modeli varchar(4) JO NULL,

    tip varchar(7) JO NULL

Supozoni se doni të shtoni modelin PC 1157 nga prodhuesi B në këtë tabelë. Kjo mund të bëhet me deklaratën e mëposhtme:

    INSERT NE Produkt

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

Nëse specifikoni një listë kolonash, mund të ndryshoni rendin "natyror" të tyre:

    INSERT NE Produkt (lloji, modeli, prodhuesi)

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

Duket se kjo është një veçori krejtësisht e panevojshme, e cila vetëm e bën dizajnin më të rëndë. Megjithatë, fiton nëse kolonat kanë vlera të paracaktuara. Merrni parasysh strukturën e mëposhtme të tabelës:

    KRIJO TABELE produkt_D

    karakteri krijues (1) NULL,

    modeli varchar(4) NULL,

    tip varchar (7 ) JO NULL "PC"

Vini re se këtu vlerat e të gjitha kolonave kanë vlera të paracaktuara (dy të parat janë NULL dhe kolona e fundit është lloji - PC). Tani mund të shkruanim:

    INSERT NE Produkt_D (modeli, prodhuesi)

    VALUES (1157, "B");

Në këtë rast, vlera që mungon gjatë futjes së një rreshti do të zëvendësohet nga vlera e paracaktuar - PC. Vini re se nëse një kolone nuk i jepet një vlerë e paracaktuar në një deklaratë CREATE TABLE dhe një kufizim NOT NULL është specifikuar për të ndaluar përdorimin e NULL në atë kolonë tabele, atëherë vlera e paracaktuar e NULL supozohet.

Shtrohet pyetja: a është e mundur të mos specifikoni një listë kolonash dhe, megjithatë, të përdorni vlerat e paracaktuara? Përgjigja është po. Për ta bërë këtë, në vend që të specifikoni në mënyrë eksplicite vlerën, përdorni fjalën e rezervuar DEFAULT:

    INSERT NE Produkt_D

    VLERAT ("B" , 1158 , DEFAULT ) ;

Meqenëse të gjitha kolonat kanë vlera të paracaktuara, për të futur një rresht me vlerat e paracaktuara, mund të shkruani:

    INSERT NE Produkt_D

    VLERAT (DEFAULT, DEFAULT, DEFAULT);

Megjithatë, për këtë rast ekziston një ndërtim i veçantë DEFAULT VALUES (shih sintaksën e operatorit), me të cilin operatori i mësipërm mund të rishkruhet në formën

    INSERT NË PRODUKT_D VLERAT E PARASHKAKTUARA ;

Vini re se kur futni një rresht në një tabelë, kontrollohen të gjitha kufizimet e vendosura në këtë tabelë. Këto mund të jenë kufizime të kyçit primar ose të indeksit unik, kufizime CHECK ose kufizime të integritetit të referencës. Nëse shkelet ndonjë kufizim, futja e rreshtit do të refuzohet. Le të shqyrtojmë tani rastin e përdorimit të një nënpyetjeje. Supozoni se duhet të fusim në tabelën Product_D të gjitha rreshtat nga tabela Produkt që lidhen me modelet e kompjuterëve personal (lloji = 'PC'). Meqenëse vlerat që na duhen janë tashmë në një tabelë, gjenerimi manual i rreshtave të futur është, së pari, i paefektshëm dhe, së dyti, mund të lejojë gabime në hyrje. Përdorimi i një nënpyetjeje zgjidh këto probleme:

Përdorimi i simbolit "*" në nënpyetës justifikohet në këtë rast, pasi rendi i kolonave është i njëjtë për të dy tabelat. Nëse nuk do të ishte kështu, një listë kolonash do të duhej të aplikohej ose në deklaratën INSERT, në nënpyetje ose në të dyja, të cilat do të përputheshin me rendin e kolonave:

Këtu, si më parë, mund të specifikoni jo të gjitha kolonat nëse dëshironi të përdorni vlerat ekzistuese të paracaktuara, për shembull:

Në këtë rast, kolona e tipit të tabelës Product_D do të zëvendësohet me vlerën e paracaktuar PC për të gjitha rreshtat e futur.

Vini re se kur përdorni një nënpyetje që përmban një kallëzues, do të futen vetëm ato rreshta për të cilat vlera e kallëzuesit është E VËRTETË (jo E PANJUAR !). Me fjalë të tjera, nëse kolona e tipit në tabelën e produktit do të ishte NULLable, dhe kjo vlerë ishte e pranishme në një numër rreshtash, atëherë ato rreshta nuk do të futeshin në tabelën Product_D.

Teknika artificiale e përdorimit të një nënpyetjeje që formon një rresht me klauzolën UNION ALL ju lejon të kapërceni kufizimin në futjen e një rreshti në deklaratën INSERT kur përdorni konstruktorin e rreshtit në klauzolën VALUES. Pra, nëse na duhet të fusim disa rreshta duke përdorur një deklaratë INSERT, mund të shkruajmë:

    INSERT NE Produkt_D

    Prodhuesi SELECT "B" AS, modeli 1158 AS, tipi "PC" AS

    UNION TË GJITHA

    SELECT "C" , 2190 , "Laptop"

    UNION TË GJITHA

    SELECT "D" , 3219 , "Printer" ;

Përdorimi i UNION ALL është i preferueshëm ndaj UNION edhe nëse garantohet mungesa e rreshtave të dyfishta, pasi në këtë rast nuk do të kryhet asnjë kontroll për të eliminuar dublikatat.

Duhet të theksohet se futja e shumëfishtë tupleash duke përdorur konstruktorin e rreshtit është zbatuar tashmë në Sistemi i menaxhimit të bazës së të dhënave relacionale (DBMS), i zhvilluar nga Microsoft Corporation.Gjuha e strukturuar e pyetjeve) është një gjuhë kompjuterike universale e përdorur për të krijuar, modifikuar dhe manipuluar të dhënat në bazat e të dhënave relacionale. SQL Server 2008. Duke pasur parasysh këtë mundësi, pyetja e fundit mund të rishkruhet si:

    INSERT NË PRODUKT_D VLERAT

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

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

Artikujt më të mirë mbi këtë temë