4. lekcija - Where

4. lekcija - Where

offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

Posle malo duze pauze, nastavljam sa zapocetim poslom (za koji, BTW, jos nisam placen Mr. GreenVery Happy).
Potrudicu se da objasnim sto je moguce bolje.


WHERE je klauzula uslova. Sa WHERE odreduje koje zapise cete brisati, selektovati, azurirati...
Opciona je, ali ako postoji, mora da ide posle FROM some_table naredbe.

Primer 1.0
SELECT * FROM Table1 WHERE id=1;

Ovo prevedeno na obican jezik glasi: Izaberi sva polja iz tabele Table1 gde je id jednako 1.
WHERE mozete da kombinujete sa logickim izrazima tipa AND, OR, NOT.

Primer 1.1 (Selektuje sve zapise iz tabele Table1 gde je id 1 i 4)
SELECT * FROM Table1 WHERE id=1 OR id=4;

Primer 1.1 (Selektuje sve zapise iz tabele Table1 gde je id ili 1 ili 4)
SELECT * FROM Table1 WHERE id=1 OR id=4;

WHERE klauzula moze da sadrzi GROUP BY i ORDER BY klauzule.
GROUP BY ime_atributa za grupisanje po tom atributu

ORDER BY ime_atributa za prikazivanje u opadajucem (DESC) ili rastucem (ASC) redosledu.

WHERE klauzula takodje moze da sadrzi i drugu SELECT klauzulu (ne u MySQLu).
Ono sto je bitno kod ovakvog nacina pisanja SQL upita jeste da u jednom delu SQL upita izjednacite polje sa poljem iz drugog SQL upita (istog tipa) po kojem zelite da povezete te dve tabele.

Primer 1.2
SELECT * FROM Tabela1 WHERE id1=(SELECT id2 FROM Tabela2 WHERE UserName='NekiUser';)

Ovaj SQL upit ne radi nista pametno, ali sam samo hteo da pokazem syntaxu kako se pise.

Isti ovaj rezultat mozete postici na drugi nacin (ako neke baze podataka ne podrzavaju ugnjezdene upite kao mySQL npr.)

Primer 1.3
SELECT * FROM Table1,Table2 WHERE Table1.id1=Table2.id2 AND UserName='NekiUser';

U ovom slucaju morate navesti ime_tabele.ime_atributa kako bi 'rekli' iz koje tabele da uzima podatke. Ovo isto moze i vama pomoci, posebno ako upit ne radi kako treba.
Ako ne zelite da pisete ime_tabele.ime_atributa, onda morate da proverite da ime svakog polja iz obe tabele bude unikatno kako ne bi doslo do gresaka. (Ovo se ne preporucuje)
Rezultat oba ova upita je isti.

Neke baze (MSSQL) kada poredite dva stringa u WHERE klauzuli, 'traze' da umesto = bude klauzula LIKE.

Bilo u slucaju koriscenja ugnjezdenog upita ili SQL upita iz Primera 1.3 kada SQL upit treba da vrati vise zapisa onda se umesto = koristi klauzula IN.
U klauzuli WHERE mozete da kombinujete logicke operacije po ovoj semi:
Argument1 OperatorUporedjivanja Argument2 i tako u nedogled Smile.

WHERE u DELETE

Sama DELETE klauzula ne bi bila ni malo upotrebljiva ako ne bi imali WHERE klauzulu osim u slucaju da zelimo da obrisemo sve zapise iz tabele.
Kada zelite neki odredjeni zapis (ili logicku kombinaciju zapisa) da obrisete iz tabele, u DELETE klauzulu morate da 'ukljucite' WHERE klauzulu.

Primer 1.4
DELETE FROM Table1 WHERE UserName='NekiTamoUser';

Ovaj SQL upit ce obrisati citav jedan zapis iz tabele Table1 gde je atribut UserName = NekiTamoUser.

WHERE u UPDATE

Kao i DELETE, ni UPDATE ne bi bio upotrebljiv bez WHERE, osim ako ne zelimo da jednu promenu preslikamo na sve u tabeli.
Ako zelite da azurirate samo jedan zapis ili logicku kombinaciju vise zapisa koristite WHERE unutar UPDATE klauzule.

Primer 1.5 (Azuriranje zapisa gde je id=14)
UPDATE SET ime_atributa=vrednost_atributa WHERE id=14;

Primer 1.6 (Azuriranje zapisa gde je id=14 i id=10 ukupno dve promene ime_atributa sa vrednost_atributa)
UPDATE SET ime_atributa=vrednost_atributa WHERE id=14 OR id=10;

Mislim da je to sve. Ako sam nesto zaboravio, dopunite me Very Happy


Navigation
----------------------------------
prev | next



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
Ko je trenutno na forumu
 

Ukupno su 486 korisnika na forumu :: 22 registrovanih, 4 sakrivenih i 460 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 39mm, A.R.Chafee.Jr., Acaks88, amaterSRB, Atomski čoban, baza, BSD, croato, cvrle312, doom83, dragon986, ILGromovnik, Marko Marković, mercedesamg, Milan A. Nikolic, nuke92, Oluj2.1, pein, rovac, Snorks, Taso, Wisdomseeker