Az SQL WHERE utasítás és az operátorok bemutatása példákkal (NOT, AND, OR, BETWEEN, LIKE, IN, EXISTS, ANY, ALL)

Ebben a leckében bemutjuk a WHERE záradékot, illetve bemutatásra kerülnek a leggyakrabban használt operátorok is: NOT, AND, OR, BETWEEN, LIKE, IN, EXISTS, ANY és ALL.

SQL alapok kezdőknek, SQL ismeretek kurzus borítókép

Az SQL WHERE utasítás és az operátorok bemutatása példákkal (NOT, AND, OR, BETWEEN, LIKE, IN, EXISTS, ANY, ALL)

Ebben a leckében megtanuljuk továbbfinomítani az SQL lekérdezéseinket, a WHERE záradékkal, utasítással, illetve bemutatásra kerülnek a leggyakrabban használt operátorok is: egyenlő, nem egyenlő (NOT), kisebb, nagyobb, kisebb vagy egyenlő, nagyobb vagy egyenlő, AND (és), OR (vagy), BETWEEN, LIKE, IN, EXISTS, ANY és ALL.

Mi az az SQL WHERE?

Az SQL WHERE utasítását arra használjuk, hogy a lekérdezést szűrni tudjuk, a lekérdezés eredményeként csak azok a rekordok kerülnek megjelenítésre, amelyek eleget tesznek a WHERE után meghatározott feltételeknek.

Csak úgy, mint a programozási nyelvekben, itt is meghatározhatunk egyszerű és összetett feltételeket, melyek során használhatunk logikai, aritmetikai és relációs operátorokat is.

SQL WHERE szintaktika

A szintaktika alapvetően nagyon egyszerű, először jönnie kell a SELECT záradéknak, majd a FROM-nak és ezeket követi a WHERE.

SELECT oszlop(ok)
FROM tábla
WHERE feltétel(ek);
Code language: SQL (Structured Query Language) (sql)

A WHERE utasítás után kell meghatároznunk azokat a feltételt vagy feltételeket, amelyeket szeretnénk, ha teljesülni. Csak azok a rekordok kerülnek majd kilistázásra, amelyek teljesítik a feltételeket.

Természetesen a WHERE záradékot nem csak SELECT esetében lehet használni, hanem UPDATE, DELETE és egyéb utasítások esetében is. De ezek a későbbi leckékben részletesebben is kifejtésre kerülnek majd.

SQL WHERE operátorok

Fentebb pár szóban már említésre került, hogy a WHERE záradék esetében használhatók operátorok, lentebb egy részletes listát találtok az összes használható operátorról egy leírással és példával együtt.

De előtte soroljuk fel tételesen az SQL operátorait:

  • egyenlő operátor
  • nagyobb operátor
  • kisebb operátor
  • nagyobb vagy egyenlő operátor
  • kisebb vagy egyenlő operátor
  • nem egyenlő (NOT) operátor
  • AND operátor
  • OR operátor
  • BETWEEN operátor
  • LIKE operátor
  • IN operátor


Egyenlő operátor

Az egyenlő operátorral konkrét egyenlőséget vizsgálhatunk. Csak azok a rekordok lesznek kilistázva, amelyek esetében a feltételnél megadott kulcs és érték teljes egyezőséget mutat.

Jelölése: =

Szintaktika:

WHERE oszlop = érték;
Code language: SQL (Structured Query Language) (sql)

A „oszlop” helyére kell megadnunk azt, hogy melyik oszlop a helyére, az „érték” helyére pedig azt, hogy milyen értéket várunk.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE vezeteknev="Horváth";
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989

Nagyobb operátor

A nagyobb operátorral azokat a rekordokat szűrhetjük ki, amelyek esetében a vizsgált oszlop értéke nagyobb az általunk meghatározott értéknél.

Jelölése: >

Szintaktika:

WHERE oszlop > érték;
Code language: SQL (Structured Query Language) (sql)

Az „oszlop” helyére kell megadnunk azt az oszlopot, amelyikre szeretnénk a vizsgálatot megtenni, az „érték” helyére pedig azt az értéket kell megadnunk, amelynél nagyobbakat keresünk.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE szuletesi_ev>2000;
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
LosoncziLénaNyíregyháza2005

Kisebb operátor

A kisebb operátorral azokat a rekordokat szűrhetjük ki, amelyek esetében a vizsgált oszlop értéke kisebb az általunk meghatározott értéknél.

Jelölése: <

Szintaktika:

WHERE oszlop < érték;
Code language: SQL (Structured Query Language) (sql)

Az „oszlop” helyére kell megadnunk azt az oszlopot, amelyikre szeretnénk a vizsgálatot megtenni, az „érték” helyére pedig azt az értéket kell megadnunk, amelynél kisebbeket keresünk.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE szuletesi_ev<2000;
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
BaloghBeatrixMiskolc1985

Nagyobb vagy egyenlő operátor

A nagyobb vagy egyenlő operátorral azokat a rekordokat szűrhetjük ki, amelyek esetében a vizsgált oszlop értéke nagyobb vagy egyenlő az általunk meghatározott értéknél.

Jelölése: >=

Szintaktika:

WHERE oszlop >= érték;
Code language: SQL (Structured Query Language) (sql)

Az „oszlop” helyére kell megadnunk azt az oszlopot, amelyikre szeretnénk a feltételvizsgálatot végrehajtani, az „érték” helyére pedig azt az értéket kell megadnunk, amelynél nagyobb vagy egyenlő oszlopértékeket keresünk.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE szuletesi_ev>=1961;
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

Kisebb vagy egyenlő operátor

A kisebb vagy egyenlő operátorral azokat a rekordokat szűrhetjük ki, amelyek esetében a vizsgált oszlop értéke kisebb vagy egyenlő az általunk meghatározott értéknél.

Jelölése: <=

Szintaktika:

WHERE oszlop <= érték;
Code language: SQL (Structured Query Language) (sql)

Az „oszlop” helyére kell megadnunk azt az oszlopot, amelyikre szeretnénk a feltételvizsgálatot végrehajtani, az „érték” helyére pedig azt az értéket kell megadnunk, amelynél kisebb vagy egyenlő oszlopértékeket keresünk.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE szuletesi_ev<=2005;
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

Nem egyenlő vagy NOT operátor

Csak azok a rekordok kerülnek kilistázásra, amelyek esetében a vizsgált oszlop értéke nem egyezik meg a megadott értékkel.

Jelölése: <> vagy != vagy NOT

Szintaktika:

WHERE oszlop <> érték;
Code language: SQL (Structured Query Language) (sql)
WHERE oszlop != érték;
Code language: SQL (Structured Query Language) (sql)
WHERE NOT oszlop = érték;
Code language: SQL (Structured Query Language) (sql)

Az „oszlop” helyére megadjuk a vizsgálandó oszlopot, míg az „érték” helyére azt az értéket, amellyel nem szeretnénk, ha egyenlő lenne az oszlop.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE szuletesi_ev!=2005;

vagy

SELECT *
FROM sql_table
WHERE szuletesi_ev<>2005;

vagy

SELECT *
FROM sql_table
WHERE NOT szuletesi_ev=2005;
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
BaloghBeatrixMiskolc1985

AND operátor

Az AND operátor kicsit eltér az előzőektől, hiszen ezzel nem egy konkrét oszlop és a hozzákapcsolódó érték viszonyát tudjuk meghatározni, hanem segítségével több feltételt tudunk összefűzni. Az AND operátor megszabja, hogy csak azok a rekordok legyenek kilistázva, amelyek esetében az összes feltétel teljesül.

Jelölése: AND

Szintaktika:

WHERE feltétel1 AND feltétel2 ...;
Code language: SQL (Structured Query Language) (sql)

Az egyes feltételeket az AND kulcsszóval fűzzük össze. Tetszőleges számú feltételt adhatunk meg.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE szuletesi_ev>1985 AND szuletesi_ev<2005;
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989

OR operátor

Az OR az előző operátorhoz hasonlóan több feltétel összekapcsolására használható. Viszont ebben az esetben nem csak azok a rekordok kerülnek kilistázásra, amelyek esetében az összes feltétel teljesül, hanem azok is, amelyek esetében csak a feltételek egy része.

Jelölése: OR

Szintaktika:

WHERE feltétel1 OR feltétel2 ...;
Code language: SQL (Structured Query Language) (sql)

A feltételek összefűzése az OR kulcsszóval történik. A feltételek száma, csak úgy mint az AND esetében, itt is tetszőleges.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE lakhely="Budapest" OR lakhely="Debrecen";
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961

BETWEEN operátor

A BETWEEN operátorral megadhatjuk, hogy egy rekord csak akkor kerüljön megjelenítésre, ha az értéke két végpont közé esik.

Jelölése: BETWEEN

Szintaktika:

WHERE oszlop BETWEEN érték1 AND érték2;
Code language: SQL (Structured Query Language) (sql)

Az „oszlop” helyére azt az oszlopot kell megadni, amelyen a vizsgálatot szeretnénk végezni, majd ezt követi a BETWEEN kulcsszó, amely után a két végpont értékét kell megadnunk, amely közé szeretnénk, hogy essenek az eredmények.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE szuletesi_ev BETWEEN 1985 AND 1989;
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
BaloghBeatrixMiskolc1985

LIKE operátor

A LIKE operátort arra lehet használni, hogy egy adott mintának (patern) megfelelő oszlopértékeket keressünk.

Jelölése: LIKE

Szintaktika:

WHERE oszlop LIKE minta;
Code language: SQL (Structured Query Language) (sql)

Az „oszlop” helyére megadjuk azt, hogy melyik oszlopra szeretnénk mintát keresni, míg a „minta” helyére azt, hogy milyen minta alapján szeretnénk keresni.

A minták felépítése során helyettesítő karaktereket (wildcard) használhatunk. A két leggyakrabban használt helyettesítő karakter:

  • % vagy *: bármennyi karakter helyettesítésére alkalmas
  • _ vagy ?: egyetlen egy karakter helyettesítésére alkalmas

Megjegyzés: A * és a ? a Microsoft Access-ben használhatóak.

A következő példán keresztül sokkal könnyebben érthető lesz a LIKE használata.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE vezeteknev LIKE "L%";
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005

A fenti példa szerint megadtuk, hogy a „vezeteknev” oszlopnak nagy L betűvel kell kezdődnie, amelyet több karakter is követ, így listázásra kerül Lakatos és Losonczi is. Ha „L_”-t adtunk volna meg, akkor semmi sem került volna kilistázásra, mert nincs olyan, amit csak egyetlen egy karakter követ a nagy L után.

IN operátor

Az IN operátorral egy halmazt határozhatunk meg, amelynek elemeit elfogadunk a vizsgált oszlop értékéül.

Jelölése: IN

Szintaktika:

WHERE oszlop IN (értékek);
Code language: SQL (Structured Query Language) (sql)

Az „oszlop” helyére azt az oszlopot kell megadni, amelyre szeretnénk az IN kulcsszó után következő halmaz értékeit vizsgálni.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE lakhely IN ("Debrecen", "Nyíregyháza");
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005

Mivel az IN után szereplő halmazban a Debrecen és a Nyíregyháza szerepelt, így a lekérdezés eredményei között megjelenik az összes olyan rekord, ahol a lakhely az előbb említett kettő közül valamelyik.

EXISTS operátor

Az EXISTS operátorral azt tudjuk tesztelni, hogy az allekérdezésnek van-e eredménye vagy sem. Ha az allakérdezés rekorddal vagy rekordokkal tér vissza, akkor az EXISTS operátor TRUE (igaz) értéket ad vissza, ellenkező esetben FALSE-t, azaz hamist.

Jelölése: EXISTS

Szintaktika:

WHERE EXISTS (allekérdezés);
Code language: SQL (Structured Query Language) (sql)

A WHERE záradék és az EXISTS operátor után szimplán adjuk meg zárójelek közé az allekérdezést.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table 
WHERE EXISTS (SELECT * FROM sql_table WHERE lakhely="Budapest");
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

Az allekérdezésben azt vizsgáltuk, hogy van-e budapesti lakhellyel rendelkező személy, és mivel van, így az egész főlekérdezés lefut. Amennyiben nem lenne budapesti lakos, úgy a főlekérdezés sem kerülne kiértékelésre, hiszen az EXISTS operátor hamis értékkel térne vissza.

ANY operátor

Csak úgy, mint az előző operátor, ez is egy logikai értékkel tér vissza: igazzal, ha van olyan rekord, amely eleget tesz az allekérdezésnek, és hamissal, ha egyetlen egy rekord sem tesz eleget az allekérdezésnek.

Jelölése: ANY

Szintaktika:

WHERE oszlop operátor ANY (allekérdezés);
Code language: SQL (Structured Query Language) (sql)

A WHERE után meg kell adnunk egy oszlopot, majd egy értékösszehasonlító operátort, amely lehet: =, <>, !=, >, <, >=, <=. Ezt követi az ANY operátor és a zárójelek között az allekérdezés.

Példa:

sql_table tábla

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE keresztnev = ANY (SELECT keresztnev FROM sql_table WHERE lakhely="Budapest");
Code language: SQL (Structured Query Language) (sql)

Eredmény

vezeteknevkeresztnevlakhelyszuletesi_ev
HorváthTamásBudapest1989
LakatosDezsőDebrecen1961
LosoncziLénaNyíregyháza2005
BaloghBeatrixMiskolc1985

Mivel van olyan rekord, amely eleget tesz az allekérdezésnek, így a főlekérdezés is kiértékelésre kerül.

ALL operátor

Az előző operátorral szemben itt nem elég, hogy legyen egy olyan rekord, amely megfelel az allekérdezésnek, az ALL operátor használatakor minden rekordnak meg kell felelni az allekérdezésben támasztott feltételeknek. Akkor tér vissza TRUE értékkel, ha az összes rekord megfelel az allekérdezésnek, minden ellenkező esetben FALSE értékkel tér vissza.

Jelölése: ALL

Szintaktika:

WHERE oszlop operátor ALL (allekérdezés);
Code language: SQL (Structured Query Language) (sql)

A WHERE után meg kell adnunk egy oszlopot, majd egy értékösszehasonlító operátort, amely lehet: =, <>, !=, >, <, >=, <=. Ezt követi az ALL operátor és a zárójelek között az allekérdezés.

Példa:

sql_table tábla

IDvezeteknevkeresztnevlakhelyszuletesi_ev
1HorváthTamásBudapest1989
2LakatosDezsőDebrecen1961
3LosoncziLénaNyíregyháza2005
4BaloghBeatrixMiskolc1985

SQL lekérdezés

SELECT *
FROM sql_table
WHERE ID = ANY (SELECT ID FROM sql_table WHERE lakhely="Budapest");
Code language: SQL (Structured Query Language) (sql)

Eredmény

IDvezeteknevkeresztnevlakhelyszuletesi_ev

Mivel nem mindegyik rekord tesz eleget a „lakhely” egyenlő „Budapest” feltételnek, így végül egy rekord sem kerül kilistázásra.

Ha hasznos volt számodra, akkor kérlek oszd meg másokkal is, hogy ezzel támogass minket!