4D v16

Subconsultas

Página Inicial

 
4D v16
Subconsultas

Subconsultas  


 

 

Agora queremos obter uma informação estatística sobre os ingressos vendidos: quais são os filmes cujos boletos vendidos são superiores a média de ingressos vendidos para todas os filmes. Para executar esta pesquisa em SQL, utilizaremos uma pesquisa em uma pesquisa, em outras palavras uma subconsulta.

  • O código 4D inicial seria:

     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
      ` Inicia o resto das colunas do list box com o propósito de visualizar a informação
     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
      ` Inicia o resto das colunas do list box com o propósito de visualizar a informação
     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
      ` Inicia o resto das colunas do list box com o propósito de visualizar a informação
     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 o 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)
      ` Inicia o resto das colunas do list box com o propósito de visualizar a informação
     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 o 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
      ` Inicia o resto das colunas do list box com o propósito de visualizar a informação
     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 provar todos os exemplos anteriores, lance a base "4D SQL Code Samples" e vá até a janela principal. Escolha o modo de consulta e pressione o botão Subqueries.

 
PROPRIEDADES 

Produto: 4D
Tema: Tutorial

 
HISTÓRIA 

 
ARTICLE USAGE

Manual de SQL ( 4D v16)