sql >> Database teknologi >  >> RDS >> Database

Sådan kombinerer du resultaterne af to forespørgsler i SQL

Problem:

Du vil gerne vise data fra givne kolonner (af en lignende datatype) fra to tabeller i SQL.

Eksempel:

Der er to tabeller i vores database:employee og customer .

employee tabel indeholder data i følgende kolonner:id , fornavn , efternavn , og alder .

id fornavn efternavn alder
1 Tom Møller 22
2 John Smith 26
3 Lisa Williams 30
4 Charles Davis 21
5 James Moore 22

customer tabel indeholder data i følgende kolonner:id , fornavn , efternavn , og alder .

id fornavn efternavn alder
1 Milano Smith 45
2 Charles Davis 21
3 Mærk Backer 19

Lad os i ét resultatsæt vise fornavn, efternavn og alder for alle personer i databasen, både medarbejdere og kunder.

Løsning 1:

Vi bruger UNION ALL at samle data fra kolonner i to tabeller.

Her er den forespørgsel, du ville skrive:

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

Her er resultatet:

fornavn efternavn alder
Tom Møller 22
John Smith 26
Lisa Williams 30
Charles Davis 21
James Moore 28
Milano Smith 45
Charles Davis 21
Mark Backer 19

Diskussion:

Brug UNION ALL-sætningen til at forbinde data fra kolonner i to eller flere tabeller. I vores eksempel samler vi data fra employee og customer tabeller. Til venstre for UNION ALL-nøgleordet skal du sætte den første SELECT-sætning for at hente data fra den første tabel (i vores eksempel, tabellen employee ). Til højre skal du bruge en anden SELECT-sætning til at hente data fra den anden tabel (i vores eksempel, customer ).

Husk at de valgte data i begge tabeller skal være af samme datatype i hver kolonne. For eksempel, hvis den første kolonne i den første SELECT er en strengdatatype, skal den første kolonne i den anden SELECT også være en strengdatatype. Hvis den anden kolonne i den første SELECT-sætning er et heltal, skal den anden kolonne i den anden tabel også være en heltalstype.

I den første forespørgsel valgte vi alder (medarbejderens alder, som er en heltalsdatatype) til den tredje kolonne. Derfor er den tredje kolonne i den anden SELECT også en heltalsværdi; det er alderen af kunden.

Den anden kolonne i begge SELECT-sætninger er af samme datatype. Men hvis værdierne er de samme i begge tabeller, vil de blive vist flere gange; for eksempel vises 'Charles Davis 21' to gange i resultatsættet.

Hvad hvis du ikke vil have flere identiske poster i resultattabellen? I dette tilfælde skal du bruge UNION . Det ligner UNION ALL , men det fjerner duplikerede poster. Se på følgende eksempel.

Løsning 2:

Her er forespørgslen, der undgår duplikerede poster:

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

Her er resultatet af ovenstående forespørgsel:

fornavn efternavn
Mark Backer
James Moore
John Smith
Charles Davis
Milano Smith
Tom Møller
Lisa Williams

Bemærk:

UNION ALL er hurtigere end UNION , men UNION fjerner duplikerede rækker. Valget afhænger af de resultatdata, vi har brug for.


  1. LOAD DATA LOKAL INFIL forbudt i... PHP

  2. Brug af Dapper med Oracle

  3. Underforespørgsler vs joinforbindelser

  4. Indsamlingsmetode:SLET-procedure i Oracle-databasen