You are on page 1of 6

157-159 Selektovanje podataka iz tabela baze uz filtriranje po različitim kriterijumima

Ciljevi lekcije: upoznavanje sa opcijama i primenom naredbe SELECT za ažuriranje podataka u jednoj ili
više tabela baze podataka.

Podsetnik:

Jezik za rukovanje podacima (Data Manipulation Language – DML) omogućavaju ažuriranje podataka u
širem smislu (izmenu, dodavanje i brisanje) i izveštavanje (pribavljanje postojećih i izračunavanje novih
informacija) iz baze podataka. Osnovne DML naredbe su:
 SELECT – pristup podacima i prikaz sadržaja baze podataka,
 INSERT – unošenje podataka, dodavanje redova u tabelu,
 DELETE – brisanje podataka, izbacivanje redova iz tabele,
 UPDATE – ažuriranje, izmena vrednosti podataka u koloni tabele.

Ovi iskazi ne vraćaju rezultat, ali će naš DBMS obično ispisati poruku koja govori da li je iskaz uspešno
izvršen i, ako jeste, ispisaće broj redova pogođenih izmenom.
Da bismo videli stvaran učinak koji je iskaz imao nad tabelom, upotrebimo iskaz SELECT poput:
SELECT * FROM tabela;
Za razliku od iskaza SELECT, koji samo pristupa podacima, iskazi INSERT, DELETE i UPDATE menjaju
podatke, tako da će možda biti potrebno da nam administrator naše baze podataka odobri pravo da ih
izvršavamo.

Naredba SELECT se koristi za pribavljanje podataka iz jedne tabele ili više povezanih tabela, koje se
nalaze u relacionoj bazi podataka.

Pretraživanje i pribavljanje podataka su najčešće operacije koje korisnici izvršavaju 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.
Rezultat ove naredbe je neka informacija koja opet ima najčešće strukturu relacije, pa tako ima svoje atribute
i vrednosti atributa, ali NE POSTOJI KAO FIZIČKA TABELA stalno prisutna na disku. Dakle, rezultat
ovakvog upita je virtuelna neimenovana tabela koja postoji samo u radnoj, operativnoj memoriji.
Naredba SELECT je deklarativna naredba. Korišćenjem ove naredbe korisnici imaju mogućost samo
da specificiraju rezultate koje žele. Međutim, i pored toga što ne postoji fizički na disku u formi tabele,
rezultat naredbe SELECT može se koristiti kao argument neke druge naredbe SELECT (koja je
sastavni deo prve), prilikom pravljenja složenih upita, jer za sve vreme izvršavanja naredbe SELECT
parcijalni rezultati postoje kao tabele u memoriji računara.

Rezultat upita može biti prost neizmenjeni sadržaj jedne ili više tabela, ali isto tako može biti i neka
nova vrednost koja je izračunata na osnovu podataka koji postoje u bazi. Prava snaga koncepta baza
podataka i SQL-a upravo leži u tome da možemo dobijati i nove, izračunate informacije koje ne postoje kao zapis
(podatak) u bazi.
Analizom tih novih podataka, u interaktivnom radu sa bazom, na licu mesta donosimo odluke i kreiramo nove
upite sa ciljem dobijanja novih informacija.
Rezultat upita je najčešće tabela, relacija (složeni SELECT), a ne samo jedan podatak ili slog (prosti SELECT).
Čak i kada je rezultat obrade skalarna vrednost ona se tretira kao tabela sa jednom vrstom i jednom kolonom.

Komanda SELECT ima sledeći opšti oblik:


SELECT kolone
FROM tabele
[WHERE uslovi]
[GROUP BY grupe
[HAVING uslovi_za_grupe]]
[ORDER BY kolone_za_sortiranje]
[LIMIT broj ];
Ovo nije potpuna sintaksa, ali ilustruje opšti oblik komande.
Komanda SELECT ima veliki broj neobaveznih odredbi. Ne moraju se uvek navoditi, ali ako se
upotrebljavaju, moraju se zadavati redosledom koji je prikazan u opštem obliku komande.

Više detalja je dato u prilogu SQL u SUBP.pdf strana 43.

• SELECT - Osnovne naredbe za pretragu


• Select naredba je naredba koja emituje tabelarni rezultat na osnovu unetih
parametara:
SELECT 'hello';
• Iz primera možemo zaključiti da SELECT, iako se često koristi za prikazivanje podataka, nije zadužena za
logiku preuzimanja tih podataka, već samo za njihov prikaz.

Preuzimanje podataka iz tabele


• SELECT može takođe posedovati i treći deo, a to je izvor podataka. Preuzimanje rezultata iz izvora
podrazumeva i ključnu reč from, kojoj sledi izvor (tabela):
SELECT * FROM film;
• Ovaj upit vraća sve redove i sve kolone tabele film

Restrikcija kolona

• Često, nećemo biti zainteresovani za prikaz svih kolona jedne tabele. Jer, ukoliko unesemo upit:
SELECT * FROM actor;
dobijamo podatke iz svih kolona o svim glumcima upisanih u tabelu actor
• Ukoliko bismo želeli da dobijemo samo imena svih glumaca u bazi, napisali bismo:
SELECT first_name FROM actor,
• Ukoliko bismo želeli da prikažemo i imena i prezimena, napisali bismo:
SELECT first_name, last_name FROM actor;

• Savet za dobavljanje podataka iz baze: uvek dobavljati podatke samo iz onih kolona čiji podaci će
zapravo biti potrebni. Na taj način se rasterećuje baza podataka, klijentski program, kao i sama mreža
kroz koju putuju podaci.

Utvrđivanje broja unosa – funkcija COUNT

Osim operatora u upitima se mogu koristiti i funkcije. Funkcija COUNT() omogućava prebrojavanje redova
koje je upit učitao. Kod funkcija je neophodno da se otvorena zagrada stavi neposredno iza naziva
funkcije.

• Često se može javiti potreba da utvrdite ukupan broj zapisa u nekoj tabeli. Jednostavno, nisu Vam potrebni
nikakvi detalji, već samo ukupan broj zapisa, tj. redova ili linija jedne tabele.
• Ovo se postiže sledećom naredbom:
SELECT count(film_id) FROM film;
• U navedenom upitu može se koristiti naziv bilo koje kolone iz tabele film umesto korišćene film_id kolone.
Može se koristiti i zvezdica (*) za sve kolone. Rezultat je uvek isti.
Utvrđivanje broja jedinstvenih zapisa – DISTINCT

• Ukoliko je potrebno da utvrdimo koliko određenih jedinstvenih zapisa postoji, potrebno je koristiti ključnu reč
DISTINCT. Na primer, želimo da znamo koliko u bazi ima glumaca koji imaju jedinstven id broj :
SELECT COUNT(DISTINCT actor_id) FROM actor;
• Prethodni primer nije efikasan, ali ako napišemo nešto ovako:
SELECT COUNT(DISTINCT first_name) FROM actor;
• Na ovaj način utvrđujemo koliko glumaca postoji u bazi koji imaju jedinstveno ime. Naravno, više glumaca
može imati identično ime, pa će broj glumaca sa jedinstvenim imenom biti manji od ukupnog broja glumaca u
bazi.

ALIASI
Kolonama i tabelama u komandi SELECT mogu se dodeliti drugačija imena, koja će se prikazivati u rezultatima.
Korišćenjem sintakse pseudonima AS - u prethodnom primeru smo mogli dobiti i novi naziv kolone u rezultujućoj
tabeli, na sledeći način:

SELECT COUNT(DISTINCT first_name) AS razlicita_imena FROM actor;

Limitiranje rezultata - LIMIT


• Da bismo limitirali broj rezultata koje želimo da nam baza podataka vrati, koristimo ključnu reč LIMIT:
SELECT first_name, last_name FROM actor LIMIT 2;
• Naredba LIMIT može se koristiti i sa definisanjem takozvanog offset. Pomoću offset se definiše od kojeg
unosa će baza započeti pretragu.
Ako napišemo:
SELECT first_name, last_name FROM actor LIMIT 10, 5;
biće preskočeno prvih 10 unosa, i vraćeno narednih 5.

Straničenje
• Od MySQL edicije 4.0 može se koristiti specijalna opcija SQL_CALC_FOUND_ROWS koja se koristi u paru
sa funkcijom FOUND_ROWS i pomaže prilikom straničenja.
• Prvo se napiše upit za selektovanje dela zapisa, ali korišćenjem opcije SQL_CALC_FOUND_ROWS:
SELECT SQL_CALC_FOUND_ROWS first_name, last_name
FROM actor LIMIT 10;
• Zatim se, jednostavno, pozove funkcija FOUND_ROWS:
SELECT FOUND_ROWS();

Sortiranje rezultata - ORDER BY


• Osnovno sortiranje, obavlja se parametrom ORDER BY
• Ukoliko bismo hteli da dobijemo imena i prezimena svih glumaca, a uz to i još sortirana po imenu od A do Z,
napisali bismo ovako:
SELECT first_name, last_name FROM actor ORDER BY first_name;
• Podrazumevano sortiranje, prilikom upotrebe ključne reči ORDER BY, je sortiranje od manje vrednosti ka
većoj (ASC - od manjeg ka većem), ukoliko želimo da to sortiranje bude obrnuto (od veće vrednosti ka
manjoj), moramo to eksplicitno naglasiti. Za to koristimo ključne reči DESC (od većeg ka manjem) i ASC (od
manjeg ka većem).
SELECT first_name, last_name FROM actor ORDER BY first_name DESC;

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:

1. Relacioni operatori
2. Logički operatori
3. Operator BETWEEN
4. Operator IN
5. Operator LIKE
6. Operator IS NULL
Selektovanje specifičnih zapisa (WHERE - Relacioni operatori)
SQL podržava šest relacionih operatora koji imaju sledeće značenje:
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

• Najčešće nam neće biti potrebni svi zapisi iz neke tabele, pa čak ni deo njih, što smo postizali upotrebom
limitiranja. Nekada će nam biti potrebni zapis(i) koji će zadovoljiti tačno definisane kriterijume. Ovi kriterijumi
navode se ključnom rečju WHERE i nekim od relacionih operatora.
• Na primer, želimo da prikažemo nazive svih filmova iz tabele film, koji imaju vrednost kolone rating PG
(Parental Guidance). To ćemo postići na sledeći način:
SELECT title FROM film WHERE rating='PG';
• Za poređenje se ne mora koristiti operator jednakosti. Na primer, ukoliko želimo da prikažemo imena svih
filmova koji su duži od 2 sata, napisali bismo:
SELECT title FROM film WHERE length>120;

Treba primetiti da se tekstualni podaci zadaju korišćenjem znaka navoda: 'PG' ili ”PG”

Povezivanje filtera logickim operatorima AND, OR i NOT


• Često ćemo, u uslovnom izrazu, koristiti više od jednog uslova, povezanih logičkim operatorima. Na primer,
ako bismo želeli da vidimo sve filmove čiji naziv počinje slovom b i čije je trajanje duže od 3 sata, napisali
bismo ovako:
SELECT title, length FROM film WHERE title LIKE 'B%' AND length > 180;

• U uslovni izraz čak možemo staviti i sam upit:


SELECT title, length FROM film WHERE title LIKE 'B%' AND length > (SELECT 180);

Prioritet logičkih operatora je sledeći:


1. NOT
2. AND
3. 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,
A NOT = B nije validni WHERE uslov.
Primer
U nastavku je dat SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petrović i čija je plata NIJE veća ili
jednaka od 40000.

SELECT * FROM RADNIK


WHERE Prezime = "Petrović" AND NOT Plata >= 40000;
Operator IN
Operator IN zamenjuje višestruku upotrebu operatora OR i = . Operator NOT IN prikazuje sve vrste osim
onih određenih IN listom.

Primer:
Korišćenjem operatora IN izdvajaju se samo radnici koji se prezivaju Petrović ili Jovanović.

SELECT * FROM RADNIK


WHERE Prezime IN ("Petrović","Jovanović");

Naredni upit pribavlja podatke o svim radnicima OSIM ONIH KOJI SE PREZIVAJU Petrović ili Jovanović.
SELECT * FROM RADNIK
WHERE Prezime NOT IN ("Petrović","Jovanović");

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:
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;

Priblizno podudaranje teksta (LIKE)


• Ukoliko je potrebno da izvršimo pretragu na osnovu samo dela nekog podatka, možemo koristiti ključnu reč
LIKE. Na primer želimo da prikažemo sve glumce sa imenom koje počinje na određeni način, npr.
karakterima an:
SELECT first_name, last_name FROM actor WHERE first_name LIKE 'an%';
• Na sličan način možemo da utvrdimo da li se zapis neke kolone završava na određeni način:
SELECT first_name, last_name FROM actor WHERE first_name LIKE '%en';
• Možemo utvrditi i da li zapis neke kolone uopšte sadrži neku sekvencu karaktera bilo gde (na početku, na
kraju, u sredini):
SELECT first_name, last_name FROM actor WHERE first_name LIKE '%en%';

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.
Za testiranje vrednosti kolona koje sadrže NULL vrednosti na raspolaganju su samo dve opcije IS NULL
i IS NOT NULL.

Ako je kolona u tabeli opciona moguće je dodati novi i izmeniti postojeći zapis bez navođenja vrednosti za tu kolonu,
pa će ona biti sačuvana sa vrednošću NULL.
NULL se ne može pojaviti u kolonama koje su definisane kao NOT NULL ili kao primarni ključ (PRIMATY KEY).
Ranije verzije nekih SUBP su NULL vrednost predstavljale kao prazan niz znakova “”. Teorijski to nije isto i
danas se ni jedna druga vrednost ne poistovećuje sa NULL.
Rad sa NULL vrednostima je vrlo složen, jer sve operacije poređenja (izuzev IS NULL i IS NOT NULL)
imaju nepoznat rezultat kada je jedan od argumenata NULL. Isto važi i pri izračunavanju vrednosti logičkih izraza.
Nepoznata istinosna vrednost se može posmatrati kao možda (MAYBE). Pri izračunavanju aritmetičkih izraza ili
funkcija neophodno je voditi računa o tome šta predstavlja rezultat funkcije ili izraza koji sadrže NULL vrednosti.
Ako se vrše izračunavanja sa kolonama koje sadrže vrednost NULL, rezultat je NULL, jer nije moguće izvršiti
operaciju nad nepostojećom vrednošću.
VEŽBA

C# How to Edit / Update data in Database -Part1 | Windows Forms | Sql Server Database | Save Records
https://www.youtube.com/watch?v=qSla2Hhoack

C# How to Edit / Update data in Database (Part 2) Edit Button Column in DataGridView | Sql Server
https://youtu.be/GGHtuXba1ec

C# Search data in Database, Filter in Database datagridview | Winform Textchanged event | SQL Server
https://youtu.be/J-CcP1K1xeo

C# - Delete record from database | Deleting selected data | Delete row from datagridview SQL Server
https://youtu.be/mUYYn5oz7Uw

C# How to Show / Display Data in DataGridView from Sql Server Database | Retrieve Load in WinForms
https://youtu.be/a9kQygtTWvM

You might also like