niedziela, 2 września 2018

SQL - klauzula UNIONS


SQL - klauzula UNIONS

Polecenie / operacja SQL UNION służy do łączenia wyników dwóch lub większej liczby instrukcji SELECT bez zwracania żadnych duplikatów wierszy.
Aby użyć tej klauzuli UNION, każda instrukcja SELECT musi mieć
  • Tą samą liczbę wybranych kolumn
  • Tą samą liczbę wyrażeń kolumnowych
  • Ten sam typ danych i
  • Mieć je w tej samej kolejności
Ale nie muszą być w tej samej długości.
Składnia
Podstawowa składnia klauzuli UNION jest następująca:
SELECT kolumna1 [, kolumna2 ]
FROM tabela1 [, tabela2 ]
[WHERE warunek]

UNION

SELECT kolumna1 [, kolumna2 ]
FROM tabela1 [,tabela2 ]
[WHERE warunek]
Tutaj podanym warunkiem może być dowolne wyrażenie w oparciu o Twoje wymagania.
Przykład
Rozważ następujące dwie tabele.
Tabela 1 - Tabela KLIENCI przedstawia się następująco.
+----+----------+-----+-----------+----------+
id,   nazwisko,   wiek,  adres,        pensja
'1', 'Zawadzki',  '32', 'Warszawska', '2000.00'
'2', 'Kowalczyk', '25', 'Sokratesa',  '1500.00'
'3', 'Kot',       '23', 'Darwina',    '3500.00'
'4', 'Kowalska',  '25', 'Modlińska',  '6500.00'
'5', 'Sapal',     '27', 'Wspólna',    '8500.00'
'6', 'Nowak',     '22', 'Nalewki',    '4500.00'
'7', 'Makowska',  '24', 'Piaseczno',  '10000.00'
+----+----------+-----+-----------+----------+
Tabela 2 - Tabela zamówień jest następująca.
+----+----------+-----+-----------+----------+
z_id, data, klient_id, wartosc
'1', '2018-02-02', '3', '1200.00'
'2', '2018-03-02', '4', '1800.00'
'3', '2018-03-08', '5', '2800.00'
'4', '2018-04-08', '1', '2500.00'
'5', '2018-04-15', '1', '500.00'
'6', '2018-03-15', '2', '750.00'
+----+----------+-----+-----------+----------+
Teraz, dołączmy te dwie tabele w naszej instrukcji SELECT w następujący sposób -
SQL> SELECT  ID, NAZWISKO, WARTOSC, DATA
   FROM KLIENCI
   LEFT JOIN ZAMOWIENIA
   ON KLIENCI.ID = ZAMOWIENIA.KLIENT_ID
UNION
   SELECT  ID, NAZWISKO, WARTOSC, DATA
   FROM KLIENCI
   RIGHT JOIN ZAMOWIENIA
   ON KLIENCI.ID = ZAMOWIENIA.KLIENT_ID;

To dałoby następujący wynik -
+------+----------+--------+---------------------+
 ID,  NAZWISKO,    WARTOSC,   DATA
'3', 'Kot',       '1200.00', '2018-02-02'
'4', 'Kowalska',  '1800.00', '2018-03-02'
'5', 'Sapal',     '2800.00', '2018-03-08'
'1', 'Zawadzki',  '2500.00', '2018-04-08'
'1', 'Zawadzki',  '500.00',  '2018-04-15'
'2', 'Kowalczyk', '750.00',  '2018-03-15'
'6', 'Nowak',      NULL,      NULL
'7', 'Makowska',   NULL,      NULL
+------+----------+--------+---------------------+

Klauzula UNION ALL

Operator UNION ALL służy do łączenia wyników dwóch instrukcji SELECT, w tym duplikatów wierszy.
Te same zasady, które mają zastosowanie do klauzuli UNION, będą miały zastosowanie do operatora UNION ALL.
Składnia
Podstawowa składnia UNION ALL jest następująca.
SELECT kolumna1 [, kolumna2 ]
FROM tabela1 [,tabela2 ]
[WHERE warunek]

UNION ALL

SELECT kolumna1 [, kolumna2 ]
FROM tabela1 [,tabela2 ]
[WHERE warunek]
Tutaj podanym warunkiem może być dowolne wyrażenie w oparciu o Twoje wymagania.
Przykład
Rozważ następujące dwie tabele,
Tabela 1 - KLIENCI Tabela przedstawia się następująco.
+----+----------+-----+-----------+----------+
id,   nazwisko,   wiek,  adres,        pensja
'1', 'Zawadzki',  '32', 'Warszawska', '2000.00'
'2', 'Kowalczyk', '25', 'Sokratesa',  '1500.00'
'3', 'Kot',       '23', 'Darwina',    '3500.00'
'4', 'Kowalska',  '25', 'Modlińska',  '6500.00'
'5', 'Sapal',     '27', 'Wspólna',    '8500.00'
'6', 'Nowak',     '22', 'Nalewki',    '4500.00'
'7', 'Makowska',  '24', 'Piaseczno',  '10000.00'
+----+----------+-----+-----------+----------+
Tabela 2 - Tabela ZAMÓWIENIA jest następująca.
+----+----------+-----+-----------+----------+
z_id, data,        klient_id,  wartosc
'1', '2018-02-02', '3',       '1200.00'
'2', '2018-03-02', '4',       '1800.00'
'3', '2018-03-08', '5',       '2800.00'
'4', '2018-04-08', '1',       '2500.00'
'5', '2018-04-15', '1',       '500.00'
'6', '2018-03-15', '2',       '750.00'
+----+----------+-----+-----------+----------+
Teraz, dołączmy te dwie tabele w naszej instrukcji SELECT w następujący sposób -
SQL> SELECT  ID, NAZWISKO, WARTOSC, DATA
   FROM KLIENCI
   LEFT JOIN ZAMOWIENIA
   ON KLIENCI.ID = ZAMOWIENIA.KLIENT_ID
UNION ALL
   SELECT  ID, NAZWISKO, WARTOSC, DATA
   FROM KLIENCI
   RIGHT JOIN ZAMOWIENIA
   ON KLIENCI.ID = ZAMOWIENIA.KLIENT_ID;
To dałoby następujący wynik -
+------+----------+--------+---------------------+
# ID, NAZWISKO, WARTOSC,     DATA
'3', 'Kot',       '1200.00', '2018-02-02'
'4', 'Kowalska',  '1800.00', '2018-03-02'
'5', 'Sapal',     '2800.00', '2018-03-08'
'1', 'Zawadzki',  '2500.00', '2018-04-08'
'1', 'Zawadzki',  '500.00',  '2018-04-15'
'2', 'Kowalczyk', '750.00',  '2018-03-15'
'6', 'Nowak',       NULL,     NULL
'7', 'Makowska',    NULL,     NULL
'3', 'Kot',       '1200.00', '2018-02-02'
'4', 'Kowalska',  '1800.00', '2018-03-02'
'5', 'Sapal',     '2800.00', '2018-03-08'
'1', 'Zawadzki',  '2500.00', '2018-04-08'
'1', 'Zawadzki',  '500.00',  '2018-04-15'
'2', 'Kowalczyk', '750.00',  '2018-03-15'
+------+----------+--------+---------------------+
Istnieją dwie inne klauzule (tj. Operatory), które są podobne do klauzuli UNION.
·      Klauzula INTERSECT SQL - Jest używana do łączenia dwóch instrukcji SELECT, ale zwraca wiersze tylko z pierwszej instrukcji SELECT, która jest identyczna z wierszem w drugiej instrukcji SELECT.
·      Klauzula SQL EXCEPT - Łączy dwie instrukcje SELECT i zwraca wiersze z pierwszej instrukcji SELECT, które nie są zwracane przez drugą instrukcję SELECT.


Brak komentarzy:

Prześlij komentarz