FirebirdSQL logo
 Types de donnéesLanguage de définition des données (DDL) 

Sous-requêtes retournant un résultat scalaire

Les Sous-requêtes utilisées dans les prédicats de recherche, à l’exception des prédicats d’existence et de quantité, doivent retourner un résultat scalaire, c’est-à-dire pas plus d’une colonne d’une seule ligne sélectionnée ou une valeur agrégée, sinon une erreur d’exécution (“Multiple rows in a singleton select…​”) se produira.

Note

Bien que Firebird signale une erreur réelle, le message peut être légèrement trompeur.“singleton SELECT” est une requête qui ne doit pas retourner plus d’une chaîne.Cependant, singleton et scalar ne sont pas synonymes : tous les SELECTS à un seul élément ne doivent pas être scalaires ; et un échantillonnage à une seule colonne peut retourner plusieurs lignes pour les prédicats d’existence et de quantité.

Example 1. Sous-requête comme colonne de sortie dans la liste de sélection
SELECT
    e.first_name,
    e.last_name,
    (SELECT
         sh.new_salary
     FROM
         salary_history sh
     WHERE
         sh.emp_no = e.emp_no
     ORDER BY sh.change_date DESC ROWS 1) AS last_salary
FROM
    employee e
Example 2. Sous-requête dans une instruction WHERE pour obtenir la valeur du salaire maximum de l’employé et filtrer par celle-ci.
SELECT
    e.first_name,
    e.last_name,
    e.salary
FROM
    employee e
WHERE
    e.salary = (SELECT
                    MAX(ie.salary)
                FROM
                    employee ie)

Prédicats

Prédicat — est une simple expression affirmant un certain fait, appelons-le P.Si P est résolu comme VRAI, il réussit.S’il prend FALSE ou NULL (UNKNOWN), il échoue.Cependant, il y a un piège ici : supposons que le prédicat P renvoie FALSE.Dans ce cas, NOT (P) retournera VRAI.D’autre part, si P renvoie NULL (inconnu), alors NOT (P) renvoie également NULL.

En SQL, les prédicats sont vérifiés dans la contrainte CHECK, la clause WHERE, la clause CASE, la condition de jointure dans la phrase ON pour les phrases JOIN, et dans la clause HAVING.Dans PSQL, les opérateurs de contrôle du flux d’exécution vérifient les prédicats dans les phrases IF, WHILE et WHEN. Depuis que Firebird 3.0 a introduit le support des types logiques, le prédicat peut apparaître dans n’importe quelle expression valide.