Documentation PostgreSQL 8.0.25 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Chapitre 9. Fonctions et op�rateurs | Avance rapide | Suivant |
Cette section d�crit les expressions de sous-requ�tes compatibles SQL et disponibles avec PostgreSQL. Toutes les formes d'expressions document�es dans cette section renvoient des r�sultats bool�ens (true/false).
EXISTS ( sous-requ�te )
L'argument d'EXISTS est une instruction SELECT arbitraire ou une sous-requ�te. La sous-requ�te est �valu�e pour d�terminer si elle renvoie des lignes. Si elle en renvoie au moins une, le r�sultat d'EXISTS est vrai (<<�true�>>) ; si elle n'en renvoie aucune, le r�sultat d'EXISTS est faux (<<�false�>>).
La sous-requ�te peut faire r�f�rence � des variables de la requ�te englobante qui agiront comme des constantes lors d'une �valuation de la sous-requ�te.
La sous-requ�te sera ex�cut�e suffisamment pour d�terminer si une ligne est renvoy�e, donc pas obligatoirement compl�tement. Il est d�conseill� d'�crire une sous-requ�te qui a des effets de bord (tel que l'appel de fonctions de s�quence) ; que l'effet de bord se fasse ou non serait difficile � pr�dire.
Comme le r�sultat d�pend seulement du fait que des lignes sont renvoy�es et, donc, que le contenu des lignes importe peu, la liste de sortie de la sous-requ�te est normalement inint�ressant. Une convention de codage commune est l'�criture de tous les tests EXISTS dans la forme EXISTS(SELECT 1 WHERE ...). N�anmoins, il y a des exceptions � cette r�gle, exceptions comme des sous-requ�tes utilisant INTERSECT.
Ce simple exemple ressemble � une jointure interne sur col2 mais il produit au plus une ligne en sortie pour chaque ligne de tab1 m�me s'il y a plusieurs correspondances parmi les lignes de tab2 :
SELECT col1 FROM tab1 WHERE EXISTS(SELECT 1 FROM tab2 WHERE col2 = tab1.col2);
expression IN (sous-requ�te)
Le c�t� droit est une sous-expression entre parenth�ses qui retournera qu'une seule ligne. L'expression gauche est �valu�e et compar�e � chaque ligne du r�sultat de la sous-requ�te. Le r�sultat de IN est vrai (<<�true�>>) si une ligne �quivalente de la sous-requ�te est trouv�e. Le r�sultat est faux (<<�false�>>) si aucune ligne correspondante n'est trouv�e (ceci incluant le cas sp�cial o� la sous-requ�te ne renvoie aucune ligne).
Notez que si l'expression gauche est NULL ou s'il n'existe pas de correspondance avec les valeurs du c�t� droit et qu'au moins une ligne du c�t� droit est NULL, le r�sultat de la construction IN sera nul, et non pas faux. Ceci est en accord avec les r�gles normales du SQL pour les combinaisons bool�ennes des valeurs NULL.
Comme avec EXISTS, il n'est pas conseill� d'assumer que la sous-requ�te sera �valu�e compl�tement.
constructeur_ligne IN (sous-requ�te)
Le c�t� gauche de la forme IN est un constructeur de ligne comme d�crit dans Section 4.2.11. Le c�t� droit de la forme IN est une sous-requ�te entre parenth�ses qui doit renvoyer exactement autant de colonnes qu'il n'y a d'expressions dans le c�t� gauche. Les expressions c�t� gauche sont �valu�es et compar�es ligne par ligne au r�sultat de la sous-requ�te. Le r�sultat de IN est vrai (<<�true�>>) si une ligne �quivalente de la sous-requ�te est trouv�e. Le r�sultat est faux (<<�false�>>) si aucune ligne correspondante n'est trouv�e (ceci incluant le cas sp�cial o� la sous-requ�te ne renvoie aucune ligne).
Comme d'habitude, les valeurs NULL dans les lignes sont combin�es suivant les r�gles habituelles des expressions bool�ennes SQL. Deux lignes sont consid�r�es �gales si leurs membres correspondants sont non nuls et �gaux ; les lignes diff�rent si le contenu de leurs membres sont non nuls et diff�rents ; sinon le r�sultat de la comparaison de la ligne est inconnu, donc nul. Si tous les lignes r�sultantes sont soit diff�rentes soit NULL, avec au moins une NULL, alors le r�sultat de IN est nul.
constructeur_ligne NOT IN (sous-requ�te)
Le c�t� gauche de cette forme de NOT IN est un constructeur de lignes, comme d�crit dans Section 4.2.11. Le c�t� droit est une sous-requ�te entre parenth�ses qui doit renvoyer une colonne exactement. L'expression gauche est �valu�e et compar�e � chaque ligne du r�sultat de la sous-requ�te. Le r�sultat de NOT IN est vrai (<<�true�>>) si seules des lignes diff�rentes de la sous-requ�te sont trouv�es (ceci incluant le cas sp�cial o� la sous-requ�te ne renvoie aucune ligne). Le r�sultat est faux (<<�false�>>) si une ligne �gale est trouv�e.
Notez que si l'expression gauche renvoie un r�sultat nul ou s'il n'existe pas de valeurs du c�t� droit �gales et qu'au moins une ligne du c�t� droit renvoie nul, le r�sultat de la construction NOT IN sera nul, et non pas vrai. Ceci est en accord avec les r�gles standards du SQL pour les combinaisons bool�ennes de valeurs NULL.
Comme avec EXISTS, il n'est pas conseill� d'assumer que la sous-requ�te sera �valu�e compl�tement.
constructeur_ligne operator ANY (sous-requ�te) constructeur_ligne operator SOME (sous-requ�te)
Le c�t� droit de la forme ANY est un constructeur de lignes, comme d�crit dans Section 4.2.11. Le c�t� droit de cette forme de NOT IN est une sous-requ�te entre parenth�ses qui doit renvoyer exactement autant de colonnes qu'il n'y a d'expressions dans la ligne gauche. Les expressions du c�t� gauche sont �valu�es et compar�es ligne par ligne � chaque ligne du r�sultat de la sous-requ�te. Le r�sultat de NOT IN est vrai (<<�true�>>) si seules des lignes diff�rentes de la sous-requ�te sont trouv�es (ceci inclut le cas sp�cial o� la sous-requ�te ne renvoie aucune ligne). Le r�sultat est faux (<<�false�>>) si aucune ligne �gale n'est trouv�e.
Comme d'habitude, les valeurs NULL de la ligne sont combin�es suivant les r�gles standards du SQL sur les expressions bool�ennes. Deux lignes sont consid�r�es �gales si tous leurs membres correspondant sont non nuls et �gaux ; les lignes sont diff�rentes si un des membres correspondants est non nul et diff�rent ; sinon le r�sultat de cette comparaison de ligne est inconnu (nul). Si tous les r�sultats ligne sont soit diff�rents soit nuls, avec au moins un nul, alors le r�sultat de NOT IN est nul.
expression op�rateur ANY (sous-requ�te) expression op�rateur SOME (sous-requ�te)
Le c�t� droit est une sous-requ�te entre parenth�se qui ne doit retourner qu'une seule colonne. L'expression du c�t� gauche est �valu�e et compar�e � chaque ligne de la sous-requ�te en utilisant l'op�rateur indiqu� et rendant un r�sultat bool�en. Le r�sultat de ANY est vrai (<<�true�>>) si un r�sultat vrai est obtenu. Le r�sultat est faux (<<�false�>>) si aucun r�sultat vrai n'est trouv�e (ceci incluant le cas sp�cial o� la requ�te ne renvoie aucune ligne).
SOME est un synonyme de ANY. IN est �quivalent � = ANY.
Notez que sans succ�s et avec au moins une ligne NULL du c�t� droit pour le r�sultat de l'op�rateur, le r�sultat de la construction ANY sera nul et non pas faux. Ceci est en accord avec les r�gles standards SQL pour les combinaisons bool�enne de valeurs NULL.
Comme avec EXISTS, il n'est pas conseill� d'assumer que la sous-requ�te sera �valu�e compl�tement.
(expression [, expression ...]) op�rateur ANY (sous-requ�te) (expression [, expression ...]) op�rateur SOME (sous-requ�te)
Le c�t� droit de cette forme ANY est une sous-requ�te entre parenth�ses, qui doit renvoyer exactement autant de colonnes qu'il n'y a d'expressions dans la liste gauche. Les expressions du c�t� gauche sont �valu�es et compar�es ligne par ligne � chaque ligne du r�sultat de la sous-requ�te en utilisant l'op�rateur donn�. Actuellement, seuls les op�rateurs = et <> sont permis dans les constructions de ligne ANY. Le r�sultat de ANY est vrai (<<�true�>>) si une ligne est trouv�e. Le r�sultat est faux (<<�false�>>) si aucune ligne n'est trouv�e (ceci incluant le cas sp�cial o� la sous-requ�te ne renverrait aucune ligne).
Comme d'habitude, les valeurs NULL dans les lignes sont combin�es avec les r�gles standards des expressions bool�ennes en SQL. Deux lignes sont consid�r�es �gales si tous les membres correspondants sont non nuls et �gaux ; les lignes sont diff�rentes si un des membres est non nul et diff�rent ; sinon le r�sultat de cette comparaison de lignes est inconnu (donc nul). S'il y a au moins une ligne NULL, alors le r�sultat de ANY ne peut pas �tre faux (false) ; il sera vrai (true) ou nul.
expression op�rateur ALL (sous-requ�te)
Le c�t� droit est une sous-requ�te entre parenth�ses qui ne doit renvoyer qu'une seule colonne. L'expression gauche est �valu�e et compar�e � chaque ligne du r�sultat de la sous-requ�te en utilisant l'op�rateur qui doit renvoyer un r�sultat bool�en. Le r�sultat de ALL est vrai (<<�true�>>) si toutes les lignes renvoient true (ceci incluant le cas sp�cial o� la sous-requ�te ne renvoie aucune ligne). Le r�sultat est faux (<<�false�>>) si un r�sultat faux est d�couvert.
NOT IN est �quivalent � <> ALL.
Notez que s'il n'y a aucun �chec mais qu'au moins une ligne du c�t� droit renvoie une valeur NULL sur le r�sultat de l'op�rateur, le r�sultat de la construction ALL sera nul et non pas vrai. Ceci est en accord avec les r�gles standards du SQL pour les combinaisons bool�ennes de valeurs NULL.
Comme avec EXISTS, il est d�conseill� d'assumer que la sous-requ�te sera �valu�e compl�tement.
constructeur_ligne op�rateur ALL (sous-requ�te)
Le c�t� gauche de cette forme de ALL est un constructeur de lignes comme d�crit dans Section 4.2.11. Le c�t� droit de cette forme ALL est une sous-requ�te entre parenth�ses qui doit renvoyer exactement le m�me nombre de colonnes qu'il y a d'expressions dans la ligne gauche. Les expressions du c�t� gauche sont �valu�es et compar�es ligne par ligne � chaque ligne du r�sultat de la sous-requ�te en utilisant l'op�rateur donn�. Actuellement, seuls les op�rateurs = et <> sont autoris�es dans les requ�tes de ligne ALL. Le r�sultat de ALL est <<�true�>> si toutes les lignes de la sous-requ�te sont respectivement �gales ou diff�rentes (ceci incluant le cas sp�cial o� la sous-requ�te ne renvoie aucune ligne). Le r�sultat est faux (<<�false�>>) si une ligne se trouve �tre respectivement diff�rente ou �gale.
Comme d'habitude, les valeurs NULL des lignes sont combin�es avec les r�gles standards des expressions bool�ennes en SQL. Deux lignes sont consid�r�es �gales si tous les membres correspondants sont non nuls et �gaux ; les lignes sont diff�rentes si un membre est non nul ou diff�rent ; sinon le r�sultat de la comparaison de cette ligne est inconnue (nul). S'il y a au moins une ligne r�sultat NULL, alors le r�sultat de ALL ne peut pas �tre vrai (true) ; il sera faux (false) ou nul.
constructeur_ligne op�rateur (sous-requ�te)
Le c�t� gauche est un constructeur de lignes, comme d�crit dans Section 4.2.11. Le c�t� droit est une sous-requ�te entre parenth�ses qui doit renvoyer exactement autant de colonnes qu'il n'y a d'expressions su le c�t� gauche. De plus, la sous-requ�te ne peut pas renvoyer plus d'une ligne. (S'il ne renvoie aucune ligne, le r�sultat est pris comme s'il �tait nul.) Le c�t� gauche est �valu� et compar� avec la ligne du r�sultat de la sous-requ�te. Actuellement, seuls les op�rateurs = et <> sont autoris�s dans les comparaisons de lignes. Le r�sultat est vrai (<<�true�>>) si les deux lignes sont respectivement �gales ou diff�rentes.
Comme d'habitude, les valeurs NULL des lignes sont combin�es avec les r�gles standards des expressions bool�ennes SQL. Deux lignes sont consid�r�es �gales si tous les membres correspondants sont non nuls et �gaux ; les lignes sont diff�rentes si un membre correspondant est non nul et diff�rent ; sinon le r�sultat de la comparaison de la ligne est inconnu (nul).
Pr�c�dent | Sommaire | Suivant |
Fonctions d'agr�gat | Niveau sup�rieur | Comparaisons de lignes et de tableaux |