Initiation à SQL

Prédicats

Les prédicats permettent de créer des conditions telles que seules les lignes qui les respectent seront traitées. Vous trouverez une description des prédicats à la section Sélection de lignes. La présente section décrit les prédicats IN, BETWEEN, LIKE, EXISTS et les prédicats quantifiés.

Utilisation du prédicat IN

Utilisez un prédicat IN pour comparer une valeur à plusieurs autres. Par exemple :

     SELECT NAME
        FROM STAFF
        WHERE DEPT IN (20, 15)       

Cet exemple équivaut à :

     SELECT NAME
        FROM STAFF
        WHERE DEPT = 20  OR DEPT = 15

Utilisez les prédicats IN et NOT IN quand une sous-requête renvoie un ensemble de valeurs. Par exemple, la requête suivante permet de recenser les noms de tous les employés responsables des projets MA2100 et OP2012 :

     SELECT LASTNAME
        FROM EMPLOYEE
        WHERE EMPNO IN
           (SELECT RESPEMP
               FROM PROJECT
               WHERE PROJNO = 'MA2100'
               OR PROJNO = 'OP2012')

La sous-requête n'est évaluée qu'une fois, et le résultat se place directement dans la requête externe, sous forme de liste. Par exemple, la sous-requête ci-dessous sélectionne les employés ayant les matricules 10 et 330. L'évaluation de la requête externe donne le même résultat que si elle contenait la clause WHERE suivante :

     WHERE EMPNO IN (10, 330)

La liste renvoyée par la sous-requête peut ne contenir aucune valeur ou en comporter une ou plusieurs.

Utilisation du prédicat BETWEEN

Utilisez un prédicat BETWEEN pour comparer une valeur à une plage de valeurs inclusives (nommées dans le prédicat BETWEEN).

L'exemple suivant recherche les noms des employés gagnant entre 10000 et 20000 F :

     SELECT LASTNAME
        FROM EMPLOYEE
        WHERE SALARY BETWEEN 10000 AND 20000

Ceci équivaut à :

     SELECT LASTNAME
        FROM EMPLOYEE
        WHERE SALARY >= 10000 AND SALARY <= 20000

L'exemple suivant recherche les noms des employés gagnant moins de 10000 ou plus de 20000 F :

     SELECT LASTNAME
        FROM EMPLOYEE
        WHERE SALARY NOT BETWEEN 10000 AND 20000

Utilisation du prédicat LIKE

Utilisez le prédicat LIKE pour rechercher les chaînes correspondant à certains modèles. Le modèle est précisé à l'aide du signe % et du trait de soulignement.

L'exemple suivant sélectionne les noms des employés comportant 7 caractères et commençant par la lettre 'S' :

     SELECT NAME
        FROM STAFF
        WHERE NAME LIKE 'S _ _ _ _ _ _'

L'exemple suivant sélectionne les noms des employés commençant par une lettre autre que 'S' :

     SELECT NAME
        FROM STAFF
        WHERE NAME  NOT LIKE 'S%'

Utilisation du prédicat EXISTS

Une sous-requête peut être utilisée pour vérifier l'existence d'une ligne répondant à une condition. Dans ce cas, la sous-requête est liée à la requête externe par le prédicat EXISTS ou NOT EXISTS.

Si vous liez une sous-requête à une requête externe par le prédicat EXISTS, cette sous-requête ne renvoie pas de valeur. Le prédicat EXISTS est vrai si l'ensemble des réponses de la sous-requête contient une ligne ou plus, et il est faux s'il n'en contient aucune.

Le prédicat EXISTS est souvent utilisé avec les sous-requêtes corrélées. L'exemple ci-dessous recense les services ne possédant aucune entrée dans la table PROJECT :

     SELECT DEPTNO, DEPTNAME
        FROM DEPARTMENT X
        WHERE NOT EXISTS
                 (SELECT *
                     FROM PROJECT
                     WHERE DEPTNO = X.DEPTNO)
        ORDER BY DEPTNO

Il est possible de lier les prédicats EXISTS et NOT EXISTS à d'autres prédicats, en utilisant AND et OR dans la clause WHERE de la requête externe.

Prédicats quantifiés

Un prédicat quantifié compare une valeur à une collection de valeurs. Si une instruction FULLSELECT renvoie plusieurs valeurs, vous devez modifier les opérateurs de comparaison du prédicat, en ajoutant le suffixe ALL, ANY ou SOME. Ces suffixes déterminent le traitement dans le prédicat externe de l'ensemble de valeurs renvoyées. Nous prenons ci-dessous l'opérateur de comparaison > comme exemple, mais les remarques s'appliquent également aux autres opérateurs :

expression > ALL (FULLSELECT)
Le prédicat est vrai si l'expression est supérieure à chacune des valeurs renvoyées par l'instruction FULLSELECT. Si l'instruction FULLSELECT ne renvoie aucune valeur, le prédicat est vrai. Le résultat est faux si la relation précisée est fausse pour au moins une valeur. Notez que le prédicat quantifié <>ALL équivaut au prédicat NOT IN.

L'exemple suivant utilise une sous-requête et une comparaison avec > ALL pour rechercher les noms et les professions des employés gagnant plus que tous les directeurs :

     SELECT LASTNAME, JOB
        FROM EMPLOYEE
        WHERE SALARY > ALL
        (SELECT SALARY
            FROM EMPLOYEE
            WHERE JOB='MANAGER')

expression > ANY (FULLSELECT)
Le prédicat est vrai si l'expression est supérieure à au moins l'une des valeurs renvoyées par l'instruction FULLSELECT. Si l'instruction FULLSELECT ne renvoie aucune valeur, le prédicat est faux. Notez que l'opérateur quantifié =ANY équivaut au prédicat IN.

expression > SOME (FULLSELECT)
SOME est synonyme de ANY.

Pour de plus amples informations sur les prédicats et les opérateurs, consultez le document SQL Reference.


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]