Kada želite dohvatiti podatke iz baze podataka, zatražite podatke pomoću Structured Query Language ili SQL. SQL je računalni jezik koji usko sliči engleskom, no ti programi baze podataka razumiju. Svaki upit koji pokrenete koristi SQL u pozadini.
Razumijevanje načina na koji SQL funkcionira može vam pomoći u stvaranju boljih upita i pojednostavniti vam razumijevanje načina rješavanja upita koji ne vraća željene rezultate.
Ovo je jedan iz niza članaka o jeziku Access SQL. U ovom se članku opisuje osnovna upotreba SQL-a za odabir podataka i korištenje primjera za ilustriranje SQL sintakse.
Sadržaj članka
Što je SQL?
SQL je računalni jezik za rad sa skupovima činjenica i odnosima između njih. Programi relacijskih baza podataka, kao što je Microsoft Office Access, koriste SQL za rad s podacima. Za razliku od mnogih računalnih jezika, SQL nije teško čitati i razumjeti, čak ni za početnike. Kao i mnogi računalni jezici, SQL je međunarodni standard koji prepoznaju tijela standarda kao što su ISO i ANSI.
SQL koristite za opis skupova podataka koji vam mogu pomoći da odgovorite na pitanja. Kada koristite SQL, morate koristiti ispravnu sintaksu. Sintaksa je skup pravila prema kojima se elementi jezika pravilno kombiniraju. SQL sintaksa temelji se na engleskoj sintaksi i koristi mnoge iste elemente kao sintaksa jezika Visual Basic for Applications (VBA).
Na primjer, jednostavna SQL naredba koja dohvaća popis prezimena za kontakte čije je ime Marija može izgledati ovako:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Napomena: SQL se ne koristi samo za rukovanje podacima, već i za stvaranje i mijenjanje dizajna objekata baze podataka, kao što su tablice. Dio SQL-a koji se koristi za stvaranje i mijenjanje objekata baze podataka naziva se jezik za definiranje podataka (DDL). Ova tema ne obuhvaća DDL. Dodatne informacije potražite u članku Stvaranje i izmjena tablica ili indeksa pomoću upita za definiranje podataka.
Naredbe SELECT
Da biste opisali skup podataka pomoću SQL-a, napišite naredbu SELECT. Naredba SELECT sadrži potpuni opis skupa podataka koje želite dohvatiti iz baze podataka. To uključuje sljedeće:
-
Koje tablice sadrže podatke.
-
Način na koji su podaci iz različitih izvora povezani.
-
Koja će polja ili izračuni dati podatke.
-
Kriteriji koje podaci moraju podudarati da bi se uvrstili.
-
Hoće li se i kako sortirati rezultati.
SQL izrazi
Kao i rečenica, SQL naredba sadrži rečenice. Svaki uvjet izvodi funkciju za SQL naredbu. Neki su uvjeti obavezni u izjavi SELECT. U sljedećoj su tablici navedeni najčešći SQL uvjeti.
SQL uvjet |
Funkcija |
Obavezno |
SELECT |
Lists polja koja sadrže podatke od interesa. |
Da |
FROM |
Lists tablice koje sadrže polja navedena u uvjetu SELECT. |
Da |
WHERE |
Određuje kriterije polja koje mora ispunjavati svaki zapis koji će biti uvršten u rezultate. |
Ne |
POREDAJ PO |
Određuje kako sortirati rezultate. |
Ne |
GROUP BY |
U SQL naredbi koja sadrži agregacijske funkcije navodi polja koja nisu sažeta u uvjetu SELECT. |
Samo ako postoje takva polja |
HAVING |
U SQL naredbi koja sadrži agregacijske funkcije određuje uvjete koji se primjenjuju na polja sažeta u naredbi SELECT. |
Ne |
SQL pojmovi
Svaki SQL uvjet sastoji se od izraza – usporedivih s dijelovima govora. U sljedećoj su tablici navedene vrste SQL termina.
SQL termin |
Usporedivi dio govora |
Definicija |
Primjer |
Identifikator |
Imenica |
Naziv koji koristite za identifikaciju objekta baze podataka, kao što je naziv polja. |
Gosti. [Telefonski broj] |
operator |
glagol ili prilog |
Ključna riječ koja predstavlja akciju ili mijenja akciju. |
AS |
konstanta |
Imenica |
Vrijednost koja se ne mijenja, npr. broj ili NULL. |
42 |
izraz |
Pridjev |
Kombinacija identifikatora, operatora, konstanti i funkcija koje se vrednuju kao jedna vrijednost. |
>= Proizvodi. [Jedinična cijena] |
Osnovni SQL izrazi: SELECT, FROM i WHERE
SQL naredba ima opći oblik:
SELECT field_1
FROM table_1 WHERE criterion_1 ;
Napomene:
-
Access zanemaruje prijelome redaka u SQL naredbi. No razmislite o korištenju retka za svaki uvjet da biste poboljšali čitljivost SQL naredbi za sebe i druge.
-
Svaka naredba SELECT završava točkom sa zarezom (;). Točka-zarez može se pojaviti na kraju posljednjeg uvjeta ili na samom retku na kraju SQL naredbe.
Primjer u programu Access
U nastavku je prikazano kako SQL naredba za jednostavan upit odabiranja može izgledati u programu Access:
1. Uvjet SELECT
2. Uvjet FROM
3. Uvjet WHERE
U ovom se primjeru SQL naredba čita "Odabir podataka pohranjenih u poljima pod nazivom Adresa e-pošte i Tvrtka iz tablice Kontakti, posebno onih zapisa u kojima je vrijednost polja Grad Seattle."
Pogledajmo primjer, jedan po jedan uvjet da biste vidjeli kako funkcionira SQL sintaksa.
Uvjet SELECT
SELECT [E-mail Address], Company
Ovo je uvjet SELECT. Sastoji se od operatora (SELECT) iza kojeg slijede dva identifikatora ([Adresa e-pošte] i Tvrtka).
Ako identifikator sadrži razmake ili posebne znakove (npr. "Adresa e-pošte"), mora biti uglatim zagradama.
Uvjet SELECT ne mora reći koje tablice sadrže polja i ne može navesti uvjete koje podaci moraju ispunjavati.
Uvjet SELECT uvijek se pojavljuje ispred uvjeta FROM u izjavi SELECT.
Uvjet FROM
FROM Contacts
Ovo je uvjet FROM. Sastoji se od operatora (FROM) iza kojeg slijedi identifikator (Kontakti).
Uvjet FROM ne navodi polja koja treba odabrati.
Uvjet WHERE
WHERE City="Seattle"
Ovo je uvjet WHERE. Sastoji se od operatora (WHERE) i izraza (Grad="Seattle").
Napomena: Za razliku od uvjeta SELECT i FROM, uvjet WHERE nije obavezan element naredbe SELECT.
Mnoge akcije koje SQL omogućuje možete izvršiti pomoću uvjeta SELECT, FROM i WHERE. Dodatne informacije o korištenju tih uvjeta navedene su u sljedećim dodatnim člancima:
Sortiranje rezultata: ORDER BY
Kao i Microsoft Excel, Access vam omogućuje sortiranje rezultata upita u podatkovnoj tablici. U upitu možete navesti i način sortiranja rezultata prilikom pokretanja upita pomoću uvjeta ORDER BY. Ako koristite uvjet ORDER BY, to je posljednji uvjet u SQL naredbi.
Uvjet ORDER BY sadrži popis polja koja želite koristiti za sortiranje istim redoslijedom kojim želite primijeniti operacije sortiranja.
Pretpostavimo, primjerice, da želite da se rezultati najprije sortiraju prema vrijednosti polja Tvrtka silaznim redoslijedom i , ako postoje zapisi iste vrijednosti za tvrtku – sortirani pored vrijednosti u polju Adresa e-pošte uzlaznim redoslijedom. Uvjet ORDER BY izgledat će ovako:
ORDER BY Company DESC, [E-mail Address]
Napomena: Access po zadanom sortira vrijednosti uzlaznim redoslijedom (od A do Ž, od najmanjeg do najvećeg). Pomoću ključne riječi DESC sortirajte vrijednosti silaznim redoslijedom.
Dodatne informacije o uvjetu ORDER BY potražite u temi ORDER BY Uvjet.
Rad sa sažetim podacima: GROUP BY i HAVING
Ponekad želite raditi sa sažetim podacima, kao što su ukupna prodaja u mjesecu ili najskuplji artikli u inventaru. Da biste to učinili, primijenite funkcija zbrajanja na polje u uvjetu SELECT. Ako, primjerice, želite da upit prikazuje broj adresa e-pošte navedenih za svaku tvrtku, uvjet SELECT može izgledati ovako:
SELECT COUNT([E-mail Address]), Company
Funkcije zbrajanja koje možete koristiti ovise o vrsti podataka u polju ili izrazu koji želite koristiti. Dodatne informacije o dostupnim funkcijama zbrajanja potražite u članku SQL agregacijske funkcije.
Određivanje polja koja se ne koriste u funkciji zbrajanja: uvjet GROUP BY
Kada koristite agregacijske funkcije, obično morate stvoriti i uvjet GROUP BY. Uvjet GROUP BY sadrži popis svih polja na koja ne primjenjujete funkciju zbrajanja. Ako na sva polja u upitu primijenite agregacijske funkcije, ne morate stvarati uvjet GROUP BY.
Uvjet GROUP BY odmah slijedi uvjet WHERE ili uvjet FROM ako ne postoji uvjet WHERE. Uvjet GROUP BY navodi polja kako se prikazuju u uvjetu SELECT.
Ako, primjerice, nastavite s prethodnim primjerom, ako uvjet SELECT primjenjuje funkciju zbrajanja na [Adresa e-pošte], ali ne i na Tvrtku, uvjet GROUP BY izgledat će ovako:
GROUP BY Company
Dodatne informacije o uvjetu GROUP BY potražite u temi GROUP BY uvjet.
Ograničavanje zbirnih vrijednosti pomoću kriterija grupe: uvjet HAVING
Ako rezultate želite ograničiti pomoću kriterija, no polje na koje želite primijeniti kriterije koristi se u funkciji zbrajanja, ne možete koristiti uvjet WHERE. Umjesto toga koristite uvjet HAVING. Uvjet HAVING funkcionira kao uvjet WHERE, ali se koristi za skupne podatke.
Pretpostavimo, primjerice, da koristite funkciju AVG (koja izračunava prosječnu vrijednost) s prvim poljem u uvjetu SELECT:
SELECT COUNT([E-mail Address]), Company
Ako želite da upit ograniči rezultate na temelju vrijednosti te funkcije COUNT, ne možete koristiti kriterije za to polje u uvjetu WHERE. Umjesto toga kriterije stavljate u uvjet HAVING. Ako, primjerice, želite da upit vrati retke samo ako je s tvrtkom povezano više adresa e-pošte, uvjet HAVING može izgledati ovako:
HAVING COUNT([E-mail Address])>1
Napomena: Upit može imati uvjet WHERE i uvjet HAVING – kriteriji za polja koja se ne koriste u funkciji zbrajanja idu u uvjet WHERE, a kriteriji za polja koja se koriste s agregacskim funkcijama idu u uvjet HAVING.
Dodatne informacije o uvjetu HAVING potražite u temi UVJET HAVING.
Kombiniranje rezultata upita: UNION
Kada želite pregledati sve podatke koje je vratilo nekoliko sličnih upita odabiranja zajedno, kao kombinirani skup, koristite operator UNION.
Operator UNION omogućuje kombiniranje dviju naredbi SELECT u jednu. Naredbe SELECT koje kombinirate moraju imati isti broj izlaznih polja, istog redoslijeda i s istim ili kompatibilnim vrstama podataka. Kada pokrenete upit, podaci iz svakog skupa odgovarajućih polja kombiniraju se u jedno izlazno polje tako da izlaz upita ima isti broj polja kao i svaka naredba odabira.
Napomena: Za potrebe upita s unijom vrste podataka Broj i Tekst kompatibilne su.
Kada koristite operator UNION, možete odrediti i hoće li rezultati upita sadržavati duplicirane retke, ako postoje, pomoću ključne riječi ALL.
Osnovna SQL sintaksa za upit s unijom koja kombinira dvije naredbe SELECT sljedeća je:
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
Pretpostavimo, primjerice, da imate tablicu s nazivom Proizvodi i drugu tablicu pod nazivom Servisi. Obje tablice sadrže polja koja sadrže naziv proizvoda ili usluge, cijenu, jamstvo ili zajamčenu dostupnost te nudite li proizvod ili uslugu isključivo. Iako tablica Proizvodi pohranjuje informacije o jamstvu, a u tablici Servisi pohranjuju se podaci o jamstvu, osnovne su informacije iste (bez obzira na to obuhvaća li određeni proizvod ili uslugu obećanje kvalitete). Da biste kombinirali četiri polja iz dviju tablica, možete koristiti upit s unijom, primjerice sljedeće:
SELECT name, price, warranty_available, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services ;
Dodatne informacije o kombiniranju naredbi SELECT pomoću operatora UNION potražite u članku Kombiniranje rezultata nekoliko upita odabiranja pomoću upita s unijom.