Kursinnhold
Videregående SQL
Videregående SQL
Union-Klausul
Vi har fått oppmerksomheten til en klient som trenger SQL-spørringer. Før vi dykker inn i JOINs
, la oss lære om UNION
-klausulen, som er essensiell for å kombinere flere tabeller.
Her er noen viktige ting å vite om bruk av UNION
:
Antall kolonner og rekkefølge: Alle spørringer kombinert med
UNION
må ha samme antall kolonner i samme rekkefølge;Datatyper: Kolonnene i hver spørring må ha kompatible datatyper;
Unike rader: Som standard fjerner
UNION
dupliserte rader. BrukUNION ALL
hvis du vil beholde duplikater.
For en bedre forståelse av hvordan man korrekt kombinerer tabeller ved bruk av UNION
-klausulen, har jeg introdusert en ekstra tabell som inneholder informasjon om contractors
.
Det er ikke mye informasjon her, bare first_name
, last_name
, og email
.
Du kan se at denne tabellen har likheter med employees
-tabellen. Ved å bruke UNION
-klausulen kan vi kombinere disse to tabellene for å for eksempel se en liste over alle navn og etternavn til ansatte og contractors involvert i selskapet.
For å gjøre dette, vil vi bruke 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
La oss bryte ned hva som skjer:
Vi har to spørringer som hver returnerer tre kolonner med samme datatyper. Vi ønsker å se Id
, first_name
og last_name
til alle i selskapet. Vi har også gitt nytt navn til Id
-kolonnen slik at begge spørringene har samme kolonnenavn.
Deretter bruker vi UNION
for å kombinere resultatene av disse spørringene, og fjerner duplikater (selv om det ikke er noen her).
Til slutt sorterer vi resultatene etter Id
ved å bruke ORDER BY
.
Merk
Vi sorterer etter
Id
, som er en felles kolonne i begge tabellene.
Etter å ha brukt UNION
, får vi en "enkel stor spørring" som vi kan manipulere videre med klausuler som ORDER BY
.
Vi kan ikke direkte bruke WHERE
eller GROUP BY
med tabeller kombinert ved hjelp av UNION
. For å bruke disse klausulene, må vi bruke en subquery i FROM
-seksjonen. Her er et eksempel på hvordan du gjø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'
Å bruke en subquery i FROM
-seksjonen gir oss mer fleksibilitet! Det kan virke vanskelig i begynnelsen, men å mestre dette vil gjøre det mye enklere å skrive komplekse spørringer.
1. Hvilke kolonner er nødvendige når du bruker UNION
-klause i SQL?
2. Hvordan behandler UNION
-klause dupliserte rader som standard?
Takk for tilbakemeldingene dine!