sql >> Database >  >> RDS >> Database

Hoe de resultaten van twee query's in SQL te combineren?

Probleem:

U wilt gegevens uit bepaalde kolommen (van een vergelijkbaar gegevenstype) uit twee tabellen in SQL weergeven.

Voorbeeld:

Er zijn twee tabellen in onze database:employee en customer .

De employee tabel bevat gegevens in de volgende kolommen:id , voornaam , achternaam , en leeftijd .

id voornaam achternaam leeftijd
1 Tom Miller 22
2 Jan Smith 26
3 Lisa Willems 30
4 Charles Davis 21
5 James Moore 22

De customer tabel bevat gegevens in de volgende kolommen:id , voornaam , achternaam , en leeftijd .

id voornaam achternaam leeftijd
1 Milaan Smith 45
2 Charles Davis 21
3 Markeren Backer 19

Laten we in één resultatenset de voornaam, achternaam en leeftijd weergeven voor alle mensen in de database, zowel werknemers als klanten.

Oplossing 1:

We gebruiken UNION ALL om gegevens uit kolommen in twee tabellen samen te voegen.

Dit is de vraag die je zou schrijven:

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

Dit is het resultaat:

voornaam achternaam leeftijd
Tom Miller 22
Jan Smith 26
Lisa Willems 30
Charles Davis 21
James Moore 28
Milaan Smith 45
Charles Davis 21
Markeren Backer 19

Discussie:

Gebruik de clausule UNION ALL om gegevens uit kolommen in twee of meer tabellen samen te voegen. In ons voorbeeld voegen we gegevens samen van de employee en customer tafels. Plaats aan de linkerkant van het UNION ALL-sleutelwoord de eerste SELECT-instructie om gegevens uit de eerste tabel te halen (in ons voorbeeld de tabel employee ). Gebruik aan de rechterkant een andere SELECT-instructie om gegevens uit de tweede tabel te halen (in ons voorbeeld customer ).

Onthoud dat de geselecteerde gegevens in beide tabellen in elke kolom van hetzelfde gegevenstype moeten zijn. Als de eerste kolom in de eerste SELECT bijvoorbeeld een tekenreeksgegevenstype is, moet de eerste kolom in de tweede SELECT ook een tekenreeksgegevenstype zijn. Als de tweede kolom in de eerste SELECT-instructie een geheel getal is, moet de tweede kolom in de tweede tabel ook een geheel getal zijn.

In de eerste query selecteerden we leeftijd (de leeftijd van de werknemer, wat een geheel getal is) voor de derde kolom. Daarom is de derde kolom in de tweede SELECT ook een geheel getal; het is de leeftijd van de klant.

De tweede kolommen in beide SELECT-instructies zijn van hetzelfde gegevenstype. Als de waarden in beide tabellen echter hetzelfde zijn, worden ze meerdere keren weergegeven; 'Charles Davis 21' wordt bijvoorbeeld twee keer weergegeven in de resultatenset.

Wat als u niet meerdere identieke records in de resultatentabel wilt? Gebruik in dit geval UNION . Het is vergelijkbaar met UNION ALL , maar het verwijdert dubbele records. Bekijk het volgende voorbeeld.

Oplossing 2:

Dit is de zoekopdracht die dubbele records vermijdt:

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

Dit is het resultaat van de bovenstaande vraag:

voornaam achternaam
Mark Backer
James Moore
Jan Smith
Charles Davis
Milaan Smith
Tom Miller
Lisa Willems

Opmerking:

UNION ALL is sneller dan UNION , maar UNION verwijdert dubbele rijen. De keuze hangt af van de resultaatgegevens die we nodig hebben.


  1. Beperking in SQL controleren

  2. Hoe fouten in sqlplus weer te geven

  3. Wat gebeurt er met een niet-toegewezen transactie als de verbinding wordt verbroken?

  4. Hoe een gebruiker aan te maken in PostgreSQL