Oferty pracy dla inżynierów
  • StrefaInzyniera.pl (current)
  • Oferty pracy
  • Automatyka
    • Uprawnienia elektryczne SEP
    • Elektrotechnika
    • Elektronika
    • Automatyka
    • Robotyka
  • Przemysł
    • Przemysł
    • Obróbka metali
    • CAD
    • CATIA
    • Autodesk Inventor
  • IT
    • JAVA
    • C++
    • Sieci
  • Firmy
  • Dla firm
    • Rejestracja - profil firmy
    • Dodaj ofertę pracy - bezpłatnie
    • Publikacja artykułów
    • Kontakt
  • Zaloguj się
  • STREFA INŻYNIERA
  • Oferty pracy
  • Automatyka
    • Uprawnienia elektryczne SEP
    • Elektrotechnika
    • Elektroniki
    • Automatyki
    • Robotyka
  • Przemysł
    • Przemysł
    • Obróbka metali
    • CAD
    • CATIA
    • Autodesk Inventor
  • IT
    • JAVA
    • C++
    • Sieci
  • Firmy
  • Dla firm
    • Rejestracja - profil firmy
    • Dodaj ofertę pracy - bezpłatnie
    • Publikacja artykułów
    • Kontakt
  • Logowanie
  • Zaloguj się
Categories SQL

Zastosowanie operatora UNION

Operator UNION w SQL jest używany do obsługi logiki dotyczącej wyboru danych pochodzących ze ZBIORU A albo ze ZBIORU B. Najczęściej będą nas interesować właśnie takie informacje. Zacznijmy zatem od przykładu. Załóżmy, że w naszej bazie danych mamy dwie tabele. Pierwsza z nich to tabela o nazwie Zamówienia, zawierająca dane o zamówieniach złożonych przez klientów.

IDZamówienia IDKlienta DataZamówienia KwotaZamówienia
1 1 2016-09-01 10,00
2 2 2016-09-02 12,50
3 2 2016-09-03 18,00
4 3 2016-09-15 20,00

 

Druga tabela, o nazwie ZwrotyTowarów, zawiera dane dotyczące zwrotów towarów zakupionych przez klientów:

IDZwrotu IDKlienta DataZwrotu KwotaZwrotu
1 1 2016-09-10 2,00
2 2 2016-09-15 15,00
3 3 2016-09-28 3,00

 

Chcemy stworzyć raport prezentujący wszystkie zamówienia i zwroty odnoszące się do konkretnego klienta. Chcielibyśmy również posortować zamówienia według daty zamówienia, natomiast zwroty względem daty zwrotu. Możemy uzyskać taki wynik, stosując
zamieszczoną poniżej instrukcję. Puste linie służą jedynie unaocznieniu zastosowania w niej dwóch całkowicie odrębnych instrukcji SELECT powiązanych ze sobą za pomocą operatora UNION:

SELECT
DataZamówienia AS 'Data',
'Zamówienie' AS 'Rodzaj',
KwotaZamówienia AS 'Kwota'
FROM Zamówienia
WHERE IDKlienta = 2
UNION
SELECT
DataZwrotu AS 'Data',

'Zwrot' AS 'Rodzaj',
KwotaZwrotu AS 'Kwota'
FROM ZwrotyTowarów
WHERE IDKlienta = 2

ORDER BY Data

Wynik powyższej instrukcji jest następujący:

Data Rodzaj Kwota
2016-09-02 Zamówienie 12,50
2016-09-03 Zamówienie 18,00
2016-09-15 Zwrot 15,00

 

Jak widać, operator UNION oddziela dwie instrukcje SELECT. Każdą z nich można uruchomić niezależnie od drugiej. Na samym końcu mamy również klauzulę ORDER BY, która odnosi się do wyników zwracanych przez obie instrukcje SELECT. Ogólny format powyższej instrukcji jest następujący:

InstrukcjaSelect_1
UNION
InstrukcjaSelect_2
ORDER BY lista_kolumn

Aby operator UNION zadziałał poprawnie, muszą być spełnione trzy poniższe zasady:
? Wszystkie instrukcje SELECT połączone ze sobą za pomocą operatora UNION muszą mieć taką samą liczbę kolumn na liście_kolumn.
? Wszystkie kolumny na liście_kolumn w każdej instrukcji SELECT muszą być wymieniane w tej samej kolejności.
? Wszystkie odpowiadające sobie kolumny na liście_kolumn każdej instrukcji SELECT muszą mieć takie same lub zgodne ze sobą typy danych.

Nawiązując do powyższych zasad, zauważ, że w obu instrukcjach SELECT wybierane są trzy kolumny. Każda z nich zawiera dane uporządkowane w tej samej kolejności i o takim samym typie.

Ponadto, gdy korzystamy z operatora UNION, powinniśmy użyć aliasów kolumn, aby wszystkie odpowiadające sobie kolumny w poszczególnych zapytaniach miały takie same nazwy. W naszym przykładzie pierwsza kolumna z pierwszej instrukcji SELECT ma pierwotnie stosowaną nazwę pochodzącą z tabeli, a więc DataZamówienia. Analogicznie, pierwsza kolumna w drugiej instrukcji to DataZwrotu. Aby upewnić się, że pierwsza kolumna w wyniku końcowym będzie miała jedną, pożądaną przez nas nazwę, obie wyżej wymienione kolumny otrzymały alias Data. Dzięki temu możemy odwołać się do tej kolumny w ramach listy_kolumn w klauzuli ORDER BY.

Zauważ również, że druga kolumna każdej z instrukcji SELECT wykorzystuje wartości literału. Utworzona została kolumna obliczana o nazwie Rodzaj, w którą wstawiana jest wartość Zamówienie lub Zwrot. Dzięki temu wiemy, z której tabeli pochodzi każdy wiersz z wyniku.

Na koniec zwróć uwagę na to, że klauzula ORDER BY odnosi się do końcowych wyników zwracanych przez oba połączone ze sobą zapytania. Jest to prawidłowe działanie, ponieważ zastosowanie sortowania oddzielnie do każdej z instrukcji nie miałoby sensu.

W tym momencie warto się zatrzymać, aby zadać sobie pytanie, dlaczego w powyższym przypadku konieczne było zastosowanie operatora UNION zamiast zwykłego złączenia tabeli Zamówienia z tabelą ZwrotyTowarów za pomocą pojedynczej instrukcji SELECT. Skoro w obu tabelach istnieją kolumny o nazwie IDKlienta, dlaczego nie możemy po prostu połączyć tych dwóch tabel za pomocą tej właśnie kolumny? Problem polega na tym, że obie te tabele są tak naprawdę powiązane ze sobą jedynie pośrednio. Klienci mogą składać zamówienia oraz dokonywać zwrotów, ale nie istnieje bezpośredni związek pomiędzy zamówieniami a zwrotami.

Ponadto, nawet gdyby istniało bezpośrednie połączenie między tymi dwoma tabelami, złączenie, o którym mowa powyżej, nie dałoby oczekiwanych rezultatów. Dzięki zastosowaniu odpowiedniego złączenia powiązane ze sobą informacje mogą być wyświetlone w tym samym wierszu. Jednakże w tym przypadku naszą intencją jest wyświetlenie zamówień i zwrotów w oddzielnych wierszach. Nasz cel osiągniemy właśnie poprzez zastosowanie operatora UNION.

Podsumowując, operator UNION umożliwia nam wyświetlenie za pomocą jednego zapytania niepowiązanych ze sobą danych lub danych powiązanych częściowo.

 

Język SQL. Przyjazny podręcznik. Wydanie II Autor: Larry Rockoff Wydawnictwo: Helion

Zaloguj się aby dodać komentarz

Podobne artykuły

« Wstawianie danych - INSERTOperator EXISTS »

Podziel się ze znajomymi tym artykułem - udostępnij na FB lub wyślij e-maila korzystając z poniższych opcji:

Oferty pracy dla inżynierów
Oferty pracy dla inżynierów

Elektryk automatyk

Guz Technika Piekarnicza
Siemianowice Śląskie, śląskie
4500-6500 PLN

Product Engineer

SPX Flow Inc.
Bydgoszcz, kujawsko-pomorskie

Inżynier ds. Rozwoju Platform i Aplikacji Telewizyjnych

Play (P4 sp. zo.o.)
Warszawa, mazowieckie

Starszy Inżynier ds. Rozwoju Platform Strumieniowania i Dystrybucji Wideo

Play (P4 sp. zo.o.)
Warszawa, dowolny Region

Inżynier ds. Rozwoju Urządzeń Abonenckich – Smartfony, Tablety, Urządzenia Wearables

Play (P4 sp. zo.o.)
Warszawa, dowolny Region

Ekspert ds. Rozwoju Urządzeń Abonenckich STB

Play (P4 sp. zo.o.)
Warszawa, dowolny Region

wszystkie oferty
PracaTechniczna.pl

Strefainzyniera.pl - rynek, praca, rozwój - wszystko co ważne dla inżynierów

  • Dla pracodawcy
  • Artykuły
  • Praca
  • Publikacje
  • Popularne stanowiska
  • Offer in English
  • Regulamin
  • Regulamin dla klientów
  • Polityka prywatności
  • Polityka cookies
  • Kontakt

© 2011 - 2021 NetPortal

Mapa strony Letnisko blisko