Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Condition IN
UnINLa condition teste l'appartenance d'une valeur à un ensemble de valeurs ou à une sous-requête.
Syntaxe
expression [ NOT ] IN (expr_list | table_subquery)
Arguments
- expression
-
Une expression de type numeric, character ou datetime évaluée par rapport à expr_list ou table_subquery et qui doit être compatible avec le type de données de cette liste ou sous-requête.
- expr_list
-
Une ou plusieurs expressions délimitées par des virgules, ou un ou plusieurs ensembles d'expressions délimitées par des virgules et entourées par des parenthèses.
- table_subquery
-
Une sous-requête qui correspond à une table avec une ou plusieurs lignes, mais est limitée à une seule colonne dans la liste de sélection.
- IN | NOT IN
-
IN retourne la valeur true si l'expression est membre de la liste d'expressions ou de la requête. NOT IN retourne la valeur true si l'expression n'est pas membre. IN et NOT IN retournent la valeur NULL et aucune ligne n'est retournée dans les cas suivants : si expression génère null, s'il n'y a aucune expr_list correspondante ou si les valeurs de table_subquery et au moins l'une de ces lignes de comparaison entraînent une valeur null.
Exemples
Les conditions suivantes sont vraies uniquement pour les valeurs répertoriées :
qtysold in (2, 4, 5) date.day in ('Mon', 'Tues') date.month not in ('Oct', 'Nov', 'Dec')
Optimisation pour les grandes listes IN
Afin d'optimiser les performances des requêtes, une liste IN qui inclut plus de 10 valeurs est analysée en interne comme un ensemble (array) scalaire. Les listes IN avec moins de 10 valeurs sont évaluées comme une série de prédicats OR. Cette optimisation est prise en charge pour les types de données SMALLINT, INTEGER, BIGINT, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE, TIMESTAMP et TIMESTAMPTZ.
Examinez la sortie EXPLAIN de la requête pour voir l'effet de cette optimisation. Par exemple :
explain select * from sales QUERY PLAN -------------------------------------------------------------------- XN Seq Scan on sales (cost=0.00..6035.96 rows=86228 width=53) Filter: (salesid = ANY ('{1,2,3,4,5,6,7,8,9,10,11}'::integer[])) (2 rows)