DZWON

Są tacy, którzy czytają tę wiadomość przed tobą.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać The Bell
Bez spamu

Operator SQL UNION służy do łączenia wynikowych tabel bazy danych uzyskanych za pomocą słowa SELECT. Stan unii wynikowych tabel: zbieżność liczby, kolejności i typu danych kolumn. ORDER BY należy zastosować do wyniku sprzężenia i pojawić się tylko na końcu zapytania złożonego. Operator UNION ma następującą składnię:

SELECT COLUMN_NAME (1..N) FROM TABLE_NAME UNION SELECT COLUMN_NAME (1..N) FROM TABLE_NAME

W tej konstrukcji zapytania do scalenia mogą, ale nie muszą, mieć warunki w klauzuli WHERE. Używając operatora UNION, możesz łączyć zapytania w celu pobrania danych z tej samej tabeli lub z różnych.

W przypadku użycia operatora UNION bez słowa ALL wynik nie zawiera duplikatów, a wraz ze słowem ALL nie zawiera duplikatów.

Sumy i poszczególne wartości w jednej tabeli za pomocą instrukcji SQL UNION

Za pomocą jednego zapytania można wywnioskować wartości poszczególnych kolumn z tabeli, na przykład liczbę lat przepracowanych przez pracowników firmy, ich pensje i inne. Używa innego żądania funkcje agregujące - można uzyskać np. wysokość wynagrodzeń otrzymywanych przez pracowników działów lub zajmujących określone stanowiska, czy średnią liczbę lat stażu pracy (w takich zapytaniach grupowanie stosuje się za pomocą operatora GROUP BY).

A co, jeśli potrzebujemy umieścić w jednej tabeli zarówno podsumowanie wszystkich pojedynczych wartości, jak i sumy? Tutaj na ratunek przychodzi instrukcja SQL UNION, która łączy dwa zapytania. Porządkowanie należy zastosować do wyniku łączenia za pomocą klauzuli ORDER BY. Po co to jest, lepiej zrozumiemy na podstawie przykładów.

Przykład 1. Baza danych firmy zawiera tabelę Personel, która zawiera dane o pracownikach firmy. Zawiera kolumny Wynagrodzenie (wynagrodzenie), Stanowisko (stanowisko) i Lata (staż pracy). Pierwsze zapytanie zwraca poszczególne pensje, posortowane według stanowiska:

WYBIERZ Imię i Nazwisko, Stanowisko, Wynagrodzenie Z ZAMÓWIENIA PERSONELU WEDŁUG stanowiska

ImięPracaWynagrodzenie
SandersMgr18357.5
MarenghiMgr17506.8
PernalObroty18171.2
LekarzObroty12322.4
CzynnikObroty16228.7

Drugie zapytanie zwróci całkowitą pensję według stanowiska. Już przygotowujemy to zapytanie do połączenia z pierwszym, więc będziemy pamiętać, że warunkiem połączenia jest równa liczba kolumn, zbieżność ich nazw, kolejności i typów danych. Dlatego w tabeli zawierającej sumy uwzględniamy również kolumnę Nazwa z dowolną wartością „Z-TOTAL”:

WYBIERZ „Z-TOTAL” jako imię i nazwisko, stanowisko, sumę (wynagrodzenie) jako wynagrodzenie Z GRUPY PRACOWNIKÓW WEDŁUG Stanowiska

Zapytanie zwróci następującą tabelę:

ImięPracaWynagrodzenie
Z-TOTALMgr35864.3
Z-TOTALObroty46722.3

Teraz połączmy zapytania za pomocą operatora UNION i ORDER BY wyniku sumy. Grupowanie powinno odbywać się według dwóch kolumn: Zadanie i Nazwa, tak aby wiersze zawierające wartości sumy (total), w których nazwa ma wartość „Z-TOTAL”, znajdowały się pod wierszami zawierającymi poszczególne wartości. Agregacja wyników zapytania będzie następująca:

(WYBIERZ Imię i Nazwisko, Stanowisko, Wynagrodzenie Z PERSONELU) UNIA (WYBIERZ „Z-TOTAL” jako Imię, Stanowisko, SUMA (Wynagrodzenie) jako Wynagrodzenie Z PERSONELU GRUPA WG Stanowiska) ZAMÓWIENIE WG Stanowiska, Imię

Wynikiem wykonania zapytania z operatorem UNION będzie następująca tabela, w której każdy pierwszy wiersz w każdej grupie stanowisk będzie zawierał sumaryczne wynagrodzenia pracowników pracujących na tym stanowisku:

ImięPracaWynagrodzenie
MarenghiMgr17506.8
SandersMgr18357.5
Z-TOTALMgr35864.3
LekarzObroty12322.4
CzynnikObroty16228.7
PernalObroty18171.2
Z-TOTALObroty46722.3

Napisz samodzielnie zapytania za pomocą UNION, a następnie zobacz rozwiązanie

Przykład 2. Dane są takie same jak w przykładzie 1, ale zadanie jest nieco bardziej skomplikowane. Wymagane jest, aby w jednej tabeli wyświetlić nie tylko indywidualne wynagrodzenia posortowane według tytułu stanowiska i łączne wynagrodzenie według tytułu stanowiska, ale także całkowite wynagrodzenie wszystkich pracowników.

Przykład 3. Baza danych firmy zawiera tabelę Personel, która zawiera dane o pracownikach firmy. Zawiera kolumny Imię (nazwisko), Dział (numer działu) i Lata (staż pracy).

ImięDeptLata
Sanders20 7
Pernal20 8
Marenghi38 5
Lekarz20 5
Czynnik38 8

Wyświetl w jednej tabeli średni staż pracy według działów i poszczególne wartości stażu pracy pracowników, pogrupowane według numerów działów.

Inne przypadki łączenia zapytań w tej samej tabeli przy użyciu operatora SQL UNION

Przykład 4. Baza danych firmy zawiera tabelę Personel, która zawiera dane o pracownikach firmy. Zawiera kolumny Wynagrodzenie (wynagrodzenie), Stanowisko (stanowisko) i Lata (staż pracy). Pierwsze żądanie jest potrzebne, aby uzyskać dane o pracownikach, gaża w tym ponad 21 000:

Zapytanie zwróci następującą tabelę:

Teraz potrzebujesz danych, które łączą kryteria wyboru zastosowane w dwóch zapytaniach. Zapytania łączymy za pomocą operatora UNION:

Wynikiem wykonania zapytania z operatorem UNION będzie następująca tabela:

IDImię
10 Sanders
30 Marenghi
100 Plotz
140 Fraye
160 Molinare
240 Daniels
260 Jones

Zapytanie z operatorem UNION może zwrócić większą liczbę kolumn, ważne jest, aby powtórzyć, że w połączonych zapytaniach liczba kolumn, ich kolejność i typy danych są takie same.

Po pierwsze, powiedzmy, że chcesz uzyskać dane o kategoriach i podkategoriach reklam, które zawierają ponad 100 reklam tygodniowo. Piszemy następującą prośbę:

Zapytanie zwróci następującą tabelę:

Zapytanie zwróci następującą tabelę:

Teraz musisz pobrać dane, które spełniają kryteria zarówno pierwszego, jak i drugiego zapytania. Zapytania łączymy za pomocą operatora UNION:

Zapytanie zwróci następującą tabelę:

Łączenie wyników zapytania w dwóch tabelach przy użyciu operatora SQL UNION

Do tej pory przyjrzeliśmy się zapytaniom UNION, które łączą wyniki z tej samej tabeli. Teraz połączymy wyniki z dwóch tabel.

Przykład 6. Istnieje baza danych magazynów materiałów budowlanych. Zawiera tabele zawierające dane tapety. Tabela Vinil zawiera dane dla tapet winylowych, a tabela Paper dla tapet papierowych. Wymagane jest znalezienie danych o cenach tapet z jednej i drugiej tabeli.

Aby wyodrębnić dane dotyczące ceny tapet winylowych, które nie są zduplikowane, ułóżmy zapytanie ze słowem DISTINCT:

WYBIERZ WYRÓŻNIONĄ CENĘ Z VINIL

Zapytanie zwróci następującą tabelę:

Teraz utwórzmy zapytanie połączone z operatorem UNION:

WYBIERZ WYRÓŻNĄ CENĘ Z UNII VINIL WYBIERZ WYRÓŻNIONĄ CENĘ Z PAPIERU

Ponieważ nie używamy słowa ALL, zduplikowane wartości 400, 500 i 530 nie zostaną wyświetlone. Zapytanie zwróci następującą tabelę:

Cena £
300
320
360
400
430
500
530
610
720
800
850

Przykład 7. Baza danych i tabele są takie same, jak w poprzednim przykładzie.

Chcesz uzyskać wszystkie dane dotyczące cen, w tym duplikaty. Zapytanie łączące wyniki za pomocą operatora UNION będzie podobne do zapytania z poprzedniego przykładu, ale zamiast tylko UNION piszemy UNION ALL:

WYBIERZ WYRÓŻNIONĄ CENĘ Z UNII VINIL WSZYSTKIE WYBIERZ DISTINCT Cena Z PAPIERU

Zapytanie zwróci następującą tabelę:

Cena £
300
320
360
400
400
430
500
500
530
530
610
720
800
850

Używając operatora SQL UNION, można łączyć zarówno proste zapytania, jak i zapytania zawierające podzapytania (podzapytania) ... Rozważmy przykład.

Przykład 8. Istnieje baza danych „Teatr”. Jego tabela Play zawiera dane o produkcjach (imiona - w kolumnie Nazwisko), w tabeli Director - dane o reżyserach (w kolumnie Fname - imię, w kolumnie Lname - nazwisko). Podstawowym kluczem tabeli Director jest dir_id - numer identyfikacyjny dyrektora. Dir_id jest również kluczem obcym tabeli Play, odnosi się do klucza podstawowego tabeli Director. Chcesz wydobyć produkcje reżyserów Johna Bartona i Trevora Nunna.

Decyzja. Połączmy wyniki dwóch zapytań - jedno zwraca spektakle reżysera Johna Bartona, a drugie reżysera Trevora Nunna. Każde z tych połączonych zapytań do tabeli Play jest wykonywane za pomocą podzapytania do tabeli Director, które zwraca dir_id na podstawie imienia i nazwiska reżysera. Każde żądanie zewnętrzne pobiera wartość klucza dir_id z żądania zagnieżdżonego i zwraca nazwy produkcji (Name):

Relacyjne bazy danych i język SQL

Lekcja obejmie temat wykorzystania operacji sumy, przecięcia i różnicy zapytań. Przykłady użycia Zapytanie SQL Union, Exists, a także przy użyciu słów kluczowych SOME, ANY i All. Uwzględniono funkcje łańcuchowe


Na zbiorze można wykonywać operacje sumy, różnicy i iloczynu kartezjańskiego. Te same operacje mogą być używane w programie zapytania sql (wykonaj operacje z zapytaniami).

Do łączenia wielu żądań używane jest słowo serwisowe UNIA.
Składnia:

< запрос 1 > UNIA [WSZYSTKIE]< запрос 2 >

<запрос 1> UNIA<запрос 2>

Suma zapytania SQL służy do łączenia wyjściowych wierszy każdego zapytania w jeden zestaw wyników.

Jeśli jest używany parametr ALL, wówczas wszystkie zduplikowane wiersze wyjściowe zostaną zachowane. Jeśli parametr jest nieobecny, w zestawie wyników pozostają tylko unikalne wiersze.

Możesz łączyć ze sobą dowolną liczbę zapytań.

Korzystanie z operatora UNION wymaga spełnienia kilku warunków:

  1. liczba kolumn wyjściowych każdego z zapytań musi być taka sama;
  2. kolumny wyjściowe każdego zapytania muszą być porównywalne pod względem typów danych (w kolejności priorytetu);
  3. zestaw wyników używa nazw kolumn określonych w pierwszym zapytaniu;
  4. ORDER BY można użyć tylko na końcu zapytania złożonego, ponieważ dotyczy wyniku sprzężenia.

Przykład: Wyświetl ceny komputerów i laptopów, a także ich numery (tj. Wyładuj z dwóch różnych tabel w jednym zapytaniu)


✍ Rozwiązanie:
1 2 3 4 5 6 WYBIERZ `Number`,` Price` FROM PC UNION SELECT `Number`,` Price` FROM notebook ORDER BY `Price`

WYBIERZ `Number`,` Price` FROM PC UNION SELECT `Number`,` Price` FROM notebook ORDER BY `Price`

Wynik:

Przyjrzyjmy się bardziej złożonemu przykładowi sprzężenia wewnętrznego:

Przykład: Znajdź typ produktu, liczbę i cenę komputerów i laptopów


✍ Rozwiązanie:
1 2 3 4 5 6 7 8 Wybierz produkt. „Typ”, szt. `Number`,` Price` FROM pc INNER DOŁĄCZ produkt NA pc. „Liczba” \u003d produkt. Produkt „Numer” UNION SELECT. „Typ”, notatnik. `Number`,` Price` Z wnętrza notebooka DOŁĄCZ produkt NA notebook. „Liczba” \u003d produkt. „Pokój” ZAMÓWIENIE WEDŁUG „ceny”

SELECT produkt.`Type`, pc.`Number`, `Price` FROM pc INNER DOŁĄCZ produkt NA szt .`Number` \u003d produkt.`Numer` UNION SELECT produkt.`Type`, notebook.`Number`,` Price` FROM notebooka WEWNĘTRZNEGO DOŁĄCZ do produktu NA notebooku.`Number` \u003d product.`Number` ORDER BY `Price`

Wynik:

SQL Union 1. Znajdź producenta, liczbę i cenę wszystkich laptopów i drukarek

SQL Union 2. Znajdź numery i ceny wszystkich produktów wytwarzanych przez producenta w Rosji

Predykat istnienia SQL ISTNIEJE

W język SQL istnieją środki do wykonywania operacji na przecięciach i różnicach zapytań - klauzula INTERSECT (przecięcie) i klauzula EXCEPT (różnica). Klauzule te działają w podobny sposób jak UNION: tylko te wiersze, które są obecne w obu zapytaniach - INTERSECT, lub tylko te wiersze pierwszego zapytania, których nie ma w drugim - EXCEPT, są uwzględniane w zestawie wyników. Problem w tym, że wiele DBMS nie obsługuje tych propozycji. Ale jest wyjście - użycie predykatu EXISTS.

Predykat EXISTS przyjmuje wartość TRUE, jeśli podzapytanie zwraca dowolną liczbę wierszy, w przeciwnym razie EXISTS przyjmuje wartość FALSE. Istnieje również predykat NIE ISTNIEJE, który działa odwrotnie.

Zwykle EXISTS jest używane w podzapytaniach zależnych (np. IN).

ISTNIEJE (podzapytanie tabelaryczne)

Przykład: Znajdź producentów komputerów, którzy również produkują laptopy


✍ Rozwiązanie:

WYBIERZ DISTINCT Producent Z produktu JAK pc_product WHERE Typ \u003d "Komputer" I ISTNIEJE (WYBIERZ PRODUCENTA Z produktu GDZIE Typ \u003d "Laptop" AND Producent \u003d pc_product.Producent)

Wynik:

Znajdź producentów komputerów, którzy nie produkują drukarek

SQL SOME słowa kluczowe | WSZYSTKO

Słowa kluczowe SOME i ANY są synonimami, więc możesz użyć dowolnego z nich w zapytaniu. Wynikiem takiego zapytania będzie jedna kolumna wartości.

Składnia:

< выражение>< оператор сравнения> NIEKTÓRE | ANY (< подзапрос> )

<выражение><оператор сравнения>NIEKTÓRE | ANY (<подзапрос>)

Jeśli wynik operacji „” zwraca wartość PRAWDA dla dowolnej wartości X uzyskanej z podzapytania, wówczas predykat DOWOLNY jest również PRAWDA.

Przykład: Znajdź sprzedawców komputerów, których nie ma na stanie (tj. Nie są wymienione w tabeli komputerów)


✍ Rozwiązanie:

Wstępne dane tabel:

Wynik:

W tym przykładzie predykat Number \u003d ANY (SELECT FROM pc number) zwróci wartość TRUE, gdy na liście Numery tabeli pc zostanie znaleziona liczba z głównego zapytania (zwrócona przez podzapytanie). Również NIE jest używane. Zestaw wyników będzie miał jedną kolumnę - Producent. Aby zapobiec kilkukrotnemu wyświetlaniu jednego producenta, wprowadzono słowo serwisowe DISTINCT.
Teraz rozważ użycie słowa kluczowego ALL:

Przykład: Znajdź numery laptopów i ceny, które kosztują więcej niż jakikolwiek komputer


✍ Rozwiązanie:

Ważny: Należy zauważyć, że generalnie zapytanie z ANY zwraca wiele wartości. Dlatego użycie podzapytania w klauzuli WHERE bez operatorów EXISTS, IN, ALL i ANY, które dają wartość logiczną (Boolean), może spowodować błąd wykonania zapytania


Przykład: Znajdź liczbę i ceny komputerów, które kosztują więcej niż minimalny koszt laptopów


✍ Rozwiązanie:


To zapytanie jest poprawne, ponieważ wyrażenie skalarne Price jest porównywane z podzapytaniem, które zwraca pojedynczą wartość

Funkcje łańcuchów SQL

Funkcja LEFT usuwa z lewej strony ciągu liczbę znaków określoną przez drugi argument:

LEWO (<строка>,<число>)

Funkcja PRAWO zwraca określoną liczbę znaków po prawej stronie wyrażenia łańcuchowego:

DOBRZE (<строка>,<число>)

Przykład: Pierwsze litery zaczerpnij z nazw wszystkich producentów


✍ Rozwiązanie:

SELECT DISTINCT LEFT (`Producent`, 1) Z` produktu`

Wynik:

Przykład: Wydrukuj nazwy producentów, które zaczynają się i kończą tą samą literą


✍ Rozwiązanie:

Funkcja SQL Replace

Składnia:

SELECT `name`, REPLACE (` name`, "a", "aa") FROM `teacher`

O tym już pisałem. A tam wynik jednej tabeli zależał od zawartości innej. Ale czasami jest to konieczne, gdy wymagana jest całkowita niezależność danych wyjściowych jednej tabeli od drugiej. Wszystko, czego chcesz, jest proste pobrać rekordy z kilku tabel w jednym zapytaniu, już nie. I to za to używany w SQL słowo kluczowe UNIA.

Rozwiążmy to z tobą Zapytanie SQL za pomocą UNION:

SELECT `login`,` amount` FROM `Employers` UNION SELECT` login`,` amount` FROM` staff`;

Ta prośba zwróci loginy i kwoty na kontach wszystkich pracodawców i pracowników danej witryny. Oznacza to, że dane znajdowały się w różnych tabelach, ale ich podobieństwo pozwala na ich natychmiastowe wyświetlenie. Nawiasem mówiąc, stąd pochodzi zasada używania Zapytania UNION: liczba i kolejność pól musi być taka sama we wszystkich częściach wniosku.

Z takich UNION-części może dużo, ale najważniejsze pamiętaj, aby po ostatniej UNII wstawić średnik.

Kolejna dobra funkcja UNIA to brak powtórzeń. Na przykład, jeśli ta sama osoba zostanie znaleziona zarówno wśród pracowników, jak i pracodawców, oczywiście z taką samą kwotą na koncie, to w próbie będzie nie 2 razy, ale tylko 1co z reguły jest wymagane. A jeśli powtórzenia są nadal potrzebne, to jest UNIA WSZYSTKO:

SELECT `login`,` amount` FROM `Employers` UNION ALL SELECT` login`,` amount` FROM` staff`;

Lubię to w zapytaniu SQL używany jest dość prosty operator UNION, co upraszcza procedurę wyprowadzania tych samych danych z wielu tabel jednocześnie, co z kolei będzie miało bardzo dobry wpływ na wydajność.

DZWON

Są tacy, którzy czytają tę wiadomość przed tobą.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać The Bell
Bez spamu