4D v16

SELECT

Accueil

 
4D v16
SELECT

SELECT  


 

 

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]

[LIMIT {ref_langage_4d |nombre_entier | ALL}]

[OFFSET ref_langage_4d |nombre_entier ]

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

[FOR UPDATE]

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.

Note : Cette commande ne prend pas en charge les champs 4D de type Objet.

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 (COUNT, SUM, 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 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 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 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.

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
    ORDER BY 1
    LIMIT :$Limite
    OFFSET :$Depart
    INTO :tAnneeFilm, :tEntreesMin;
 Fin SQL

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');

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

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



Voir aussi  

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

 
PROPRIÉTÉS 

Produit : 4D
Thème : Commandes SQL
Nom intl. : SELECT

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

4D - Référence SQL ( 4D v16)