列ごとの行選択
列ごとに行選択基準を入力するには、「Column Selection/Edit (列選択/編集)」パネルのコマンド行で 1
を入力し、Enter キーを押します。FM/Db2 は、「Row Selection Criteria (行選択基準)」パネルを表示します。
選択基準を指定する各列の行で、演算子 (= または > など) を Op 列に、またほとんどの場合「Value (値)」列に値を指定します。
例えば、姓が SMITH の従業員のみを従業員の表から選択するには、以下のようにします。
- 列 LASTNAME の行で、Op 列に
=
を入力し、「Value (値)」列にSMITH
(オプションで一重引用符で囲む) を入力します。図 1. 例 1: 単一値に一致する単純な述部を指定 Cmd Con ( Column name Data type(length) Op Value <-> - <---+----1----+----2----+----> <---+----1----+----> <-> <---+---- *** **** Top of data **** EMPNO CHARACTER(6) AND FIRSTNME VARCHAR(12) AND MIDINIT CHARACTER(1) AND LASTNAME VARCHAR(15) = SMITH
この述部は、表のデータが大文字で保管されているシチュエーションで、理想的に動作します。ただし、表のデータが大/小文字混合 (「Smith」など) であるか、またはデータに誤り (「SmiTH」など) が含まれている場合、Db2® は目的の行の一部を返しません。
通常、「Op」列に入力された演算子は、列名に影響しません。以下の 2 つの演算子によって、列関数を指定できます。- LKL
- この式から得られる結果: LOWER(colname) LIKE 値。
- LKU
- この式から得られる結果: UPPER(colname) LIKE 値。
次の例では、値にある大文字によって一致は得られないため、FM/Db2 は自動的に、入力された値を小文字に変換します。詳しくは、『例 2 の式から生成されるデータ』を参照してください。図 2. Example 2: LKL 演算子の指定 Cmd Con ( Column name Data type(length) Op Value <-> - <---+----1----+----2----+----> <---+----1----+----> <-> <---+----1----+----2 *** **** Top of data **** EMPNO CHARACTER(6) AND FIRSTNME VARCHAR(12) AND MIDINIT CHARACTER(1) AND LASTNAME VARCHAR(15) LKL '%SMITH%'
次の例では、値にある小文字によって一致は得られないため、FM/Db2 は自動的に、入力された値を大文字に変換します。詳しくは、『例 3 の式から生成されるデータ』を参照してください。図 3. 例 3: LKU 演算子の指定 Cmd Con ( Column name Data type(length) Op Value <-> - <---+----1----+----2----+----> <---+----1----+----> <-> <---+---- *** **** Top of data **** EMPNO CHARACTER(6) AND FIRSTNME VARCHAR(12) AND MIDINIT CHARACTER(1) AND LASTNAME VARCHAR(15) LKU '%smith%'
必要に応じて、列式を直接指定することもできます。列式を入力するためには、式が必要な列名に対して、EDITCOL エディター基本コマンドを実行するか、または EC 接頭部コマンドを入力します。これらのコマンドを実行した後、列名フィールドは入力フィールドに変わります。
例 4: エスケープ文字を使用して列式およびデータ値を入力 には、列式と「」エスケープ文字の使用法が示されています。この例は、従業員が 3 月に雇用された行をどのように表示するかを説明しています。エスケープ文字を使用すると、FM/Db2 は、タイプに応じた値フィールドのデータの検証を試みません。列のデータ・タイプは DATE ですが、列関数 MONTH は、月を表す整数 (1 から 12) を返します。図 4. 例 4: エスケープ文字を使用して列式およびデータ値を入力 Cmd Con ( Column name Data type(length) Op Value <-> - <---+----1----+----2----+----> <---+----1----+----> <-> <---+---- *** **** Top of data **** EMPNO CHARACTER(6) AND FIRSTNME VARCHAR(12) AND MIDINIT CHARACTER(1) AND LASTNAME VARCHAR(15) AND WORKDEPT CHARACTER(3) AND PHONENO CHARACTER(4) AND MONTH(HIREDATE) = \3
- Exit function key (F3) を押します。
FM/Db2 は、パネル上部の「Row Selection Criteria (行選択基準)」フィールドに、生成された行選択基準 (WHERE 文節) が示された、「Column Selection/Edit (列の選択/編集)」パネルを表示します。
例 1 から例 4 で入力された式の結果は、以下のとおりです。図 5. 例 1 の式から生成される式 Process Options Utilities Help -------------------------------------------------------- FM/Db2 (DFG2) Co Command ===> TABLE DSN81010.EMP --------------------------------- Row Selection Criteria 1 Sel: WHERE "LASTNAME" = 'SMITH'
図 6. 例 2 の式から生成されるデータ Process Options Utilities Help -------------------------------------------------------- FM/Db2 (DFG2) Co Command ===> TABLE DSN81010.EMP --------------------------------- Row Selection Criteria 1 Sel: WHERE LOWER("LASTNAME") LIKE '%smith%'
図 7. 例 3 の式から生成されるデータ Process Options Utilities Help -------------------------------------------------------- FM/Db2 (DFG2) Co Command ===> TABLE DSN81010.EMP --------------------------------- Row Selection Criteria 1 Sel: WHERE UPPER("LASTNAME") LIKE '%SMITH%'
図 8. 例 4 の式から生成されるデータ Process Options Utilities Help -------------------------------------------------------- FM/Db2 (DFG2) Co Command ===> TABLE DSN81010.EMP --------------------------------- Row Selection Criteria 1 Sel: WHERE MONTH(HIREDATE) = 3
- Exit function key (F3) を押します。FM/Db2 には、選択したデータが表示されます。
図 9. 例 1 から例 4 の式から得られるデータ FM/Db2 (DFG2) Table Edit Command ===> 2 rows - End of object. EMPNO FIRSTNME MIDINIT LASTNAME WORKDEPT PHONENO HIREDATE #1 #2 #3 #4 #5 #6 #7 CH(6) VARCHAR(12) CH(1) VARCHAR(15) CH(3) CH(4) DATE PUN-+> <-N-+----1-> - <-N-+----1----> <-N <--> <---+----> ****** **** Top of data **** 000001 000250 DANIEL< S SMITH< D21 0961 1969-10-30 000002 000300 PHILIP< X SMITH< E11 2095 1972-06-19
図 10. 例 4 の式から得られるデータ FM/Db2 (DFG2) Table Edit Command ===> 3 rows - End of object. EMPNO FIRSTNME MIDINIT LASTNAME WORKDEPT PHONENO HIREDATE #1 #2 #3 #4 #5 #6 #7 CH(6) VARCHAR(12) CH(1) VARCHAR(15) CH(3) CH(4) DATE PUN-+> <-N-+----1-> - <-N-+----1----> <-N <--> <---+----> ****** **** Top of data **** 000001 000200 DAVID< BROWN< D11 4501 1966-03-03 000002 000280 ETHEL< R SCHNEIDER< E11 8997 1967-03-24 000003 200280 EILEEN< R SCHWARTZ< E11 8997 1967-03-24
例 1: 単一値に一致する単純な述部を指定 で入力された式を続行するにあたって、例えば、ここで、姓が SMITH または JONES の従業員を選択する場合は、行選択基準を変更する必要があります。これを行うには、「Row Selection Criteria (行選択基準)」パネルに戻る必要があります。
- 表示されたデータのパネルから、Exit function key (F3) を押し、「Db2® Edit (編集)」入力パネルに戻ります。
- 「Edit template (テンプレートの編集)」フィールドを選択し、Exit function key (F3) を押して「Column Selection/Edit (列の選択/編集)」パネルを表示します。
このパネルの「Row Selection Criteria (行選択基準)」フィールド (前の WHERE "LASTNAME" = 'SMITH' 文節が表示されています) は保護されていることがわかります。これは、列ごとにまたはフリー・フォーム式で入力された行選択基準は交換可能でないためです。「Row Selection Criteria (行選択基準)」パネルに戻ることにより、列ごとに入力された行選択基準を変更できます。「Column Selection/Edit (列の選択/編集)」で SQL コマンドを発行して、データを保管することにより、列ごとに入力した行選択基準からフリー・フォーム式に変換できます。変換により、列ごとの指定は除去されます。フリー・フォーム式から列ごとに入力された行選択基準に変換することはできません。
- コマンド行に
1
を入力して、「Row Selection Criteria (行選択基準)」パネルを表示します。 - 同一の列で複数の値を選択する (この場合、SMITH と JONES の両方を選択します) には、以下の 2 つの方法を使用できます。
- 以下のように、列に対して複数行を使用する。
- 該当する列の名前の行を繰り返すには、Cmd 列で R (反復) 接頭部コマンドを入力します。
- 列名の反復される行で、AND に
O
またはOR
を上書きして、結合子 (Con 列内) をOR
に変更します。 - 「Value (値)」列に値を入力します。
Cmd Con ( Column name Op Value ) <-> - <---+----1----+----2----+----3----> <-> <---+----1----+----2----+-- - *** **** Top of data **** ⋮ AND LASTNAME = SMITH OR LASTNAME = JONES
- 以下のように、IN 演算子を使用する。
- LASTNAME の行で、演算子 (=) を IN に変更します。IN 演算子を使用すると、選択する値のリストを指定できます。
- 「Value (値)」列に、選択する値を入力します。英数字の列の場合、値のリストを指定するときは、各値を引用符で囲み、コンマで区切る必要があります。
Cmd Con ( Column name Op Value ) <-> - <---+----1----+----2----+----3----> <-> <---+----1----+----2----+-- - *** **** Top of data **** ⋮ AND LASTNAME IN 'SMITH','JONES'
- 以下のように、列に対して複数行を使用する。
- 選択したデータを表示するには、Exit function key (F3) を 2 回押します。SMITH または JONES の行選択基準を指定するためにどちらの方法を使用しても、同じ結果が得られます。
Process Options Utilities Help ──────────────────────────────────────────────────────────────────────────────── FM/Db2 (DFG2) Table Edit Template saved TABLE FMNUSER.EMP Format TABL EMPNO FIRSTNME MIDINIT LASTNAME WORKDEPT PHONENO HIREDATE #1 #2 #3 #4 #5 #6 #7 CH(6) VARCHAR(12) CH(1) VARCHAR(15) CH(3) CH(4) DATE PU--+> <---+----1-> - <---+----1----> <-NF <--> <---+----> 000000 **** Top of data **** 000001 000210 WILLIAM< T JONES< D11 0942 11.04.1979 000002 000250 DANIEL< S SMITH< D21 0961 30.10.1969 000003 000300 PHILIP< X SMITH< E11 2095 19.06.1972 000004 **** End of data **** ⋮
引き続きこの同じ例を使用して、姓が SMITH または JONES で、部門 D21 にいる従業員を選択する場合は、行選択基準を再度変更する必要があります。
今回は、あいまいさを避けるために、括弧を使用して、結果の WHERE 文節の評価の順序を定義することが必要になることがあります。「Row Selection Criteria (行選択基準)」パネルで、( および ) 列を使用して、式のグループを括弧で囲むことができます。
Cmd Con ( Column name Op Value ) <-> - <---+----1----+----2----+----3----> <-> <---+----1----+----2----+-- - *** **** Top of data **** ⋮ AND ( LASTNAME = SMITH OR LASTNAME = JONES ) AND WORKDEPT = D21
Process Options Utilities Help ──────────────────────────────────────────────────────────────────────────────── FM/Db2 (DFG2) Table Edit Template saved TABLE FMNUSER.EMP Format TABL EMPNO FIRSTNME MIDINIT LASTNAME WORKDEPT PHONENO HIREDATE #1 #2 #3 #4 #5 #6 #7 CH(6) VARCHAR(12) CH(1) VARCHAR(15) CH(3) CH(4) DATE PU--+> <---+----1-> - <---+----1----> <-NF <--> <---+----> 000000 **** Top of data **** 000002 000250 DANIEL< S SMITH< D21 0961 30.10.1969 000004 **** End of data **** ⋮