SELECT

4D - Documentation   Français   English   German   Japanese   Manuel de référence SQL 4D, Sommaire   Manuel de référence SQL 4D, Index   Retour   Précédent   Suivant

version 11.3 (Modifiée)


SELECT [ALL | DISTINCT]

{* | select_élément, ..., select_élément}

FROM ref_table, ..., ref_table

[WHERE critère_recherche]

[ORDER BY liste_tri]

[GROUP BY liste_tri]

[HAVING critère_recherche]

[OFFSET ref_langage_4d |nombre_entier ]

[LIMIT {ref_langage_4d |nombre_entier | ALL}]

[INTO {ref_langage_4d, ..., ref_langage_4d| LISTBOX ref_langage_4d}]

[FOR UPDATE]

Description

La commande SELECT permet de récupérer des données stockées dans une ou plusieurs table(s).

Si vous passez le paramètre *, toutes les colonnes seront retournées ; ou bien, vous pouvez passer un ou plusieurs paramètre(s) de type select_élément pour spécifier individuellement chaque colonne à sélectionner (les colonnes doivent être séparées par des virgules). Si vous ajoutez le mot-clé facultatif DISTINCT à l'instruction SELECT, les valeurs dupliquées ne seront pas retournées.

Il n'est pas possible d'exécuter des requêtes contenant à la fois le "*" et des champs explicites. Par exemple, l'instruction suivante :

SELECT *, SALES, TARGET FROM OFFICES

... n'est pas autorisée, tandis que :

SELECT * FROM OFFICES

... est valide.

La clause FROM doit être suivie d'un ou plusieurs argument(s) de type ref_table permettant de désigner la ou les table(s) contenant les données à sélectionner. Vous pouvez passer comme argument soit un nom SQL standard soit une chaîne. Il n'est pas possible de passer d'expression de type requête à la place d'un nom de table.

Facultativement, vous pouvez passer le mot-clé AS afin d'affecter un alias à la colonne. Si ce mot-clé est passé, il doit être suivi du nom de l'alias qui peut également être soit un nom SQL standard soit une chaîne.

Toutes les clauses suivantes sont facultatives.

La clause WHERE définit des conditions que les valeurs doivent satisfaire pour être sélectionnées. Pour cela, passez un critère_recherche qui sera appliqué aux données récupérées par la clause FROM. L'expression critère_recherche retourne toujours une valeur de type booléen.

La clause ORDER BY peut être utilisée afin d'indiquer que les données sélectionnées doivent être triées en fonction des valeurs de la liste_tri. Vous pouvez ajouter le mot-clé ASC ou DESC afin de définir si le tri doit être ascendant ou descendant. Par défaut, le tri est ascendant.

La clause GROUP BY peut être utilisée afin de demander le regroupement des données identiques en fonction des valeurs de la liste_tri. passée en argument. Vous pouvez passer des colonnes de groupes multiples. Cette clause permet généralement d'éviter les redondances ou de traiter une fonction d'agrégation (SUM, COUNT, MIN ou MAX) qui sera appliquée à ces groupes. Vous pouvez également ajouter le mot-clé ASC ou DESC comme avec la clause ORDER BY.

La clause HAVING peut être utilisée afin d'appliquer un critère_recherche à l'un des groupes. La clause HAVING peut être utilisée sans la clause GROUP BY.

La clause OFFSET permet de définir un nombre (variable ref_langage_4d ou nombre_entier) de valeurs à ignorer avant de débuter le décompte pour l'application de la clause LIMIT.

La clause LIMIT permet de restreindre le nombre de données sélectionnées à la quantité définie par la variable ref_langage_4d ou le nombre_entier.

La clause INTO permet de désigner des variables ref_langage_4d auxquelles les données sélectionnées seront affectées. Vous pouvez également passer le mot-clé LISTBOX afin de placer les données dans la list box désignée par le paramètre ref_langage_4d.

Une instruction SELECT comportant la clause FOR UPDATE tentera de verrouiller en écriture tous les enregistrements sélectionnés. Si un enregistrement au moins ne peut pas être verrouillé, l'ensemble de la commande échouera et une erreur sera retournée. Dans le cas contraire, les enregistrements resteront verrouillés jusqu'à ce que la transaction courante soit validée ou annulée.

Exemples

1. Imaginons une base de données de films contenant une table qui, pour chaque film, stocke le titre, l'année de sortie et le nombre d'entrées vendues.

Nous voulons sélectionner les années depuis 1979 ainsi que le nombre d'entrées pour les films ayant fait moins de 10 millions d'entrées. Nous souhaitons ignorer les 5 premières années et afficher uniquement 10 années, classées par ordre croissant.

   C_ENTIER LONG($AnneeFilm;$EntreesMin;$Depart;$Limite)
   TABLEAU ENTIER(tAnneeFilm;0)
   TABLEAU ENTIER LONG(tEntreesMin;0)
   $AnneeFilm:=1979
   $EntreesMin:=10000000
   $Depart:=5
   $Limite:=10

   Debut SQL
      SELECT Annee_Film, SUM(Entrees)
      FROM FILMS
      WHERE Annee_Film >= :$AnneeFilm
      GROUP BY Annee_Film
      HAVING SUM(Entrees) < :$EntreesMin
      OFFSET :$Depart
      LIMIT :$Limite
      ORDER BY 1
      INTO :tAnneeFilm, :tEntreesMin;
   Fin SQL

2. Cet exemple utilise une combinaison de critères de recherches :

   SELECT id_fournisseurs
   FROM fournisseurs
   WHERE (nom= 'CANON')
      OR (nom= 'Hewlett Packard' AND city = 'New York')
      OR (nom= 'Firewall' AND status = 'Closed' AND city = 'Chicago');

3. Soit la table COMMERCIAUX où QUOTA est le montant des ventes prévu pour le commercial et VENTES le montant des ventes effectivement réalisé.

   TABLEAU REEL(tValeurs_Min;0)
   TABLEAU REEL(tValeurs_Max;0)
   TABLEAU REEL(tValeurs_Sommes;0)
   Debut SQL
      SELECT MIN ( ( VENTES * 100 ) / QUOTA ), 
      MAX( (VENTES * 100 ) / QUOTA ), 
      SUM( QUOTA ) - SUM ( VENTES )
      FROM COMMERCIAUX
      INTO :tValeurs_Min, :tValeurs_Max, :tValeurs_Sommes;
   Fin SQL

4. Cet exemple sélectionne tous les acteurs nés dans une ville donnée :

   TABLEAU TEXTE(tNomsActeurs;0)
   TABLEAU TEXTE(tVilles;0)
   Debut SQL  
      SELECT ACTEURS.Prenom, VILLES.Nom
      FROM ACTEURS AS 'Act', VILLES AS 'Vil'
      WHERE Act.ID_Ville_Naissance=Vil.ID_Ville
      ORDER BY 2 ASC
      INTO : tNomsActeurs, : tVilles;
   Fin SQL

Référence

critère_recherche, liste_tri, ref_langage_4d, ref_table, select_élément, sous_requête.


4D - Documentation   Français   English   German   Japanese   Manuel de référence SQL 4D, Sommaire   Manuel de référence SQL 4D, Index   Retour   Précédent   Suivant