Select upit sluzi kako bi iz neke tabele 'izvadili' selektovali neki zapis ili vise zapisa po nekom odredjenom
kriterijumu.
sintaxta select upita je sledeca:
SELECT * FROM ime_tabele [WHERE id=13];
znak * znaci da cemo iz tabele ime_tabele da selektujemo sve atribute, a ime_tabele je zapravo ime tabele u kojoj se
nalaze ti selektovani atributi.
ako zelimo da iz tabele selektujemo sve korisnike koji su rodjeni 83 godine upit bi izgledao ovako:
SELECT * FROM tabela1 WHERE Godiste=83;
kao rezultat ovog upita, dobicemo ovakvu tabelu
--------------------------------------------
| Ime | Prezime | Godiste |
--------------------------------------------
| Predrag | Damnjanovic | 83 |
--------------------------------------------
ova tabela je virtuelna tabela i nalazi se u memoriji racunara.
bazu cemo azurirati (update jos nismo radili, za dva casa)
UPDATE tabela1 SET Godiste=83 WHERE Prezime='Kasic';
ovaj sql upit ce u vec postojeci zapis, dodati ono prazno poje koje je bilo (Godiste)
cela tabela izgleda ovako:
--------------------------------------------
| Ime | Prezime | Godiste |
--------------------------------------------
| Predrag | Damnjanovic | 83 |
| Petar | Petrovcic | 84 |
| Jasmina | Nikolic | 80 |
| Slobodan | Kasic | 83 |
--------------------------------------------
kada se sada izvrsi isti onaj SELECT upit, virtuelna tabela ce biti ovakva:
--------------------------------------------
| Ime | Prezime | Godiste |
--------------------------------------------
| Predrag | Damnjanovic | 83 |
| Slobodan | Kasic | 83 |
--------------------------------------------
sa ovakvim rezultatom upita, mozete da radite sta vam je volja. da ga sortirate ili ispisujete negde.
ako zelite da izracunate (izbrojite) koliko zapisa ima u tabeli sledeci sql upit resava to:
SELECT count(*) FROM tabela1;
rezultat upita ce biti broj 4.
postoje i malo komplikovaniji delovi SELECT upita (ugnjezdeni upiti)
hipoteticka situacija:
imate dve tabele. u jednoj spisak CD/DVD, a u drugoj grupa u kojoj isti pripadaju.
tabele ce ovako nekako izgledati:
tabela: cddvd
--------------------------------------------
| Broj | Ime | Grupa |
--------------------------------------------
| 1 | Worms | 1 |
| 2 | Flash | 2 |
| 3 | Linux | 3 |
| 4 | VS.NET | 4 |
--------------------------------------------
tabela: grupa
-------------------------------
| Broj | Ime |
-------------------------------
| 1 | Igre |
| 2 | Programi |
| 3 | OSystems |
| 4 | Programiranje |
-------------------------------
ovako realizovana tabela sprecava neke od anomalija (anomalije pri brisanju, dodavanj i azuriranju)
mozgli smo to uraditi i sa jednom tabelom stim sto bi onda u atributu Grupa zapravo bilo ime grupe, ali to nije
dobro. tako se ne radi zbog pomenutih anomalija (o njima kasnije)
ove dve tabele su spojene sa atributima Grupa (iz prve tabele) i Broj (iz druge tabele)
select cddvd.broj,cddvd.ime,grupa.ime from cddvd,grupa where cddvd.broj=grupa.broj;
ovaj sql upit ce vam dati ono sto zelite.
tabela je ovakva
tabela: virtuelana
-----------------------------------------------
| Broj | Ime | Grupa |
-----------------------------------------------
| 1 | Worms | Igre |
| 2 | Flash | Programi |
| 3 | Linux | OSystems |
| 4 | VS.NET | Programiranje|
-----------------------------------------------
sve sto vam je potrebno je tu, a jos plus ste izbegli anomalije. malo je sql upit komplikovaniji, ali nije problem.
znaci, ono sto zelite da se prikaze u tabeli, morate navesti posle SELECT-a. kada radite sa dve ili vise tabela,
najbolje je da atribut pisete kao ime_tabele.ime_atributa da ne bi bilo zabune, a i da izbegnete greske, posebno ako
u dve tabele imate isti atribut (kao u mom slucaju Broj).
ovo je nesto sto ja najcesce koristim. ima tu jos ugnjezdenih f-ja. neke ne znam ni sam kako se koriste
npr.
SELECT max(Broj) FROM grupa;
vraca broj 4 posto je on najveci broj u atributu Broj
slucaj sa min(broj), vratice 1, kao najmanji.
Navigation
----------------------------------
prev | next
|