Kada želite da preuzmete podatke iz baze podataka, od njih tražite podatke koristeći Structured Query Language ili SQL. SQL je računarski jezik koji veoma podseća na engleski, ali programi baze podataka to razumeju. Svaki upit koji pokrenete koristi SQL u pozadini.
Razumevanje načina na koji SQL funkcioniše može da vam pomogne da napravite bolje upite i da lakše razumete kako da popravite upit koji ne vraća željene rezultate.
Ovo je jedan od skupova članaka o usluzi Access SQL. Ovaj članak opisuje osnovnu upotrebu SQL-a za izbor podataka i koristi primere za ilustrovanje SQL sintakse.
U ovom članku
Šta je SQL?
SQL je računarski jezik za rad sa skupovima činjenica i odnosima između njih. Programi relacione baze podataka, kao što je Microsoft Office Access, koriste SQL za rad sa podacima. Za razliku od mnogih jezika računara, SQL nije teško čitati i razumeti, čak ni za početnike. Kao i mnogi računarski jezici, SQL je međunarodni standard koji prepoznaju tela 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 da koristite ispravnu sintaksu. Sintaksa je skup pravila pomoću kojih se elementi jezika ispravno kombinuju. SQL sintaksa je zasnovana na sintaksi engleskog jezika i koristi mnoge iste elemente kao i Visual Basic for Applications (VBA) sintaksa.
Na primer, jednostavni SQL izraz koji preuzima listu prezimena za kontakte čije ime je Marija može da izgleda ovako:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Napomena: SQL se ne koristi samo za manipulisanje podacima, već i za kreiranje i menjanje dizajna objekata baze podataka, kao što su tabele. Deo SQL-a koji se koristi za kreiranje i menjanje objekata baze podataka zove se jezik definicije podataka (DDL). Ova tema ne pokriva DDL. Više informacija potražite u članku Kreiranje ili izmena tabela ili indeksa pomoću upita za definisanje podataka.
Select izrazi
Da biste opisali skup podataka pomoću SQL-a, napišite izraz SELECT. Izraz SELECT sadrži kompletan opis skupa podataka koji želite da dobijete iz baze podataka. To uključuje sledeće:
-
Koje tabele sadrže podatke.
-
Kako su povezani podaci iz različitih izvora.
-
Koja polja ili izračunavanja će dati podatke.
-
Kriterijumi koje podaci moraju da se podudaraju da bi se uključili.
-
Da li i kako da sortirate rezultate.
SQL odredbe
Kao i rečenica, SQL izraz ima odredbe. Svaka odredba izvršava funkciju za SQL izraz. Neke odredbe su neophodne u izrazu SELECT. Sledeća tabela navodi najčešće SQL odredbe.
SQL odredba |
Šta radi |
Obavezno |
SELECT |
Lists polja koja sadrže podatke koji vas interesuju. |
Da |
FROM |
Lists tabelama koje sadrže polja navedena u odredbi SELECT. |
Da |
WHERE |
Navodi kriterijume polja koje svaki zapis mora da ispuni da bi bio uključen u rezultate. |
Ne |
NARUČI PO |
Navodi kako da sortirate rezultate. |
Ne |
GROUP BY |
U SQL izrazu koji sadrži agregatne funkcije navodi polja koja nisu rezimirana u odredbi SELECT. |
Samo ako postoje takva polja |
HAVING |
U SQL izrazu koji sadrži agregatne funkcije navodi uslove koji se primenjuju na polja koja su rezimirani u izrazu SELECT. |
Ne |
SQL termini
Svaka SQL odredba je sačinjena od termina – koji se mogu porediti sa delovima govora. Sledeća tabela navodi tipove SQL termina.
SQL termin |
Deo govora koji se može kompaparirati |
Definicija |
Primer |
Identifikator |
Imenica |
Ime koje koristite za identifikovanje objekta baze podataka, kao što je ime polja. |
Kupci. [Broj telefona] |
operator |
glagol ili prilog |
Ključna reč koja predstavlja radnju ili menja radnju. |
AS |
konstanta |
Imenica |
Vrednost koja se ne menja, kao što je broj ili NULL. |
42 |
izraz |
Pridev |
Kombinacija identifikatora, operatora, konstanti i funkcija koje kao rezultat daju jednu vrednost. |
>= Proizvodi. [Cena po jedinici] |
Osnovne SQL odredbe: SELECT, FROM i WHERE
SQL izraz uzima opšti oblik:
SELECT field_1
FROM table_1 WHERE criterion_1 ;
Napomene:
-
Access zanemaruje prelome reda u SQL izrazu. Međutim, razmotrite korišćenje reda za svaku odredbu da biste poboljšali čitljivost SQL izraza za sebe i druge.
-
Svaki izraz SELECT završava se tačkom i zarezom (;). Tačka i zarez mogu da se pojave na kraju poslednje odredbe ili u samom redu na kraju SQL izraza.
Primer u programu Access
Sledeće ilustruje kako SQL izraz za jednostavan upit za izdvajanje može da izgleda u programu Access:
1. ODREDBA SELECT
2. Odredba FROM
3. Odredba WHERE
Ovaj primer SQL izraza čita "Izaberite podatke uskladištene u poljima pod imenom "E-adresa i preduzeće" iz tabele pod imenom "Kontakti", konkretno one zapise u kojima je vrednost polja "Grad" Sijetl".
Hajde da pogledamo primer, jednu po jednu odredbu da biste videli kako funkcioniše SQL sintaksa.
Odredba SELECT
SELECT [E-mail Address], Company
Ovo je odredba SELECT. Sastoji se od operatora (SELECT) iza kojeg slede dva identifikatora ([E-adresa] i preduzeće).
Ako identifikator sadrži razmake ili specijalne znakove (kao što je "E-adresa"), on mora da bude u uglastim zagradama.
Odredba SELECT ne mora da kaže koje tabele sadrže polja i ne može da navede uslove koje podaci moraju da ispune da bi se uključili.
Odredba SELECT se uvek pojavljuje ispred odredbe FROM u izrazu SELECT.
Odredba FROM
FROM Contacts
Ovo je odredba FROM. Sastoji se od operatora (FROM) iza kojeg sledi identifikator (Kontakti).
Odredba FROM ne navodi polja koja treba izabrati.
Odredba WHERE
WHERE City="Seattle"
Ovo je odredba WHERE. Sastoji se od operatora (WHERE) iza kojeg sledi izraz (Grad="Sijetl").
Napomena: Za razliku od odredbi SELECT i FROM, odredba WHERE nije neophodan element izraza SELECT.
Možete da izvršite mnoge radnje koje vam SQL omogućava da izvršite pomoću odredbi SELECT, FROM i WHERE. Više informacija o tome kako koristite ove odredbe predstavljene su u ovim dodatnim člancima:
Sortiranje rezultata: ORDER BY
Kao i Microsoft Excel, Access vam omogućava da sortirate rezultate upita na listu sa podacima. Takođe možete u upitu da navedete kako želite da sortirate rezultate kada se upit pokrene pomoću odredbe ORDER BY. Ako koristite odredbu ORDER BY, to je poslednja odredba u SQL izrazu.
Odredba ORDER BY sadrži listu polja koja želite da koristite za sortiranje istim redosledom koji želite da primenite operacije sortiranja.
Na primer, pretpostavimo da želite da se rezultati prvo sortiraju po vrednosti polja "Preduzeće" opadajućem redosledu i – ako postoje zapisi sa istom vrednošću za preduzeće – sortirani pored vrednosti u polju E-adresa u rastućem redosledu. Odredba ORDER BY bi izgledala ovako:
ORDER BY Company DESC, [E-mail Address]
Napomena: Access podrazumevano sortira vrednosti rastućim redosledom (A-Z, od najmanje do najveće). Umesto toga koristite ključnu reč DESC da biste sortirali vrednosti po opadajućem redosledu.
Više informacija o odredbi ORDER BY potražite u temi ODREDBA ORDER BY.
Rad sa rezimiranim podacima: GROUP BY i HAVING
Ponekad želite da radite sa rezimiranim podacima, kao što je ukupna prodaja u mesecu ili najskuplje stavke u zalihama. Da biste to uradili, primenite funkcija zbira na polje u odredbi SELECT. Na primer, ako želite da upit prikazuje broj e-adresa navedenih za svako preduzeće, odredba SELECT može da izgleda ovako:
SELECT COUNT([E-mail Address]), Company
Agregatne funkcije koje možete da koristite zavise od tipa podataka koji se nalazi u polju ili izrazu koji želite da koristite. Više informacija o dostupnim agregatnim funkcijama potražite u članku SQL agregatne funkcije.
Navođenje polja koja se ne koriste u agregatnim funkcijama: odredba GROUP BY
Kada koristite agregatne funkcije, obično morate da kreirate i odredbu GROUP BY. Odredba GROUP BY navodi sva polja na koja ne primenjujete agregatnu funkciju. Ako primenite agregatne funkcije na sva polja u upitu, ne morate da kreirate odredbu GROUP BY.
Odredba GROUP BY odmah sledi odredbu WHERE ili FROM ako ne postoji odredba WHERE. Odredba GROUP BY navodi polja kao što se pojavljuju u odredbi SELECT.
Na primer, ako se nastavi sa prethodnim primerom, ako odredba SELECT primenjuje agregatnu funkciju na [E-adresa], a ne na Preduzeće, odredba GROUP BY bi izgledala ovako:
GROUP BY Company
Više informacija o odredbi GROUP BY potražite u temi ODREDBA GROUP BY.
Ograničavanje agregatnih vrednosti pomoću kriterijuma grupe: odredba HAVING
Ako želite da koristite kriterijume da biste ograničili rezultate, ali polje na koje želite da primenite kriterijume koristi se u agregatnu funkciju, ne možete da koristite odredbu WHERE. Umesto toga koristite odredbu HAVING. Odredba HAVING funkcioniše kao odredba WHERE, ali se koristi za agregirane podatke.
Na primer, pretpostavimo da koristite funkciju AVG (koja izračunava prosečnu vrednost) sa prvim poljem u odredbi SELECT:
SELECT COUNT([E-mail Address]), Company
Ako želite da upit ograniči rezultate na osnovu vrednosti te funkcije COUNT, ne možete da koristite kriterijume za to polje u odredbi WHERE. Umesto toga kriterijume stavljate u odredbu HAVING. Na primer, ako želite da upit vraća redove samo ako postoji više e-adresa povezanih sa preduzećem, odredba HAVING može da izgleda ovako:
HAVING COUNT([E-mail Address])>1
Napomena: Upit može da ima odredbu WHERE i odredbu HAVING – kriterijumi za polja koja se ne koriste u agregatnoj funkciji idu u odredbi WHERE, a kriterijumi za polja koja se koriste sa agregatnim funkcijama idu u odredbi HAVING.
Više informacija o odredbi HAVING potražite u temi ODREDBA HAVING.
Kombinovanje rezultata upita: UNION
Kada želite da pregledate sve podatke koje zajedno vraća nekoliko sličnih upita za izdvajanje, koristite operator UNION.
Operator UNION vam omogućava da kombinujete dva izraza SELECT u jedan. Select izrazi koje kombinujete moraju da imaju isti broj izlaznih polja, istim redosledom i sa istim ili kompatibilnim tipovima podataka. Kada pokrenete upit, podaci iz svakog skupa odgovarajućih polja kombinuju se u jedno izlazno polje, tako da izlaz upita ima isti broj polja kao svaki izraz izbora.
Napomena: U svrhe upita za združivanje tipovi podataka "Broj" i "Tekst" su kompatibilni.
Kada koristite operator UNION, možete da navedete i da li rezultati upita treba da uključuju duplirane redove, ako postoje, pomoću ključne reči ALL.
Osnovna SQL sintaksa za upit za združivanje koja kombinuje dva SELECT izraza je sledeća:
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
Na primer, pretpostavimo da imate tabelu pod imenom "Proizvodi" i drugu tabelu pod imenom "Usluge". Obe tabele imaju polja koja sadrže ime proizvoda ili usluge, cenu, garanciju ili garanciju dostupnosti i da li nudite proizvod ili uslugu isključivo. Iako tabela "Proizvodi" skladišti informacije o garanciji, a tabela "Usluge" skladišti informacije o garanciji, osnovne informacije su iste (bilo da određeni proizvod ili usluga obuhvataju obećanje o kvalitetu). Upit za združivanje, kao što je sledeći, možete da koristite da biste kombinovali četiri polja iz dve tabele:
SELECT name, price, warranty_available, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services ;
Dodatne informacije o tome kako da kombinujete izraze SELECT pomoću operatora UNION potražite u članku Kombinovanje rezultata nekoliko upita za izdvajanje pomoću upita za združivanje.