Ställ in operationer (SQL)

Uppsättningsoperationer gör att resultaten från flera frågor kan kombineras till en enda resultatuppsättning . Setoperatorerna inkluderar UNION , INTERSECT och EXCEPT .

UNION operatör

I SQL kombinerar UNION - satsen resultaten av två SQL-frågor till en enda tabell med alla matchande rader . De två frågorna måste resultera i samma antal kolumner och kompatibla datatyper för att kunna förenas. Alla dubbletter tas bort automatiskt om inte UNION ALL används.

UNION kan vara användbart i datalagerapplikationer där tabeller inte är perfekt normaliserade . Ett enkelt exempel skulle vara en databas med tabeller sales2005 och sales2006 som har identiska strukturer men är separerade på grund av prestandaskäl. En UNION- fråga kan kombinera resultat från båda tabellerna.

Observera att UNION ALL inte garanterar ordningen på raderna. Rader från den andra operanden kan visas före, efter eller blandas med rader från den första operanden. I situationer där en specifik beställning önskas ORDER BY användas.

Observera att UNION ALL kan vara mycket snabbare än vanlig UNION .

Exempel

Med tanke på dessa två tabeller:

försäljning 2005
person belopp
Joe 1000
Alex 2000
Guppa 5 000
försäljning 2006
person belopp
Joe 2000
Alex 2000
Zach 35 000

Utför detta uttalande:

   

    VÄLJ  *  FRÅN  försäljning2005  UNION  VÄLJ  *  FRÅN  försäljning 2006  ; 

ger denna resultatuppsättning, även om ordningen på raderna kan variera eftersom ingen ORDER BY- sats tillhandahölls:

person belopp
Joe 1000
Alex 2000
Guppa 5 000
Joe 2000
Zach 35 000

Observera att det finns två rader för Joe eftersom dessa rader är olika över sina kolumner. Det finns bara en rad för Alex eftersom dessa rader inte är distinkta för båda kolumnerna.

UNION ALL ger olika resultat, eftersom det inte kommer att eliminera dubbletter. Utför detta uttalande:

   
 
    VÄLJ  *  FRÅN  försäljning 2005  UNION  ALLA  VÄLJ  *  FRÅN  försäljning 2006  ; 

skulle ge dessa resultat, återigen tillåta varians för avsaknaden av en ORDER BY -sats:

person belopp
Joe 1000
Joe 2000
Alex 2000
Alex 2000
Guppa 5 000
Zach 35 000

Diskussionen om fullständiga yttre sammanfogningar har också ett exempel som använder UNION .

INTERSECT-operatör

SQL INTERSECT -operatorn tar resultaten av två frågor och returnerar endast rader som visas i båda resultatuppsättningarna. I syfte att ta bort dubbletter skiljer INTERSECT- operatören inte på NULL . INTERSECT - operatorn tar bort dubbletter av rader från den slutliga resultatuppsättningen. Operatören INTERSECT ALL tar inte bort dubbletter av rader från den slutliga resultatuppsättningen, men om en rad visas X gånger i den första frågan och Y gånger i den andra kommer den att visas min ( X , Y ) { gånger i resultatuppsättningen.

Exempel

Följande exempel INTERSECT- fråga returnerar alla rader från ordertabellen där Kvantitet är mellan 50 och 100.

 
   
      



 
   
       VÄLJ  *  FRÅN  Beställningar  WHERE  Kvantitet  MELLAN  1  OCH  100  INTERSECT  VÄLJ  *  FRÅN  Beställningar  WHERE  Kvantitet  MELLAN  50  OCH  200  ; 

UTOM operatör

SQL EXCEPT- operatorn tar de distinkta raderna i en fråga och returnerar de rader som inte visas i en andra resultatuppsättning. För radeliminering och dubblettborttagning skiljer inte operatorn EXCEPT mellan NULLs . Operatören EXCEPT ALL tar inte bort dubbletter, men om en rad visas X gånger i den första frågan och Y gånger i den andra kommer den att visas gånger i resultatuppsättningen.

Oracle-plattformen tillhandahåller en MINUS- operator som är funktionellt likvärdig med SQL-standarden EXCEPT DISTINCT- operatorn.

Exempel

Följande exempel EXCEPT- frågan returnerar alla rader från ordertabellen där Kvantitet är mellan 1 och 49, och de med en Kvantitet mellan 76 och 100.

Uttryckt på ett annat sätt; frågan returnerar alla rader där kvantiteten är mellan 1 och 100, förutom rader där kvantiteten är mellan 50 och 75.

 
   
      



 
   
       VÄLJ  *  FRÅN  Beställningar  VAR  Kvantitet  MELLAN  1  OCH  100  FÖRUTOM  VÄLJ  *  FRÅN  Beställningar  VAR  Kvantitet  MELLAN  50  OCH  75  ; 

Exempel

Följande exempel motsvarar exemplet ovan men utan att använda operatorn EXCEPT .

 
 
     
     
          
  
     
     
          
   
    VÄLJ  o1  .  *  FRÅN  (  VÄLJ  *  FRÅN  Beställningar  VAR  Kvantitet  MELLAN  1  OCH  100  )  o1  VÄNSTER  JOIN  (  VÄLJ  *  FRÅN  Beställningar  DÄR  Kvantitet  MELLAN  50  OCH  75  )  o2  o1  .  id  =  o2  .  id  VAR  o2  .  ID  ÄR  NULL 

Se även

externa länkar