Operator Union

Operator UNIONoperator w języku SQL łączący rezultaty dwóch zapytań w jedną tabelę (bądź inną postać wyniku) zawierającą wszystkie pasujące do nich wiersze. Oba zapytania biorące udział w złączeniu muszą generować jednakową liczbę kolumn o odpowiednio kompatybilnych typach danych. Zdublowane rekordy są automatycznie usuwane, z wyjątkiem sytuacji, w której zostało użyte UNION ALL .

Operator UNION może być użyteczny w bazodanowych aplikacjach magazynowych, w których tabele nie są perfekcyjnie unormowane. Prostym przykładem niech będzie baza danych zawierająca tabele sales2005 oraz sales2006, które posiadają identyczną strukturę ale są rozseparowane ze względu na reprezentowane wyniki. Zapytanie UNION powinno połączyć wyniki z obydwu tabel.

UNION nie gwarantuje uporządkowania wierszy. Wiersze z drugiego operandu mogą pojawiać się przed, po, lub pomieszane z wierszami z pierwszego operandu. W razie potrzeby specjalnego uporządkowania, należy użyć ORDER BY.

UNION ALL może być zdecydowanie szybsze niż zwykłe UNION. UNION ALL jest techniką stosowaną do zarządzania serwisowania i tworzenia w środowiskach magazynowych o dużej ilości danych. Chroni ona programistów przed koniecznością tworzenia czasochłonnych projektów bazodanowych. Bazy danych mogą mieć bardzo niejednorodny tzw. bieżący przedział czasowy (np. porcja miesięczna lub dzienna), a starsze dane bywają rzadko uaktualniane. Używające różnych nośników pamięci, obszarów tablicowych, tabel, i definicji indeksów, ustawienia mogą być zestrojone w celu uzyskania specyficznych wyników dla różnych poziomów zmienności i częstotliwości uaktualnień.

W bazach danych MS SQL oraz IBM DB2 operator UNION ALL jest elementem tworzącym zapytania rekurencyjne[1]

Przykłady zastosowań

Dane są następujące dwie tabele:

sales2005
person amount
Joe 1000
Alex 2000
Bob 5000
sales2006
person amount
Joe 2000
Alex 2000
Zach 35000

Użycie następującej sekwencji:

SELECT * FROM sales2005
UNION
SELECT * FROM sales2006;

przyniesie następujący zestaw rezultatów, jednak kolejność wierszy może być różna ponieważ nie dołączono klauzuli ORDER BY:

person amount
Joe 1000
Alex 2000
Bob 5000
Joe 2000
Zach 35000

Warto zauważyć, że są dwa wiersze z Joe ponieważ różnią się one w kolumnie amount. Jest tylko jeden wiersz z Alexem bo w obu tabelach wiersze te nie różnią się.

UNION ALL daje inne rezultaty, ponieważ nie eliminuje duplikatów. Uruchamiając sekwencję:

SELECT * FROM sales2005
UNION ALL
SELECT * FROM sales2006;

można otrzymać następujące rezultaty, ponownie zawierające pomieszane dane z powodu braku rozszerzenia ORDER BY:

person amount
Joe 1000
Joe 2000
Alex 2000
Alex 2000
Bob 5000
Zach 35000

Przypisy

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Kembali kehalaman sebelumnya