Med prædikater kan du angive betingelser, som skal opfyldes, for at en række behandles. Grundlæggende prædikater beskrives under Vælg række. IN, BETWEEN, LIKE, EXISTS og kvantificerede prædikater beskrives i dette afsnit.
Brug prædikatet IN til at sammenligne en værdi med flere andre værdier. Eksempel:
SELECT NAME FROM STAFF WHERE DEPT IN (20, 15)
Dette eksempel svarer til:
SELECT NAME FROM STAFF WHERE DEPT = 20 OR DEPT = 15
Du kan bruge prædikaterne IN og NOT IN, når en underforespørgsel returnerer et sæt værdier. I dette eksempel vises efternavnene på de medarbejdere, der er ansvarlige for projekt MA2100 og OP2012:
SELECT LASTNAME FROM EMPLOYEE WHERE EMPNO IN (SELECT RESPEMP FROM PROJECT WHERE PROJNO = 'MA2100' OR PROJNO = 'OP2012')
Underforespørgslen vurderes én gang, og resultatet sættes inde i den ydre forespørgsel. Hvis ovenstående underforespørgsel f.eks. vælger personalenumrene 10 og 330, vurderes den ydre forespørgsel, som om dens WHERE-udtryk så sådan ud:
WHERE EMPNO IN (10, 330)
Underforespørgslen kan returnere ingen, en eller flere værdier.
BETWEEN-prædikatet sammenligner en enkelt værdi med et interval af værdier.
I dette eksempel vises navnet på de medarbejdere, som tjener mellem 10.000 og 20.000:
SELECT LASTNAME FROM EMPLOYEE WHERE SALARY BETWEEN 10000 AND 20000
Det svarer til:
SELECT LASTNAME FROM EMPLOYEE WHERE SALARY >= 10000 AND SALARY <= 20000
I det næste eksempel vises de medarbejdere, som tjener under 10.000 eller over 20.000:
SELECT LASTNAME FROM EMPLOYEE WHERE SALARY NOT BETWEEN 10000 AND 20000
Brug prædikatet LIKE til at søge efter strenge med bestemte mønstre. Mønstret angives vha. procenttegn og understregningstegn.
I dette eksempel vises medarbejdernavne, som har syv bogstaver og starter med 'S':
SELECT NAME FROM STAFF WHERE NAME LIKE 'S _ _ _ _ _ _'
I det næste eksempel vises navnene på medarbejdere, der ikke starter med bogstavet 'S':
SELECT NAME FROM STAFF WHERE NAME NOT LIKE 'S%'
Du kan bruge en underforespørgsel til at kontrollere, om der eksisterer en række, som opfylder en given betingelse. I det tilfælde kædes underforespørgslen sammen med den ydre forespørgsel vha. prædikatet EXISTS eller NOT EXISTS.
Når du kæder en underforespørgsel sammen med en ydre forespørgsel vha. prædikatet EXISTS, returneres der ikke en værdi. Prædikatet EXISTS er sandt, hvis resultatet af underforespørgslen indeholder én eller flere rækker, og falsk, hvis det ikke indeholder nogen.
Prædikatet EXISTS bruges tit sammen med korrelerede underforespørgsler. I eksemplet nedenfor vises de afdelinger, som pt. ikke har nogen registrering i tabellen PROJECT:
SELECT DEPTNO, DEPTNAME FROM DEPARTMENT X WHERE NOT EXISTS (SELECT * FROM PROJECT WHERE DEPTNO = X.DEPTNO) ORDER BY DEPTNO
Prædikaterne EXISTS og NOT EXISTS kan forbindes med andre prædikater vha. AND og OR i WHERE-udtrykket i den ydre forespørgsel.
Et kvantificeret prædikat sammenligner en værdi med en gruppe af værdier. Hvis en fullselect returnerer mere end én værdi, skal du ændre sammenligningsoperatorerne i prædikatet ved at tilføje ALL, ANY eller SOME. De angiver, hvordan de returnerede værdier skal behandles i det ydre prædikat. Her vises en række eksempler med sammenligningsoperatoren >, men bemærkningerne nedenfor gælder også for de andre operatorer:
I det følgende eksempel bruges en underforespørgsel og sammenligningen > ALL til at finde navn og stilling for alle medarbejdere, som tjener mere end alle ledere:
SELECT LASTNAME, JOB FROM EMPLOYEE WHERE SALARY > ALL (SELECT SALARY FROM EMPLOYEE WHERE JOB='MANAGER')
Der er flere oplysninger om prædikater og operatorer i SQL Reference.