08. Eredmények szűkítése - WHERE

Általában egy lekérdezésben nem minden rekord adataira vagyunk kíváncsiak. Nem is célszerű minden rekord adatát lekérdezni a kliens oldalon, mivel az eredmény rekordszetet átadja a szerver a kliensnek és ez esetenként rengeteg adat utaztatását jelentené, ami leterheli a hálózatot és a szervert. Az eredményhalmaz szűkítéséhez tudjuk használni a WHERE feltételt

WHERE

A szelekció művelet megvalósítása esetén a SELECT utasítást egy feltétellel egészítjük ki:

SELECT mezőnév, mezőnév, ... FROM táblanév     
WHERE feltétel;

Például a 11.b osztálynak az összes adatára vagyunk kíváncsiak:

SELECT * FROM Diakok WHERE osztaly = '11.b';

Megadott attributumok esetén a projekció és a szelekció művelete összevonható egy utasítással:

Összehasonlító operátorok

Operátor Értelmezés
=   Egyenlő
<> nem egyenlő
> Nagyobb
nagyobb egyenlő
< kisebb
<= kisebb egyenső
IS NULL egy mező ben van-e érték, azaz ki van-e töltve
  • Az összehasonlító operátorok segítségével attributumokat és konstansokat hasonlíthatunk össze.
  • A szöveg és dátum konstansokat idézőjelek között kell megadni. Az alapértelmezés szerinti dátum formátum nap-hónap-év. A hónap a hónap nevének három betűs angol rövidítése, az év pedig évezred és évszázad nélkül értendő

Az SQL tartalmaz olyan összehasonlító operátorokat is, melyek nem egy adott értékkel, hanem az értékek egy halmazával történő összehasonlítást eredményeznek.

Összehasonlító operátorok halmazokra

Operátor Értelmezés
BETWEEN x AND y  adott értékek közé esik
IN (a, b, c, ...)  az értékek valamelyike
LIKE minta hasonlít a mintára

Az IN esetén egy halmazt adhatunk az elemek felsorolásával.

A LIKE operátort karakteres mezők összehasonlítá-sára alkalmazhatjuk. Két speciális karakter adható meg a mintában, a % jel tetszőleges hosszúságú karakter sorozatot helyettesít, az _ aláhúzás karakter pedig egy tetszőleges karaktert.

Szöveges minta megadása - LIKE - példák

Operátor Értelmezés
LIKE 'a%' minden 'a' betűvel kezdődő
LIKE 'x_'  minden 'x'-el kezdődő kétbetűs
LIKE '%a%'   minden 'a' betűt tartalmazó
LIKE '_a%x' második betű 'a' és 'x'-re végződő

Több keresési feltételt is összekapcsolhatunk a logikai operátorokkal, illetve segítségükkel a halmaz műveleteket valósíthatjuk meg.

Logikai operátorok

Operátor Értelmezés
NOT Logikai tagadás
AND  Logikai és
OR     Logikai vagy

A végrehajtás, kiértékelés sorrendje

A különböző logikai operátorok végrehajtásának sorrendje (precedencia) csökkenő sorrendben:
=, <>,  >, >=, <, <=, NOT, AND, OR
Megjegyés:

  • Ha egy feltétel nem azt az eredményt adja, amelyet szeretnénk, akkor valószínűleg a kiértékelés sorrendjében tévedtünk. Ilyenkor használjuk a zárójeleket, mert a zárójelezéssel felülÍrjuk a precedenciát!
  • Összetett feltételeknél célszerű a különvböző feltételeket új sorokba írni és a sorok végére tenni az ANd és Or feltételeket, mert úgy átláthatóbb és jobban értelmezhető!
SELECT * 
FROM tanulók
WHERE
    osztaly = "11.A" AND
    lakcim LIKE "Budap%";

Általában is igaz, hogy mivel az SQL utasításokat tetszőleges számú sorba írhatjuk, ezért a programozó számára az áttekinthetőséget úgy tudjuk biztosítani, ha a szövegünk struktúrált és az utasítás végére ';' jelet teszünk.