SELECT(SQL)

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連機能グループ:データベースへのアクセスと更新


関数

SELECT ステートメントでは、任意の行数を取得するためのカーソル選択と、多くても 1 つの行を取得する非カーソル選択(単独 SELECT)の両方がサポートされています。SELECT ... END-SELECT 構造では、Natural は FIND ステートメントの場合と同じデータベースループ処理を使用します。

2 つの異なる構造が可能です。

構文 1 - カーソル選択

Natural FIND ステートメントと同様、カーソル指向の SELECT ステートメントは検索条件を基準に 1 つ以上の DB2 テーブルから行(レコード)のセットを選択するために使用します。データベースループが開始されるため、ループは LOOP(レポーティングモード)または END-SELECT ステートメントで閉じる必要があります。この構造では、Natural は FIND ステートメントの場合と同じ処理ループを使用します。

また、アプリケーションプログラムからのカーソル管理は必要なく、Natural によって自動的に処理されます。

構文 1 - 一般セット

SELECT selection into-clause table-expression

UNION
EXCEPT
INTERSECT

../graphics/sbo1.gif

ALL

../graphics/sbc1.gif

../graphics/sbo1.gif

(SELECT selection table-expression)
SELECTselection table-expression

../graphics/sbc1.gif

 
 

../graphics/dot3.gif

[ORDER BYcriteria]
statement ../graphics/dot3.gif

END-SELECT
LOOP

 

構文 1 - 拡張セット

[WITH_CTEcommon-table-expression, ../graphics/dot3.gif]
SELECT selection into-clause table-expression

UNION
EXCEPT
INTERSECT

../graphics/sbo1.gif

ALL

../graphics/sbc1.gif

../graphics/sbo1.gif

(SELECT selection table-expression)
SELECTselection table-expression

../graphics/sbc1.gif

 
 

../graphics/dot3.gif

[ORDER BYcriteria]
[OPTIMIZE FOR integer ROWS]
[WITHisolation-level]
[QUERYNOinteger]
[FETCH FIRST row-limit]
[WITH HOLD]
[WITH RETURN]
[WITHscroll-mode]
[WITH ROWSET POSITIONING FOR max-rowsets]
[IF NO RECORDS FOUND instruction]
statement ../graphics/dot3.gif

END-SELECT
LOOP

 

構文 2 - 非カーソル選択

SELECT SINGLE ステートメントでは、非カーソル選択(単独 SELECT)の機能、つまり、カーソルを使用せずに多くても 1 つの行を取得する選択式がサポートされています。これは位置決め UPDATE位置決め DELETE ステートメントでは参照できません。

構文 2 - 一般セット

SELECT SINGLE
selection into-clause table-expression
[IF NO RECORDS FOUND instruction]
statement

END-SELECT
LOOP

         

構文 2 - 拡張セット

SELECT SINGLE
selection into-clause table-expression
[WITHisolation-level]
[FETCH FIRSTrow-limit]
[IF NO RECORDS FOUND instruction]
statement

END-SELECT
LOOP

         

構文要素の説明

このセクションでは、構文 1 - カーソル選択構文 2 - 非カーソル選択の構文図に含まれる構文項目をアルファベット順に説明します。

END-SELECT | LOOP

ストラクチャードモードの場合、Natural の予約キーワード END-SELECT を使用して SELECT ステートメントを終了させる必要があります。

レポーティングモードでは、LOOP ステートメントを使用して SELECT ステートメントを終了します。

FETCH FIRST row-limit

FETCH FIRST

1
integer

ROW
ROWS

ONLY

FETCH FIRST 節では、フェッチする行の数を制限します。ごく限られた数の行が必要な場合にこの節を使用すると、結果セットの規模が大きくなる可能性のあるクエリのパフォーマンスが向上します。

この節は DB2 データベースにのみ有効です。他のデータベースに使用すると、ランタイムエラーが発生します。

IF NO RECORDS FOUND instruction

注意:
この節は実際には Natural SQL に属するものではありません。これは Natural 機能が SQL ループ処理に対して有効にされたことを表します。

ストラクチャードモード構文

IF NO [RECORDS] [FOUND]  

ENTER

statement
END-NOREC

レポーティングモード構文

IF NO [RECORDS] [FOUND]

ENTER

statement
DO statement DOEND

 IF NO RECORDS FOUND 節は、先行する SELECT ステートメントで指定した選択条件に一致するレコードがない場合に処理ループを開始するために使用します。

指定した選択条件に一致するレコードがない場合、IF NO RECORDS FOUND 節により、"空" のレコードを使用して処理ループが 1 回実行されます。これが望ましくない場合は、IF NO RECORDS FOUND 節に ESCAPE BOTTOM ステートメントを指定します。

IF NO RECORDS FOUND 節に 1 つ以上のステートメントを指定すると、処理ループに入る直前にそのステートメントが実行されます。ループに入る前に実行するステートメントがない場合は、キーワード ENTER を使用する必要があります。

注意:
SELECT ステートメントの結果セットが単一行の NULL 値で構成される場合、IF NO RECORDS FOUND 節は実行されません。この状況は、選択リストが列に対する集積関数 SUMAVGMINMAX の 1 つで単独に構成され、集積関数で使用するセットが空の場合に起こることがあります。このような方法で集積関数を使用するときは、IF NO RECORDS FOUND 節を使用せずに、対応する空値インジケータフィールドの値をチェックする必要があります。

データベース値

IF NO RECORDS FOUND 節内のステートメントで他の値の割り当てが行われない限り、Natural は現在のループで指定されたファイルを参照するすべてのデータベースフィールドをリセットして空にします。

システム機能の評価

Natural システム機能は、IF NO RECORDS FOUND 節の結果として処理用に作成される空のレコードに対して 1 回評価されます。

into-clause

INTO

parameter,
VIEW {view-name [correlation-name ]},

INTO キーワードによって INTO 節が導入されます。この節は、選択の結果を格納するプログラム内のターゲットフィールドを指定するために使用します。

INTO 節では、DEFINE DATA ステートメントで定義された単一の parameters または 1 つ以上のビューを指定できます。

全ターゲットフィールドは単一テーブルまたはジョイン処理でできた複数のテーブルから値を受け取ることができます(「ジョインクエリ」も参照)。

注意:
標準 SQL 構文では、INTO 節は非カーソル選択処理(単独 SELECT)でのみ使用されるため、単一行を選択する場合にのみ指定できます。ただし、Natural では、カーソル選択処理および非カーソル選択処理のどちらにも INTO 節を使用します。

selection はアスタリスク(*)のみでも構成できます。標準選択式では、FROM 節に指定されたテーブル(複数可)の全列名のリストに対する省略形です。ただし、同じ構文項目 SELECT * は、Natural SELECT ステートメントでは異なる意味になります。INTO 節にリストされた項目はすべて選択にも使用されます。それらの名前は既存のデータベースの列名に対応させる必要があります。

構文要素の説明:

構文要素 説明
parameter 個々のパラメータをターゲットフィールドとして指定する場合、パラメータの数とフォーマットは、対応する選択(上記)に指定された columns または scalar-expressions(あるいは両方)の数とフォーマットに一致する必要があります(詳細については、「スカラ式」を参照)。「例 5」を参照してください。
view-name DEFINE DATA ステートメントでの定義に従った Natural ビューの名前。

INTO 節で 1 つまたは複数のビューを参照する場合は、selection で指定した項目数が、ビューに定義されているフィールド(カウントするグループフィールドではなく、再定義フィールドとインジケータフィールド)の数と一致する必要があります。

注意:
Natural ターゲットフィールドおよびテーブルの列は両方とも Natural DDM に定義されている必要があります。ただし、割り当ては順序に従って行われるため、名前が異なっていてもかまいません。

例 5」を参照してください。
correlation-name

複数のテーブルが連結(ジョイン)される SELECT * 構造で VIEW 節を使用する場合、指定したビューに含まれるフィールドが複数のテーブルに存在する列を参照するのであれば、correlation-names が必要となります。選択する列を識別するために、選択リスト生成時には、これらの列がすべて指定した correlation-name で修飾されます。ビューに割り当てる correlation-name は、連結(ジョイン)されるテーブルを修飾するために使用される correlation-names の 1 つに対応している必要があります。セクション「ジョインクエリ」および「例 6」も参照してください。

例 1

DEFINE DATA LOCAL
01 PERS VIEW OF SQL-PERSONNEL  
  02 NAME
  02 AGE
END-DEFINE
...
SELECT *
  INTO NAME, AGE

例 2:

...
SELECT *
  INTO VIEW PERS

上記の例は下記の例と同等です。

例 3:

...
SELECT NAME, AGE  
  INTO NAME, AGE

例 4:

...
SELECT NAME, AGE  
  INTO VIEW PERS

例 5:

DEFINE DATA LOCAL
01 PERS VIEW OF SQL-PERSONNEL   
  02 NAME
  02 AGE
END-DEFINE
...
SELECT FIRSTNAME, AGE
  INTO VIEW PERS
  FROM SQL-PERSONNEL
...

ターゲットフィールド NAME および AGE は Natural ビューの一部であり、テーブルの列 FIRSTNAME および AGE の内容を受け取ります。

例 6:

DEFINE DATA LOCAL
01 PERS VIEW OF SQL-PERSONNEL
  02 NAME
  02 FIRST-NAME
  02 AGE
END-DEFINE
...
SELECT *
  INTO VIEW PERS A
  FROM SQL-PERSONNEL A, SQL-PERSONNEL B  
...

OPTIMIZE FOR integer ROWS

OPTIMIZE FORinteger ROWS

この節は DB2 データベースにのみ有効です。他のデータベースに使用すると、ランタイムエラーが発生します。

OPTIMIZE FOR integer ROWS 節は、結果テーブルから取得する行の数(integer)を前もって DB2 に知らせるために使用します。この節を使用しない場合、DB2 では結果テーブルのすべての行が取得されると仮定し、それに応じて最適化を行います。

このオプションの節は、選択される行の数を把握している場合に役立ちます。実際に選択される行数が integer 値(02147483647)を超えない場合、integer の行を最適化することでパフォーマンスが向上します。

SELECT name INTO 
#name FROM table WHERE AGE = 2 OPTIMIZE FOR 100 ROWS

ORDER BY criteria

ORDER BY

column-reference

ASC

 
integer DESC

ORDER BY 節は、SELECT ステートメントの結果を特定の順序で整列します。

構文要素の説明:

構文要素 説明
column-reference ORDER BY 節には、結果テーブルの列を指定する必要があります。ほとんどの ORDER BY 節で、column-reference(オプションで修飾された列名)、または列番号によって列を識別できます。UNION を指定したクエリでは、列は列番号で識別する必要があります。「列参照」も参照してください。
integer UNION を指定したクエリでは、列は列番号で識別する必要があります。列番号は、選択内で左から右へ位置づけ、整数値で示します。この機能により、名前を持たない計算列に基づいて結果を整列できるようになります。
ASC|DESC ソート順を昇順(ASC)または降順(DESC)に指定します。ASC はデフォルトです。「例 2」を参照してください。

例 1

DEFINE DATA LOCAL
1 #NAME          (A20)
1 #YEARS-TO-WORK (I2)
END-DEFINE
...
SELECT NAME , 65 - AGE
  INTO #NAME, #YEARS-TO-WORK   
  FROM SQL-PERSONNEL
  ORDER BY 2
  ...

例 2:

DEFINE DATA LOCAL
1 PERS VIEW OF SQL-PERSONNEL
1 NAME
1 AGE
1 ADDRESS   (1:6)
END-DEFINE
...
SELECT NAME, AGE, ADDRESS
  INTO VIEW PERS
  FROM SQL-PERSONNEL
  WHERE AGE = 55
  ORDER BY NAME DESC
  ...

QUERYNO 節

QUERYNOinteger

selection

選択式」の「選択」を参照してください。.

SKIP LOCKED DATA

SKIP LOCKED DATA 節を指定すると、不適合のロックが他のトランザクションによって行に保持されている場合に、行をスキップします。

statement

処理ループで実行される Natural ステートメント。

table-expression

選択式」の table-expression を参照してください

UNION 節

UNION はセット操作を含むクエリを導入します。

INTO 節は、最初の select-expression にのみ指定する必要があります。

構文要素の説明:

構文要素 説明
UNION

UNION は複数の select-expressions の結果を結合します。各 select-expressions に指定された列は UNION 互換(数、タイプ、フォーマットが一致)である必要があります。

ALL 指定すると、結果セットに余分な(重複した)行を含みます。

UNION 演算子に ALL 修飾子が明示的に指定されていないと、重複した余分な行は常に UNION の結果から取り除かれます。ただし、UNION では、ALL に代わって明示的に指定できる DISTINCT オプションはありません。

DEFINE DATA LOCAL
01 PERS VIEW OF SQL-PERSONNEL   
  02 NAME
  02 AGE
  02 ADDRESS (1:6)
END-DEFINE
...
SELECT NAME, AGE, ADDRESS
  INTO VIEW PERS
  FROM SQL-PERSONNEL
  WHERE AGE > 55
UNION ALL
SELECT NAME, AGE, ADDRESS
  FROM SQL-EMPLOYEES
  WHERE PERSNR < 100
ORDER BY NAME
...
END-SELECT
...

WITH_CTE common-table-expression

WITH_CTE common-table-expression-name [(column-name,…)] AS (fullselect)

この節では、後に続く SELECT ステートメントの任意の FROM 節で参照できる結果テーブルを定義できます。

構文要素の説明:

構文要素 説明
WITH_CTE Natural 固有のキーワード WITH_CTE は、SQL キーワード WITH に対応します。WITH_CTE は、Natural コンパイラにより SQL キーワード WITH に変換されます。
common-table-expression-name 修飾されていない SQL 識別子である必要があります。また、同じステートメント内で指定されている他の共通テーブル式とは異なっている必要があります。

単一の WITH_CTE キーワードに続けて複数の common-table-expression を指定できます。

common-table-expression-name はいずれも、後に続く任意の common-table-expression-nameFROM 節、または後に続く SELECT ステートメントの FROM 節の中で指定できます。

column-name 修飾されていない SQL 識別子である必要があります。また、1 つの common-table-expression-name 内で一意である必要があります。
AS (fullselect) column-names の数は、全選択の列の数と一致している必要があります。

common-table-expression を使用できます

  • ビューの作成を回避するため、ビューの代わりとして使用する場合

  • 全選択内で同じ結果テーブルを共有する必要がある場合

  • 反復を使用して結果を導出する必要がある場合

反復を使用するクエリは、材料の請求書などの用途に便利です。

WITH_CTE                                                        
 RPL (PART,SUBPART,QUANTITY) AS                                 
 (SELECT ROOT.PART,ROOT.SUBPART,ROOT.QUANTITY                   
    FROM HGK-PARTLIST ROOT                                      
   WHERE ROOT.PART ='01'                                       
  UNION ALL                                                     
  SELECT CHILD.PART,CHILD.SUBPART,CHILD.QUANTITY                
    FROM  RPL PARENT, HGK-PARTLIST CHILD                        
    WHERE PARENT.SUBPART = CHILD.PART                            
  )                                                             
SELECT DISTINCT PART,SUBPART,QUANTITY                           
  INTO VIEW V1                                                  
  FROM RPL                                                      
  ORDER BY PART,SUBPART,QUANTITY                                
END-SELECT

WITH HOLD 節

この節は現在はサポートされていません。使用すると、コンパイラエラーが発生します。

WITH isolation-level

WITH

CS
RR
RR KEEP UPDATE LOCK
RS
RS KEEP UPDATE LOCKS
UR

この節では、ステートメントを実行するときの分離レベルを明示的に指定できます。

この節は DB2 データベースにのみ有効です。他のデータベースに使用すると、ランタイムエラーが発生します。

次のオプションを使用できます。

オプション 意味
CS カーソルの安定
RR 繰り返し可能な読み込み
RR KEEP UPDATE LOCKS 構文 1 - 拡張セットに対してのみ、および位置決め UPDATE または位置決め DELETE ステートメントが SELECT ステートメントで処理される場合にのみ、適用されます。

繰り返し可能な読み込みと更新ロックの保持です。

RS 読み込みの安定
RS KEEP UPDATE LOCKS 構文 1 - 拡張セットに対してのみ、および位置決め UPDATE または位置決め DELETE ステートメントが SELECT ステートメントで処理される場合にのみ、適用されます。

読み込みの安定と更新ロックの保持です。

UR 未コミットの読み込み

UR は、テーブルが読み取り専用のときに SELECT ステートメント内にのみ指定できます。デフォルトの分離レベルは、ステートメントがバインドされるパッケージまたはプランの分離によって決定されます。また、デフォルトの分離レベルは、結果テーブルが読み取り専用かどうかによっても変わります。デフォルトの分離レベルについては、IBM 文献を参照してください。

WITH RETURN 節

この節は現在はサポートされていません。使用すると、コンパイラエラーが発生します。

WITH scroll-mode

WITH

ASENSITIVE SCROLL
INSENSITIVE SCROLL
SENSITIVE STATIC SCROLL
SENSITIVE DYNAMIC SCROLL

[:] scroll_hv[GIVING [:] sqlcode]

Natural では、WITH ASENSITIVE SCROLLWITH SENSITIVE STATIC SCROLL および SENSITIVE DYNAMIC SCROLL を使用して、SQL のスクロール可能カーソルをサポートします。スクロール可能カーソルにより、Natural アプリケーションで結果セット内の任意の行をランダムに位置決めできるようになります。スクロール不可能なカーソルでは、データは上から下に順番に読み込むことしかできません。

この節では、RDBMS のスクロール可能カーソルを有効にします。スクロール可能カーソルは、ASENSITIVEINSENSITIVESENSITIVE STATIC または SENSITIVE DYNAMIC です。

スクロール可能カーソルにより、カーソルがオープンされている限り、アプリケーションでカーソル位置の任意の行をいつでも位置決めできるようになります。スクロール可能カーソルは、Sybase データベースではサポートされていません。スクロール可能カーソルは、MS SQL Server DBLIB インターフェイスではサポートされていませんが、MS SQL Server ODBC インターフェイスに限ってサポートされています。

位置決めは scroll_hv の内容に基づいて行われます。内容は、DB2 に対する FETCH が実行されるたびに評価されます。

注意:
すべての SQL データベースシステムですべてのオプションがサポートされているわけではありません。

構文要素の説明:

構文要素 説明
ASENSITIVE SCROLL カーソルが INSENSITIVE または SENSITIVE DYNAMIC のいずれかであることを指定します。

これは、カーソルの読み取り専用プロパティに基づいて、カーソルのオープン時のデータベースによって決定されます。カーソルが読み取り専用の場合、カーソルは INSENSITIVE になります。カーソルが読み取り専用でない場合、カーソルは SENSITIVE DYNAMIC になります。これは、DB2 データベース用にサポートされています。

INSENSITIVE SCROLL 指定すると、カーソルが更新された後、基本テーブルに対する更新、削除、および挿入でカーソルが無効になります。INSENSITIVE SCROLL は、位置決め UPDATE または位置決め DELETE 操作では使用できないカーソルを示します。これは、Oracle、Adabas D、Informix、MS SQL Server ODBC、および DB2 データベース用にサポートされています。また、INSENSITIVE SCROLL カーソルは、一度オープンされると、その後に基本テーブルを対象に実行される UPDATEDELETE または INSERT 操作を反映しません。

も参照してください。

SENSITIVE STATIC SCROLL 指定すると、カーソルがオープンした後、基本テーブルに対する更新および削除でカーソルが有効になりますが、挿入ではカーソルは有効になりません。SENSITIVE STATIC SCROLL は、位置決め UPDATE または位置決め DELETE 操作で使用できるカーソルを示します。これは、Adabas D、MS SQL Server ODBC、および DB2 データベースでサポートされています。さらに、SENSITIVE STATIC SCROLL カーソルは基本テーブル行の UPDATE および DELETE 操作を反映します。ただし、INSERT 処理は反映しません。

も参照してください。

SENSITIVE DYNAMIC SCROLL SENSITIVE DYNAMIC では、カーソルのオープン後、基本テーブルを対象に実行される更新、削除、および挿入に対してカーソルをセンシティブにすることを指定します。

SENSITIVE DYNAMIC スクロール可能カーソルは、カーソルオープン時の基本テーブルに対する 、DELETE および INSERTUPDATE および DELETE 操作を反映します。これは、Adabas D、MS SQL Server ODBC、および DB2 データベース用にサポートされています。

注意:
INSENSITIVE および SENSITIVE STATIC スクロール可能カーソルでは一時的な結果テーブルを使用し、DB2 に TEMP データベースが必要になります(IBM の関連 DB2 文献を参照)。

scroll_hv

変数 scroll_hv は英数字にする必要があります。

変数 scroll_hv では、データベース処理ループの 1 回の実行でフェッチする結果テーブルの行を指定します。scroll_hv の内容は、データベース処理ループサイクルが実行されるたびに評価されます。

INSENSITIVE
SENSITVE

CURRENT
FIRST
LAST
PRIOR
NEXT

ABSOLUTE
RELATIVE

+
-

integer
scroll_hv オプション
オプション 説明
CURRENT 現在の行を(再度)フェッチします。
FIRST 最初の行をフェッチします。
LAST 最後の行をフェッチします。
NEXT 現在の行の次の行をフェッチします。これはデフォルト値です。
PRIOR 現在の行の前の行をフェッチします。
+|-integer

ABSOLUTE または RELATIVE の接続でのみ適用されます。

フェッチする行の位置を ABSOLUTE または RELATIVE で指定します。

整数の前にプラス記号(+)またはマイナス記号(-)を入力します。

デフォルト値はプラス(+)です。

ABSOLUTE

+|-integer との接続でのみ適用されます。

行をフェッチする結果セット内の絶対位置として integer を使用します。

RELATIVE

+|-integer との接続でのみ適用されます。

行をフェッチする結果セット内の現在の位置への相対位置として integer を使用します。

特別な RDBMS システムにはいくつかの制限があります。

  • DB2 ではキーワード CURRENT はサポートされていません。

  • SELECT FOR UPDATE ループにおいては、DB2 ではスクロールオプションとして NEXT のみがサポートされています。

  • MS SQL Server(ODBC インターフェイス)ではキーワード CURRENT はサポートされていません。

  • Adabas D では RELATIVE スクロールはサポートされていません。

GIVING [:] sqlcode

GIVING [:] sqlcode の指定は任意です。指定する場合、Natural 変数 [:] sqlcode のフォーマットは I4 にする必要があります。この変数の値は、基準となる FETCH 処理の DB2 SQLCODE から返されます。これにより、スクロール可能カーソルがオープンされている間に発生した各種ステータスにアプリケーションで対応できるようになります。SQLCODE で示される最も重要なステータスコードを次の表に示します。

SQLCODE 説明
0 FETCH 処理が正常に完了し、データが返されました(ただし、オプション BEFORE または AFTER を指定した FETCH を除く)。
+100 行は見つかりません。カーソルはオープンされたままです。データは返されませんでした。
-1 行に対する FETCH 試行中の一般的なエラーです。

GIVING [:] sqlcode を指定する場合、アプリケーションで各種ステータスに対応できる必要があります。端末 I/O なしで 5 回連続して SQLCODE +100 になった場合、アプリケーションループを回避するために、Natural for DB2 ランタイムから Natural エラー NAT3296 が発行されます。アプリケーションでは、ESCAPE ステートメントを実行して処理ループを終了できます。

GIVING [:] sqlcode を指定しない場合、SQLCODE 0 および SQLCODE +100 を除き、各 SQLCODE によって Natural エラー NAT3700 が生成され、処理ループが終了します。SQLCODE +100 (行は見つかりません)では処理ループが終了します。

Natural システムライブラリ SYSDB2 で提供されているプログラム例 DEM2SCRL も参照してください。

WITH ROWSET POSITIONING FOR max-rowsets

WITH ROWSET POSITIONING FOR

[:] row_hv
integer

ROWS

ROWS_RETURNED [:]ret_row

この節は、Natural ネイティブ DML マルチフェッチ処理に対応する DB2 行セット処理を有効にします。[:] row_hv (I4) または integer は、DB2 から Natural に返される行の最大数を決定します。この数値は、標準の複数行処理に使用される Natural マルチフェッチバッファのサイズ、または高度な複数行処理のために DB2 から Natural プログラムに返される最大行の数のいずれかを決定します。

ROWS_RETURNED [:]ret_row 節:

この節は、高度な複数行処理を行うために、最後に実行された DB2 フェッチ操作のために DB2 によって返される行数を取得し、I4 変数を指定します。

ジョインクエリ

ジョインとは複数のテーブルからデータを取得するクエリです。関連するテーブルはすべて FROM 節に指定する必要があります。

ジョインは常に FROM 節にリストされたテーブルのデカルト積を形成し、このデカルト積から WHERE 節に指定されたジョイン条件を満たさない行をすべて削除します。

テーブル名が長すぎる場合、相関名を使用して書き込みを保存できます。選択リストに指定された列が、連結(ジョイン)される複数のテーブルに存在するとき、同じ名前のどの列を選択するかを識別するために相関名を使用する必要があります。

DEFINE DATA LOCAL
1 #NAME     (A20)
1 #MONEY    (I4)
END-DEFINE
...
SELECT NAME, ACCOUNT
  INTO #NAME, #MONEY
  FROM  SQL-PERSONNEL P, SQL-FINANCE F   
  WHERE P.PERSNR = F.PERSNR
    AND F.ACCOUNT > 10000
    ...