SQL 概説

述部

述部は、条件を構成して、 それらの条件を満たす行だけが処理されるようにするために使います。 基本的な述部については、行の選択で説明されています。 ここでは、IN、BETWEEN、LIKE、EXISTS、 および比較述部について説明します。

IN 述部の使用

IN 述部は、ある値を他のいくつかの値と比較するのに使います。 たとえば、

     SELECT NAME
        FROM STAFF
        WHERE DEPT IN (20, 15)

この例は、次のものと同じです。

     SELECT NAME
        FROM STAFF
        WHERE DEPT = 20  OR DEPT = 15

副照会が値の集合を戻す場合には、IN および NOT IN 演算子を使えます。 たとえば、次の照会では、 プロジェクト MA2100 と OP2012 を担当する従業員の姓を出力します。

     SELECT LASTNAME
        FROM EMPLOYEE
        WHERE EMPNO IN
           (SELECT RESPEMP
               FROM PROJECT
               WHERE PROJNO = 'MA2100'
               OR PROJNO = 'OP2012')

副照会は一度評価され、 外側の照会の対応する位置がその結果によって置き換えられます。 たとえば、上記の副照会で、従業員番号が 10 と 330 の従業員が選択されると、 外側の照会は WHERE 文節が次のものになったかのようにして評価されます。

     WHERE EMPNO IN (10, 330)

副照会から戻される値のリストには、0 個、1 個、 あるいは複数個の値が含まれる可能性があります。

BETWEEN 述部の使用

BETWEEN 述部は、 1 つの値と一定範囲の値 (BETWEEN 述部で指定) を比較します。

次の例では、 給与が $10, 000 以上、 $20, 000 以下の従業員について調べています。

     SELECT LASTNAME
        FROM EMPLOYEE
        WHERE SALARY BETWEEN 10000 AND 20000

これは、次のものと同じです。

     SELECT LASTNAME
        FROM EMPLOYEE
        WHERE SALARY >= 10000 AND SALARY <= 20000

次の例では、 給与が $10, 000 未満か、 または $20, 000 を超える従業員について調べています。

     SELECT LASTNAME
        FROM EMPLOYEE
        WHERE SALARY NOT BETWEEN 10000 AND 20000

LIKE 述部の使用

LIKE 述部は、 特定のパターンにマッチするストリングを検索するのに使います。 パターンは、パーセント記号と下線記号を使って指定します。

次の例では、 文字 'S' で始まる長さが 7 文字の従業員名を選択しています。

     SELECT NAME
        FROM STAFF
        WHERE NAME LIKE 'S _ _ _ _ _ _'

次の例では、最初の文字が文字 'S' ではない従業員名を選択しています。

     SELECT NAME
        FROM STAFF
        WHERE NAME  NOT LIKE 'S%'

EXISTS 述部の使用

副照会を使うことによって、なんらかの条件を満たす行の存在 を検査することができます。 その場合、その副照会は EXISTS または NOT EXISTS 述部によって外側レベルの照会に結び付けられます。

EXISTS 述部によって副照会を外側照会に結び付ける場合、 その副照会から値は戻されません。 この場合、副照会の結果セットに 1 行以上の行が 含まれているなら EXISTS 述部は真になり、行が含まれていないなら偽になります。

EXISTS 述部は、相関副照会で使われることがよくあります。 下の例は、現在、PROJECT 表の中に項目がない部署のリストを出力します。

     SELECT DEPTNO, DEPTNAME
        FROM DEPARTMENT X
        WHERE NOT EXISTS
                 (SELECT *
                     FROM PROJECT
                     WHERE DEPTNO = X.DEPTNO)
        ORDER BY DEPTNO

EXISTS および NOT EXISTS 述部を他の述部と結合するには、 外側レベルの照会の WHERE 文節の中で AND や OR を使います。

比較述部

比較述部は、ある値を値の集合と比較します。 全選択が複数の値を戻す場合、 述部の中の比較演算子に接尾部 ALL、ANY、または SOME を付けるよう変更する必要があります。 それらの接尾部は、 戻される値セットが外側レベルの述部の中でどのように処理されるかを決めるものです。 ここでは、一例として > 比較演算子を使っています (以下の説明はその他の演算子にも適用されます)。

式 > ALL (全選択)
この述部は、 式が全選択から戻されるどの値よりも大きい場合に真になります。 全選択から何も値が戻されない場合、述部は真です。 指定された関係が少なくとも 1 つの値について偽なら、結果は偽になります。 <>ALL という比較述部は、NOT IN 述部と同じことになります。

次の例は、副照会と > ALL 比較を使って、 どの管理職よりも給与の多い従業員の姓 (LASTNAME) とその肩書き (JOB) を出力します。

     SELECT LASTNAME, JOB
        FROM EMPLOYEE
        WHERE SALARY > ALL
        (SELECT SALARY
            FROM EMPLOYEE
            WHERE JOB='MANAGER')

式 > ANY (全選択)
この述部は、式が全選択から戻される少なくとも 1 つの値より大きい場合に真になります。 全選択から何も値が戻されない場合、述部は偽です。 =ANY は IN 述部と同じことになります。

式 > SOME (全選択)
SOME は ANY の同義語です。

述部と演算子については、 SQL 解説書 を参照してください。


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