Kursusindhold
Mellemliggende SQL
Mellemliggende SQL
Union Klausul
Vi har fanget opmærksomheden fra en klient, der har brug for SQL-forespørgsler. Før vi dykker ned i JOINs
, lad os lære om UNION
-klausulen, som er essentiel for at kombinere flere tabeller.
Her er nogle vigtige ting at vide om brugen af UNION
:
Kolonneantal og rækkefølge: Alle forespørgsler kombineret med
UNION
skal have det samme antal kolonner i den samme rækkefølge;Datatyper: Kolonnerne i hver forespørgsel skal have kompatible datatyper;
Unikke rækker: Som standard fjerner
UNION
dublerede rækker. BrugUNION ALL
hvis du vil beholde dubletter.
For en bedre forståelse af hvordan man korrekt kombinerer tabeller ved hjælp af UNION
-klausulen, har jeg introduceret en ekstra tabel, der indeholder information om contractors
.
Der er ikke meget information her, kun first_name
, last_name
og email
.
Du kan se, at denne tabel har ligheder med employees
-tabellen. Ved hjælp af UNION
-klausulen kan vi kombinere disse to tabeller for eksempelvis at se en liste over alle navne og efternavne på employees og contractors involveret i virksomheden.
For at gøre dette vil vi bruge UNION
-klausulen:
(SELECT employee_id as id, first_name, last_name FROM employees) UNION (SELECT contractor_id as id, first_name, last_name FROM contractors) ORDER BY id
Lad os gennemgå, hvad der sker:
Vi har to forespørgsler, der hver returnerer tre kolonner med de samme datatyper. Vi vil se Id
, first_name
og last_name
for alle i virksomheden. Vi omdøbte også Id
-kolonnen, så begge forespørgsler har de samme kolonnenavne.
Derefter bruger vi UNION
til at kombinere resultaterne af disse forespørgsler, hvilket fjerner dubletter (selvom der ikke er nogen her).
Endelig sorterer vi resultaterne efter Id
ved hjælp af ORDER BY
.
Bemærk
Vi sorterer efter
Id
, som er en fælles kolonne i begge tabeller.
Efter at have brugt UNION
får vi en "enkel stor forespørgsel", som vi kan manipulere yderligere med klausuler som ORDER BY
.
Vi kan ikke direkte bruge WHERE
eller GROUP BY
med tabeller kombineret ved hjælp af UNION
. For at anvende disse klausuler skal vi bruge en subquery i FROM
-sektionen. Her er et eksempel på, hvordan man gør det:
SELECT id, first_name, last_name FROM ( SELECT employee_id AS id, first_name, last_name FROM employees UNION SELECT contractor_id AS id, first_name, last_name FROM contractors ) AS combined WHERE first_name = 'Jane'
At bruge en subquery i FROM
-sektionen giver os mere fleksibilitet! Det kan virke vanskeligt i starten, men at mestre dette vil gøre det meget lettere at skrive komplekse forespørgsler.
1. Hvilke kolonner er nødvendige, når man bruger UNION
-klausulen i SQL?
2. Hvordan behandler UNION
-klausulen duplikerede rækker som standard?
Tak for dine kommentarer!