🔹 
Kreiranje baze Skola2
-- Kreiranje baze podataka
CREATE DATABASE Skola2;
GO

-- Prelazak na novokreiranu bazu
USE Skola2;
GO

Treba da se kreiraju tabele:

  • Student – podaci o studentima

  • Ucenik – podaci o učenicima

  • Predmet – podaci o predmetima

  • Ocena – podaci o ocenama učenika iz predmeta

🔹 Kreiranje tabele Ucenik


-- Kreiranje tabele UCENIK
CREATE TABLE Ucenik (
    UcenikID INT IDENTITY(1,1) PRIMARY KEY,
    Ime NVARCHAR(30) NOT NULL,
    Prezime NVARCHAR(30) NOT NULL,
    Razred INT NOT NULL,
    ProsecnaOcena DECIMAL(3,2) NULL,
    DatumRodjenja DATE NULL
);
GO

🔹 Ubacivanje podataka
INSERT INTO Ucenik (Ime, Prezime, Razred, ProsecnaOcena, DatumRodjenja) VALUES
(N'Ana',     N'Petrović',  3, 4.50, '2007-03-12'),
(N'Miloš',   N'Nikolić',   3, 3.80, '2007-05-08'),
(N'Jelena',  N'Pavlović',  4, 4.20, '2006-11-21'),
(N'Nikola',  N'Simić',     4, 5.00, '2006-07-03'),
(N'Ivana',   N'Marković',  4, NULL, '2007-02-17'),
(N'Danilo',  N'Ristić',    3, 2.90, '2007-10-15'),
(N'Sara',    N'Đorđević',  2, 4.75, '2008-01-28'),
(N'Mina',    N'Popović',   2, 4.00, '2008-04-10'),
(N'Petar',   N'Ilić',      2, NULL, '2008-06-22'),
(N'Andrej',  N'Jovanović', 3, 3.20, '2007-09-05');
GO

Napomena: vrednost NULL znači da podatak nije poznat, npr. učenik još nije dobio sve ocene.


🔹 Kreiranje tabela Student, Predmet, Ocena
CREATE TABLE Student (
    UcenikID INT PRIMARY KEY IDENTITY(1,1),
    Ime NVARCHAR(30),
    Prezime NVARCHAR(30),
    DatumRodjenja DATE,
    Mesto NVARCHAR(30)
);

CREATE TABLE Predmet (
    PredmetID INT PRIMARY KEY IDENTITY(1,1),
    Naziv NVARCHAR(50),
    FondNedeljno INT
);

CREATE TABLE Ocena (
    OcenaID INT PRIMARY KEY IDENTITY(1,1),
    UcenikID INT,
    PredmetID INT,
    Ocena INT,
    DatumOcene DATE,
    FOREIGN KEY (UcenikID) REFERENCES Ucenik(UcenikID),
    FOREIGN KEY (PredmetID) REFERENCES Predmet(PredmetID)
);

🔹 Unos podataka
-- za tabelu Student:
INSERT INTO Student (Ime, Prezime, DatumRodjenja, Mesto)
VALUES 
('Marko', 'Jovanović', '2007-03-15', 'Beograd'),
('Milica', 'Petrović', '2007-07-22', 'Novi Sad'),
('Nikola', 'Ilić', '2007-01-09', 'Niš'),
('Jelena', 'Stanković', '2007-05-30', 'Kragujevac'),
('Ana', 'Milenković', '2007-09-18', 'Subotica');
-- za tabelu Predmet:
INSERT INTO Predmet (Naziv, FondNedeljno)
VALUES
('Matematika', 4),
('Srpski jezik', 3),
('Informatika', 2),
('Fizika', 2),
('Hemija', 2);
-- za tabelu Ocena:
INSERT INTO Ocena (UcenikID, PredmetID, Ocena, DatumOcene)
VALUES
(1, 1, 5, '2024-09-12'),
(1, 3, 4, '2024-09-20'),
(2, 1, 3, '2024-09-12'),
(2, 2, 5, '2024-09-18'),
(3, 3, 5, '2024-09-22'),
(3, 4, 4, '2024-09-25'),
(4, 2, 2, '2024-09-14'),
(4, 5, 3, '2024-09-16'),
(5, 1, 5, '2024-09-10'),
(5, 2, 5, '2024-09-12'),
(5, 3, 4, '2024-09-20');

🔹 Provera podataka:  Kreirati upite za ispis svega što postoji u tabelama

Kada u bazi imamo mnogo podataka, često želimo da izračunamo neke zbirne vrednosti — na primer:

  • Koliko ima zapisa u tabeli?
  • Koja je najveća plata?
  • Koja je prosečna ocena učenika?
  • Koliko ima proizvoda sa cenom većom od 100?

Za ovakve zadatke ne koristimo obične SELECT naredbe koje prikazuju sve redove, već agregatne funkcije (eng. aggregate functions).
One ne rade sa pojedinačnim redovima, već sa grupom redova, i vraćaju jednu zbirnu vrednost.


...  pogledajte prezentaciju / pdf - Agregatne funkcije

... LINK - gde možete videti  koje sve funkcije postoje kod SQL Servera (SQL Server Functions), 


Osnovne agregatne funkcije

  • MIN() – najmanja vrednost u koloni

  • MAX() – najveća vrednost u koloni

  • SUM() – zbir vrednosti u koloni

  • AVG() – prosečna vrednost

  • COUNT() – broj redova ili broj nenull vrednosti

Svi ovi izrazi se najčešće koriste sa naredbom SELECT.



🔹

Pronalazi najmanju vrednost u koloni.

SELECT MIN(ProsecnaOcena) AS NajmanjaOcena
FROM Ucenik;

Rezultat:

NajmanjaOcena
2.90

NULL vrednosti se ignorišu — dakle, one ne utiču na rezultat.

🔹

Pronalazi najveću vrednost u koloni.

SELECT MAX(ProsecnaOcena) AS NajvecaOcena
FROM Ucenik;

Rezultat:

NajvecaOcena
5.00
🔹

Računa zbir svih vrednosti u koloni.

SELECT SUM(ProsecnaOcena) AS ZbirOcena
FROM Ucenik;

Rezultat:

ZbirOcena
32.35

Objašnjenje: 4.50 + 3.80 + 4.20 + 5.00 + 2.90 + 4.75 + 4.00 + 3.20 = 32.35 (NULL se ne računa).

🔹

Računa prosečnu vrednost.

SELECT AVG(ProsecnaOcena) AS Prosek
FROM Ucenik;

Rezultat:

Prosek
4.043750

Objašnjenje: Prosek se računa kao 32.35 / 8 jer postoji 8 poznatih vrednosti (NULL se ne računa).

🔹

Računa broj redova ili broj nenull vrednosti.
Postoje dve varijante:

  • COUNT(*) – broji sve redove

  • COUNT(kolona) – broji samo nenull vrednosti

SELECT COUNT(*) AS BrojUcenika,
       COUNT(ProsecnaOcena) AS BrojSaOcenom
FROM Ucenik;

Rezultat:

BrojUcenika BrojSaOcenom
10 8

Možemo izračunati više vrednosti u istom upitu:

SELECT 
  MIN(ProsecnaOcena) AS Najmanja,
  MAX(ProsecnaOcena) AS Najveca,
  AVG(ProsecnaOcena) AS Prosek,
  COUNT(*) AS UkupnoUcenika
FROM Ucenik;

Rezultat:

Najmanja Najveca Prosek UkupnoUcenika
2.90 5.00 4.043750 10

 VEŽBE

  1. Prikazati najveću prosečnu ocenu iz tabele Ucenik.

  2. Izračunati zbir prosečnih ocena svih učenika.

  3. Koliko učenika ima poznatu prosečnu ocenu?

  4. Prikazati najmanju i najveću prosečnu ocenu u istom upitu.

  1. SELECT MAX(ProsecnaOcena) FROM Ucenik;
  2. SELECT SUM(ProsecnaOcena) FROM Ucenik;  
  3. SELECT COUNT(ProsecnaOcena) FROM Ucenik;  
  4. SELECT MIN(ProsecnaOcena) AS Najmanja, MAX(ProsecnaOcena) AS Najveca FROM Ucenik;  


Zapamtiti:
  • Funkcije ignorišu NULL vrednosti osim COUNT(*).


Pitanja za proveru znanja:
  1. Koja funkcija se koristi za računanje proseka?

  2. Koja funkcija broji sve redove, uključujući one sa NULL vrednostima?

  3. Koja je razlika između COUNT(*) i COUNT(kolona)?

  4. Da li funkcija AVG uzima u obzir NULL vrednosti?

..

Poslednja izmena: среда, 23. септембар 2026, 11:08