Hitachi

Hitachi Advanced Data Binder SQLリファレンス


6.8.3 範囲変数の有効範囲

範囲変数の有効範囲の例を次の表に示します。

表6‒16 範囲変数の有効範囲の例

項番

SQL例

範囲変数

A.T1

X

A.T2

A.T3

Y

A.T4

A.T5

Z

1

SELECT "X"."C1","T2"."C2"

×

×

×

×

×

2

FROM "A"."T1" "X",

×

×

×

×

×

3

"A"."T2",

×

×

×

×

×

4

(SELECT * FROM "T3"

×

×

×

×

×

×

×

5

WHERE "T3"."C1"=100) "Y"

×

×

×

×

×

×

×

6

WHERE "X"."C1"=100 AND

×

×

×

×

×

7

"X"."C1"=ANY(

×

×

×

×

×

8

SELECT "T4"."C1" FROM "T4",

×

×

×

×

×

×

9

(SELECT *

×

×

×

×

×

×

×

10

FROM "T5"

×

×

×

×

×

×

×

11

WHERE "T5"."C1"="X"."C1")"Z"

×

×

×

×

12

WHERE "T4"."C2"="A"."T2"."C2")

×

×

×

(凡例)

○:有効範囲内です。

×:有効範囲外です。

A:スキーマ名

T1T5:表識別子

X,Y,Z:相関名

C1C2:列名

SELECT文,UPDATE文およびDELETE文の範囲変数の有効範囲について説明します。

〈この項の構成〉

(1) SELECT文のFROM句に指定した範囲変数の有効範囲

範囲変数となる識別子を直接FROM句に含む問合せ指定と,その問合せ指定に含まれる副問合せ中の探索条件が,範囲変数の有効範囲になります。ただし,次に示す導出表中または集まり導出表中では,範囲変数は有効範囲を持ちません。

例を次の図に示します。

図6‒12 FROM句に指定した範囲変数"T1"の有効範囲の例(その1)

[図データ]

[説明]
  1. 範囲変数をFROM句に直接含む問合せ指定のため,範囲変数"T1"は参照できます。

  2. 範囲変数となる識別子を直接含むFROM句と同じFROM句に指定した導出表のため,範囲変数"T1"は参照できません。

  3. 範囲変数をFROM句に直接含む問合せ指定のため,範囲変数"T1"は参照できます。

  4. 副問合せの探索条件以外のため,範囲変数"T1"は参照できません。

  5. 範囲変数をFROM句に直接含む問合せ指定に含まれる副問合せの探索条件のため,範囲変数"T1"は参照できます。

  6. 外側の問合せのため,範囲変数"T1"は参照できません。

図6‒13 FROM句に指定した範囲変数"T1"の有効範囲の例(その2)

[図データ]

[説明]

結合表の結合指定の例です。

  1. 範囲変数をFROM句に直接含む問合せ指定のため,範囲変数"T1"は参照できます。

  2. 結合指定を含む結合表の表参照に"T1"が指定されているため,範囲変数"T1"は参照できます。

  3. 結合指定を含む結合表の表参照に"T1"が指定されていないため,範囲変数"T1"は参照できません。

  4. 結合指定を含む結合表の表参照に"T1"が指定されているため,範囲変数"T1"は参照できます。

図6‒14 範囲変数の有効範囲の例(問合せ名を指定している場合)

[図データ]

[説明]

問合せ名は,スキーマ名で修飾できません。スキーマ名で修飾した場合,問合せ名ではなく表識別子として見なされます。また,問合せ名と同じ名称の表識別子が存在する場合,問合せ名の有効範囲内では,問合せ名として見なされます。問合せ名の有効範囲外では,表識別子として見なされます。そのため,表識別子としてFROM句に範囲変数を指定する場合は,スキーマ名で修飾してください。

図6‒15 範囲変数の有効範囲の例(集まり導出表を指定している場合)

[図データ]

[説明]

囲変数T3についての有効範囲を説明しています。

  1. 範囲変数をFROM句に直接含む問合せ指定のため,範囲変数T3を参照できます。

  2. 範囲変数となる識別子を直接含むFROM句と同じFROM句中では,範囲変数となる識別子の左側に指定した集まり導出表中であるため,範囲変数T3を参照できません。

  3. 範囲変数となる識別子を直接含むFROM句と同じFROM句中であり,範囲変数となる識別子の左側に指定した集まり導出表中ではないため,範囲変数T3を参照できます。

  4. 範囲変数をFROM句に直接含む問合せ指定のため,範囲変数T3を参照できます。

(2) UPDATE文の更新対象表(範囲変数)の有効範囲

UPDATE文のSET句,探索条件,および探索条件に含まれる副問合せ中の探索条件が,範囲変数の有効範囲となります。例を次の図に示します。

図6‒16 UPDATE文に指定した範囲変数"T1"の有効範囲の例

[図データ]

[説明]
  1. UPDATE文のSET句,探索条件のため,範囲変数"T1"は参照できます。

  2. 副問合せの探索条件以外のため,範囲変数"T1"は参照できません。

  3. UPDATE文のSET句に含まれる副問合せの探索条件のため,範囲変数"T1"は参照できます。

  4. UPDATE文のSET句,探索条件のため,範囲変数"T1"は参照できます。

  5. 副問合せの探索条件以外のため,範囲変数"T1"は参照できません。

  6. UPDATE文の探索条件に含まれる副問合せの探索条件のため,範囲変数"T1"は参照できます。

(3) DELETE文の削除対象表(範囲変数)の有効範囲

DELETE文の探索条件,および探索条件に含まれる副問合せ中の探索条件が,範囲変数の有効範囲となります。例を次の図に示します。

図6‒17 DELETE文に指定した範囲変数"T1"の有効範囲の例

[図データ]

[説明]
  1. DELETE文の探索条件のため,範囲変数"T1"は参照できます。

  2. 副問合せの探索条件以外のため,範囲変数"T1"は参照できません。

  3. DELETE文の探索条件に含まれる副問合せの探索条件のため,範囲変数"T1"は参照できます。

(4) INSERT文の挿入対象表(範囲変数ではない)の有効範囲

INSERT文の挿入対象表は,挿入値中(副問合せも含みます),および問合せ式本体中のどこにも有効範囲を持ちません。例を次に示します。

(例)
INSERT INTO "T1"     ...1
    VALUES(
            (SELECT "C1" FROM "T3"
                 WHERE "C2">="C3"     ...2
            )
           )
[説明]
  1. 下線で示している挿入対象表は,INSERT文中のどこにも有効範囲を持ちません。

  2. 副問合せの探索条件であっても挿入対象表T1は参照できません。