SQL

**SQL** (Structured Query Language) je programski jezik namenjen za upravljanje podacima u relacionim sistemima za upravljanje bazama podataka.Obuhvata unos podataka, upite, ažuriranje i brisanje, šeme kreiranja i menjanja, kao i podatke za kontrolu pristupa.

SQL je najviše korišćen programski jezik za baze podataka.
SQL je postao standard Američkog nacionalnog instituta za standarde (ANSI) u 1986. god., kao i Međunarodne organizacije za standarde (ISO) u 1987. god. Od tada standard je poboljšan nekoliko puta sa dodatim funkcijama.

## Historija

SQL je razvijen u IBM od strane Donald G. Čemberlena i Rejmond F. Bojsa u ranim 1970-im. Ova verzija, prvobitno nazvana SEQUEL (Structured English Query Language), je dizajniran da manipuliše i preuzima podatke koji su se skladištili u IBM kvazi-relacionim sistemom za upravljanje bazama podataka,System R. U junu 1979. god. Relational Software (sada Oracle Corporation) predstavio je prvu komercijlno dostupnu verziju SQL, Oracle V2.

## Osnove
SQL jezik je podeljena na nekoliko jezičkih elemenata:

    
* **Klauzule** (Clauses), koje su sastavni delovi izjava i upita. (U nekim slučajevima klauzule su opcione).
* **Izraza** (Expressions), koji mogu da proizvedu ili skalarnu vrednost ili tabele koje se sastoje od kolona i redova sa podacima.
* **Predikata** (Predicates), koji se koriste za ograničavanje efekata izjava i upita, ili za promene toka programa.
* **Upiti** (Queries), koji vraćaju podatke na osnovu određenih kriterijuma. Ovo je najvažniji element SQL.
* **Izjave** (Statements), koje mogu da kontrolišu transakcije, protok programa, veza, ili dijagnostiku.
 
     
## Upiti (Queries)

Najčešća operacija u SQL je upit, koje se vrši sa naredbom SELECT. SELECT preuzima podatke iz jedne ili više tabela, ili izraza. Standardna naredba SELECT nema uticaj na bazu podataka. Neke nestandardne implementacije naredbe SELECT mogu imati direktni uticaj, kao što je SELECT INTO sintaksa koja postoji u nekim bazama podataka.

Upiti omogućavaju korisniku da se opiše željene podatke, ostavljajući sistemima za upravljanje bazama podataka(DBMS), odgovornost za planiranje, optimizaciju, kao i obavljanje operacija potrebnih da se prikažu rezultati koji su zahtevani.

Upit sadrži spisak kolona koje će biti uključene u konačni rezultat odmah nakon SELECT ključne reči. Zvezdica ("*") se takođe može koristiti da biste naveli da bi trebalo da upit vrati sve kolone ispitane tabele . SELECT je najsloženija izjava u SQL, sa opcionim ključnih reči i klauzulama koje obuhvataju:

* FROM klauzula, ukazuje na tabelu(e) iz koje se preuzimaju podaci. FROM klauzula može, opciono, da sadrži JOIN klauzulu koja određuje pravila za spajanje tabela. 
* WHERE klauzula,uključuje poređenja, koje ograničava broj redova koje vraća upit. WHERE eliminiše sve redove iz rezultata za koje poređenje nije tačno(True). 
* GROUP BY klauzula se koristi za grupisanje redova sa istim vrednostima.GROUP BY se često koristi u kombinaciji sa SQL agregatnim funkcijama ili da bi se uklonili dupli redovi iz skupa rezultata. WHERE se primenjuje pre GROUP BY klauzule. 
* HAVING se koristi za filtriranje redova koje proističu iz GROUP BY klauzule. Zato što deluju na rezultate GROUP BY klauzule, agregatne funkcije se mogu koristiti u HAVING klauzuli. 
* ORDER BY klauzula, identifikuje koje kolone se koriste za sortiranje podatke, i u kom nizu treba da se sortiraju (opcije su rastućem ili opadajućem).


Primer upita koji vraća listu odličnih učenika( onih koji imaju prosek 4,50 ili veći).Lista će biti sortiranu po prezimenu učenika. Zvezdica ("*") označava da će biti prkazane sve kolone iz tabele Ucenici.

  
 
```sql
SELECT *
     FROM Ucenici
     WHERE ProsecnaOcena>=4.50
     ORDER BY Ucenici.Prezime;
```

 

## Manipulacija podacima

Data Manipulation Language (DML) je podskup SQL-a,koji se koristi za dodavanje, menjanje i brisanje podataka:

* INSERT komanda, dodaje redove u tabelu. U sledećem primeru u tabelu Ucenici se dodaje nov učenik:
 

```sql
INSERT INTO Ucenici
        (Ime, Prezime, ProsecnaOcena)
    VALUES
        ('Petar', 'Petrović', 4.85);
```



* UPDATE komanda menja postojeće podatke u tabeli. U sledećem primeru menja se prosečna ocena učenika:
 

```sql
UPDATE Ucenici
    SET ProsecnaOcena= 4.90
    WHERE Prezime= 'Petrović';
```



* DELETE komanda briše redove iz tabele. U sledećem primeru brišemo učenika sa imenom Petar:
 

```sql
DELETE FROM Ucenici
    WHERE Ime= 'Petar';
```



## Reference
* w3school
* Microsoft SQL Server
* SQL.org