PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEV, WEBDEV ET WINDEV MOBILE

  • Présentation
  • WHERE
  • GROUP BY
  • GROUP BY avec paramètres
  • HAVING
  • LIMIT
  • AND / OR
  • BETWEEN
  • IN
  • IS NULL
  • LIKE
  • NOT
  • XOR
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadApple WatchUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
Présentation
Pour spécifier des conditions de sélection dans une requête SQL, il est possible d'utiliser :
Des clauses SQL :
Des opérateurs SQL :
Pour plus de détails sur le langage SQL, consultez une documentation spécifique au langage SQL.
Pour connaître toutes les commandes SQL (fonctions, clauses, opérateurs, ...) utilisables dans une requête SQL, consultez Commandes SQL disponibles dans une requête SQL.
Remarques :
  • Ces clauses et ces opérateurs sont utilisables :
    • dans le code SQL des requêtes créées sous l'éditeur de requêtes. Ces requêtes sont ensuite exécutées grâce à la fonction HExécuteRequête.
    • dans le code SQL des requêtes exécutées avec la fonction du WLangage HExécuteRequêteSQL.
  • Sauf indication contraire, ces clauses et ces opérateurs sont utilisables sur tous les types de sources de données (Oracle, Access, SQL Server, ...).

WHERE

La clause WHERE permet de spécifier la ou les conditions de sélection.
Format d'utilisation :
WHERE ConditionSélection
Exemple : Le code SQL suivant permet de sélectionner le client "Montgomery" :
SELECT *
FROM CLIENT
WHERE CLIENT.NomClient = 'Montgomery'
Remarque : Si plusieurs conditions sont spécifiées, utilisez les opérateurs AND et/ou OR pour relier ces conditions.

GROUP BY

La clause GROUP BY permet de classer une sélection d'enregistrements par groupe.
Dans une instruction SELECT, la clause GROUP BY vient après la clause WHERE et précède la clause ORDER BY.
Pour spécifier des conditions sur des groupes d'enregistrements générés par la clause GROUP BY, utilisez la clause HAVING.
Format d'utilisation :
WHERE ConditionsSélection
GROUP BY NomDesRubriques
Exemple : Le code SQL suivant permet de visualiser la somme totale des commandes par client. Le résultat sera regroupé par nom du client et par ville :
SELECT CLIENT.NomClient,
CLIENT.Ville,
SUM(COMMANDE.TotalTTC) AS TotalTTC
FROM CLIENT, COMMANDE
WHERE CLIENT.NumClient = COMMANDE.NumClient
GROUP BY NomClient, Ville
Versions 22 et supérieures

GROUP BY avec paramètres

La clause GROUP BY accepte de recevoir des valeurs en paramètre. Cette notion est très utile dans la cas où la clause GROUP BY est basée sur une formule et qu'un des éléments de la formule est une variable.
Exemple de code SQL
SELECT
SUM(Fic1.Rub1) AS Somme1,
Fic2.Rubr1 * {ParamReq} AS Formule1,
Fic2.Rubr2 AS Rub2
FROM
Fic1, Fic2
WHERE
Fic1.Cle1 = Fic2.Cle1
GROUP BY
Fic2.Rubr1 * {ParamReq},
Fic2.Rubr2
Exemple de code d'appel de la requête
Req1.ParamReq = valeur
HExécuteRequête(Req1)
Nouveauté 22

GROUP BY avec paramètres

La clause GROUP BY accepte de recevoir des valeurs en paramètre. Cette notion est très utile dans la cas où la clause GROUP BY est basée sur une formule et qu'un des éléments de la formule est une variable.
Exemple de code SQL
SELECT
SUM(Fic1.Rub1) AS Somme1,
Fic2.Rubr1 * {ParamReq} AS Formule1,
Fic2.Rubr2 AS Rub2
FROM
Fic1, Fic2
WHERE
Fic1.Cle1 = Fic2.Cle1
GROUP BY
Fic2.Rubr1 * {ParamReq},
Fic2.Rubr2
Exemple de code d'appel de la requête
Req1.ParamReq = valeur
HExécuteRequête(Req1)

GROUP BY avec paramètres

La clause GROUP BY accepte de recevoir des valeurs en paramètre. Cette notion est très utile dans la cas où la clause GROUP BY est basée sur une formule et qu'un des éléments de la formule est une variable.
Exemple de code SQL
SELECT
SUM(Fic1.Rub1) AS Somme1,
Fic2.Rubr1 * {ParamReq} AS Formule1,
Fic2.Rubr2 AS Rub2
FROM
Fic1, Fic2
WHERE
Fic1.Cle1 = Fic2.Cle1
GROUP BY
Fic2.Rubr1 * {ParamReq},
Fic2.Rubr2
Exemple de code d'appel de la requête
Req1.ParamReq = valeur
HExécuteRequête(Req1)

HAVING

La clause HAVING permet de spécifier une ou plusieurs conditions sur des groupes d'enregistrements générés par la clause GROUP BY.
Dans une instruction SELECT, la clause HAVING vient après la clause GROUP BY et précède la clause ORDER BY.
Format d'utilisation :
WHERE ConditionsSélection
GROUP BY NomDesRubriques HAVING ConditionsGroupes
Exemple : Le code SQL suivant permet de visualiser la somme totale des commandes par client. Le résultat sera regroupé par nom du client et par ville. Seuls les clients ayant un cumul des commandes supérieur à 3000 Euros seront conservés :
SELECT CLIENT.NomClient, CLIENT.Ville,
SUM(COMMANDE.TotalTTC) AS TotalTTC
FROM CLIENT, COMMANDE
WHERE CLIENT.NumClient = COMMANDE.NumClient
GROUP BY NomClient, Ville
HAVING TotalTTC > 3000

LIMIT

La clause LIMIT permet de limiter le nombre d'enregistrements retournés.
Dans une instruction SELECT, la clause LIMIT vient après les clauses GROUP BY, HAVING et ORDER BY.
Format d'utilisation :
WHERE ConditionsSélection
GROUP BY NomDesRubriques HAVING ConditionsGroupes
LIMIT [Début,] NombredeLignes
WHERE ConditionsSélection
GROUP BY NomDesRubriques HAVING ConditionsGroupes
LIMIT NombredeLignes OFFSET Début
La clause LIMIT accepte un ou deux arguments numériques. Ces arguments doivent être des entiers constants.
Avec un argument (NombredeLignes), la valeur spécifie le nombre de lignes à retourner depuis le début du jeu de résultat.
Si deux arguments sont donnés, le premier indique le décalage du premier enregistrement à retourner (à partir de) et le second donne le nombre maximum d'enregistrements à retourner. Le décalage du premier enregistrement est 0.
Remarque : LIMIT x est équivalent à LIMIT 0,x ou encore TOP x.
Exemple : Modification dynamique de la condition LIMIT d'une requête SQL
REQ est une Source de Données
sMaReq est une chaîne = [
SELECT * FROM
CODEPOSTAUX
%1
]

sMaReq = ChaîneConstruit(sMaReq, "LIMIT 1, 10")
SI PAS HExécuteRequêteSQL(REQ, hRequêteDéfaut, sMaReq) ALORS
Erreur(HErreurInfo())
SINON
Info("La requête contient " + HNbEnr(REQ) + " enregistrements.")
FIN

AND / OR

La clause WHERE peut comporter plusieurs conditions. Dans ce cas, les conditions sont reliées grâce aux opérateurs AND et/ou OR.
Format d'utilisation :
ConditionSélectionN AND/OR ConditionsSélectionN+1
Exemple :
  • Le code SQL suivant permet de lister les clients hommes habitant en Côte d'Or (21) :
    SELECT CLIENT.NomClient
    FROM CLIENT
    WHERE CLIENT.Civilite LIKE 'Mr%'
    AND CLIENT.CodePostal LIKE '21%'
  • Le code SQL suivant permet de lister à la fois :
    • les clients hommes (peu importe où ils habitent).
    • les clients (hommes et femmes) habitant en Côte d'Or (21).
      SELECT CLIENT.NomClient
      FROM CLIENT
      WHERE CLIENT.Civilite LIKE 'Mr%'
      OR CLIENT.CodePostal LIKE '21%'
Remarque : L'opérateur SQL AND est également utilisé avec l'opérateur BETWEEN.

BETWEEN

L'opérateur BETWEEN permet de sélectionner des enregistrements dont la valeur d'une rubrique appartient à une plage de valeurs. Les bornes sont incluses dans le résultat.
Format d'utilisation :
WHERE NomRubrique BETWEEN ValeurMinimale AND ValeurMaximale
Exemple : Le code SQL suivant permet de lister les commandes passées entre le 01/01/2012 et le 01/07/2012 (les dates sont incluses dans le résultat) :
SELECT COMMANDE.NumCommande
FROM COMMANDE
WHERE COMMANDE.DateCommande BETWEEN '20120101' AND '20120701'
Remarque : Pour sélectionner les enregistrements n'appartenant pas à cette plage de valeurs, utilisez l'opérateur NOT.

IN

L'opérateur IN permet de sélectionner des enregistrements dont les valeurs correspondent à une liste de valeurs spécifiée.
Format d'utilisation :
WHERE NomRubrique IN (Valeur1, Valeur2, ..., ValeurN)
Exemple : Le code SQL suivant permet de lister les clients habitant Montpellier, Avignon ou Marseille :
SELECT CLIENT.NomClient
FROM CLIENT
WHERE CLIENT.Ville IN ('Montpellier', 'Avignon', 'Marseille')
Exemple : Le code suivant permet de lister les clients habitant Montpellier, Avignon ou Marseille avec une requête du projet :
// La requête REQ_ListeClientVille du projet correspond au code :
// SELECT * FROM CLIENT WHERE CLIENT.Ville IN ({ParamListeVille})
REQ_ListeClientVille.ParamListeVille = "'Montpellier';'Avignon';'Marseille'"
// ou REQ_ListeClientVille.ParamListeVille = "Montpellier;Avignon;Marseille"
HExécuteRequête(REQ_ListeClientVille)
Info(HNbEnr(REQ_ListeClientVille) + " Clients dans les villes sélectionnées.")
Remarques :
  • Pour sélectionner les enregistrements dont les valeurs n'appartiennent pas à cette liste de valeurs, utilisez l'opérateur NOT.
  • Les valeurs spécifiées peuvent correspondre à un paramètre (variable, nom de champ, ...). Dans ce cas, les différentes valeurs contenues dans ce paramètre doivent être séparées par un point-virgule (';'), un retour-chariot ('RC') ou une tabulation ('TAB').

IS NULL

L'opérateur IS NULL permet de sélectionner des enregistrements dont la valeur d'une rubrique est nulle.
Format d'utilisation :
WHERE NomRubrique IS NULL
Exemple : Le code SQL suivant permet de sélectionner les produits n'appartenant pas à une famille de produits :
SELECT PRODUIT.NomProduit
FROM PRODUIT
WHERE PRODUIT.Famille IS NULL
Remarque : Pour sélectionner les enregistrements dont la valeur d'une rubrique est différente de nulle, utilisez l'opérateur NOT.

LIKE

L'opérateur LIKE permet de sélectionner des enregistrements dont la valeur d'une rubrique correspond à une valeur spécifiée (avec des caractères génériques).
Les caractères génériques autorisés sont les suivants :
  • '%' : représente zéro, un ou plusieurs caractères.
  • '_' : représente un caractère unique.
Ces caractères génériques peuvent être combinés.
Format d'utilisation :
WHERE NomRubrique LIKE Valeur
Exemples :
  • Le code SQL suivant permet de sélectionner les clients dont le nom commence par la lettre 'A' :
    SELECT CLIENT.NomClient
    FROM CLIENT
    WHERE CLIENT.NomClient LIKE 'A%'
  • Le code SQL suivant permet de sélectionner les clients dont le nom commence par la lettre 'A' et contient au moins 4 caractères :
    SELECT CLIENT.NomClient
    FROM CLIENT
    WHERE CLIENT.NomClient LIKE 'A___%'
  • Le code SQL suivant permet de sélectionner les clients dont le nom contient la lettre 'A' :
    SELECT CLIENT.NomClient
    FROM CLIENT
    WHERE CLIENT.NomClient LIKE '%A%'
  • Le code SQL suivant permet de sélectionner les clients dont le nom finit par la lettre 'A' :
    SELECT CLIENT.NomClient
    FROM CLIENT
    WHERE CLIENT.NomClient LIKE '%A'
Remarque : Pour sélectionner les enregistrements dont la valeur d'une rubrique est différente de cette valeur spécifiée, utilisez l'opérateur NOT.
Utilisation des index dans les fichiers HFSQL
L'index est utilisé si :
  • la valeur recherchée ne contient pas de caractères génériques (caractère '%' ou '_').
  • la valeur recherchée contient un seul '%' situé en dernière position et pas d'autres caractères génériques (recherche de type "commence par").
Dans tous les autres cas, les index ne sont pas utilisés.
Note: Il n'y a pas de différences entre LIKE et NOT LIKE
Recherche des caractères _ et \ dans un LIKE :
Si vous voulez rechercher les caractères '_' ou '\', ces caractères doivent être précédés du caractère d'échappement. Par défaut ce caractère est '\'. Il peut être redéfini en utilisant le mot-clé ESCAPE juste après la clause LIKE.
Exemples :
  • Recherche des chaînes contenant "_1\" : LIKE '%\_1\\%'
  • Recherche des chaînes contenant "_1\" en redéfinissant le caractère d'échappement par @ : LIKE '%@_1@\%' ESCAPE '@'
Sensibilité
La sensibilité (à la casse, aux accentuations, à la ponctuation, aux caractères spéciaux) appliquée correspond à la sensibilité de la clé utilisée.
Si la rubrique utilisée n'est pas une rubrique clé ou que l'opérateur n'utilise pas d'index, la comparaison sera insensible à la casse, aux accentuations.
Si la rubrique utilisée correspond à une concaténation de rubriques, la comparaison sera :
  • insensible à la casse si au moins une des rubriques concaténées est insensible à la casse.
  • insensible aux accentuations si au moins une des rubriques concaténées est insensible aux accentuations.
  • insensible à la ponctuation si au moins une des rubriques concaténées est insensible à la ponctuation.
  • insensible aux caractères spéciaux si au moins une des rubriques concaténées est insensible aux caractères spéciaux.

NOT

L'opérateur NOT inverse la signification de l'opérateur logique utilisé :
  • NOT BETWEEN : sélectionne les enregistrements dont la valeur d'une rubrique n'appartient pas à une plage de valeurs.
  • NOT IN : sélectionne les enregistrements dont les valeurs sont différentes d'une liste de valeurs spécifiée.
  • NOT LIKE : sélectionne les enregistrements dont la valeur d'une rubrique est différente d'une valeur spécifiée (avec des caractères génériques).
  • IS NOT NULL : sélectionne les enregistrements dont la valeur d'une rubrique est différente de la valeur nulle.
Versions 16 et supérieures

XOR

L'opérateur XOR correspond au OU exclusif logique.
  • Si l'un des opérandes correspond à la valeur nulle, cet opérateur retourne NULL.
  • Pour les opérandes non nuls, cet opérateur renvoie 1 pour un nombre pair d'opérandes non nuls et 0 dans les autres cas.
Format d'utilisation :
WHERE Opérande1 XOR Opérande2
Nouveauté 16

XOR

L'opérateur XOR correspond au OU exclusif logique.
  • Si l'un des opérandes correspond à la valeur nulle, cet opérateur retourne NULL.
  • Pour les opérandes non nuls, cet opérateur renvoie 1 pour un nombre pair d'opérandes non nuls et 0 dans les autres cas.
Format d'utilisation :
WHERE Opérande1 XOR Opérande2

XOR

L'opérateur XOR correspond au OU exclusif logique.
  • Si l'un des opérandes correspond à la valeur nulle, cet opérateur retourne NULL.
  • Pour les opérandes non nuls, cet opérateur renvoie 1 pour un nombre pair d'opérandes non nuls et 0 dans les autres cas.
Format d'utilisation :
WHERE Opérande1 XOR Opérande2
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire