Clauses WHERE et ORDER BY
Cette rubrique explique comment utiliser les clauses WHERE et ORDER BY pour filtrer et trier les données d’une base de données, respectivement. Les clauses WHERE et ORDER BY doivent être saisies dans le dialogue Propriétés SQL/NoSQL-WHERE/ORDER.
WHERE
Pour rédiger une clause WHERE, utilisez la syntaxe du dialecte SQL de la base de données correspondante. Par exemple, vous pouvez utiliser des opérateurs, des caractères génériques, ainsi que des sous-requêtes et des fonctions d’agrégation dans les sous-requêtes. Pour créer un paramètre que vous pouvez transmettre à partir du mappage, saisissez un deux-points (:) suivi du nom du paramètre.
ORDER BY
Pour rédiger une clause ORDER BY, spécifiez un ou plusieurs champs selon lesquels effectuer le tri et ajoutez, si vous le souhaitez, un mot-clé ASC ou DESC. Si vous ne spécifiez pas de mot-clé, les données sont triées par défaut dans l'ordre croissant.
Lorsque vous avez terminé de rédiger vos clauses et que vous cliquez sur OK, MapForce vérifie que l’instruction ne contient pas d’erreurs de syntaxe.
Opérateurs
La table ci-dessous recense certains des opérateurs typiques qui peuvent être utilisés dans la clause WHERE :
Opérateur | Description |
|---|---|
= | Égal à |
<> | N'est pas égal à |
< | Inférieur à |
> | Supérieur à |
>= | Supérieur ou égal à |
<= | Inférieur ou égal à |
IN | Compare une valeur à une liste de valeurs spécifiée |
LIKE | Compare une valeur à un motif spécifié |
BETWEEN | Vérifie si une valeur se situe dans un intervalle spécifié |
Utilise le caractère générique % (pourcentage) pour représenter tout nombre de caractères dans un motif. Par exemple, pour extraire tous les enregistrements se terminant par "r" d'un champ appelé lastname, utilisez l'expression suivante :
lastname LIKE "%r" |
Lorsque vous travaillez avec des bases de données prenant en charge le stockage et l'interrogation de données XML (par exemple, IBM DB2, Oracle et SQL Server), vous pouvez utiliser les fonctions et mots-clés XML propres à cette base de données. Par exemple :
xmlexists('$c/Client/Address[zip>"55116"]' passing USER.CLIENTS.CONTACTINFO AS "c") |
Voir aussi Exemple : Extraire des données depuis les colonnes IBM DB2 de type XML.
Si vous le souhaitez, pour trier l'ensemble de données récupéré selon un champ particulier, ajoutez une clause ORDER BY dans la zone de texte correspondante du dialogue Propriétés SQL/NoSQL-WHERE/ORDER. Pour trier selon plusieurs champs, séparez les noms de champs par des virgules. Pour modifier l’ordre de tri, utilisez les mots-clés ASC et DESC. Par exemple, la clause ORDER BY suivante récupère les enregistrements triés par lastname et firstname, tous deux par ordre décroissant :
lastname DESC, firstname DESC |
Sélection de lignes distinctes dans une base de données
Une requête peut renvoyer des lignes en double, en fonction des champs sélectionnés et des données sous-jacentes. Pour que la base de données ne renvoie que des lignes uniques, cochez la case Sélectionner uniquement les lignes distinctes dans le composant WHERE/ORDER (capture d’écran ci-dessous). Cela ajoute la clause DISTINCT à l’instruction SELECT et oblige le serveur de base de données à filtrer les lignes en double.

Filtrer des données dans Azure CosmosDB (Enterprise Edition)
Si le nom d’un conteneur dans votre CosmosDB a un caractère spécial (par ex., +, -, @, etc.) ou s’il est un mot-clé, ce nom ne pourra pas être utilisé dans les files d’attente, et vous recevrez une erreur de syntaxe depuis la base de données. Pour éviter de tels problèmes potentiels, MapForce utilise la syntaxe suivante pour les requêtes de CosmosBD :
SELECT * FROM ROOT AS c WHERE c.<field> ORDER BY c.<field>
Le mot-clé ROOT dans la clause FROM référence le conteneur actuel que vous requêtez. Depuis que le mot-clé ROOT ne peut pas être utilisé dans les champs d’adresse des clauses WHERE et ORDER BY, le conteneur est dénommé par un nom alias c qui est attribué au conteneur par le mot-clé AS. Attribuer des noms d’alias au conteneur permet de filtrer et trier les contenus du conteneur.
Notez que dans le dialogue WHERE/ORDER, toutes les références de champ doivent être préfixées avec le nom alias du conteneur c (voir l’exemple ci-dessous).
SELECT * FROM ROOT AS c WHERE c.age > 20 ORDER BY c.name
Exemples
Exemple 1
La clause WHERE suivante est définie pour la table users de la base de données Nanonull.sqlite. Elle récupère les enregistrements pour lesquels les valeurs de last_name sont supérieures à M, conformément aux règles de comparaison des chaînes de caractères de la base de données.
last_name > "M" |

Exemple 2
La clause WHERE suivante crée un paramètre Name. Ce paramètre apparaît dans le composant WHERE/ORDER du mappage.
last_name LIKE :Name |

La constante M% fournit la valeur de Name. Le caractère générique % représente un nombre quelconque de caractères. Le mappage récupère ainsi tous les noms de famille commençant par la lettre M.
Exemple 3
La clause WHERE suivante crée deux paramètres, min et max, auxquels sont comparées les valeurs de quantity. Les valeurs min et max sont fournies par deux constantes dans le mappage.
quantity > :min AND quantity < :max |

La condition ci-dessus n’inclut pas les enregistrements pour lesquels la quantité quantity est égale à la valeur de min ou de max. Pour inclure les valeurs limites (10 et 100), utilisez l’opérateur BETWEEN :
quantity BETWEEN :min AND :max |