prédicat de base (basic predicate)

Un prédicat de base compare deux valeurs ou un ensemble de valeurs à un autre ensemble de valeurs.

Lire le diagramme de syntaxeIgnorer le diagramme de syntaxe graphiqueexpression =  <>  <  >  <=  >= expressionexpression-valeur-ligne =  <> expression-valeur-ligne(instruction FULLSELECT) =  <> expression-valeur-ligneexpression-valeur-ligne =  <> (instruction FULLSELECT)expression-booléenne
Remarque :

D'autres opérateurs de comparaison sont également pris en charge.1

Remarques

Lorsqu'une seule expression est spécifiée sur le côté gauche de l'opérateur, une autre expression doit être spécifiée sur le côté droit. Les types de données des expressions correspondantes doivent être compatibles. La valeur de l'expression sur le côté gauche est comparée à la valeur de l'expression sur le côté droit. Si la valeur de l'un des opérandes est null, le résultat du prédicat est inconnu. Sinon, le résultat est true ou false.

Lorsqu'une expression-valeur-ligne est spécifiée à gauche de l'opérateur (= ou < >) et qu'une autre expression-valeur-ligne est spécifiée à droite de l'opérateur, les deux expressions-valeur-ligne doivent avoir le même nombre d'expressions de valeur. Les types de données des expressions correspondantes de row-value-expressions doivent être compatibles. La valeur de chaque expression sur le côté gauche est comparée à la valeur de l'expression correspondante sur le côté droit.

Lorsqu'une expression row-value-expression est spécifiée et qu'une instruction fullselect est également spécifiée:

  • SELECT * n'est pas autorisé dans les listes de sélection externes de l'instruction fullselect.
  • La table de résultats de l'instruction fullselect doit comporter le même nombre de colonnes que l'expression row-value-expression. Les types de données des expressions correspondantes de l'expression row-value-expression et de l'instruction fullselect doivent être compatibles. La valeur de chaque expression sur le côté gauche est comparée à la valeur de l'expression correspondante sur le côté droit.

Le résultat du prédicat dépend de l'opérateur:

  • Si l'opérateur est =, le résultat du prédicat est:
    • True si toutes les paires d'expressions de valeur correspondantes ont pour résultat true.
    • False si une paire d'expressions de valeur correspondantes est évaluée à false.
    • Sinon, inconnu (c'est-à-dire si au moins une comparaison des expressions de valeur correspondantes est inconnue en raison d'une valeur nulle et qu'aucune paire d'expressions de valeur correspondantes n'a pour résultat false).
  • Si l'opérateur est < >, le résultat du prédicat est:
    • True si une paire d'expressions de valeur correspondantes est évaluée à false.
    • False si toutes les paires d'expressions de valeur correspondantes ont pour résultat true.
    • Sinon, inconnu (c'est-à-dire si au moins une comparaison des expressions de valeur correspondantes est inconnue en raison d'une valeur nulle et qu'aucune paire d'expressions de valeur correspondantes n'est évaluée à true).

Si les opérandes correspondants du prédicat sont des données SBCS, des données mixtes ou des données Unicode, et si la séquence de classement en vigueur au moment de l'exécution de l'instruction n'est pas *HEX, la comparaison des opérandes est effectuée à l'aide de valeurs pondérées pour les opérandes. Les valeurs pondérées sont basées sur la séquence de classement.

Pour les valeurs x et y:

Prédicat Est vrai si et seulement si ...
x = y x est égal à y
x <> y x n'est pas égal à y
x < y x est inférieur à y
x > y x est supérieur à y
x >= y x est supérieur ou égal à y
x <= y x est inférieur ou égal à y

Exemples

Exemple 1: Quatre exemples de prédicats de comparaison.

  EMPNO = '528671'

  PRTSTAFF <> :VAR1

  SALARY + BONUS + COMM < 20000

  SALARY > (SELECT AVG(SALARY) 
            FROM EMPLOYEE)

Exemple 2: Liste du nom, du prénom et du salaire de l'employé responsable du projet'OP1000'.

  SELECT  LASTNAME, FIRSTNME, SALARY
    FROM  EMPLOYEE X
    WHERE  EMPNO = ( SELECT  RESPEMP
                       FROM PROJA1 Y
                       WHERE MAJPROJ = 'OP1000' )
1 Les formes suivantes des opérateurs de comparaison sont également prises en charge dans les prédicats de base et quantifiés: ! =, ! <, ! >, ¬ =, ¬ < et ¬ > sont prises en charge. Toutes ces formes spécifiques au produit des opérateurs de comparaison sont destinées uniquement à prendre en charge les instructions SQL existantes qui utilisent ces opérateurs et ne sont pas recommandées pour l'écriture de nouvelles instructions SQL.

Certains claviers doivent utiliser les valeurs hexadécimales pour le symbole not (¬). La valeur hexadécimale varie et dépend du clavier utilisé. Un signe non (¬) ou le caractère qui doit être utilisé à sa place dans certains pays ou régions peut provoquer des erreurs d'analyse syntaxique dans les instructions transmises d'un serveur de base de données à un autre. Le problème se produit si l'instruction subit une conversion de caractères avec certaines combinaisons de CCSID source et cible. Pour éviter ce problème, remplacez un opérateur équivalent par un opérateur comportant un signe non. Par exemple, remplacez'< >'par'¬ =','< ='par'¬ >'et'> ='par'¬ <'.