Osnove T-SQL-a. DML. Transact-SQL - umetanje podataka Demo verzija baze podataka

Uz naredbu SELECT o kojoj smo ranije govorili, jezik za manipulaciju podacima (DML) sadrži još tri naredbe: INSERT, UPDATE i DELETE. Poput naredbe SELECT, ove tri naredbe rade na tablicama ili pogledima. Ovaj članak pokriva naredbu INSERT, a druge dvije naredbe su pokrivene u sljedećem članku.

INSERT izjava umeće retke (ili dijelove redaka) u tablicu. Postoje dva različita oblika ove upute:

INSERT tab_name [(col_list)] ZADANE VRIJEDNOSTI | VRIJEDNOSTI ((DEFAULT | NULL | izraz) [ ,...n]) INSERT INTO tab_name | view_name [(col_list)] (select_statement | execute_statement) Sintaksne konvencije

Prvi oblik instrukcije omogućuje umetanje jednog retka (ili njegovog dijela) u tablicu. A drugi oblik naredbe INSERT omogućuje umetanje skupa rezultata naredbe SELECT ili pohranjene procedure koju izvodi naredba EXECUTE u tablicu. Pohranjena procedura mora vratiti podatke za umetanje u tablicu. Kada se koristi s naredbom INSERT, naredba SELECT može odabrati vrijednosti iz različite ili iste tablice u koju se podaci umeću, sve dok su tipovi podataka odgovarajućih stupaca kompatibilni.

Za oba oblika, vrsta podataka svake umetnute vrijednosti mora biti kompatibilna s vrstom podataka odgovarajućeg stupca tablice. Svi znakovni nizovi i privremeni podaci moraju biti u navodnicima; Brojčane vrijednosti ne moraju biti u navodnicima.

Umetanje jednog retka

Za oba oblika naredbe INSERT, eksplicitno navođenje popisa stupaca nije obavezno. Nenavođenje stupaca je isto što i navođenje svih stupaca u tablici.

Parametar ZADANE VRIJEDNOSTI umeće zadane vrijednosti za sve stupce. Stupci s tipom podataka TIMESTAMP ili svojstvom IDENTITY umetnuti su prema zadanim postavkama s vrijednostima koje automatski generira sustav. Za stupce drugih tipova podataka umeće se odgovarajuća zadana vrijednost koja nije null ako je dostupna ili NULL u suprotnom. Ako stupac ne dopušta nulte vrijednosti i nema definiranu zadanu vrijednost, izjava INSERT ne uspijeva i prikazuje se poruka.

Primjer u nastavku umeće retke u tablicu zaposlenika u bazi podataka SampleDb, demonstrirajući upotrebu izjave INSERT za umetanje male količine podataka u bazu podataka:

USE SampleDb; INSERT INTO Employee VALUES (34990, "Andrey", "Batonov", "d1"); UMETNI U VRIJEDNOSTI zaposlenika (38640, "Aleksej", "Vasin", "d3");

Postoje dva različiti putevi umetanje vrijednosti u nova linija. Izjava INSERT u donjem primjeru izričito koristi ključnu riječ NULL i umeće vrijednost NULL u odgovarajući stupac:

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

Da biste umetnuli vrijednosti u neke (ali ne sve) stupce tablice, obično morate eksplicitno navesti te stupce. Neodređeni stupci moraju dopustiti NULL vrijednosti ili imati definiranu zadanu vrijednost.

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

Prethodna dva primjera su ekvivalentna. U tablici zaposlenika, jedini stupac koji dopušta NULL vrijednosti je stupac DepartmentNumber, a svi ostali stupci su onemogućeni klauzulom NOT NULL u izjavi CREATE TABLE.

Redoslijed vrijednosti u VALUES ponuda Izjave INSERT mogu se razlikovati od redoslijeda navedenog u naredbi CREATE TABLE. U tom slučaju njihov redoslijed mora odgovarati redoslijedu kojim su odgovarajući stupci navedeni na popisu stupaca. Dolje je primjer umetanja podataka drugačijim redoslijedom od izvornog:

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

Umetanje više redaka

Drugi oblik naredbe INSERT umeće jedan ili više redaka odabranih podupitom u tablicu. Primjer u nastavku pokazuje kako umetnuti retke u tablicu pomoću drugog oblika naredbe INSERT. U ovom slučaju, postavlja se zahtjev za odabir brojeva i naziva odjela koji se nalaze u Moskvi, a rezultirajući skup rezultata učitava se u novi stol, stvoren ranije.

Nova tablica MoscowDepartment stvorena u gornjem primjeru ima iste stupce kao i postojeća tablica Department, osim stupca Location koji nedostaje. Podupit u izjavi INSERT odabire sve retke u tablici odjela za koje je vrijednost stupca Lokacija "Moskva", koji se zatim umeću u novu tablicu stvorenu na početku upita.

Primjer ispod pokazuje drugi način umetanja redaka u tablicu pomoću drugog oblika naredbe INSERT. U ovom slučaju, izvršava se upit za odabir kadrovskih brojeva, brojeva projekata i datuma početka projekta za sve zaposlenike s pozicijom "Manager" koji rade na projektu p2, a zatim učitava rezultirajući skup rezultata u novu tablicu stvorenu na početku upit:

USE 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";

Prije umetanja redaka pomoću izjave INSERT, tablice MoscowDepartment i ManagerTeam (u gornjim primjerima) bile su prazne. Ako bi tablica već postojala i sadržavala retke s podacima, tada bi joj se dodavali novi redovi.

Bok svima! Ovaj članak govori o tome kako možete dodati podatke u tablicu u Microsoftu SQL poslužitelj 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 dodati 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 uputa može se 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 posjedovanje određenog znanja o T-SQL jezik, 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 izjave INSERT koju sam napisao SELECT izjava a razdvojio ih je tim 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 u ovom primjeru napisali smo SELECT upit, koji vraća podatke iz tablice TestTable, ali ne sve, već samo one s identifikatorom većim od 2. I rezultat je ubačen 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


Nada, ovaj materijal pomogao vam je razumjeti upute UMETNUTI U, i to je sve što imam za sada!

U prethodnim smo odjeljcima pogledali posao dohvaćanja podataka iz unaprijed stvorenih tablica. Sada je vrijeme da shvatimo kako možemo stvarati/brisati tablice, dodavati nove zapise i brisati stare. Za ove namjene u SQL Postoje operateri kao što su: STVORITI- kreira tablicu, PROMIJENI- mijenja strukturu tablice, PAD- briše tablicu ili polje, UMETNUTI- dodaje podatke u tablicu. Počnimo se upoznavati s ovom skupinom operatera od operatera UMETNUTI.

1. Dodavanje cijelih linija

Kao što ime govori, operater UMETNUTI koristi se za umetanje (dodavanje) redaka u tablicu baze podataka. Dodavanje se može izvršiti na nekoliko načina:

  • - dodati jedan puni red
  • - dodati dio linije
  • - dodajte rezultate upita.

Dakle, da bismo dodali novi red u tablicu, moramo navesti naziv tablice, navesti nazive stupaca i navesti vrijednost za svaki stupac pomoću konstrukcije UMETNUTI U naziv_tablice (polje1, polje2 ...) VRIJEDNOSTI (vrijednost1, vrijednost2...). Pogledajmo primjer.

UMETNI U VRIJEDNOSTI prodavatelja (ID, adresa, grad, ime_prodavatelja, država).("6", "1st Street", "Los Angeles", "Harry Monroe", "SAD")

Također možete promijeniti redoslijed naziva stupaca, ali u isto vrijeme morate promijeniti redoslijed vrijednosti u parametru VRIJEDNOSTI.

2. Dodavanje dijela linija

U prethodnom primjeru, kada se koristi operator UMETNUTI eksplicitno smo označili nazive stupaca tablice. Korištenje ovu sintaksu, možemo preskočiti neke stupce. To znači da unosite vrijednosti za neke stupce, ali ih ne dajete za druge. Na primjer:

UMETNI U VRIJEDNOSTI prodavatelja (ID, grad, ime prodavatelja).("6", "Los Angeles", "Harry Monroe")

U ovom primjeru nismo naveli vrijednost za dva stupca Adresa I Zemlja. Neke stupce možete isključiti iz izjave UMETNUTI U, ako to dopušta definiciju tablice. U tom slučaju mora biti ispunjen jedan od uvjeta: ovaj stupac je definiran kao valjan NULL(odsutnost bilo koje vrijednosti) ili navedene zadane vrijednosti u definiciji tablice. To znači da će se koristiti zadana vrijednost ako nije navedena vrijednost. Ako vam nedostaje stupac iz tablice koja ne dopušta pojavljivanje vrijednosti u svojim recima NULL i nema definiranu zadanu vrijednost, DBMS će generirati poruku o pogrešci i red neće biti dodan.

3. Dodavanje odabranih podataka

U prethodnom smo primjeru umetnuli podatke u tablice tako da smo ih ručno unijeli u upit. Međutim, operater UMETNUTI U omogućuje automatizaciju ovog procesa ako želimo umetnuti podatke iz druge tablice. U tu svrhu u SQL-u postoji takva konstrukcija kao INSERT INTO ... SELECT .... Ovaj dizajn vam omogućuje da istovremeno odaberete podatke iz jedne tablice i umetnete ih u drugu. Pretpostavimo da imamo drugu tablicu Prodavači_EU s popisom prodavača naše robe u Europi i trebamo ih dodati u opću tablicu Prodavači. Struktura ovih tablica je ista (isti broj stupaca i ista imena), ali su podaci različiti. Da bismo to učinili, možemo napisati sljedeći upit:

INSERT INTO Prodavatelji (ID, adresa, grad, ime prodavatelja, država) SELECTID, adresa, grad, ime prodavatelja, država FROM Sellers_EU

Morate obratiti pozornost da se vrijednosti internih ključeva ne ponavljaju (polje iskaznica), inače će doći do pogreške. Operater IZABERI može uključivati ​​i prijedloge GDJE za filtriranje podataka. Također treba napomenuti da DBMS ne obraća pažnju na nazive stupaca sadržanih u iskazu IZABERI, samo joj je bitan redoslijed kojim su poredani. Stoga, podaci u prvom navedenom stupcu koji je odabran zbog IZABERI, u svakom slučaju će se popuniti prvi stupac tablice Prodavači, navedeno nakon operatora UMETNUTI U, bez obzira na naziv polja.

4. Kopiranje podataka iz jedne tablice u drugu

Često pri radu s bazama podataka postoji potreba za stvaranjem kopija bilo koje tablice u svrhu sigurnosne kopije ili izmjene. Za izradu pune kopije tablice, SQL daje zasebnu izjavu ODABERI U. Na primjer, moramo stvoriti kopiju tablice Prodavači, morat ćete napisati zahtjev na sljedeći način:

SELECT * INTO Sellers_new FROM Sellers

Za razliku od prethodnog dizajna INSERT INTO ... SELECT ... Kada se podaci dodaju u postojeću tablicu, dizajn kopira podatke u novu tablicu. Također možete reći da prva konstrukcija uvozi podatke, a druga izvozi. Prilikom korištenja dizajna ODABIR ... U ... IZ ... Treba uzeti u obzir sljedeće:

  • - možete koristiti bilo koje rečenice u operatoru IZABERI, kao što je GRUPIRAJ PO I IMAJUĆI
  • - možete koristiti spajanje za dodavanje podataka iz više tablica
  • - podaci se mogu dodavati samo u jednu tablicu, bez obzira iz koliko tablica su preuzeti.

Zadnja izmjena: 13.07.2017

Za dodavanje podataka koristite naredbu INSERT koja ima sljedeću formalnu sintaksu:

INSERT table_name [(column_list)] VRIJEDNOSTI (vrijednost1, vrijednost2, ... vrijednostN)

Prvo dolazi izraz INSERT INTO, zatim u zagradama možete navesti popis stupaca odvojenih zarezima u koje treba dodati podatke, a na kraju, nakon riječi VRIJEDNOSTI, navedene su vrijednosti koje se dodaju za stupce u zagrade.

Na primjer, pretpostavimo da je sljedeća baza podataka prethodno stvorena:

STVARANJE BAZE PODATAKA productsdb; KORISTITE 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 jedan red pomoću naredbe INSERT:

INSERT Proizvodi VRIJEDNOSTI ("iPhone 7", "Apple", 5, 52000)

Nakon uspješnog izvođenja u SQL Server Management Studio, poruka "1 row(s) affected" trebala bi se pojaviti u polju poruke:

Vrijedno je uzeti u obzir da su vrijednosti za stupce u zagradama nakon ključna riječ VRIJEDNOSTI se prosljeđuju redoslijedom kojim su deklarirane. Na primjer, u gornjoj izjavi CREATE TABLE možete vidjeti da je prvi stupac Id. No budući da je za njega naveden atribut IDENTITY, vrijednost ovog stupca se automatski generira i može se izostaviti. Drugi stupac predstavlja ProductName, tako da će prva vrijednost, niz "iPhone 7", biti proslijeđena tom stupcu. Druga vrijednost - niz "Apple" bit će proslijeđen u treći stupac Proizvođač i tako dalje. Odnosno, vrijednosti se prosljeđuju u stupce na sljedeći način:

    Naziv proizvoda: "iPhone 7"

    Proizvođač: "Apple"

Također, prilikom unosa vrijednosti, možete odrediti neposredne stupce u koje će se vrijednosti dodati:

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

Ovdje je vrijednost navedena samo za tri stupca. Štoviše, sada se vrijednosti prenose redoslijedom stupaca:

    Naziv proizvoda: "iPhone 6S"

    Proizvođač: "Apple"

Za neodređene stupce (u ovom slučaju ProductCount), zadana vrijednost bit će dodana ako je naveden atribut DEFAULT ili vrijednost NULL. Međutim, neodređeni stupci moraju biti nullable ili imati DEFAULT atribut.

Također možemo dodati nekoliko redaka odjednom:

UMETNI U VRIJEDNOSTI proizvoda ("iPhone 6", "Apple", 3, 36000), ("Galaxy S8", "Samsung", 2, 46000), ("Galaxy S8 Plus", "Samsung", 1, 56000)

U tom će slučaju u tablicu biti dodana tri reda.

Također, prilikom dodavanja možemo odrediti da stupac treba imati zadanu vrijednost koristeći ključnu riječ DEFAULT ili vrijednost NULL:

INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price) VRIJEDNOSTI ("Mi6", "Xiaomi", ZADANO, 28000)

U ovom slučaju koristit će se zadana vrijednost za stupac ProductCount (ako je postavljena, ako nije, tada je NULL).

Ako svi stupci imaju DEFAULT atribut koji navodi zadanu vrijednost ili su nullable, možete umetnuti zadane vrijednosti za sve stupce:

UMETNI U PROIZVODE ZADANE VRIJEDNOSTI

Ali ako uzmemo tablicu Products, tada takva naredba neće uspjeti s pogreškom, jer nekoliko polja nemaju DEFAULT atribut i istovremeno ne dopuštaju NULL vrijednost.

Pomoću SQL-a možete kopirati podatke iz jedne tablice u drugu.

Naredba INSERT INTO SELECT kopira podatke iz jedne tablice i umeće ih u postojeću tablicu.

SQL INSERT INTO SELECT naredba,

INSERT INTO SELECT naredba odabire podatke iz jedne tablice i umeće ih u postojeću tablicu. Svi postojeći redovi u ciljnoj tablici se ne mijenjaju.

SQL INSERT INTO SELECT, sintaksa

Možemo kopirati sve stupce iz jedne tablice u drugu, postojeću tablicu:

UMETNUTI U tablica2
ODABIR * IZ stol 1;

Ili možemo kopirati samo stupce koje želimo u drugu, postojeću tablicu:

UMETNUTI U tablica2
(naziv_stupca(a))
IZABERI naziv(i) stupca
IZ stol 1;

Demo verzija baze podataka

U ovom vodiču koristit ćemo dobro poznatu bazu podataka Northwind.

Ispod je izbor iz tablice "Kupci":

ID korisnikaIme klijentaKontakt osobaAdresaGradPoštanski brojZemlja
1 Alfreds Futterkiste Marija Anders Obere Str. 57 Berlin 12209 Njemačka
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitucion 2222 Meksiko D.F. 05021 Meksiko
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Meksiko D.F. 05023 Meksiko

I izbor iz tabele "Dobavljači":

SQL INSERT INTO SELECT, primjeri

Kopiranje samo nekoliko stupaca iz "Dobavljači" u "Kupci":

Kopiranje samo njemačkih dobavljača na "Kupce".