4D v16

Sous-requêtes

Accueil

 
4D v16
Sous-requêtes

Sous-requêtes  


 

 

Nous souhaitons à présent obtenir une statistique par rapport aux nombres d'entrées : quels sont les films ayant réalisé plus d'entrées que la moyenne de tous les films. Pour exécuter cette requête en SQL, nous allons utiliser une requête incluse dans une requête, autrement dit une sous-requête.
Voici le code 4D correspondant à cette requête :

 TABLEAU ENTIER LONG(aSoldTickets;0)
 TABLEAU TEXTE(aTitles;0)
 C_ENTIER LONG($i;$vInd;$vAvgSoldTickets)
 
 $vInd:=0
 TOUT SELECTIONNER([MOVIES])
 $vAvgSoldTickets:=Moyenne([MOVIES]Sold_Tickets)
 Boucle($i;1;Enregistrements trouves([MOVIES]))
    Si([MOVIES]Sold_Tickets>$vAvgSoldTickets)
       $vInd:=$vInd+1
       INSERER DANS TABLEAU(aTitles;$vInd;1)
       aTitles{$vInd}:=[MOVIES]Title
       INSERER DANS TABLEAU(aSoldTickets;$vInd;1)
       aSoldTickets{$vInd}:=[MOVIES]Sold_Tickets
    Fin de si
    ENREGISTREMENT SUIVANT([MOVIES])
 Fin de boucle
  ` Initialisation du reste des colonnes de list box pour visualiser l'information
 TABLEAU ENTIER(aMovieYear;Taille tableau(aTitles))
 TABLEAU TEXTE(aDirectors;Taille tableau(aTitles))
 TABLEAU TEXTE(aMedias;Taille tableau(aTitles))
 TABLEAU ENTIER LONG(aNrActors;Taille tableau(aTitles))
 TRIER TABLEAU(aTitles;aDirectors;aMovieYear;aMedias;aSoldTickets;aNrActors;>)

  • En utilisant du code SQL :

     TABLEAU ENTIER LONG(aSoldTickets;0)
     TABLEAU TEXTE(aTitles;0)
     Debut SQL
        SELECT Title, Sold_Tickets
        FROM MOVIES
        WHERE Sold_Tickets > (SELECT AVG(Sold_Tickets) FROM MOVIES)
        ORDER BY 1
        INTO :aTitles, :aSoldTickets;
     Fin SQL
      ` Initialisation du reste des colonnes de list box pour visualiser l'information
     TABLEAU ENTIER(aMovieYear;Taille tableau(aTitles))
     TABLEAU TEXTE(aDirectors;Taille tableau(aTitles))
     TABLEAU TEXTE(aMedias;Taille tableau(aTitles))
     TABLEAU ENTIER LONG(aNrActors;Taille tableau(aTitles))
     TRIER TABLEAU(aTitles;aDirectors;aMovieYear;aMedias;aSoldTickets;aNrActors;>)
  • En utilisant les commandes SQL génériques :

     TABLEAU ENTIER LONG(aSoldTickets;0)
     TABLEAU TEXTE(aTitles;0)
     C_TEXTE($tQueryTxt)
     
     SQL LOGIN(SQL_INTERNAL;"";"")
     $tQueryTxt:=""
     $tQueryTxt:=$tQueryTxt+"SELECT Title, Sold_Tickets"
     $tQueryTxt:=$tQueryTxt+" FROM MOVIES"
     $tQueryTxt:=$tQueryTxt+" WHERE Sold_Tickets > (SELECT AVG(Sold_Tickets) FROM MOVIES)"
     $tQueryTxt:=$tQueryTxt+" ORDER BY 1"
     SQL EXECUTER($tQueryTxt;aTitles;aSoldTickets)
     SQL CHARGER ENREGISTREMENT(SQL tous les enregistrements)
     SQL LOGOUT
      ` Initialisation du reste des colonnes de list box pour visualiser l'information
     TABLEAU ENTIER(aMovieYear;Taille tableau(aTitles))
     TABLEAU TEXTE(aDirectors;Taille tableau(aTitles))
     TABLEAU TEXTE(aMedias;Taille tableau(aTitles))
     TABLEAU ENTIER LONG(aNrActors;Taille tableau(aTitles))
     TRIER TABLEAU(aTitles;aDirectors;aMovieYear;aMedias;aSoldTickets;aNrActors;>)
  • En utilisant la commande CHERCHER PAR SQL :

     TABLEAU ENTIER LONG(aSoldTickets;0)
     TABLEAU TEXTE(aTitles;0)
     
     CHERCHER PAR SQL([MOVIES];"Sold_Tickets > (SELECT AVG(Sold_Tickets) FROM MOVIES)")
     TRIER([MOVIES];[MOVIES]Title;>)
     SELECTION VERS TABLEAU([MOVIES]Title;aTitles;[MOVIES]Sold_Tickets;aSoldTickets)
      ` Initialisation du reste des colonnes de list box pour visualiser l'information
     TABLEAU ENTIER(aMovieYear;Taille tableau(aTitles))
     TABLEAU TEXTE(aDirectors;Taille tableau(aTitles))
     TABLEAU TEXTE(aMedias;Taille tableau(aTitles))
     TABLEAU ENTIER LONG(aNrActors;Taille tableau(aTitles))
     TRIER TABLEAU(aTitles;aDirectors;aMovieYear;aMedias;aSoldTickets;aNrActors;>)
  • En utilisant la commande SQL dynamique EXECUTE IMMEDIATE :

     TABLEAU ENTIER LONG(aSoldTickets;0)
     TABLEAU TEXTE(aTitles;0)
     C_TEXTE($tQueryTxt)
     
     $tQueryTxt:=""
     $tQueryTxt:=$tQueryTxt+"SELECT Title, Sold_Tickets"
     $tQueryTxt:=$tQueryTxt+" FROM MOVIES"
     $tQueryTxt:=$tQueryTxt+" WHERE Sold_Tickets > (SELECT AVG(Sold_Tickets) FROM MOVIES)"
     $tQueryTxt:=$tQueryTxt+" ORDER BY 1"
     $tQueryTxt:=$tQueryTxt+" INTO :aTitles, :aSoldTickets"
     Debut SQL
        EXECUTE IMMEDIATE :$tQueryTxt;
     Fin SQL
      ` Initialisation du reste des colonnes de list box pour visualiser l'information
     TABLEAU ENTIER(aMovieYear;Taille tableau(aTitles))
     TABLEAU TEXTE(aDirectors;Taille tableau(aTitles))
     TABLEAU TEXTE(aMedias;Taille tableau(aTitles))
     TABLEAU ENTIER LONG(aNrActors;Taille tableau(aTitles))

Pour tester ces exemples, lancez la base "4D SQL Code Samples" et affichez la boîte de dialogue principale. Choisissez le mode d'interrogation du moteur de 4D et cliquez sur le bouton Sous-requêtes.

 
PROPRIÉTÉS 

Produit : 4D
Thème : Prise en main
Nom intl. : Subqueries

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

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