Kako postaviti pametne telefone i računala. Informativni portal

Osnove T-SQL-a. DML

sql upit INSERT INTO ima smisla kada je kreirana tablica baze podataka. Odnosno, tablica postoji, ima ime, kreirane retke i stupce. tablicu kreira operator: , tablicu modificira 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 popis stupaca u koje želite umetnuti 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 tablice. U suprotnom, ako dođe do dupliciranja primarnih ključeva tijekom uređivanja, tada će prilikom umetanja opcije IGNORE prvi redak s primarnim ključem ostati u tablici koja se uređuje.Ostali primarni ključevi će biti izbrisani. Prema zadanim postavkama izostavljamo ovu opciju.

Postoje izborne opcije LOW_PRIORITY i DELAYED. Oni određuju prioritete za dodavanje informacija u bazu podataka. Prvi navodi čekanje da se baza podataka oslobodi, drugi znači spremanje informacija u međuspremnik.

Redak u upitu: INSERT s frazom VRIJEDNOSTI omogućit će vam dodavanje jednog retka u tablicu baze podataka. Klauzula VALUES sadrži vrijednosti ovih podataka.

Podupiti se mogu specificirati umjesto izraza VRIJEDNOSTI. INSERT s podupitom dodaje retke koje vraća podupit u tablicu. Poslužitelj baze podataka obrađuje podupit i ubacuje sve vraćene retke u tablicu. Poslužitelj ne umeće retke osim ako ih podupit ne odabere.

  • subquery_1 - podupit koji server obrađuje na isti način kao i pogled
  • subquery_2 je podupit koji vraća retke umetnute u tablicu. Popis ovog podupita mora imati isti broj stupaca kao popis stupaca INSERT.

Podupiti se praktički ne koriste u MySQL bazi podataka.

Primjeri sql upita INSERT INTO u MySQL bazi podataka

Nove retke ubacujemo u MySQL bazu pomoću naredbe INSERT INTRO.

Prvi primjer.

Umetnite nove retke u tablicu table_name.

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

To znači da želimo umetnuti vrijednosti 2,145,1,name u stupce tablice table_name. Budući da stupci nisu navedeni, vrijednosti se popunjavaju u svim stupcima tablice.

Primjer dva.

Umetnite informacije u potrebne (navedene) stupce tablice table_name.

INSERT INTO table_name (client_customer, client_subclient, client_mail) VALUES ('name1','subname1',' [e-mail zaštićen]′), ('ime2','podnaziv2',' [e-mail zaštićen]′), ('ime3','podnaziv3',(' [e-mail zaštićen]′);

Igor Serov posebno za mjesto "".

Bok svima! Ovaj članak govori o tome kako možete dodati podatke u tablicu u Microsoft SQL Serveru, ako ste već barem malo upoznati s T-SQL jezikom, onda ste vjerojatno shvatili da ćemo sada govoriti o naredbi INSERT, kao i o tome kako se njome mogu dodavati podaci u tablicu.

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

INSERT izjava u T-SQL

UMETNUTI je T-SQL instrukcija koja je dizajnirana za dodavanje podataka u tablicu, tj. stvaranje novih zapisa. Ova se uputa može koristiti i za dodavanje jednog retka u tablicu i za skupno umetanje podataka. Izjava INSERT zahtijeva dozvolu za umetanje podataka ( UMETNUTI) u ciljnu tablicu.

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

  • Ispis specifičnih vrijednosti za umetanje;
  • Specificiranje skupa podataka kao SELECT upit;
  • Određivanje skupa podataka u obliku poziva procedure koja vraća tablične podatke.

Pojednostavljena sintaksa

INSERT [tablica] ( popis stupaca...) VRIJEDNOSTI ( popis vrijednosti...) Ili ODABERI zahtjev za uzorak Ili IZVRŠITI postupak

  • INSERT INTO je naredba za dodavanje podataka u tablicu;
  • Tablica je naziv ciljne tablice u koju želite umetnuti nove zapise;
  • Popis stupaca je popis naziva stupaca tablice u koje će se umetnuti podaci, odvojenih zarezima;
  • VALUES je konstruktor tabličnih vrijednosti pomoću kojeg zadajemo vrijednosti koje ćemo ubaciti u tablicu;
  • Popis vrijednosti su vrijednosti koje će biti umetnute, odvojene zarezima. Navedeni su redoslijedom kojim se stupci pojavljuju na popisu stupaca;
  • SELECT je upit za odabir podataka za umetanje u tablicu. Skup rezultata koji upit vraća mora odgovarati popisu stupaca;
  • EXECUTE je poziv procedure za dobivanje podataka za umetanje u tablicu. Skup rezultata koji pohranjena procedura vraća mora odgovarati popisu stupaca.

Ovako otprilike izgleda pojednostavljena sintaksa naredbe INSERT INTO; u većini slučajeva ovako ćete dodati nove zapise u tablice.

Popis stupaca u koje ćete unositi podatke nije potrebno pisati, u tom slučaju će se njihov redoslijed odrediti na temelju stvarnog redoslijeda stupaca u tablici. Morate zapamtiti ovaj redoslijed kada navodite vrijednosti za umetanje ili pišete upit za odabir. Osobno preporučujem da ipak navedete popis stupaca u koje planirate dodati podatke.

Također morate imati na umu da popis stupaca, odnosno popis vrijednosti, moraju sadržavati takozvane obavezne stupce; to su oni koji ne mogu sadržavati vrijednost NULL. Ako ih ne navedete, a stupac nema zadanu vrijednost, pojavit će se pogreška.

Također bih želio napomenuti da tip podataka vrijednosti koje ćete umetnuti mora odgovarati tipu podataka stupca u koji će ta vrijednost biti umetnuta ili barem podržavati implicitnu konverziju. Ali savjetujem vam da kontrolirate vrstu podataka ( format) vrijednosti, i na popisu vrijednosti i u upitu SELECT.

Dosta teorije, idemo na praksu.

Početni podaci

Kako bismo dodali podatke u tablicu, potrebna nam je sama tablica, pa je kreirajmo i pokušajmo joj dodati zapise.

Bilješka! Svi primjeri bit će pokrenuti u Microsoft SQL Server 2016 Express.

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

Naša testna tablica sadržavat će popis proizvoda s cijenama.

Također, u primjerima ćemo koristiti proceduru koja vraća vrijednost tablice za dodavanje podataka u tablicu, pa kreirajmo i to.

CREATE PROCEDURE TestProcedure AS BEGIN SELECT ProductName, Price FROM TestTable END

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

Bilješka!

Kao što razumijete, čitanje ovog materijala podrazumijeva određeno 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 pomoću konstruktora vrijednosti tablice

Prvo pokušajmo dodati jedan zapis i odmah pogledati rezultat, tj. Napišimo zahtjev za uzorak.

INSERT INTO TestTable(ProductName, Price) VALUES ("Computer", 100) GO SELECT * FROM TestTable

Vidite da smo nakon naziva tablice naveli nazive stupaca u koje ćemo dodati podatke, odvojene zarezima, zatim smo naveli ključnu riječ VRIJEDNOSTI a u zagradi smo također, istim redoslijedom, odvojene zarezima, upisali vrijednosti koje želimo umetnuti.

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

Sada zamislimo da trebamo dodati nekoliko redaka. Za to ćemo napisati sljedeći zahtjev.

INSERT INTO TestTable(ProductName, Price) VALUES ("Računalo", 100), ("Keyboard", 20), ("Monitor", 50) GO SELECT * FROM TestTable


Primjer 2 - Dodavanje novih redaka u tablicu pomoću SELECT upita

Vrlo često postoji potreba za dodavanjem puno podataka u tablicu, na primjer, na temelju upita za odabir, tj. IZABERI. Da bismo to učinili, umjesto VALUES, samo trebamo navesti zahtjev.

INSERT INTO TestTable(ProductName, Price) SELECT ProductName, Price FROM TestTable WHERE Id >


U ovom smo primjeru 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 popisa stupaca, napišimo još jedan upit za umetanje podataka koji će učiniti potpuno istu stvar kao i gornji upit, samo što neće navesti stupce 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 prvi stupac ProductName, a drugi Price, pa si možemo priuštiti da to napišemo na taj način. No, opet, u praksi je bolje navesti popis stupaca.

Ako ste primijetili, u svim primjerima nisam naveo stupac Id, ali ga imamo, nije se dogodila nikakva greška, budući da ovaj stupac ima svojstvo IDENTITY, on automatski generira identifikatore, tako da umetanje podataka u takav stupac jednostavno nije moguće.

Primjer 3 - Dodavanje novih zapisa u tablicu pomoću pohranjene procedure

Sada u tablicu ubacimo podatke koje će nam pohranjena procedura vratiti. Ovdje je značenje isto, umjesto VRIJEDNOSTI i umjesto zahtjeva označavamo poziv procedure. Ali kao što razumijete, redoslijed i broj stupaca koje vraća procedura mora strogo odgovarati popisu stupaca koji se umeću ( čak i ako popis stupaca nije naveden).

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


Nadam se da vam je ovaj materijal pomogao razumjeti upute. UMETNUTI U, i to je sve što imam za sada!

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

Sintaksa

Zahtjev za dodavanje više zapisa:

UMETNUTI U konačni_objekt [(polje1[, polje2[, ...]])]
IZABERI [ izvor.]polje1[, polje2[, ...]
IZ tablični_izraz

Zahtjev za dodavanje jednog zapisa:

UMETNUTI U konačni_objekt [(polje1[, polje2[, ...]])]
VRIJEDNOSTI ( polje1[, polje2[, ...])

Naredba INSERT INTO sastoji se od sljedećih elemenata:

Dio

Opis

konačni_objekt

Naziv tablice ili upita u koji se dodaju zapisi.

polje1, polje2

Nakon svađe konačni_objekt- nazive polja u koja se dodaju podaci; nakon svađe izvor- nazive polja iz kojih se izdvajaju podaci.

vanjska_baza_podataka

Put do vanjske baze podataka. Za opis staze pogledajte članak o klauzuli IN.

izvor

Naziv tablice ili upita iz kojeg se zapisi kopiraju.

tablični_izraz

Jedan ili više naziva tablica iz kojih želite dohvatiti zapise. Ovaj argument može biti naziv pojedinačne tablice, izraz rezultata 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 umetnuta je u polje koje odgovara njenom položaju na popisu: vrijednost1 dodano polje1 novi unos, vrijednost2- V polje2 itd. Vrijednosti morate odvojiti zarezom i tekstualna polja staviti u navodnike (" ").

Bilješke

Izjava INSERT INTO može dodati jedan zapis u tablicu koristeći gornju sintaksu. U ovom slučaju navodite nazive 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 tablice.

Izjava INSERT INTO također se može koristiti za dodavanje skupa zapisa iz druge tablice ili upita pomoću klauzule SELECT... FROM kao što je prikazano gore (pogledajte Sintaksu upita za dodavanje višestrukih zapisa). U ovom slučaju klauzula SELECT specificira polja koja treba dodati navedenom konačni_objekt.

Izvor ili konačni_objekt može biti tablica ili upit. Kada se zada upit, mehanizam baze podataka Microsoft Access dodaje zapise u sve tablice koje vraća.

Korištenje naredbe INSERT INTO nije obavezno. Ako je navedeno, mora prethoditi naredbi SELECT.

Ako ciljna tablica sadrži primarni ključ, provjerite jesu li vrijednosti koje dodajete 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 tablicu s poljem brojača i želite ih ponovno numerirati, nemojte uključiti polje brojača u upit. Uključite polje Brojač u upit ako želite sačuvati izvorne vrijednosti iz polja.

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

Za izradu tablice upotrijebite naredbu SELECT... INTO za upit za izradu tablice.

Prije nego što pokrenete upit za dodavanje, upotrijebite upit za odabir s istim kriterijima odabira da biste pomoću rezultata odredili koji će se zapisi dodati.

Upit za dodavanje kopira zapise iz jedne ili više tablica u drugu tablicu. U tom slučaju tablice koje sadrže dodane zapise ostaju nepromijenjene.

Umjesto dodavanja zapisa iz druge tablice, možete postaviti vrijednost svakog polja u zasebnom novom zapisu pomoću klauzule VALUES. Ako je popis polja izostavljen, klauzula VALUES mora sadržavati odgovarajuće vrijednosti za svako polje tablice; inače operacija INSERT neće uspjeti. Koristite naredbu INSERT INTO zajedno s klauzulom VALUES za svaki dodatni zapis koji želite stvoriti.

Naredba INSERT umeće nove zapise u tablicu. U ovom slučaju, vrijednosti stupca mogu biti doslovne konstante ili biti rezultat izvršavanja podupita. U prvom slučaju, posebna izjava INSERT se koristi za umetanje svakog retka; u drugom slučaju će biti umetnuto onoliko redaka koliko je vraćeno podupitom.

Sintaksa operatora je sljedeća:

    UMETNUTI U [ (,...) ]

    (VRIJEDNOSTI(,…))

  1. | (ZADANE VRIJEDNOSTI)

Kao što možete vidjeti iz predstavljene sintakse, popis stupaca nije obavezan (uglaste zagrade u opisu sintakse to označavaju). Ako nedostaje, popis umetnutih vrijednosti mora biti potpun, odnosno navesti vrijednosti za sve stupce tablice. U ovom slučaju, redoslijed vrijednosti mora odgovarati redoslijedu navedenom naredbom CREATE TABLE za tablicu u koju su umetnuti retci. Osim toga, te vrijednosti moraju biti iste vrste podataka kao i stupci u koje su unesene. Kao primjer, razmislite o umetanju retka u tablicu proizvoda stvorenu sljedećom naredbom CREATE TABLE:

    CREATE TABLE proizvod

    maker char (1) NIJE NULL,

    model varchar(4) NOT NULL,

    tip varchar(7) NOT NULL

Pretpostavimo da u ovu tablicu želite dodati PC model 1157 proizvođača B. To se može učiniti pomoću sljedeće izjave:

    UMETNI U PROIZVOD

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

Ako navedete popis stupaca, možete promijeniti njihov "prirodni" redoslijed:

    UMETNI U PROIZVOD (tip, model, proizvođač)

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

Čini se da je ovo potpuno nepotrebna značajka, koja samo čini dizajn glomaznijim. Međutim, pobjeđuje ako stupci imaju zadane vrijednosti. Razmotrite sljedeću strukturu tablice:

    CREATE TABLE proizvod_D

    maker char (1) NULL,

    model varchar(4) NULL,

    tip varchar (7 ) NOT NULL DEFAULT "PC"

Imajte na umu da ovdje vrijednosti svih stupaca imaju zadane vrijednosti (prva dva su NULL, a posljednji stupac je tip - PC). Sada bismo mogli napisati:

    INSERT INTO Product_D (model, proizvođač)

    VRIJEDNOSTI(1157, "B");

U tom slučaju vrijednost koja nedostaje prilikom umetanja retka bit će zamijenjena zadanom vrijednošću - PC. Imajte na umu da ako stupcu nije dana zadana vrijednost u CREATE TABLE izrazu i navedeno je NOT NULL ograničenje da zabrani korištenje NULL u tom stupcu tablice, tada se pretpostavlja zadana vrijednost NULL.

Postavlja se pitanje: je li moguće ne navesti popis stupaca i unatoč tome 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, ZADANO) ;

Budući da svi stupci imaju zadane vrijednosti, za umetanje retka sa zadanim vrijednostima možete napisati:

    INSERT INTO Product_D

    VRIJEDNOSTI(ZADANO, ZADANO, ZADANO);

Međutim, za ovaj slučaj postoji posebna konstrukcija DEFAULT VALUES (vidi sintaksu operatora), s kojom se gornji operator može prepisati u obliku

    INSERT INTO Product_D DEFAULT VALUES ;

Imajte na umu da se prilikom umetanja retka u tablicu 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 se prekrši bilo koje ograničenje, umetanje retka bit će odbijeno. Razmotrimo sada slučaj korištenja podupita. Pretpostavimo da u tablicu Product_D trebamo umetnuti sve retke iz tablice Product koji se odnose na modele osobnih računala (type = 'PC'). Budući da su vrijednosti koje su nam potrebne već u nekoj tablici, ručno generiranje umetnutih redaka je, prvo, neučinkovito i, drugo, može dopustiti pogreške pri unosu. Korištenje podupita rješava ove probleme:

Upotreba simbola “*” u podupitu je u ovom slučaju opravdana, jer je redoslijed stupaca isti za obje tablice. Da to nije slučaj, popis stupaca morao bi se primijeniti u naredbi INSERT, podupitu ili oboje, što bi odgovaralo redoslijedu stupaca:

Ovdje, kao i prije, ne možete navesti sve stupce ako želite koristiti postojeće zadane vrijednosti, na primjer:

U ovom slučaju, stupac tipa tablice Product_D bit će zamijenjen zadanom vrijednošću PC za sve umetnute retke.

Imajte na umu da će se pri korištenju podupita koji sadrži predikat umetnuti samo oni redovi za koje je vrijednost predikata TRUE (ne NEPOZNATO!). Drugim riječima, ako je stupac tipa u tablici proizvoda NULLable, a ta je vrijednost prisutna u određenom broju redaka, tada ti redovi ne bi bili umetnuti u tablicu Proizvod_D.

Umjetna tehnika korištenja podupita koji tvori red s klauzulom UNION ALL omogućuje vam da prevladate ograničenje umetanja jednog retka u naredbu INSERT kada koristite konstruktor retka u klauzuli VALUES. Dakle, ako trebamo umetnuti nekoliko redaka pomoću jedne naredbe INSERT, možemo napisati:

    INSERT INTO Product_D

    SELECT "B" AS proizvođač, 1158 AS model, "PC" AS tip

    UNIJA SVE

    ODABERITE "C", 2190, "Laptop"

    UNIJA SVE

    SELECT "D" , 3219 , "Pisač" ;

Upotreba UNION ALL je poželjnija od UNION-a čak i ako je zajamčeno odsustvo duplikata redaka, budući da u ovom slučaju neće biti izvršena provjera za uklanjanje duplikata.

Treba napomenuti da je umetanje višestrukih torki pomoću konstruktora reda već implementirano Sustav upravljanja relacijskom bazom podataka (DBMS), razvijen od strane Microsoft Corporation.Structured Query Language) je univerzalni računalni jezik koji se koristi za stvaranje, modificiranje i rukovanje podacima u relacijskim bazama podataka. SQL poslužitelj 2008. S obzirom na ovu mogućnost, posljednji upit može se prepisati kao:

    INSERT INTO Product_D VALUES

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

    ("C", 2190, "prijenosno računalo"),

Najbolji članci na temu