Kom godt i gang med SQL

Prædikater

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.

Prædikatet IN

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.

Prædikatet BETWEEN

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

Prædikatet LIKE

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%'

Prædikatet EXISTS

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.

Kvantificerede prædikater

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:

udsagn > ALL (fullselect)
Prædikatet er sandt, hvis udtrykket er større end hver enkelt værdi, som fullselecten returnerer. Hvis fullselecten ikke returnerer nogen værdier, er prædikatet sandt. Hvis resultatet er falsk, er det angivne forhold falsk for mindst én værdi. Bemærk, at det kvantificerede prædikat <>ALL svarer til prædikatet NOT IN.

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')

udsagn > ANY (fullselect)
Prædikatet er sandt, hvis udtrykket er større end mindst én af de værdier, som fullselecten returnerer. Hvis fullselecten ikke returnerer nogen værdier, er prædikatet falsk. Bemærk, at det kvantificerede prædikat =ANY svarer til prædikatet IN.

udsagn > SOME (fullselect)
SOME er synonymt med ANY.

Der er flere oplysninger om prædikater og operatorer i SQL Reference.


[ Øverst på siden | Forrige side | Næste side | Indholdsfortegnelse | Stikordsregister ]