Uvod

Do sada bi trebalo da su učenici naučili kako da ubacuju podatke pomoću naredbe INSERT, kao i kako da prebacuju podatke iz jedne tabele u drugu koristeći INSERT INTO ... SELECT.

U ovom nastavku fokus se pomera na kopiranje sadržaja jedne tabele u drugu, pri čemu:

  • možemo kopirati samo određene redove,

  • možemo kopirati sve redove,

  • možemo tokom kopiranja automatski kreirati novu tabelu.

Ovo je česta praksa u realnim sistemima kada se pravi arhiva podataka, pravi rezervna kopija, priprema tabela za izveštaje ili testiraju izmene bez rizika po originalnu tabelu.


1. Kopiranje podataka u već postojeću tabelu

Podsetimo se osnovne sintakse:

INSERT INTO NovaTabela (kolone)
SELECT kolone
FROM PostojecaTabela
WHERE uslov;

Ovde:

  • NovaTabela mora već postojati

  • Struktura mora biti kompatibilna

  • Broj i tip kolona mora odgovarati


Primer 1 – Kopiranje svih redova:  Pretpostavimo da imamo tabelu Ucenik, i želimo da napravimo radnu kopiju podataka u tabeli UcenikKopija.

INSERT INTO UcenikKopija (UcenikID, Ime, Prezime, Razred)
SELECT UcenikID, Ime, Prezime, Razred
FROM Ucenik;

Ovim se kopiraju svi podaci.


Primer 2 – Kopiranje samo određenih redova: Kopiranje samo učenika 4. razreda:

INSERT INTO Maturanti (UcenikID, Ime, Prezime)
SELECT UcenikID, Ime, Prezime
FROM Ucenik
WHERE Razred = 4;

Ovde se koristi filtriranje podataka pomoću WHERE uslova.


2. Kopiranje podataka uz kreiranje nove tabele

U mnogim SQL sistemima moguće je kreirati novu tabelu direktno iz SELECT upita pomoću naredbe:

SELECT ... INTO NovaTabela
FROM PostojecaTabela;

Ova naredba:

  • kreira novu tabelu

  • definiše kolone na osnovu SELECT izraza

  • ubacuje podatke u tu novu tabelu


Primer 3 – Kopiranje cele tabele:

SELECT *
INTO UcenikBackup
FROM Ucenik;

Rezultat:

  • Kreira se nova tabela UcenikBackup

  • Kopira se struktura kolona

  • Kopiraju se svi podaci

Ovo je najjednostavniji način pravljenja kopije tabele.


Primer 4 – Kopiranje sa uslovom

SELECT UcenikID, Ime, Prezime
INTO ArhivaPrvogRazreda
FROM Ucenik
WHERE Razred = 1;

Rezultat:

  • Kreira se nova tabela ArhivaPrvogRazreda

  • Sadrži samo učenike prvog razreda

  • Sadrži samo tri kolone

Napomena: nova tabela neće imati primarni ključ, ograničenja ni strane ključeve — samo kolone i podatke.


 

3. Razlika između dva pristupa

INSERT INTO ... SELECT SELECT INTO
Tabela mora postojati Tabela se kreira
Koristi se za dodavanje u postojeću tabelu Koristi se za pravljenje kopije
Struktura mora odgovarati Struktura se automatski formira


4. Primeri kada dolazi do greške

Greška 1 – Tabela već postoji (kod SELECT INTO)

Ako već postoji tabela UcenikBackup, sledeći upit:

SELECT *
INTO UcenikBackup
FROM Ucenik;

dovešće do greške jer sistem ne može da kreira tabelu koja već postoji.


Greška 2 – Neusklađen broj kolona

INSERT INTO Maturanti (UcenikID, Ime)
SELECT UcenikID, Ime, Prezime
FROM Ucenik;

Greška: broj kolona se ne poklapa.


Greška 3 – Neusklađeni tipovi podataka

Ako pokušamo:

INSERT INTO TestTabela (BrojKolona)
SELECT Ime
FROM Ucenik;

a BrojKolona je numerički tip, doći će do greške konverzije tipa.


Greška 4 – Dupliranje primarnog ključa

Ako tabela već sadrži redove sa istim primarnim ključem, kopiranje može izazvati grešku narušavanja integriteta.


5. Zadaci za vežbu

Zadatak 1: Napraviti kopiju cele tabele Ucenik pod nazivom UcenikTest koristeći SELECT INTO.


Zadatak 2: Kreirati novu tabelu TreciRazred i u nju kopirati sve učenike trećeg razreda.


Zadatak 3: U tabelu Maturanti (koja već postoji) ubaciti učenike četvrtog razreda koristeći INSERT INTO ... SELECT.


Zadatak 4 (analiza): Objasniti zašto sledeći upit daje grešku:

SELECT *
INTO Ucenik
FROM Ucenik;

Rešenja

Rešenje 1

SELECT *
INTO UcenikTest
FROM Ucenik;

Rešenje 2

SELECT *
INTO TreciRazred
FROM Ucenik
WHERE Razred = 3;

Rešenje 3

INSERT INTO Maturanti (UcenikID, Ime, Prezime)
SELECT UcenikID, Ime, Prezime
FROM Ucenik
WHERE Razred = 4;

Rešenje 4

Greška nastaje jer tabela Ucenik već postoji i ne može se ponovo kreirati pomoću SELECT INTO.


Napomene za kraj časa

Nakon ove lekcije trebalo bi da se razume:

  • Razlika između kopiranja u postojeću tabelu i kreiranja nove.

  • Da SELECT INTO ne prenosi ograničenja (PRIMARY KEY, FOREIGN KEY).

  • Da je kopiranje podataka česta profesionalna praksa.


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)
);

Kreiranje prazne kopije strukture (primer alternativnog pristupa)

Ako želimo da kreiramo praznu tabelu istog tipa:

SELECT *
INTO UcenikPraznaKopija
FROM Ucenik
WHERE 1 = 0;

Ovo kreira strukturu bez podataka.

Last modified: Wednesday, 4 March 2026, 9:29 AM