Kako podesiti pametne telefone i računare. Informativni portal

Osnove T-SQL-a. DML

sql upit INSERT INTO ima smisla kada je kreirana tablica baze podataka. Odnosno, tabela postoji, ima ime, kreirane redove i kolone. tablicu kreira operator: , tablicu mijenja operator .

sql upit INSERT INTO - sintaksa upita

sql upit INSERT INTO ima sljedeću sintaksu:

INSERT INTO table_name (u zagradama, ako je potrebno, umetnite listu kolona u koje želite da umetnete podatke) VRIJEDNOSTI umetnuti podaci1, umetnuti podaci2, umetnuti podaci3.

Možete umetnuti opciju IGNORE između INSERT i INTRO. Nije potrebno. Potrebno za zaštitu primarnih ključeva prilikom uređivanja tabele. U suprotnom, ako dođe do dupliciranja primarnih ključeva tokom uređivanja, tada će prilikom umetanja opcije IGNORE prvi red sa primarnim ključem ostati u tabeli koja se uređuje, a ostali primarni ključevi će biti obrisani. Podrazumevano izostavljamo ovu opciju.

Postoje opcione opcije LOW_PRIORITY i DELAYED. Oni određuju prioritete za dodavanje informacija u bazu podataka. Prvi specificira čekanje da se baza podataka oslobodi, drugi znači baferiranje informacija.

Red u upitu: INSERT sa frazom VALUES će vam omogućiti da dodate jedan red u tablicu baze podataka. Klauzula VALUES sadrži vrijednosti ovih podataka.

Podupiti se mogu specificirati umjesto fraze VALUES. INSERT sa potupitom dodaje redove koje je podupit vratio u tabelu. Poslužitelj baze podataka obrađuje podupit i umeće sve vraćene redove u tablicu. Server ne umeće redove osim ako ih potupit ne izabere.

  • podupit_1 - podupit koji server obrađuje na isti način kao i pogled
  • subquery_2 je potupit koji vraća redove umetnute u tablicu. Lista ovog potupita mora imati isti broj stupaca kao lista stupaca INSERT.

Potupiti se praktično ne koriste u MySQL bazi podataka.

Primjeri sql upita INSERT INTO u MySQL bazi podataka

Ubacujemo nove redove u MySQL bazu podataka pomoću naredbe INSERT INTRO.

Prvi primjer.

Umetnite nove redove u tablicu table_name.

INSERT INTO table_name VALUES ('2′,'145′,'1′,'name');

To znači da želimo da ubacimo vrijednosti 2,145,1,name u kolone tablice table_name. Pošto kolone nisu specificirane, vrijednosti se popunjavaju u svim stupcima tabele.

Primjer dva.

Umetnite informacije u potrebne (specificirane) stupce tablice table_name.

INSERT INTO table_name (client_customer, client_subclient, client_mail) VRIJEDNOSTI ('name1','subname1',' [email protected]′), (‘ime2′,’podnaziv2′,’ [email protected]′), (‘ime3′,’podnaziv3′,(’ [email protected]′);

Igor Serov posebno za sajt "".

Zdravo svima! Ovaj članak će govoriti o tome kako možete dodati podatke u tabelu u Microsoft SQL Serveru, ako ste već barem malo upoznati sa T-SQL jezikom, onda ste vjerovatno shvatili da ćemo sada govoriti o naredbi INSERT, kao io tome kako se može koristiti za dodavanje podataka u tablicu.

Počnimo, kao i obično, s malo teorije.

INSERT izraz u T-SQL

INSERT je T-SQL instrukcija koja je dizajnirana za dodavanje podataka u tablicu, tj. kreiranje novih zapisa. Ova instrukcija se može koristiti i za dodavanje jednog reda u tabelu i za grupno umetanje podataka. INSERT izraz zahtijeva dozvolu za umetanje podataka ( INSERT) na ciljnu tabelu.

Postoji nekoliko načina za korištenje naredbe INSERT na dijelu podataka koji treba umetnuti:

  • Navođenje specifičnih vrijednosti za umetanje;
  • Određivanje skupa podataka kao SELECT upita;
  • Određivanje skupa podataka u obliku poziva procedure koja vraća tabelarne podatke.

Pojednostavljena sintaksa

INSERT [tabela] ( lista kolona...) VRIJEDNOSTI ( spisak vrednosti...) Ili SELECT zahtjev za uzorkom Ili EXECUTE procedura

  • INSERT INTO je naredba za dodavanje podataka u tablicu;
  • Tabela je naziv ciljne tabele u koju želite da umetnete nove zapise;
  • Lista kolona je lista naziva kolona tabele u koju će podaci biti umetnuti, odvojenih zarezima;
  • VALUES je konstruktor vrijednosti tablice s kojim specificiramo vrijednosti koje ćemo umetnuti u tablicu;
  • Lista vrijednosti su vrijednosti koje će biti umetnute, odvojene zarezima. Oni su navedeni onim redom kojim se stupci pojavljuju u listi kolona;
  • SELECT je upit za odabir podataka za umetanje u tabelu. Skup rezultata koji upit vraća mora odgovarati listi kolona;
  • EXECUTE je poziv procedure za dobijanje podataka za umetanje u tabelu. Skup rezultata koji vraća pohranjena procedura mora odgovarati popisu stupaca.

Otprilike ovako izgleda pojednostavljena sintaksa naredbe INSERT INTO; u većini slučajeva, ovako ćete dodati nove zapise u tabele.

Spisak kolona u koje ćete umetnuti podatke nije potrebno pisati, u kom slučaju će njihov redosled biti određen na osnovu stvarnog redosleda kolona u tabeli. Morate zapamtiti ovaj redoslijed kada navedete vrijednosti za umetanje ili napišete upit za odabir. Osobno preporučujem da ipak navedete listu kolona u koje planirate dodati podatke.

Takođe treba da zapamtite da lista kolona i lista vrednosti, respektivno, moraju sadržati takozvane obavezne kolone; to su one koje ne mogu sadržati NULL vrednost. Ako ih ne navedete, a kolona nema zadanu vrijednost, doći će do greške.

Također bih želio napomenuti da tip podataka vrijednosti koje ćete umetnuti mora odgovarati tipu podataka kolone u koju će ova vrijednost biti umetnuta, ili barem podržavati implicitnu konverziju. Ali savjetujem vam da kontrolirate tip podataka ( formatu) vrijednosti, kako na listi vrijednosti, tako iu SELECT upitu.

Dosta teorije, pređimo na praksu.

Početni podaci

Da bismo dodali podatke u tabelu, potrebna nam je sama tabela, pa hajde da je kreiramo i pokušamo da joj dodamo zapise.

Bilješka! Svi primjeri će se izvoditi u Microsoft SQL Server 2016 Express.

CREATE TABLE TestTable( IDENTITY(1,1) NOT NULL, (100) NOT NULL, NOT NULL)

Naša testna tabela će sadržati listu proizvoda sa cenama.

Također u primjerima ćemo koristiti proceduru koja vraća vrijednost tablice za dodavanje podataka u tablicu, pa hajde da i nju kreiramo.

KREIRAJTE PROCEDURE TestProcedure KAO POČETAK SELECT ProductName, Price from Test Table END

Na primjer, vratit će podatke iz novokreirane tablice TestTable.

Bilješka!

Kao što razumijete, čitanje ovog materijala podrazumijeva poznavanje T-SQL jezika, pa ako vam nešto nije jasno, preporučujem da se upoznate sa sljedećim materijalima:

Primjer 1 – Dodavanje novog zapisa u tablicu korištenjem konstruktora vrijednosti tablice

Prvo pokušajmo dodati jedan zapis i odmah pogledati rezultat, tj. Hajde da napišemo zahtjev za uzorak.

INSERT INTO TestTable (ProductName, Price) VRIJEDNOSTI ("Computer", 100) IDI SELECT * IZ TestTable

Vidite da smo iza naziva tabele naveli nazive kolona u koje ćemo dodati podatke, odvojene zarezima, zatim smo naznačili ključnu reč VRIJEDNOSTI a u zagradama smo takođe, istim redosledom, odvojenim zarezima, napisali vrednosti koje želimo da ubacimo.

Nakon INSERT naredbe, napisao sam naredbu SELECT i razdvojio ih naredbom GO.

Sada zamislimo da moramo dodati nekoliko redova. Za ovo ćemo napisati sljedeći zahtjev.

INSERT INTO TestTable (ProductName, Price) VRIJEDNOSTI ("Računar", 100), ("Tastatura", 20), ("Monitor", 50) IDI SELECT * IZ TestTable


Primjer 2 - Dodavanje novih redova u tablicu korištenjem SELECT upita

Vrlo često postoji potreba za dodavanjem puno podataka u tabelu, na primjer, na osnovu odabranog upita, tj. SELECT. Da bismo to učinili, umjesto VRIJEDNOSTI, samo trebamo specificirati zahtjev.

INSERT INTO TestTable(ProductName, Price) SELECT ProductName, Price from TestTable GDJE Id >


U ovom primjeru smo napisali SELECT upit koji vraća podatke iz tablice TestTable, ali ne sve, već samo one s ID-om većim od 2. I rezultat je umetnut u istu tablicu TestTable.

Kao primjer kako možete dodati zapise u tablicu bez navođenja liste kolona, ​​napišemo još jedan upit za umetanje podataka koji će raditi potpuno istu stvar kao i gornji upit, samo što neće navesti kolone za umetanje.

INSERT INTO TestTable SELECT ProductName, Price from TestTable WHERE Id > 2 GO SELECT * FROM TestTable


U ovom slučaju, sigurni smo da je u tablici TestTable prva kolona ProductName, a druga je Cijena, tako da možemo sebi priuštiti da to napišemo na taj način. Ali, opet, u praksi je bolje navesti listu kolona.

Ako ste primijetili da u svim primjerima nisam naveo kolonu Id, ali imamo je, nije bilo greške, pošto ova kolona ima svojstvo IDENTITY, automatski generiše identifikatore, tako da ubacivanje podataka u takvu kolonu jednostavno nije moguće.

Primjer 3 - Dodavanje novih zapisa u tablicu korištenjem pohranjene procedure

Sada ubacimo podatke u tabelu koje će nam pohranjena procedura vratiti. Značenje ovdje je isto, umjesto VRIJEDNOSTI i umjesto zahtjeva ukazujemo na poziv procedure. Ali kao što razumete, redosled i broj kolona koje vraća procedura mora se striktno podudarati sa listom kolona koje treba umetnuti ( čak i ako lista kolona nije navedena).

INSERT INTO TestTable(ProductName, Price) EXEC TestProcedure GO SELECT * FROM TestTable


Nadam se da vam je ovaj materijal pomogao da shvatite uputstva. INSERT INTO, i to je sve što imam za sada!

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đer 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.

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"),

Najbolji članci na ovu temu