Predikátum

Predikátumok: ALL, DISTINCT, DISTINCTROW és TOP. A predikátummal a válaszba kerülő rekordok körét tudjuk meghatározni. Az alapértelmezett predikátum az ALL.

SQL lekérdezésben meghatározza, hogy mely rekordok legyenek kiválasztva.

ALL

Az alapértelmezett érték. A Microsoft Jet adatbázis-motor minden olyan rekordot kiválaszt, amely megfelel az SQL utasításban megadott feltételeknek. A következő két utasítás azonos eredményt ad vissza, mindkettő az Alkalmazottak tábla összes rekordját visszakeresi:

SELECT ALL *

FROM Alkalmazottak

ORDER BY Alkalmazottkód;

SELECT *

FROM Alkalmazottak

ORDER BY Alkalmazottkód;

DISTINCT

Kihagyja azokat a rekordokat, amelyek a megadott mezőben azonos értékeket tartalmaznak. Ahhoz, hogy a rekordok bekerüljenek a lekérdezésbe, a SELECT utasításban felsorolt minden mezőnek egyedi értéket kell tartalmaznia. Például az Alkalmazottak táblában több személynek lehet azonos a vezetékneve. Ha két rekord van a táblában, amelyben a Vezetéknév mező értéke egyaránt Szabó, akkor a következő SQL utasítás csak az egyiket teszi bele a lekérdezésbe:

SELECT DISTINCT Vezetéknév

FROM Alkalmazottak;

Ha elhagyjuk a DISTINCT beállítást, a lekérdezésbe mindkét Szabó belekerül. Ha a SELECT záradék több mezőt tartalmaz, az adott rekord minden mezőjének egyedi értéket kell tartalmaznia ahhoz, hogy bekerülhessen a lekérdezésbe. A DISTINCT beállítású lekérdezés nem frissíthető, és a későbbi változtatások nem befolyásolják.

DISTINCTROW

A lekérdezésből kimaradnak azok a rekordok, amelyeket a tábla többször tartalmaz. Például létrehozhatunk egy lekérdezést, amelyben a Vevők és a Rendelések táblákat a Vevőkód mezőn keresztül összekapcsoljuk. A Vevők táblában minden Vevőkód mező különböző, A Rendelések táblában viszont nem, mert egy vevő többféle árucikket is rendelhet. A következő utasításban a DISTINCTROW beállítást olyan lista készítésére használjuk, amelyben minden cég neve szerepel, amely legalább egyszer leadott megrendelést:

SELECT DISTINCTROW Cégnév

FROM Vevők INNER JOIN Rendelések

ON Vevők.Vevőkód = Rendelések.Vevőkód

ORDER BY Cégnév;

Ha kihagyjuk a DISTINCTROW beállítást, a lekérdezésbe többször is bekerülnek azok a cégek, amelyeknek nem csak egy megrendelése volt.A DISTINCTROW predikátumnak csak akkor van értelme, ha egyes táblákból választunk ki mezőket. Ha a lekérdezésben csak egy tábla szerepel vagy minden táblából kiválasztunk mezőket, a DISTINCTROW predikátum figyelmen kívül marad.

TOP n [PERCENT]

A lekérdezésbe a megadott számú rekord kerül be az ORDER BY záradéknak megfelelően a lista elejéről vagy végéről. A következő példával az 1994.-ben érettségizettek közül a huszonöt legjobb tanulmányi átlagú diák nevét keressük vissza:

SELECT TOP 25 Keresztnév, Vezetéknév

FROM Diákok

WHERE Év = 1994

ORDER BY [Tanulmányi átlag] DESC;

Ha az utasításba nem tesszük be az ORDER BY záradékot, a lekérdezésbe véletlenszerűen kerül be huszonöt olyan rekord, amely megfelel a WHERE záradék feltételeinek. A TOP predikátum nem választ az azonos értékek közül. Ha az előző példában a huszonötödik és huszonhatodik legjobb tanulmányi átlag azonos, a lekérdezés huszonhat rekordot fog tartalmazni.A PERCENT foglalt szóval százalékos arányban is megadhatjuk a keresett rekordok mennyiségét. A következő példában a diákok azon tíz százalékát keressük, akiknek a legrosszabbak voltak az átlaguk:

SELECT TOP 10 PERCENT [Keresztnév], [Vezetéknév]

FROM Diákok

WHERE Év = 1994

ORDER BY [Tanulmányi átlag] ASC;

Az ASC predikátummal kapjuk meg az utolsó értékeket. A TOP foglalt szó után álló értéket előjel nélküli Integer számként kell megadni. A TOP predikátum nem befolyásolja a lekérdezés frissíthetőségét.