Showing posts with label sql. Show all posts
Showing posts with label sql. Show all posts

Oct 29, 2023

SQL ALL, ANY, EXISTS i SOME Operateri

SQL operateri `ALL`, `ANY`, `EXISTS` i `SOME` se koriste za poređenje vrednosti u podupitu sa vrednostima u glavnom upitu. Evo objašnjenja i primera za svaki od ovih operatera:

ALL operator:

Operator `ALL` koristi se za upoređivanje da li svi rezultati podupita zadovoljavaju određeni uslov.

    
    SELECT Ime
    FROM Studenti
    WHERE Bodovi > ALL (SELECT Bodovi FROM Studenti WHERE Godina = 2);
    
    

ANY operator:

Operator `ANY` koristi se za upoređivanje da li bar jedan rezultat podupita zadovoljava određeni uslov.

    
    SELECT Ime
    FROM Proizvodi
    WHERE Cena = ANY (SELECT Cena FROM KonkurentskaRoba 
                        WHERE Kategorija = 'Elektronika');
    
    

EXISTS operator:

Operator `EXISTS` koristi se za proveru postojanja rezultata u podupitu.

    
    SELECT Ime
    FROM Narudžbine
    WHERE EXISTS (SELECT * FROM StavkeNarudžbine 
                    WHERE Narudžbine.ID = StavkeNarudžbine.NarudžbaID);
    
    

SOME operator:

Operator `SOME` se koristi na sličan način kao `ANY` za upoređivanje sa bilo kojim rezultatom podupita.

    
    SELECT Ime
    FROM Proizvodi
    WHERE Cena = SOME (SELECT Cena FROM KonkurentskaRoba 
                        WHERE Kategorija = 'Elektronika');
    
    
Napomena: Sintaksa za kreiranje privremene tabele može se razlikovati u različitim SQL sistemima (npr. SQL Server, MySQL, itd.), pa je važno da koristite odgovarajuću sintaksu za svoju bazu podataka.

SQL Subqueries (Podupiti)

Podupiti su upiti unutar drugih upita i koriste se za dobijanje dodatnih podataka ili filtriranje rezultata glavnog upita.

Primeri upotrebe podupita:

    
    1. Jednostavan podupit u klauzuli WHERE:
    SELECT Ime
    FROM Zaposleni
    WHERE OdeljenjeID = (SELECT OdeljenjeID FROM Odeljenja 
                        WHERE Naziv = 'Računovodstvo');

    2. Podupit u klauzuli SELECT:
    SELECT Ime, (SELECT COUNT(*) FROM Narudzbe 
                 WHERE KupacID = K.KupacID) AS BrojNarudzbi
    FROM Kupci K;
    
    

Podupiti omogućavaju rukovanje složenim logikama i zavise od rezultata drugih upita.

Napomena: Podupiti su korisni za rešavanje složenih problema i omogućavaju vam da izgradite upite koji zavise od rezultata drugih upita.

SQL SELECT INTO TEMPORARY TABLE

SELECT INTO TEMPORARY TABLE u SQL-u se koristi za kreiranje privremene tabele na osnovu rezultata SELECT upita. Privremene tabele su vidljive samo tokom trenutne sesije i automatski se brišu nakon sesije.

Primer korišćenja SELECT INTO Privremena Tabela:

    
    SELECT Ime, Prezime
    INTO #PrivremenaTabela
    FROM Zaposleni
    WHERE DatumZaposlenja > '2023-01-01';
    
    

Ovaj upit će kreirati privremenu tabelu #PrivremenaTabela sa kolonama "Ime" i "Prezime" i kopirati podatke zaposlenih čiji je datum zaposlenja nakon 1. januara 2023. godine.


Napomena: Sintaksa za kreiranje privremene tabele može se razlikovati u različitim SQL sistemima (npr. SQL Server, MySQL, itd.), pa je važno da koristite odgovarajuću sintaksu za svoju bazu podataka.

SQL INSERT INTO SELECT

INSERT INTO SELECT u SQL-u se koristi za umetanje podataka u ciljnu tabelu na osnovu rezultata SELECT upita.

Primer korišćenja INSERT INTO SELECT:

    
    INSERT INTO NoviZaposleni (Ime, Prezime, DatumZaposlenja)
    SELECT Ime, Prezime, DatumZaposlenja
    FROM StariZaposleni
    WHERE DatumZaposlenja > '2023-01-01';
    
    

Ovaj upit će umetnuti podatke iz tabele "StariZaposleni" u tabelu "NoviZaposleni" za sve redove gde je datum zaposlenja nakon 1. januara 2023. godine.

Napomena: Ciljna tabela mora biti prethodno kreirana sa odgovarajućim kolonama, i obezbedite da tipovi podataka u SELECT upitu odgovaraju tipovima podataka u ciljnoj tabeli.

SQL SELECT INTO

SELECT INTO u SQL-u se koristi za kreiranje nove tabele na osnovu rezultata SELECT upita.

Primer korišćenja SELECT INTO:

    
    SELECT Ime, Prezime
    INTO NoviZaposleni
    FROM Zaposleni
    WHERE DatumZaposlenja > '2023-01-01';
    
    

Ovaj upit će kreirati novu tabelu "NoviZaposleni" sa kolonama "Ime" i "Prezime" i kopirati podatke zaposlenih čiji je datum zaposlenja nakon 1. januara 2023. godine.

Napomena: Nova tabela mora biti prethodno kreirana, i morate imati odgovarajuće dozvole za kreiranje nove tabele.

SQL UNION

UNION u SQL-u se koristi za spajanje rezultata više upita u jedan rezultat, pri čemu se eliminišu duplicirani redovi.

Primer korišćenja UNION:

    
    SELECT Ime, Prezime FROM Zaposleni
    UNION
    SELECT Ime, Prezime FROM Klijenti;
    
    

Ovaj upit će spojiti imena i prezimena zaposlenih i klijenata iz tabela "Zaposleni" i "Klijenti" i vratiti jedinstvene vrednosti.

Napomena: `UNION` automatski uklanja duplicirane redove. Ako želite zadržati sve redove, uključujući i duplicirane, možete koristiti `UNION ALL` umesto `UNION`.

SQL JOIN (Spajanje) Operacije

JOIN u SQL-u se koristi za spajanje podataka iz više tabela na osnovu određenih uslova. Postoje različite vrste JOIN operacija:

INNER JOIN (Unutarnji JOIN):

INNER JOIN vraća samo redove koji imaju podudaranja u obe tabelama koje se spajaju.

INNER JOIN Primer
    
    SELECT Narudzba.NarudzbaID, Kupac.Ime
    FROM Narudzba
    INNER JOIN Kupac ON Narudzba.KupacID = Kupac.KupacID;
    
    

Ovaj upit će spojiti tabelu "Narudzba" sa tabelom "Kupac" na osnovu zajedničkog polja "KupacID" i vratiti podatke o narudžbama i imenima kupaca.

LEFT JOIN (Levi JOIN):

LEFT JOIN vraća sve redove iz leve tabele i odgovarajuće redove iz desne tabele.

LEFT JOIN Primer
    
    SELECT Radnik.Ime, Radnik.Pozicija, Projekat.Naziv
    FROM Radnik
    LEFT JOIN Projekat ON Radnik.RadnikID = Projekat.RadnikID;
    
    

Ovaj upit će spojiti tabelu "Radnik" sa tabelom "Projekat" na osnovu zajedničkog polja "RadnikID" i prikazati sve radnike i projekte kojima su dodeljeni, uključujući i one radnike koji nisu dodeljeni projektima.

RIGHT JOIN (Desni JOIN):

RIGHT JOIN je sličan LEFT JOIN-u, ali vraća sve redove iz desne tabele i odgovarajuće redove iz leve tabele.

RIGHT JOIN Primer
    
    SELECT Narudzba.NarudzbaID, Kupac.Ime
    FROM Narudzba
    RIGHT JOIN Kupac ON Narudzba.KupacID = Kupac.KupacID;
    
    

Ovaj upit će spojiti tabelu "Narudzba" sa tabelom "Kupac" na osnovu zajedničkog polja "KupacID" i prikazati sve narudžbe i kupce, uključujući i one kupce koji nisu napravili narudžbe.

FULL JOIN (Puni JOIN):

FULL JOIN vraća sve redove iz obe tabele.

FULL JOIN Primer
    
    SELECT Radnik.Ime, Projekat.Naziv
    FROM Radnik
    FULL JOIN Projekat ON Radnik.RadnikID = Projekat.RadnikID;
    
    

Ovaj upit će spojiti tabelu "Radnik" sa tabelom "Projekat" na osnovu zajedničkog polja "RadnikID" i prikazati sve radnike i projekte, uključujući i one koji nemaju podudaranja.

SQL DELETE Naredba

DELETE je SQL naredba koja se koristi za brisanje postojećih redova iz tabele baze podataka. Evo primera:

    
    DELETE FROM Korisnici
    WHERE KorisnikID = 123;
    
    

Ovaj upit će trajno izbrisati korisnika sa ID brojem 123 iz tabele "Korisnici".

Napomena: Budite veoma oprezni prilikom korišćenja DELETE naredbe, jer ona trajno uklanja podatke. Uvek budite sigurni da ste pravilno postavili WHERE klauzulu kako biste precizno odabrali redove koje želite da obrišete. Ukoliko se izostavi WHERE kaluzula, svi podaci ove tabele će biti obrisani, ali ne i sama tabela.

SQL UPDATE Naredba

UPDATE je SQL naredba koja se koristi za ažuriranje postojećih redova u tabeli baze podataka. Evo primera:

    
    UPDATE Korisnici
    SET Status = 'Aktivan'
    WHERE KorisnikID = 123;
    
    

Ovaj upit će ažurirati tabelu "Korisnici" tako da kolona "Status" za korisnika sa ID brojem 123 bude postavljena na "Aktivan".

Napomena: UPDATE naredba obavezno sadrži SET klauzulu koja definiše koje kolone želite da ažurirate i nove vrednosti koje ćete postaviti. Takođe, često se koristi WHERE klauzula da se specificira koji redovi u tabeli će biti ažurirani (ukoliko se izostavi, svi redovi u koloni će biti ažurirani).

SQL INSERT INTO Naredba

INSERT INTO je SQL naredba koja se koristi za dodavanje novih redova u tabelu baze podataka. Evo primera:

    
    INSERT INTO Korisnici (Ime, Prezime, Email)
    VALUES ('Ana', 'Ivanović', 'ana@email.com');
    
    

Ovaj upit će dodati novog korisnika u tabelu "Korisnici" sa imenom "Ana", prezimenom "Ivanović" i e-mail adresom "ana@email.com".

Napomena: Imena kolona u zagradama (npr. Ime, Prezime, Email) moraju se podudarati sa redosledom vrednosti koje unosite u vrednostima (npr. 'Ana', 'Ivanović', 'ana@email.com'). Takođe, naredba INSERT INTO može se koristiti za unos podataka u kolone koje su opciono obeležene kao NULL, što znači da ne morate uneti vrednost za svaku kolonu.

SQL Komentari

Komentari u SQL-u su tekstualni delovi koji služe za dodatna objašnjenja i dokumentaciju upita ili skripte. Postoje dva tipa SQL komentara:

Jednolinijski komentari:

Ovi komentari počinju sa znakom dvostrukih crta (--) i obuhvataju sve do kraja reda.

    
    SELECT Ime, Prezime -- Ovde biramo imena i prezimena
    FROM Zaposleni;
    
    

Višelinijski komentari:

Ovi komentari počinju sa /* i završavaju se sa */. Mogu obuhvatiti više redova i koriste se za dodavanje detaljnijih komentara.

    
    /* 
    Ovo je primer upita koji 
    bira sve zaposlene iz tabele Zaposleni.
    */
    SELECT Ime, Prezime
    FROM Zaposleni;
    
    

SQL NULL funkcije

NULL funkcije omogućavaju vam da obradite NULL vrednosti u SQL upitima. Evo nekoliko često korišćenih NULL funkcija sa objašnjenjima i primerima:

IS NULL poređenje:

Ova funkcija se koristi da proveri da li je određena vrednost NULL.

    
    SELECT Ime, Prezime
    FROM Zaposleni
    WHERE Plata IS NULL;
    
    

Ovaj upit će izabrati sve zaposlene čija plata ima NULL vrednost.

ISNULL() funkcija:

ISNULL() funkcija se koristi za proveru da li je određena vrednost NULL ili ne. Ako je vrednost NULL, funkcija će vratiti 1 (tačno); inače će vratiti 0 (netačno).

    
	SELECT Ime, Prezime
    FROM Zaposleni
    WHERE ISNULL(Plata, 0) = 0;
    
	

Ovaj upit će izabrati imena i prezimena zaposlenih čija plata nije NULL ili gde je plata NULL, ali će se zameniti nulom (0).

COALESCE funkcija:

COALESCE funkcija se koristi da odabere prvu "ne-NULL" vrednost iz niza vrednosti.

    
    SELECT Ime, COALESCE(Adresa, 'Nepoznato') AS Adresa
    FROM Klijenti;
    
    

Ovaj upit će izabrati imena klijenata i, ako adresa nije NULL, prikazati adresu, inače će prikazati "Nepoznato".

NULLIF funkcija:

NULLIF funkcija se koristi da poredi dve vrednosti. Ako su vrednosti jednake, funkcija će vratiti NULL.

    
    SELECT Ime, NULLIF(Status, 'Nedostupan') AS Status
    FROM Korisnici;
    
    

Ovaj upit će izabrati imena korisnika i, ako je status "Nedostupan", prikazati NULL, inače će prikazati stvarni status.

IFNULL funkcija (za MySQL):

IFNULL funkcija se koristi za zamenjivanje NULL vrednosti drugom vrednošću.

    
    SELECT Ime, IFNULL(Adresa, 'Nepoznato') AS Adresa
    FROM Klijenti;
    
    

Ovaj upit će izabrati imena klijenata i, ako adresa nije NULL, prikazati adresu; inače će prikazati "Nepoznato".

NVL funkcija (za Oracle baze):

NVL funkcija se koristi za zamenjivanje NULL vrednosti drugom vrednošću.

    
    SELECT Ime, NVL(Adresa, 'Nepoznato') AS Adresa
	FROM Klijenti;
    
    

Ovaj upit će izabrati imena klijenata i, ako adresa nije NULL, prikazati adresu; inače će prikazati "Nepoznato".

SQL NULL vrednost

NULL označava odsustvo vrednosti u SQL-u. To ne znači da je vrednost nula, već da vrednost nije ni poznata ni definisana. Evo nekoliko primera:

Primer 1: Dodavanje zapisa bez vrednosti

Ako se pri dodavanju zapisa u tabelu određena kolona ne popuni vrednošću, ta kolona će imati NULL vrednost.

    
    INSERT INTO Korisnici (Ime, Prezime, Telefon) 
    	VALUES ('Ana', 'Ivanović', NULL);
    
    

Primer 2: Nedostajući podaci

Kada neki podaci nisu dostupni ili nisu uneti, NULL se koristi da označi te praznine.

Primer 3: Neobavezne kolone

U slučaju kada kolona nije obavezna za unos (nije definisana kao NOT NULL), NULL se može koristiti da označi odsustvo vrednosti.

Primer 4: Nedefinisane vrednosti

Kada vrednost nije primenjiva ili nije definisana za određeni zapis, NULL se koristi da označi ovu situaciju.

Važno je napomenuti da NULL nije isto što i prazan string ('') ili nula (0). NULL označava odsustvo vrednosti, dok prazan string i nula predstavljaju konkretnu vrednost.

SQL Compound (Složeno dodeljivanje) Operatori

Operateri sa složenim dodeljivanjem u SQL-u omogućavaju izvođenje operacija nad vrednostima kolona i dodeljivanje rezultata toj istoj koloni. Evo nekoliko često korišćenih operatera sa složenim dodeljivanjem sa objašnjenjima na srpskom jeziku i primerima:

+= operator:

Ovaj operator se koristi za dodavanje vrednosti jedne kolone drugoj koloni i dodeljivanje rezultata prvoj koloni.

    
    UPDATE Zaposleni
    SET Plata += 500  -- Plata = Plata + 500
    WHERE Odeljenje = 'Prodaja';
    
    

-= operator:

Ovaj operator se koristi za oduzimanje vrednosti jedne kolone od druge kolone i dodeljivanje rezultata prvoj koloni.

    
    UPDATE Korisnici
    SET BrojPoena -= 10  -- BrojPoena = BrojPoena - 10
    WHERE Status = 'Aktivan';
    
    

*= operator:

Ovaj operator se koristi za množenje vrednosti jedne kolone sa vrednošću druge kolone i dodeljivanje rezultata prvoj koloni.

    
    UPDATE Proizvodi
    SET Cena *= 1.1  -- Cena = Cena * 1.1
    WHERE Kategorija = 'Elektronika';
    
    

/= operator:

Ovaj operator se koristi za deljenje vrednosti jedne kolone sa vrednošću druge kolone i dodeljivanje rezultata prvoj koloni.

    
    UPDATE Porudžbine
    SET UkupanIznos /= Količina  -- UkupanIznos = UkupanIznos / Količina
    WHERE Status = 'Završeno';
    
    

SQL Comparison (Poređenje) Operatori

Comparison operatori u SQL-u koriste se za upoređivanje vrednosti i vraćaju rezultat koji ukazuje na tačnost ili netačnost uslova. Evo nekoliko često korišćenih komparativnih operatora sa objašnjenjima na srpskom jeziku i primerima:

Jednako (=):

Operator "jednako" se koristi za upoređivanje da li dve vrednosti su iste.

    
    SELECT Ime, Prezime
    FROM Korisnici
    WHERE Grad = 'Beograd';
    
    

Različito (<>) ili (!=):

Operator "različito" se koristi za upoređivanje da li dve vrednosti nisu iste.

    
    SELECT Ime, Prezime
    FROM Korisnici
    WHERE Grad <> 'Novi Sad';
    
    

Veće od (>):

Operator "veće od" se koristi za upoređivanje da li jedna vrednost je veća od druge.

    
    SELECT Ime, Plata
    FROM Zaposleni
    WHERE Plata > 50000;
    
    

Manje od (<):

Operator "manje od" se koristi za upoređivanje da li jedna vrednost je manja od druge.

    
    SELECT Ime, Godine
    FROM Osobe
    WHERE Godine < 30;
    
    

Veće ili jednako (>=):

Operator "veće ili jednako" se koristi za upoređivanje da li jedna vrednost je veća ili jednaka drugoj.

    
    SELECT Ime, BrojPoruka
    FROM Korisnici
    WHERE BrojPoruka >= 100;
    
    

Manje ili jednako (<=):

Operator "manje ili jednako" se koristi za upoređivanje da li jedna vrednost je manja ili jednaka drugoj.

    
    SELECT Ime, Bodovi
    FROM Studenti
    WHERE Bodovi <= 60;
    
    

SQL Aritmetički Operatori

Aritmetički operatori u SQL-u omogućavaju izvođenje matematičkih operacija nad numeričkim vrednostima u upitima. Evo nekoliko često korišćenih aritmetičkih operatora sa primerima:

Sabiranje (+):

Koristi se za sabiranje dve numeričke vrednosti.

    
    SELECT Cena + Popust AS KonacnaCena
    FROM Proizvodi;
    
    

Oduzimanje (-):

Koristi se za oduzimanje jedne numeričke vrednosti od druge.

    
    SELECT UkupanIznos - Popust AS Placanje
    FROM Narudžbine;
    
    

Množenje (*):

Koristi se za množenje dve numeričke vrednosti.

    
    SELECT Cena * Količina AS UkupanIznos
    FROM StavkeNarudžbine;
    
    

Deljenje (/):

Koristi se za deljenje jedne numeričke vrednosti sa drugom.

    
    SELECT UkupanIznos / BrojStavki AS ProsečnaCena
    FROM Narudžbine;
    
    

Modulo (%):

Vraća ostatak pri deljenju dve numeričke vrednosti.

    
    SELECT Broj % 2 AS Ostatak
    FROM Tabela;
    
    

SQL CASE klauzula

CASE (SLUČAJ) klauzula u SQL-u se koristi za implementaciju uslovnih izraza u upitima. Omogućava vam da definišete različite radnje ili vrednosti na osnovu ispunjenja određenih uslova. CASE može biti korisna za izbor različitih vrednosti za istu kolonu ili za kreiranje dodatnih kolona na osnovu uslovnih provera.

Primer korišćenja CASE:

Korišćenje CASE klauzule za dodelu ocene "Prolaz" ili "Pad" na osnovu rezultata ispita.

    
    SELECT Ime, Rezultat,
      CASE
        WHEN Rezultat >= 50 THEN 'Prolaz'
        ELSE 'Pad'
      END AS Ocena
    FROM Ispiti;
    
    

Ovaj upit će dodati kolonu "Ocena" koja će sadržavati vrednost "Prolaz" ako je rezultat veći ili jednak 50, inače će sadržavati vrednost "Pad".

Korišćenje CASE klauzule sa više uslova za dodelu ocene "Odličan", "Dobar", "Prosečan" ili "Nedovoljan" na osnovu rezultata ispita.

    
    SELECT Ime, Rezultat,
      CASE
        WHEN Rezultat >= 90 THEN 'Odličan'
        WHEN Rezultat >= 70 THEN 'Dobar'
        WHEN Rezultat >= 50 THEN 'Prosečan'
        ELSE 'Nedovoljan'
      END AS Ocena
    FROM Ispiti;
    
    

Ovaj upit će dodati kolonu "Ocena" koja će sadržavati vrednosti "Odličan", "Dobar", "Prosečan" ili "Nedovoljan" u zavisnosti od vrednosti u koloni "Rezultat". Na osnovu različitih uslova, različite ocene će biti dodeljene.

SQL SUM() i AVG() funkcije

SUM() (ZBIR()) funkcija se koristi za izračunavanje ukupnog zbirnog broja vrednosti u određenoj koloni, dok se AVG() (PROSEK()) funkcija koristi za izračunavanje prosečne vrednosti u toj koloni. Obe funkcije se često koriste za analizu numeričkih podataka.

Primer korišćenja SUM():

Korišćenje SUM() funkcije za izračunavanje ukupne vrednosti svih narudžbina.

    
    SELECT SUM(Iznos) AS UkupanIznos
    FROM Narudžbine;
    
    

Ovaj upit će izračunati ukupan iznos svih narudžbina u tabeli "Narudžbine" i vratiti ga kao "UkupanIznos".

Primer korišćenja AVG():

Korišćenje AVG() funkcije za izračunavanje prosečne ocene proizvoda.

    
    SELECT AVG(Ocena) AS ProsečnaOcena
    FROM Proizvodi;
    
    

Ovaj upit će izračunati prosečnu ocenu svih proizvoda u tabeli "Proizvodi" i vratiti je kao "ProsečnaOcena".

SQL COUNT() funkcija

COUNT() (BROJ()) funkcija u SQL-u koristi se za brojanje broja redova u određenoj tabeli ili rezultatu upita. Ova funkcija omogućava vam da saznate koliko redova ispunjava određeni uslov ili koliko redova postoji u tabeli.

Primer korišćenja COUNT():

Korišćenje COUNT() funkcije za brojanje broja korisnika u tabeli "Korisnici".

    
    SELECT COUNT(*) AS BrojKorisnika
    FROM Korisnici;
    
    

Ovaj upit će izbrojati sve redove u tabeli "Korisnici" i vratiti broj korisnika.

SQL HAVING klauzula

HAVING (Imajući) je klauzula u SQL upitu koja se koristi zajedno sa "GROUP BY" kako bi se filtrirali rezultati grupisanih redova. Ova klauzula omogućava postavljanje uslova za grupisane podatke nakon što su grupisani i agregirani. "HAVING" se koristi za filtriranje grupa koje ispunjavaju određene uslove.

Primer korišćenja HAVING:

Grupisanje korisnika prema njihovim gradovima i izračunavanje ukupnog broja korisnika u svakom gradu, a zatim filtriranje gradova sa više od 10 korisnika.

    
    SELECT Grad, COUNT(*) AS BrojKorisnika
    FROM Korisnici
    GROUP BY Grad
    HAVING COUNT(*) > 10;
    
    

Ovaj upit će grupisati korisnike po njihovim gradovima, izračunati ukupan broj korisnika u svakom gradu i zatim filtrirati samo one gradove gde ima više od 10 korisnika.

Napomena: "HAVING" se koristi isključivo sa "GROUP BY" i koristi se za filtriranje grupisanih podataka na osnovu agregatnih funkcija (npr. COUNT, SUM) ili drugih uslova. To omogućava da se selektuju samo one grupe koje ispunjavaju određene kriterijume.