IZRADA SAJTA za 10 €

Home   FORUM   Toplista   HTML   CSS   JavaScript   PHP   DIZAJN   SEO   Mapa


KONTAKT
izuzetan[at]gmail.com






TOP LISTA SAJTOVA
Igrice
Slike

SELECT sa WHERE uslovom

Kada nam nisu potrebni podaci iz svih redova već samo iz nekih onda koristimo WHERE uslov kao dodatak SELECT iskazu. Na primer evo kako bi izgledao upit da trazimo podatke iz tabele Korisnici samo iz jednog reda a iz svih kolina:

select * from Korisnici where KorisnikID = 3

Normalno, ako nam nisu potrebni podaci iz svih kolona mi navedemo umesto zvezdice kolone koje nas zanimaju.

Obratite pažnju da se SQL razlikuje od PHP-a! Zato je u SQL znak jednakosti baš to znak jednakosti, pa se piše " = ".

Pored znaka jednakosti u WHERE uslovu mogu da se nadju svi operatori poredjenja i regularnih izraza. One koji se najčešće koriste daćemo tabelarno. Napomenimo da nije ovo kompletan spisak ali sadrži najupotrebljavanije operatore.

Operator Naziv ako postoji Primer Opis
= Jednako KorisnikID = 3 Proverava da li su dve vrednosti jednake
> veće KorisnikID > 3 Proverava da li je prva vrednost veća od druge
< manje KorisnikID < 3 Proverava da li je prva vrednost manja od druge
>= veće ili jednako KorisnikID >= 3 Proverava da li je prva vrednost veća ili jednaka od druge
<= manje ili jednako KorisnikID <= 3 Proverava da li je prva vrednost manja ili jednaka od druge
!= ili <> nije jednako KorisnikID <> 3 Proverava da li su prva i druga vrednost različite
is not null   KorisnikID is not null Proverava se da li postoji vrednost
is null   KorisnikID is null Proverava se da li je vrednost nedefinisana
between   KorisnikID between 0 and 3 Proverava da li je vrednost u zadatom opsegu
in   Grad in ("Nis", "Bor") Proverava da li se vrednost nalazi u skupu
not in   Grad not in ("Nis", "Bor") Proverava da li se vrednost ne nalazi u skupu
like podudarni oblici Ime like ("Marko %") Proverava da li je vrednost podudarna uzorku
not like podudarni oblici Ime not like ("Marko %") Proverava da li vrednost nije podudarna uzorku
regexp regularni izrazi Ime regexp Proverava da li je vrednost podudarna sa regularnim izrazom

Možete da proverite više kriterijuma i da ih povežete logičkim operaterima AND i / ili OR, na primer:

select * from Korisnici where KorisnikID=3 AND KorisnikID=4 AND KorisnikID=5

Ovim SELECT upitom smo definisali da želimo isčitati sve podatke iz redova 3, 4 i 5 tabele Korisnici.

Varijante i mogućnosti SELECT iskaza u kombinaciji sa WHERE uslovima su jako velike zbog operatora poredjenja i regularnih izraza.

Često puta su nam potrebni podaci iz više tabela da bi smo odgovorili na neka pitanja. Tako ako želimo da znamo koje knjige i količine je odredjeni kupac naručio u odredjenom periodu vremena moramo potražiti odredjene podatke iz tabela Korisnici i Narudzbine za tog konkretnog kupca. Dakle trebamo spojiti dve tabele u jednu nazovi fiktivnu tabelu ali tako da podaci odredjenog kupca iz jedne tabele odgovaraju podacima tog kupca u drugoj tabeli. Zato služe primarni i sekundarni ključevi. Zapravo kao uslov za spajanje dve tabele biće podudaranje vrednosti primarnog i sekundarnog ključa. Vratimo se sada našem primeru. Te podatke možemo pribaviti pojedinačno korišćenjem dva SQL upita ali je ekonomičnije, preglednije i duplo brže ako koristimo jedan SQL upit. Kolone koje nas interesuju iz tabele Korisnici je KorisnikID a iz tabele Narudzbine su Količina i Datum. Upit bi mogo da izgleda ovako:

SELECT Korisnici.KorisnikID, Narudzbine.Količina, Narudzbine.Datum
FROM Korisnici, Narudzbine
WHERE Korisnici.Ime = 'Pera Mitic' AND Korisnici.KorisnikID = Narudzbine.KorisnikID

Pošto u SELECT upitu koristimo dve tabele poželjno je gde god stoji ime neke kolone postaviti ispred imena te kolone spojeno tačkom i ime tabele u koju se nalazi ta kolona zbog preglednosti, a obavezno je kod kolona koje se nalaze u obe tabele. Sa uslovom Korisnici.Ime = 'Pera Mitic' mi smo odredili koji nam je redak u tabelama potreban. Obzirom da kolona Ime postoji samo u tabeli Korisnici moglismo napisati samo Ime = 'Pera Mitic' ali preglednije je kad stoji informacija i iz koje je tabele. Moglismo staviti i na primer Korisnici.KorisnikID = 3, ali sve zavisi koji podatak posedujemo. Uslovom Korisnici.KorisnikID = Narudzbine.KorisnikID upravo obezbedjujemo da se podaci za tačno odredjenog kupca iz jedne tabele podudare sa podacima za tog istog kupca i u drugoj tabeli da ne bi došlo do toga da spajamo redak kupca na primer "Milan" iz kolone Ime u tabeli Korisnici sa podacima redtka korisnika "Goran" vezano za naručene knjige. Pošto je kolina KorisnikID primaran ključ u tabeli Korisnici i sekundaran ključ u tabeli Narudzbine zato je ovo uslov spajanja ove dve tabele !

Spajanje više od dve tabele takodje nije mnogo složenije treba samo pratiti primarne i sekundarne ključeve od tabele do tabele. Primera radi ako želimo da znamo koji kupci su naručivali knjige o programskom jeziku "java" (na primer zato što je izašlo novo izdanje iz te oblasti pa želimo da ih obavestimo) treba da analiziramo odnose izmedju više tabela. Znači potrebno je naći iz tabele Kupci one sa bar jednom porudžbinom knjige iz tabele Narucene_Knjige iz oblasti "java". Da bi ste od tabele Korisnici stigli do tabele Narudzbine upotrebite ključ KorisniciID. Da bi ste od tabele Narudzbine stigli do tabele Naručene_Knjige upotrebićete ključ NarudzbineID. Da bi ste od Naručene knjige stigli do konkretne knjige u tabeli Knjige upotrebite ključ ISBN. Pošto uspostavite sve te veze, proverite da li se u naslovima nalazi reč java i sačuvajte imena u kojima se nalazi. Znači upit ima sledeći oblik:

SELECT Korisnici.Ime
FROM Korisnici, Narudzbine, Narucene_Knjige, Knjige
WHERE Korisnici.KorisnikID = Narudzbine.KorisnikID
AND Narudzbine.NarudzbinaID = Narucene_Knjige.NarudzbinaID
AND Narucene_Knjige.ISBN = Knjige.ISBN
AND Knjige.Naslov LIKE ' %Java% '

Povezali smo podatke iz četri tabele pomoću tri ključa uslova spajanja. Najčešće je za spajanje dve tabele potreban jedan uslov i zato je ukupan minimalni broj uslova za jedan manji od ukupnog broja tabela. To pravilo može biti korisno pri nalaženju grešaka u upitima koji ne funkcionišu pravilno.

Evo još jednog primera, trebamo naći kupce koji nikad nisu ništa naručili. Evo upita:

SELECT Korisnici.Ime
FROM Korisnici, Narudzbine
WHERE Korisnici.KorisnikID = Narudzbine.KorisnikID
AND Kolicina IS null

Često je potrebno, a po nekad i neizbežno, tabele nazivati drugim imenima. Ta druga imena su alijasi. Alijasi su neophodni kad trebamo spojiti tabelu sa samom sobom. Na primer želimo da nadjem parove korisnika koji žive u istim gradovima (na primer želimo da napravimo klubove čitalaca iz istih gradova). Znamo da se kolone Ime i Grad nalaze u istoj tabeli pod nazivom Korisnici. Upit bi izgledao na sledeći način:

SELECT c1.Ime, c2.Ime, c1.Grad
FROM Korisnici AS c1, Korisnici AS c2
WHERE c1.Grad = c2.Grad
AND c1.Ime != c2.Ime

Ovde zapravo stvaramo dve fiktivne tabele c1 i c2 od jedne "Korisnici" iskazom AS. Uslov za spajanje je da Gradovi budu isti a drugi uslov c1.Ime != c2.Ime obezbedjuje da ne sparujemo kupca sa samim sobom.

Copyright © 2010 BUbaj. Powered By bubaj.com
PHP    PHP sintaksa    Fajl    Niz    String    Funkcija    Objektno programiranje    MySQL    Unos fajla    Datum    Forme    Sesija    Registracija