Umetanje podataka u tabelu
SQL naredba INSERT
U realnim informacionim sistemima umetanje podataka predstavlja svakodnevnu aktivnost: unos novog učenika, dodavanje nove porudžbine, evidentiranje novog proizvoda i slično.
U SQL-u se za tu svrhu koristi naredba:
INSERT INTO
1. Osnovna sintaksa naredbe INSERT
Postoje dva osnovna oblika umetanja podataka.
Umetanje reda uz navođenje kolona
INSERT INTO NazivTabele (Kolona1, Kolona2, Kolona3)
VALUES (Vrednost1, Vrednost2, Vrednost3);
Ovo je preporučeni način, jer jasno definišemo u koje kolone unosimo podatke.
Umetanje reda bez navođenja kolona
INSERT INTO NazivTabele
VALUES (Vrednost1, Vrednost2, Vrednost3);
Ovaj oblik zahteva da unesemo vrednosti za sve kolone i to po istom redosledu kako su definisane u tabeli. U praksi se ređe koristi, jer je rizičniji.
DODATAK – Upiti za kreiranje i popunjavanje tabela
Kreiranje tabele Ucenik
CREATE TABLE Ucenik (
UcenikID INT PRIMARY KEY,
Ime VARCHAR(50),
Prezime VARCHAR(50),
Razred INT
);
Popunjavanje tabele Ucenik
INSERT INTO Ucenik VALUES (1, 'Marko', 'Markovic', 1);
INSERT INTO Ucenik VALUES (2, 'Jelena', 'Jovanovic', 2);
INSERT INTO Ucenik VALUES (3, 'Ana', 'Petrovic', 3);
INSERT INTO Ucenik VALUES (4, 'Nikola', 'Ilic', 4);
INSERT INTO Ucenik VALUES (5, 'Milica', 'Kovacevic', 4);
Kreiranje tabele Maturanti
CREATE TABLE Maturanti (
UcenikID INT PRIMARY KEY,
Ime VARCHAR(50),
Prezime VARCHAR(50)
);
2. Primeri
Pretpostavimo da imamo tabelu: Ucenik u kojoj imamo UcenikID, Ime, Prezime i Razred
Primer 1 – umetanje jednog reda
INSERT INTO Ucenik (UcenikID, Ime, Prezime, Razred)
VALUES (10, 'Marko', 'Markovic', 3);
Nakon izvršavanja, tabela dobija jedan novi red.
Primer 2 – umetanje bez navođenja kolona
INSERT INTO Ucenik
VALUES (20, 'Jelena', 'Jovanovic', 2);
⚠ Ako promenimo redosled kolona u tabeli, ovaj upit može dati pogrešan rezultat.
Primer 3 - Umetanje više redova
U nekim sistemima moguće je umetanje više redova u jednom upitu:
INSERT INTO Ucenik (UcenikID, Ime, Prezime, Razred)
VALUES
(30, 'Ana', 'Petrovic', 1),
(40, 'Nikola', 'Ilic', 4);
Ako sistem ne podržava ovu sintaksu, koristi se više INSERT naredbi.
3. Umetanje redova iz jedne tabele u drugu
Sintaksa:
INSERT INTO NovaTabela (Kolona1, Kolona2)
SELECT Kolona1, Kolona2
FROM PostojecaTabela
WHERE uslov;
Primer: Pretpostavimo da postoji tabela: Maturanti
Želimo da u nju prebacimo sve učenike 4. razreda.
INSERT INTO Maturanti (UcenikID, Ime, Prezime)
SELECT UcenikID, Ime, Prezime
FROM Ucenik
WHERE Razred = 4;
Ovaj upit prvo pronalazi učenike 4. razreda, a zatim ih ubacuje u novu tabelu.
👉 Ovo je veoma česta praksa kod arhiviranja podataka.
4. Pravila kojih se treba pridržavati:
-
Tipovi podataka moraju biti kompatibilni.
-
Tekstualne vrednosti se pišu pod jednostrukim navodnicima.
-
Numeričke vrednosti se pišu bez navodnika.
-
Ako kolona ima ograničenje NOT NULL, mora dobiti vrednost.
-
Ako postoji primarni ključ, vrednost mora biti jedinstvena.
6. Tipične greške
❌ Zaboravljen navodnik
❌ Pogrešan redosled kolona
❌ Unos duplog primarnog ključa
❌ Neusklađen broj kolona i vrednosti
7. Napomene
Prilikom umetanje sadržaja u tabelu treba uzeti u razmatranje i sledeće faktore:
-
Koje kolone treba popunjavati?
-
Da li su tipovi podataka odgovarajući?
-
Da li se unose vrednost za primarni ključ?
-
Da li bi ovaj unos narušio integritet baze?
8. Zadaci za vežbu
Zadatak 1: U tabelu Ucenik uneti sledeći red:
UcenikID: 51
Ime: Stefan
Prezime: Simic
Razred: 2
Zadatak 2: U tabelu Ucenik uneti tri nova učenika po sopstvenom izboru.
Zadatak 3: Ako postoji tabela: ArhivaUcenika (UcenikID, Ime, Prezime), prebaciti sve učenike 1. razreda iz tabele Ucenik u tabelu ArhivaUcenika.
Pitanje za razmišljanje: Šta će se desiti ako pokušamo da unesemo učenika sa UcenikID = 1, a ta vrednost već postoji?
Rešenja zadataka
Rešenje 1
INSERT INTO Ucenik (UcenikID, Ime, Prezime, Razred)
VALUES (51, 'Stefan', 'Simic', 2);
Rešenje 2 (primer)
INSERT INTO Ucenik (UcenikID, Ime, Prezime, Razred)
VALUES (6, 'Milica', 'Kovacevic', 3);
INSERT INTO Ucenik (UcenikID, Ime, Prezime, Razred)
VALUES (7, 'Luka', 'Stojanovic', 1);
INSERT INTO Ucenik (UcenikID, Ime, Prezime, Razred)
VALUES (8, 'Teodora', 'Pavlovic', 4);
Rešenje 3
INSERT INTO ArhivaUcenika (UcenikID, Ime, Prezime)
SELECT UcenikID, Ime, Prezime
FROM Ucenik
WHERE Razred = 1;
Rešenje 4
Doći će do greške jer primarni ključ mora imati jedinstvenu vrednost. Sistem neće dozvoliti unos duplog identifikatora.
...