Windows - Eredmények összegzése az UNION kulcsszó segítségével

4. rész

forráskód letöltése
Ebben a részben az unióképzési lehetőségeit tárgyaljuk a Transact-SQL SELECT utasításnak. Több tábla tartalmát – amennyiben szerkezetük azonos – egyesítve tudjuk lekérdezni. A magától értetődő felhasználási lehetőségeken túl egyéb hasznos lekérdezéseket is írhatunk, amire példát is találhat cikkünkben.
Két vagy több lekérdezés sorait kapcsolja össze egy közös eredménytáblába. Az eredményben mindegyik lekérdezésnek minden sora szerepel, és ebben különbözik a join-tól, ahol csak a feltételnek megfelelő sorokat találjuk. Két fontos szabály van az összegképzést illetően:
  • Az oszlopok számának és azonosítójának meg kell egyezniük mindegyik lekérdezésben.
  • Az adattípusoknak kompatibiliseknek kell lenniük.
Szintaxis
{ < lekérdezés specifikáció > | ( < lekérdezés kifejezés > ) }
UNION [ ALL ]
< lekérdezés specifikáció | ( < lekérdezés kifejezés > )
[ UNION [ ALL ] < lekérdezés specifikáció | ( < lekérdezés kifejezés > )
[ ...n ] ]
Paraméterek
  • < lekérdezés specifikáció > | ( < lekérdezés kifejezés > )
Akár specifikált, vagy kifejezésben megadott a lekérdezés, az eredmény a másik lekérdezés adataival összegződik. Az oszlopdefinícióknak nem azonosnak, hanem implicit konverziót tekintve kompatibilisek kell lenniük.
  • UNION
Azt határozza meg, hogy több eredményhalmazt egyesítve jelenítsen meg.
  • ALL
Minden sort belefoglal az eredménybe, még a duplán meglévőket is. Használata nélkül az azonos tartalmú sorokból csak egy darab szerepel az eredményben.
Egyéb tudnivalók
Ha használjuk az UNION feltételt, akkor az egyes SELECT utasításoknak nem lehet saját ORDER BY vagy COMPUTE feltétele. Ezek csupán az utolsó SELECT után szerepelhetnek, és az összegzett eredménytáblára lesz hatásuk. Ezzel szemben GROUP BY és HAVING csak a külön SELECT utasításokban használható, nem pedig az összegzett eredményben.
SELECT * FROM Tabla1
UNION
SELECT * FROM Tabla2
UNION
SELECT * FROM Tabla3
UNION
SELECT * FROM Tabla4
A fenti példa azt mutatja, hogy akárhány UNION lehet egy lekérdezésben.
SELECT irsz AS Iranyitoszam FROM Budapest
UNION
SELECT irsz FROM Baranya
ORDER BY irsz
Az eredménytábla oszlopainak neveit a parancsértelmező az első SELECT utasítás megadott oszlopnevei szerint adja. Ha alias nevet szeretnénk megadni, akkor ezt is természetesen az első SELECT-ben tegyük meg.
Példák
A példákhoz most is a Northwind példaadatbázist használtuk.
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
A legegyszerűbb példa unióra, ha a vásárlókhoz és a beszállítókhoz tartozó városokra vagyunk kíváncsiak. Habár létezik olyan város, amely többször is szerepel a vásárlók táblájában, az egyszerű unióképzés hatására csak egy sor marad belőle.
SELECT City AS Varos FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City
Ebben a változatban kibővítettük az előző lekérdezést úgy, hogy minden létező sort szerepeltetünk az unióban, és az egyedüli oszlophoz alias nevet adtunk meg.
SELECT OrderDate AS Datumok FROM Orders
UNION
SELECT RequiredDate FROM Orders
UNION
SELECT ShippedDate FROM Orders
Ebben az utolsó példában többszörös unió segítségével a megrendelések táblájában előforduló három dátummező valamennyi különálló értékét egy listában tudjuk megjeleníteni.

A Transact-SQL SELECT utasítás cikksorozat