Osnove SQL naredbi.
1. Naredba
SELECT
Neophodno predznanje
1.1.
Naredba SELECT
Naredba SELECT je jedna od najkompleksnijih naredbi SQL programskog
jezika. Uključuje veći broj ključnih reči klauzula:
1.1.1.
Klauzule SELECT i FROM
SELECT * FROM RADNIK;
Rezultat bi bio ekvivalenta da smo napisali upit kod koga su umesto * navedena imena svih kolona u tabeli.
SELECT MatBr, ime, Sslovo, Prezime, DatRodj, Adresa, Pol, Plata, Rukovodilac, Sektor FROM RADNIK;
Redosled kojim su kolone navedene u klauzuli SELECT definiše redosled kolona u rezultujućoj tabeli. U nastavku je dat SQL upit koji prikazuje imena i prezimena svih radnika ali u nešto drugačijem redosledu.
SELECT Prezime, Ime FROM RADNIK;
SELECT Rukovodilac FROM RADNIK;
1.1.2. Klauzula WHERE
Treba primetiti da se tekstualni podaci zadaju korišćenjem znaka navoda: "Petrović".
1.1.2.1. Logički
operatori
1.1.2.2. Operator
IN
Naredni upit pribavlja podatke o svim radnicima osim onih koji se prezivaju
Petrović ili Jovanović.
1.1.2.3. Operator
BETWEEN
1.1.2.4. Operator
LIKE
1.1.2.5. Operator
IS NULL
1.1.3.
Klauzula ORDER BY
1.1.4.
Aritmetičke funkcije
Obratite pažnju da je rezultatu matematičke funkcije (Plata + 5000)
dodeljeno ime korišćenjem sintakse pseudonima: AS PlataSaBonusom.
Aritmetičke funkcije se mogu primenjivati i u WHERE klauzuli.
1.1.5.
Funkcije agregacije
Sledeći SQL upit određuje maksimalnu, minimalnu, prosečnu i ukupnu platu svih radnika.
1.2.
Praktični rad: MS Access
Rad sa SQL programskim jezikom u okviru MS Access-a se bazira na korišćenju
Query objekata u SQL View režimu. Za primer ćemo uzeti najednostavnij upit koji
prikazuje sve podatke iz tabele CUSTOMER.
SELECT * FROM Customer;
1. Startujte MS Access - Windows , Programs, pronaći ikonicu za Access
2. U meniju izaberite stavku File | Open. Prikazaće se Open dijalog. Pronađite PREDUZECE.mdb datoteku na disku, selektujte je i kliknite na dugme Open. Kada se pojavi Security Warning dijalog, kliknite dugme Open da bi ste otvorili bazu podataka.
3. U prozoru PREDUZECE:Database, na Objects traci izaberite stavku Queries (Slika 1).
1.3.
Pitanja za samostalni rad
1. Naredba
SELECT
Ciljevi lekcije
- Upoznati se podrškom koju
SQL pruža za pretraživanje podataka
- Upoznati osnovnu strukturu
SQL naredbe SELECT
- Naučiti osnove korišćenja
naredbe SELECT za pretraživanje podataka u jednoj tabeli
- Upoznati se sa podržanim logičkim operatorima
- Upoznati se sa podržanim aritmetičkim
operatorima i funkcijama za agregaciju podataka
Pretraživanje i pribavljanje podataka su najčešće operacije koje korisnici
izvršavaju u relacionoj bazi podataka. Za pretraživanje i pribavljanje podataka
SQL programski jezik obezbeđuje naredbu SELECT. Naredba SELECT pribavlja
podatke iz jedne tabele ili više povezanih tabela koje se nalaze u relacionoj
bazi podataka. U svom osnovnom obliku naredba SELECT ne može ni na koji način
da izmeni podatke koji se nalaze u relacionoj bazi podataka.
Naredba SELECT je deklarativna naredba. Korišćenjem ove naredbe korisnici
imaju mogućost samo da specificiraju rezultate koje žele. Sa druge strane RDBMS
je zadužen da isplanira, optimizuje i izvrši fizičke operacije neophodne za
generisanje specificiranih rezultata.
Rezultat SELECT naredbe je uvek relacija. Naredba SELECT koristi podatke iz
jedne ili većeg broja tabela, manipulište tim podacima i kao rezultat generiše
tabelu. Čak i kada je rezultat obrade skalarna vrednost ona se tretira kao
tabela sa jednom vrstom i jednom kolonom.
Relacija
Tabela sa vrstama
i kolonama.
Atribut relacije
Predstavlja osobinu entiteta predstavljenog relacijom. Atribut je praktično
imenovana kolona relacije odnosno tabele, koje se odnose na svojstva objekta
predstavljenog relacijom.
Torka relacije
Vrsta relacije.
SQL
Programski jezik koji je projektovan za potrebe pretraživanja i upravljanja
podacima u Sistemima za upravljanje relacionim bazama podataka (Relational
Database Management Systems - RDBMS), za kreiranje i modifikacija šema
relacione baze podataka i za kontrolu pristupa objektima baze podataka.
1.1.
Naredba SELECT
Naredba SELECT je jedna od najkompleksnijih naredbi SQL programskog
jezika. Uključuje veći broj ključnih reči klauzula: - SELECT - definiše
listu kolona koje će biti uključene u rezultujuću tabelu
- FROM - definiše
tabele iz kojih se pribavljaju podaci za potrebe generisanja rezultujuće
tabele. Klauzula FROM može da uključi jednu ili više opcionih JOIN
klauzula za povezivanje tabela na osnovu kriterijuma zadatih od strane
korisnika.
- WHERE - definiše
predikat na osnovu koga se ograničava broj vrsta u rezultujućoj tabeli.
Ova klauzula iz rezultata eliminiše sve vrste za koje specificirani
predikat ne vraća vrednost TRUE.
- GROUP BY - grupiše
vrste koje u određenim kolonama imaju identične vrednosti.
- HAVING - definiše
predikat na osnovu koga se elimišu vrste nakon što je klauzula GROUP BY
primenjena na rezultujuću tabelu.
- ORDER BY - koristi
se za sortiranje rezultujuće tabele. Korisnici specificiraju kolone po
kojima se vrši sortiranje kao i smer sortiranja.
1.1.1.
Klauzule SELECT i FROM
Klauzule SELECT i FROM
su jedine obavezne u okviru SELECT naredbe. Klauzula FROM
specificira tabele iz kojih se pribavljaju podaci. Ukoliko se navede više
tabela potrebno je specificirati način spajanja tabela. Spajanje tabela će biti
detaljno objašnjeno u narednoj lekciji. Za sada ćemo se ograničiti samo na
pribavljanje podataka iz jedne tabele.
Klauzula SELECT specificira kolone koje treba uključiti u rezultujuću
tabelu. Mogu se koristiti sledeće opcije: - ALL - u rezultujućoj
tabeli prikazuju se sve vrste koje zadovoljavaju navedeni predikat
- DISTINCT - iz
rezultujuće tabele izbacuju se duplikati vrsta
- * - rezultujuća
tabela uključuje sve kolone tabele ili tabela iz kojih se pribavljaju
podaci
- tabela.* -
rezultujuća tabela uključuje sve kolone specificirane tabele
- izraz - ime kolone
ili funkcije nad kolonama koja će biti uključena u rezultujuću tabelu
- AS pseudonim - novo
ime kolone ili funkcije nad kolonama koje im se dodeljuje u rezultujućoj
tabeli
Primer 1
U nastavku je dat SQL upit koji prikazuje kompletan sadržaj tabele RADNIK SELECT * FROM RADNIK;
Rezultat bi bio ekvivalenta da smo napisali upit kod koga su umesto * navedena imena svih kolona u tabeli.
SELECT MatBr, ime, Sslovo, Prezime, DatRodj, Adresa, Pol, Plata, Rukovodilac, Sektor FROM RADNIK;
Primer 2
Ukoliko želimo da prikažemo
samo određene kolone iz tabele RADNIK posle SELECT klauzule navešćemo
imena kolona koje su od interesa. U nastavku je dat SQL upit koji prikazuje
samo imena i prezimena radnika.
SELECT Ime, Prezime FROM RADNIK; Redosled kojim su kolone navedene u klauzuli SELECT definiše redosled kolona u rezultujućoj tabeli. U nastavku je dat SQL upit koji prikazuje imena i prezimena svih radnika ali u nešto drugačijem redosledu.
SELECT Prezime, Ime FROM RADNIK;
Primer 3
U nastavku je dat SQL upit koji za svakog radnik određuje matični broj
njegovog neposrednog rukovodioca. SELECT Rukovodilac FROM RADNIK;
Možemo da primetimo da se u
rezultujućoj tabeli neki matični brojevi javljaju više puta. To je posledica
činjenice da veći broj radnika može imati istog rukovodioca. Ukoliko želimo da
eliminišemo duplikate koristićemo ključnu reč DISTINCT.
SELECT DISTINCT Rukovodilac FROM RADNIK;
1.1.2. Klauzula WHERE
Klauzula WHERE specificira uslov na osnovu koga se kreira
rezultujuća tabela. U rezultujuću tabelu će biti uključene samo one vrste koje
zadovoljavaju specificirani uslov. U uslovu se mogu javiti:
- Relacioni operatori
- Logički operatori
- Operator BETWEEN
- Operator IN
- Operator LIKE
- Operator IS NULL
1.
|
=
|
Jednako
|
2.
|
<>
|
Nije jednako (različito)
|
3.
|
<
|
Manje od
|
4.
|
>
|
Veće od
|
5.
|
<=
|
Manje ili jednako od
|
6.
|
>=
|
Veće ili jednako od
|
Primer 4
U ovom primeru dat je SQL upit koji prikazuje podatke o radnicima koji se
prezivaju Petrović.
SELECT *
FROM
RADNIK
WHERE Prezime = "Petrović";
Treba primetiti da se tekstualni podaci zadaju korišćenjem znaka navoda: "Petrović".
Primer 5
Primer sadrži SQL upit koji prikazuje imena i
prezimena radnika čija je plata jednaka ili veća od 40000.
SELECT Ime, Prezime
FROM
RADNIK
WHERE PLATA >= 40000;
1.1.2.1. Logički
operatori
SQL omogućava korišćenje
standardnih logičkih operatore AND, OR i NOT, ali i
operatore IN i BETWEEN koji omogućavaju jednostavnije korišćenje
prethodno navedenih operatora u nekim slučajevima.
Prioritet logičkih operatora je sledeći: - NOT
- AND
- OR
Logički
operatori AND i OR se koriste na standardni način. Međutim, kod
SQL-a, logički operator negacije NOT se navodi na početku logičkog
izraza, a ne ispred operatora poređenja. Na primer, NOT A = B je validni
WHERE uslov, ali A NOT = B nije.
Primer 6
Ukolimo želimo da prikažemo
podatke o radnicima koji se prezivaju Petrović i čija je plata jednaka ili veća
od 40000 možemo koristiti SQL upit koji je dat u nastavku.
SELECT *
FROM
RADNIK
WHERE Prezime = "Petrović" AND Plata >= 40000;
Primer 7
U nastavku je dat SQL upit koji prikazuje podatke o radnicima koji se
prezivaju Petrović i čija je plata NIJE jednaka ili veća od 40000.
SELECT *
FROM
RADNIK
WHERE Prezime = "Petrović" AND NOT Plata >=
40000;
Primer 8
Primer sadrži SQL upit koji prikazuje podatke o radnicima koji se prezivaju
Petrović ili se prezivaju Jovanović.
SELECT *
FROM
RADNIK
WHERE Prezime = "Petrović" OR Prezime =
"Jovanović";
1.1.2.2. Operator
IN
Operator IN zamenjuje višestruku upotrebu operatora OR
i = . Operator NOT IN prikazuje sve vrste osim onih određenih IN
listom.
Primer 9
Korišćenjem operatora IN izdvajaju se samo radnici
koji se prezivaju Petrović ili Jovanović.
SELECT *
FROM
RADNIK
WHERE Prezime IN ("Petrović","Jovanović");
SELECT *
FROM
RADNIK
WHERE Prezime NOT IN
("Petrović","Jovanović");
1.1.2.3. Operator
BETWEEN
Operator BEETWEEN zamenjuje
višestruku upotrebu operatora AND i =. Ovaj operator omogućava ispitivanje
da li je vrednost atributa/kolone u zadatom opsegu.
Primer 10
Za prikazivanje podataka o radnicima čija je plata u opsegu od 30000 do
40000 (uključujući i granice opsega) možemo iskoristiti operator BETWEEN.
SELECT *
FROM
RADNIK
WHERE Plata BETWEEN 30000 AND 40000;
1.1.2.4. Operator
LIKE
Operator LIKE omogućava
poređenje vrednosti kolone sa zadatim šablonom. Kod definisanja šablona koristi
se procenat (%) i znak pitanja (?). Procenat (%) predstavlja bilo koji mogući
znak (broj, slovo, interpunkcijski znak) ili skup znakova. Znak pitanja (?)
zamenjuje samo jedan znak.
Primer 11
Za zadavanje šablona MS
Access koristi nešto drugačije simbole. Umesto procenta koristi se zvezdica
(*). U narednom primeru * iza slova "J" označava proizvoljan broj
znakova (0 ili više), odnosno predstavlja uzorak za poklapanje koji sadrži na
početku slovo "J" i proizvoljan broj znakova iza njega. Za nalaženje
svih radnika koji imaju "J" na početku prezimena, može se koristiti
šablon "J%".
SELECT *
FROM
RADNIK
WHERE Prezime LIKE "J*";
Za nalaženje svih radnika koji sadrže slovo
"J" negde u prezimenu mogao bi se koristiti šablon "*J*". Obratite pažnju da se ne pravi razlika
između malih i velikih slova.
Operator
NOT LIKE prikazuje sve vrste koje ne odgovaraju prethodno datom opisu,
tj za prethodni slučaj, sve radnike koji nemaju slovo "J" u svom
prezimenu.
1.1.2.5. Operator
IS NULL
Operator IS NULL se
koristi za poređenje sa NULL vrednostima. Treba voditi računa da se na NULL
vrednosti ne može primeniti ni jedan relacioni operator. Može se samo
proveravati da li kolona ima NULL vrednost ili nema.
Primer 12
U nastavku je dat SQL upit koji
izdvaja podatke o svim radnicima kojima nije definisan datum rođenja odnosno
datum rođenja ima NULL vrednost.
SELECT *
FROM
RADNIK
WHERE DatRodj IS NULL;
1.1.3.
Klauzula ORDER BY
Klauzula ORDER BY
specificira redosled prikazivanja vrste rezultujuće tabele, sortiranjem po
vrednosti nekih kolona u rastući (ASC) (predefinisana vrednost) ili
opadajući redosled (DESC). Ukoliko klauzula ODER
BY nije navedena vrste u rezultujućoj tabeli su poređane po slučajnom
principu i ne postoji nikakva garancije da će isti upit uvek generisati
rezultujuću tabelu čije su vrste poređane na isti način.
Primer 13
U nastavku je dat SQL upit koji
prikazuje podatke o radnicima i sortira ih prema prezimenu u opadajućem i
rastućem redosledu.
SELECT *
FROM
RADNIK
ORDER BY Prezime;
Obratite pažnju da ukoliko
vrste sortirate u rastućem redosledu nije potrebno eksplicitno navesti smer
sortiranja. Rastući redosled je podrazumevan u ORDER BY klauzuli.
SELECT *
FROM
RADNIK
ORDER BY Prezime DESC;
Primer 14
Sortiranje je moguće vršiti na osnovu vrednosti više kolona. SQL upit u
nastavku sortira podatke o radnicima prema broju sektora u opadajućem redosledu
a prema prezimenu u rastućem redosledu.
SELECT *
FROM
RADNIK
ORDER BY Sektor DESC, Prezime ASC;
1.1.4.
Aritmetičke funkcije
SQL dozvoljava korišćenje
matematičkih funkcija u SELECT i WHERE klauzulama. Na taj način
se kao rezultat pretraživanja mogu prikazati rezultati izračunavanja nekog
matematičkog izraza.
Primer 15
U nastavku je dat SQL upit koji prikazuje imena i prezimena radnika kao i
njihove plate uvećane za bonus od 5000.
SELECT Ime, Prezime, Plata + 5000 AS PlataSaBonusom
FROM
RADNIK;
Aritmetičke funkcije se mogu primenjivati i u WHERE klauzuli.
SELECT Ime, Prezime, Plata + 5000 AS PlataSaBonusom
FROM
RADNIK
WHERE Plata + 5000 > 40000;
1.1.5.
Funkcije agregacije
Funkcije agregacije su dobile
naziv po tome što vrše agregaciju rezultata upita. Korišćenje ovih funkcija je
jednostavno, pošto se navode u listi kolona SELECT klauzule koje se
prikazuju. Značenje funkcija je sledeće:
- AVG(kolona) -
izračunava srednju vrednost datog atributa
- SUM(kolona) -
izračunava sumu svih vrednosti atributa
- MIN(kolona) - nalazi minimalnu vrednost atributa
- MAX(kolona) - nalazi najveću vrednost atributa
- COUNT(*) - nalazi broj vrsta u tabeli (grupi)
- COUNT(kolona) - nalazi broj vrsta sa ne NULL vrednostima
kolone
- COUNT (DISTINCT kolona) - nalazi broj vrsta sa različitim
vrednostima zadate kolone (nije podržano od strane MS Access-a)
Primer 16
Funkcija COUNT određuje broj
vrsta u rezultujućoj tabeli.
SELECT COUNT(*) AS PlataSaBonusom
FROM
RADNIK;
Sledeći SQL upit određuje maksimalnu, minimalnu, prosečnu i ukupnu platu svih radnika.
SELECT MAX(Plata) AS MaxPlata, MIN(Plata) AS MinPlata,
AVG(Plata)
AS ProsPlata, SUM(Plata) AS UkPlata
FROM RADNIK;
Primer 17
Posebno je bitno zapamtiti da
funkcije agregacije nije moguće koristiti u WHERE klauzuli. To je
posledica činjenice da se rezultat funkcija agregacija izračunava nakon što se
odrede vrste koje ulaze u sastav rezultujuće tabele, odnosno nakon obrade
predikta koji je zadta u WHERE klauzuli. U nastavku je dat SQL upit koji
se NE MOŽE IZVRŠITI i koji će GENERISATI GREŠKU.
SELECT Ime, Prezime, Plata
FROM
RADNIK
WHERE Plata > AVG(Plata).
1.2.
Praktični rad: MS Access
Rad sa SQL programskim jezikom u okviru MS Access-a se bazira na korišćenju
Query objekata u SQL View režimu. Za primer ćemo uzeti najednostavnij upit koji
prikazuje sve podatke iz tabele CUSTOMER. SELECT * FROM Customer;
1. Startujte MS Access - Windows , Programs, pronaći ikonicu za Access
2. U meniju izaberite stavku File | Open. Prikazaće se Open dijalog. Pronađite PREDUZECE.mdb datoteku na disku, selektujte je i kliknite na dugme Open. Kada se pojavi Security Warning dijalog, kliknite dugme Open da bi ste otvorili bazu podataka.
3. U prozoru PREDUZECE:Database, na Objects traci izaberite stavku Queries (Slika 1).
Slika 1
4. Izaberite stavku Create Query in Design View.
Nakon toga se pojavljuje prozor Query 1: Select Query i dijalog Show Table
(Slika 2).
5. Korišćenjem dugmeta Close zatvorite Show Table
dijalog. Prikazaće se prozor Query 1: Select Query kao na Slici 3. Ovaj
prozor se koristi za kreiranje upita korišćenjem MS Access QBE alata. Za sada
nećemo koristiti ovaj alat već ćemo direktno unositi SQL upite. Obratite pažnju
na SQL View dugme na toolbar-u.
Slika 2
Slika 3
6. Kliknite na SQL View dugme na Query Design
toolbar-u. Prozor Query 1: Select Query se prebacuje u SQL View
režim rada (Slika 4). Obratite pažnju da je komanda SELECT već započeta.
7. Unesite komandu SELECT * FROM Customer kao
na Slici 5.
Slika 4
Slika 5
8. Kliknite na dugme Run na Query Design
toolbar-u. Ukoliko je sve u redu
prikazuje se rezultat upita kao na Slici 6.
9. Da bi ste snimili
upit izaberite dugme Save na Query Design toolbar-u. Pojaviće se Save
As dijalog kao na Slici 7.
Slika 6
Slika 7
10. Za ime upita unesite Test i kliknite na dugme OK.
Upit je snimljen i ime prozora je
sada promenjeno u skladu sa novim imenom upita.
11. Zatvorite prozor Test : Select Query. Objekat Test se sada pojavljuje u listi Query objekata (Slika 8).
11. Zatvorite prozor Test : Select Query. Objekat Test se sada pojavljuje u listi Query objekata (Slika 8).
Slika 8
1.3.
Pitanja za samostalni rad
SQL upiti
Pokušajte
da rešite niz zadataka koji je dat u nastavku. Za rešavanje koristite bazu
podataka PREDUZEĆE koje je priložena uz ovaj materijal.
- Napisati SQL upit koji prikazuje kompletan
sadržaj tabele SEKTOR.
- Napisati SQL upit koji prikazuje nazive svih
projekata koji postoje u preduzeću, lokacije na kojima se nalaze i brojeve
sektora koji su zaduženi za njih.
- Napisati SQL upit koji određuje spisak
različitih srodstava koje imaju članovi porodice.
- Modifikovati upit iz tačke 2 tako da se
podaci sortiraju u opadajućem redosledu po lokacijama na kojima se nalaze.
- Napisati SQl upit koji prikazuje imena svih
projekata koji su locirani u Nišu.
- Napisati SQL upit koji prikazuje imena svih
projekata čije ime počinje slovom P.
- Napisati SQL upit koji prikazuje imena svih
projekata koji su locirani u Pirotu i čije ime počinje slovom P.
- Napisati SQL upit koji za projekte locirane u
Nišu ili Leskovcu prikazuje njihova imena i brojeve sektora koji su
zaduženi za njih.
- Napisati SQL upit koji prikazuje imena i pol
svih članova porodice koji imaju srodstvo "sin".
- Napisati SQL upit koji određuje imena i
prezimena svih radnika čija bi plata nakon povećanja od 10% bila veća od
40000.
- Napisati SQL upit koji za tip
srodstva “sin” određuje broj članova porodice
koji imaju taj tip srodstva.
- Napisati SQL upit koji određuje
prosečnu zaradu za radnike koji rade u sektoru broj 4.
Коментари
Постави коментар