4D v16

Subconsultas

Inicio

 
4D v16
Subconsultas

Subconsultas  


 

 

Ahora queremos obtener una información estadística sobre los boletos vendidos: cuáles son las películas cuyos boletos vendidos son superiores al promedio de boletos vendidos para todas las películas. Para ejecutar esta búsqueda en SQL, utilizaremos una búsqueda en una búsqueda, en otras palabras una subconsulta.

  • El código 4D inicial sería:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY TEXT(aTitles;0)
     C_LONGINT($i;$vInd;$vAvgSoldTickets)
     
     $vInd:=0
     ALL RECORDS([MOVIES])
     $vAvgSoldTickets:=Average([MOVIES]Sold_Tickets)
     For($i;1;Records in selection([MOVIES]))
        If([MOVIES]Sold_Tickets>$vAvgSoldTickets)
           $vInd:=$vInd+1
           INSERT IN ARRAY(aTitles;$vInd;1)
           aTitles{$vInd}:=[MOVIES]Title
           INSERT IN ARRAY(aSoldTickets;$vInd;1)
           aSoldTickets{$vInd}:=[MOVIES]Sold_Tickets
        End if
        NEXT RECORD([MOVIES])
     End for
      ` Inicializa el resto de las columnas del list box con el fin de visualizar la información
     ARRAY INTEGER(aMovieYear;Size of array(aTitles))
     ARRAY TEXT(aDirectors;Size of array(aTitles))
     ARRAY TEXT(aMedias;Size of array(aTitles))
     ARRAY LONGINT(aNrActors;Size of array(aTitles))
     SORT ARRAY(aTitles;aDirectors;aMovieYear;aMedias;aSoldTickets;aNrActors;>)
  • Utilizando código SQL:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY TEXT(aTitles;0)
     Begin SQL
        SELECT Title, Sold_Tickets
        FROM MOVIES
        WHERE Sold_Tickets > (SELECT AVG(Sold_Tickets) FROM MOVIES)
        ORDER BY 1
        INTO :aTitles, :aSoldTickets;
     End SQL
      ` Inicializa el resto de las columnas del list box con el fin de visualizar la información
     ARRAY INTEGER(aMovieYear;Size of array(aTitles))
     ARRAY TEXT(aDirectors;Size of array(aTitles))
     ARRAY TEXT(aMedias;Size of array(aTitles))
     ARRAY LONGINT(aNrActors;Size of array(aTitles))
     SORT ARRAY(aTitles;aDirectors;aMovieYear;aMedias;aSoldTickets;aNrActors;>)
  • Utilizando comandos SQL genéricos:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY TEXT(aTitles;0)
     C_TEXT($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 EXECUTE($tQueryTxt;aTitles;aSoldTickets)
     SQL LOAD RECORD(SQL all records)
     SQL LOGOUT
      ` Inicializa el resto de las columnas del list box con el fin de visualizar la información
     ARRAY INTEGER(aMovieYear;Size of array(aTitles))
     ARRAY TEXT(aDirectors;Size of array(aTitles))
     ARRAY TEXT(aMedias;Size of array(aTitles))
     ARRAY LONGINT(aNrActors;Size of array(aTitles))
     SORT ARRAY(aTitles;aDirectors;aMovieYear;aMedias;aSoldTickets;aNrActors;>)
  • Utilizando el comando QUERY BY SQL:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY TEXT(aTitles;0)
     
     QUERY BY SQL([MOVIES];"Sold_Tickets > (SELECT AVG(Sold_Tickets) FROM MOVIES)")
     ORDER BY([MOVIES];[MOVIES]Title;>)
     SELECTION TO ARRAY([MOVIES]Title;aTitles;[MOVIES]Sold_Tickets;aSoldTickets)
      ` Inicializa el resto de las columnas del list box con el fin de visualizar la información
     ARRAY INTEGER(aMovieYear;Size of array(aTitles))
     ARRAY TEXT(aDirectors;Size of array(aTitles))
     ARRAY TEXT(aMedias;Size of array(aTitles))
     ARRAY LONGINT(aNrActors;Size of array(aTitles))
     SORT ARRAY(aTitles;aDirectors;aMovieYear;aMedias;aSoldTickets;aNrActors;>)
  • Utilizando el comando SQL EXECUTE IMMEDIATE:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY TEXT(aTitles;0)
     C_TEXT($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"
     Begin SQL
        EXECUTE IMMEDIATE :$tQueryTxt;
     End SQL
      ` Inicializa el resto de las columnas del list box con el fin de visualizar la información
     ARRAY INTEGER(aMovieYear;Size of array(aTitles))
     ARRAY TEXT(aDirectors;Size of array(aTitles))
     ARRAY TEXT(aMedias;Size of array(aTitles))
     ARRAY LONGINT(aNrActors;Size of array(aTitles))

Para probar todos los ejemplos anteriores, lance la base "4D SQL Code Samples" y vaya a la ventana principal. Elija el modo de consulta y presione el botón Subqueries.

 
PROPIEDADES 

Producto: 4D
Tema: Tutorial

 
HISTORIA 

 
ARTICLE USAGE

Manual de SQL ( 4D v16)