SQL 解説書

相関名

相関名 は、照会の FROM 文節、 および UPDATE または DELETE ステートメントの第 1 文節で指定されます。 たとえば、FROM X.MYTABLE Z という文節では、Z が X.MYTABLE の相関名として確立されます。

   FROM X.MYTABLE Z

X.MYTABLE の相関名として Z が定義されると、 その SELECT ステートメントにおいては Z だけが X.MYTABLE インスタンスの列を参照する修飾子として使用できます。

相関名は、それが定義されている文脈内でのみ、表、視点、ニックネーム、別名、 ネストされた表の式または表関数に関連付けられます。 したがって、別の目的に使用するために、 異なるステートメントの中や同じステートメントの異なる文節の中で同じ相関名を定義できます。

修飾子としての相関名は、あいまいさの回避や、相関参照の確立に利用できます。 また、表、視点、ニックネーム、別名の単なる短縮名として利用することもできます。 ネストされた表の式または表関数の場合、相関名は結果表を識別するのに必要になります。 例では、X.MYTABLE と何度も入力するのを避けるためだけに使用されています。

相関名を表名、視点名、ニックネーム、または別名に対して指定する場合、 その表、視点、ニックネーム、または別名のそのインスタンスでの列への修飾子付き参照は、 その表名、視点名、ニックネーム、別名ではなく、相関名を使用しなければなりません。 たとえば、以下の例の EMPLOYEE.PROJECT への参照は、 EMPLOYEE に対する相関名がすでに指定されているため誤りです。

例:

                                                                                          
  FROM EMPLOYEE E
    WHERE EMPLOYEE.PROJECT='ABC'      * incorrect*

PROJECT に対する修飾子付き参照では、以下のように、 相関名 "E" を EMPLOYEE の代わりに使用する必要があります。

  FROM EMPLOYEE E
    WHERE E.PROJECT='ABC'

FROM 文節で指定する名前は、 直接的間接的 のどちらかです。 相関名が指定されていない場合の表名、視点名、ニックネーム、 または別名は FROM 文節の直接的な名前です。 相関名は常に直接的な名前です。 たとえば、以下の FROM 文節では、EMPLOYEE には相関名が指定され、 DEPARTMENT には指定されていません。 このため、DEPARTMENT は直接的な名前、EMPLOYEE は間接的な名前になります。

  FROM EMPLOYEE E, DEPARTMENT

FROM 文節の直接的な表名、視点名、ニックネーム、または別名は、 その FROM 文節での直接的なその他の表名、視点名、ニックネーム、 または FROM 文節の相関名のどれかと同じになる場合があります。 これにより列名参照があいまいとなり、エラー (SQLSTATE 42702) となる可能性があります。

以下に示す最初の 2 つの FROM 文節は、 直接的な名前である EMPLOYEE をそれぞれ 2 回以上参照するような参照を行っていないので正しい FROM 文節です。

  1. 次の FROM 文節が与えられているものとします。
      FROM EMPLOYEE E1, EMPLOYEE
    

    EMPLOYEE.PROJECT のような修飾子付き参照は、 FROM 文節での EMPLOYEE の 2 番目のインスタンスの列を指すことになります。 EMPLOYEE の 1 番目のインスタンスに対する修飾子付き参照では、 相関名 "E1" を使用する (E1.PROJECT) 必要があります。

  2. 次の FROM 文節が与えられているものとします。
      FROM EMPLOYEE, EMPLOYEE E2
    

    EMPLOYEE.PROJECT のような修飾子付き参照は、 FROM 文節での EMPLOYEE の 1 番目のインスタンスの列を指すことになります。 EMPLOYEE の 2 番目のインスタンスに対する修飾子付き参照では、 相関名 "E2" を使用する (E2.PROJECT) 必要があります。

  3. 次の FROM 文節が与えられているものとします。
        FROM EMPLOYEE, EMPLOYEE
    

    この文節では、直接的な 2 つの表名 (EMPLOYEE と EMPLOYEE) が同じになっています。 これ自体は可能ですが、特定の列名への参照があいまいになってしまいます (SQLSTATE 42702)。

  4. 次のステートメントが与えられているものとします。
     SELECT *
       FROM EMPLOYEE E1, EMPLOYEE E2             * incorrect *
       WHERE EMPLOYEE.PROJECT = 'ABC'
    

    修飾子付き参照 EMPLOYEE.PROJECT は誤りです。 これは、FROM 文節の EMPLOYEE の 2 つのインスタンスの両方に相関名があるためです。 そうするのではなく、PROJECT を参照するときは、 どちらかの相関名 (E1.PROJECT または E2.PROJECT) で修飾する必要があります。

  5. 次の FROM 文節が与えられているものとします。
      FROM EMPLOYEE, X.EMPLOYEE
    

    EMPLOYEE の 2 番目のインスタンスの列を参照するときは、 X.EMPLOYEE を使用する (X.EMPLOYEE.PROJECT) 必要があります。 X が、動的 SQL では CURRENT SCHEMA 特殊レジスター値、 静的 SQL では QUALIFIER プリコンパイル / バインド・オプションである場合、 そのような参照はあいまいなので列を参照することはできません。

FROM 文節で相関名を使用することにより、 結果表の列に関連付けられる列名のリストを指定することもできます。 相関名の場合と同じように、このようにリストされた列名は、 照会時に列の参照に使用する必要がある列の直接的な 名前になります。 列名のリストを指定する場合、基礎表の列名は間接的な名前 になります。

次の FROM 文節が与えられているものとします。

  FROM DEPARTMENT D (NUM,NAME,MGR,ANUM,LOC)

D.NUM などの修飾子のついた参照は、 DEPTNO として表に定義されている DEPARTMENT 表の最初の列を表します。 この FROM 文節を使用した D.DEPTNO の参照は、 列名 DEPTNO が間接的な列名であるため誤りです。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]