SQL 概説

集合演算子によって複数の照会を組み合わせる

UNION、EXCEPT、および INTERSECT 集合演算子を使うと、 単一の照会の中に複数の外側レベルの照会を組み合わせることができます。 それらの集合演算子で結合した照会がそれぞれ実行され、 それぞれ別個の結果が組み合わされます。 各演算子は、それぞれ違った結果を生成します。

UNION 演算子

UNION 演算子を使うと、 他の 2 つの表 (たとえば TABLE1 と TABLE2) を組み合わせ、 その中の行の重複を除去することによって結果表が生成されます。 UNION と共に ALL を使った場合 (UNION ALL)、 行の重複は除去されません。 いずれにしても、生成される表の各行は、TABLE1 か TABLE2 のいずれかから取られた行です。

次の例は、UNION 演算子を使うことによって、 給与が $21, 000 より多い人、 または管理職 (MANAGER) で就業年数 (YEARS) が 8 年未満の人の名前を戻す照会の例です。

(1)

     SELECT ID, NAME FROM STAFF WHERE SALARY > 21000
     UNION

(2)

     SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8
     ORDER BY ID
     

個々の照会の結果は、次のとおりです。

(1)

                                                                          
     ID     NAME                                                             
     ------ ---------                                                        
        140 Fraye                                                            
        160 Molinare                                                         
        260 Jones                                                            
                                                                               

(2)

     ID     NAME      
     ------ --------- 
         10 Sanders   
         30 Marenghi  
        100 Plotz     
        140 Fraye     
        160 Molinare  
        240 Daniels   

データベース・マネージャーは、2 つの照会の結果を組み合わせ、 重複を除去してから、最終結果を昇順で戻します。

                                            
     ID     NAME     
     ------ ---------
         10 Sanders  
         30 Marenghi 
        100 Plotz    
        140 Fraye    
        160 Molinare 
        240 Daniels  
        260 Jones    

ORDER BY 文節をいずれかの集合演算子と共に使う場合、 それは最後の照会より後でなければなりません。 順序は、組み合わせた後の結果セットに適用されます。

2 つの表の中の列名が違っているなら、 組み合わされた結果の表には、対応する列の名前が含まれません。 列は、それが出現する順序で番号が付けられます。 そのため、結果表の順序を指定するのであれば、 その列番号を ORDER BY 文節に指定する必要があります。

EXCEPT 演算子

EXCEPT 演算子は、TABLE1 には含まれているが TABLE2 には含まれていない行を取り出し、 行の重複をすべて除去することによって結果表を生成します。 EXCEPT と共に ALL を使った場合 (EXCEPT ALL)、 行の重複は除去されません。

次の例は、EXCEPT 演算子を使うことによって、 給与が $21,000 より多いが、 管理職 (MANAGER) ではなく就業年数 (YEARS) が 8 年以上の人の名前を戻す照会の例です。

     SELECT ID, NAME FROM STAFF WHERE SALARY > 21000
     EXCEPT
     SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8
     

個々の照会の結果は、UNION の説明で示したものと同じです。 このステートメントの結果は、次のとおりです。

     ID     NAME     
     ------ ---------
        260 Jones    

INTERSECT 演算子

INTERSECT 演算子は、 TABLE1 にも TABLE2 にも含まれている行を取り出し、 行の重複をすべて除去することによって結果表を生成します。 INTERSECT と共に ALL を使った場合 (INTERSECT ALL)、重複した行は削除されません。

次の例は、INTERSECT 演算子を使うことによって、 給与が $21,000 より多く、 かつ管理職 (MANAGER) で就業年数 (YEARS) が 8 年未満の従業員の名前と ID を戻す照会の例です。

     SELECT ID, NAME FROM STAFF WHERE SALARY > 21000
     INTERSECT
     SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8

個々の照会の結果は、UNION の説明で示したものと同じです。 2 つの照会を INTERSECT で結合した結果は、次のとおりです。

     ID     NAME     
     ------ ---------
        140 Fraye    
        160 Molinare 
     

UNION、EXCEPT、および INTERSECT 演算子を使う場合、 次のことに注意してください。


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