Database
 sql >> Baza danych >  >> RDS >> Database

Jak połączyć wyniki dwóch zapytań w SQL?

Problem:

Chcesz wyświetlić dane z podanych kolumn (podobnego typu danych) z dwóch tabel w SQL.

Przykład:

W naszej bazie danych znajdują się dwie tabele:employee i customer .

employee tabela zawiera dane w następujących kolumnach:id , imię , nazwisko i wiek .

id imię nazwisko wiek
1 Tomek Młynarz 22
2 Jan Kowalski 26
3 Lisa Williams 30
4 Karol Davis 21
5 James Moore 22

customer tabela zawiera dane w następujących kolumnach:id , imię , nazwisko i wiek .

id imię nazwisko wiek
1 Mediolan Kowalski 45
2 Karol Davis 21
3 Zaznacz Zwolennik 19

W jednym zestawie wyników wyświetlmy imię, nazwisko i wiek wszystkich osób w bazie danych, zarówno pracowników, jak i klientów.

Rozwiązanie 1:

Użyjemy UNION ALL połączyć dane z kolumn w dwóch tabelach.

Oto zapytanie, które napiszesz:

SELECT first_name, last_name, age FROM employee
UNION ALL
SELECT first_name, last_name, age FROM customer;

Oto wynik:

imię nazwisko wiek
Tomek Młynarz 22
Jan Kowalski 26
Liza Williams 30
Karol Davis 21
James Moore 28
Mediolan Kowalski 45
Karol Davis 21
Zaznacz Zwolennik 19

Dyskusja:

Użyj klauzuli UNION ALL, aby połączyć dane z kolumn w co najmniej dwóch tabelach. W naszym przykładzie łączymy dane od employee i customer tabele. Po lewej stronie słowa kluczowego UNION ALL umieść pierwszą instrukcję SELECT, aby pobrać dane z pierwszej tabeli (w naszym przykładzie tabela employee ). Po prawej stronie użyj innej instrukcji SELECT, aby pobrać dane z drugiej tabeli (w naszym przykładzie customer ).

Pamiętaj, że wybrane dane w obu tabelach muszą być tego samego typu w każdej kolumnie. Na przykład, jeśli pierwsza kolumna w pierwszej kolumnie SELECT jest typem danych typu string, pierwsza kolumna drugiej kolumny SELECT również musi być typem danych typu string. Jeśli druga kolumna w pierwszej instrukcji SELECT jest liczbą całkowitą, druga kolumna w drugiej tabeli również musi być liczbą całkowitą.

W pierwszym zapytaniu wybraliśmy wiek (wiek pracownika, który jest typem danych całkowitych) dla trzeciej kolumny. Dlatego trzecia kolumna w drugiej kolumnie SELECT jest również wartością całkowitą; to wiek klienta.

Drugie kolumny w obu instrukcjach SELECT mają ten sam typ danych. Jeśli jednak wartości w obu tabelach są takie same, będą wyświetlane wielokrotnie; na przykład „Charles Davis 21” jest wyświetlany dwukrotnie w zestawie wyników.

Co zrobić, jeśli nie chcesz wielu identycznych rekordów w tabeli wyników? W takim przypadku użyj UNION . Jest podobny do UNION ALL , ale usuwa zduplikowane rekordy. Spójrz na następujący przykład.

Rozwiązanie 2:

Oto zapytanie, które pozwala uniknąć zduplikowanych rekordów:

SELECT first_name, last_name FROM employee
UNION 
SELECT first_name, last_name FROM customer;

Oto wynik powyższego zapytania:

imię nazwisko
Zaznacz Zwolennik
James Moore
Jan Kowalski
Karol Davis
Mediolan Kowalski
Tomek Młynarz
Liza Williams

Uwaga:

UNION ALL jest szybszy niż UNION , ale UNION usuwa zduplikowane wiersze. Wybór zależy od potrzebnych nam danych wynikowych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekonwertować ciąg na wielkie litery w SQL?

  2. Cyfrowa transformacja:wszystko zaczyna się od myślenia o danych

  3. Przestarzałe funkcje do wyjęcia z przybornika – część 3

  4. Przegląd instrukcji T-SQL PRINT

  5. Co to jest relacja jeden-do-jednego w bazie danych?