4D v16

サブクエリ

ホーム

 
4D v16
サブクエリ

サブクエリ  


 

 

ここではチケット販売に関する統計情報を取得します。チケットの総販売平均よりもチケットが売れた映画を取得します。このクエリをSQLで実行するために、クエリの中でクエリを行います。これをサブクエリと呼びます。

  • 4Dコードは以下のようになります:

     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
      ` 情報を表示するためにリストボックスの残りの列を初期化
     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;>)
  • 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
      ` 情報を表示するためにリストボックスの残りの列を初期化
     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;>)
  • 汎用SQLコマンドの場合:

     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
      ` 情報を表示するためにリストボックスの残りの列を初期化
     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;>)
  • 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)
      ` 情報を表示するためにリストボックスの残りの列を初期化
     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;>)
  • 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
      ` 情報を表示するためにリストボックスの残りの列を初期化
     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))

これらをテストするには、4D SQL Code Samplesデータベースを起動してメインウィンドウを表示させます。クエリモードを選択してSubqueriesボタンをクリックします。

 
プロパティ 

プロダクト: 4D
テーマ: チュートリアル

 
履歴 

 
ARTICLE USAGE

SQLリファレンス ( 4D v16)