UNION-setning
Vi har fått oppmerksomheten til en kunde som trenger SQL-spørringer. Før vi går videre til JOINs, skal vi lære om UNION-setningen, som er viktig for å kombinere flere tabeller.
Her er noen viktige punkter om bruk av UNION:
-
Antall kolonner og rekkefølge: alle spørringer som kombineres med
UNIONmå ha samme antall kolonner i samme rekkefølge; -
Datatyper: kolonnene i hver spørring må ha kompatible datatyper;
-
Unike rader: som standard fjerner
UNIONduplikatrader. BrukUNION ALLhvis du vil beholde duplikater.
For å gi bedre forståelse av hvordan man korrekt kombinerer tabeller ved bruk av UNION-setningen, er det lagt til en ekstra tabell som inneholder informasjon om contractors.
Det er ikke mye informasjon her, kun first_name, last_name og email.
Du kan se at denne tabellen har likheter med employees-tabellen. Ved å bruke UNION-klauselet kan vi kombinere disse to tabellene for å for eksempel vise en liste over alle fornavn og etternavn til ansatte og konsulenter som er involvert i selskapet.
For å gjøre dette bruker vi UNION-klauselet:
12345678(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
En nærmere forklaring på hva som skjer:
Vi har to spørringer som hver returnerer tre kolonner med samme datatyper. Vi ønsker å vise Id, first_name og last_name for alle i selskapet. Vi har også gitt kolonnenavnet Id i begge spørringene slik at de har samme kolonnenavn.
Deretter bruker vi UNION for å kombinere resultatene fra disse spørringene, og fjerner duplikater (selv om det ikke finnes noen her).
Til slutt sorterer vi resultatene etter Id ved hjelp av ORDER BY.
Note
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 klauseer som ORDER BY.
Det er ikke mulig å bruke WHERE eller GROUP BY direkte med tabeller som er kombinert ved hjelp av UNION. For å bruke disse klausulene, må vi benytte en underforespørsel i FROM-delen. Her er et eksempel på hvordan dette gjøres:
123456789SELECT 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'
Ved å bruke en underforespørsel i FROM-delen får vi større fleksibilitet! Det kan virke utfordrende i starten, men å mestre dette vil gjøre det langt enklere å skrive komplekse spørringer.
1. Hvilke kolonner kreves når du bruker UNION-setningen i SQL?
2. Hvordan håndterer UNION-setningen duplikatrader som standard?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Can you explain the difference between UNION and UNION ALL?
How do I know when to use a subquery with UNION?
Can you show more examples of using UNION with different tables?
Awesome!
Completion rate improved to 4
UNION-setning
Sveip for å vise menyen
Vi har fått oppmerksomheten til en kunde som trenger SQL-spørringer. Før vi går videre til JOINs, skal vi lære om UNION-setningen, som er viktig for å kombinere flere tabeller.
Her er noen viktige punkter om bruk av UNION:
-
Antall kolonner og rekkefølge: alle spørringer som kombineres med
UNIONmå ha samme antall kolonner i samme rekkefølge; -
Datatyper: kolonnene i hver spørring må ha kompatible datatyper;
-
Unike rader: som standard fjerner
UNIONduplikatrader. BrukUNION ALLhvis du vil beholde duplikater.
For å gi bedre forståelse av hvordan man korrekt kombinerer tabeller ved bruk av UNION-setningen, er det lagt til en ekstra tabell som inneholder informasjon om contractors.
Det er ikke mye informasjon her, kun first_name, last_name og email.
Du kan se at denne tabellen har likheter med employees-tabellen. Ved å bruke UNION-klauselet kan vi kombinere disse to tabellene for å for eksempel vise en liste over alle fornavn og etternavn til ansatte og konsulenter som er involvert i selskapet.
For å gjøre dette bruker vi UNION-klauselet:
12345678(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
En nærmere forklaring på hva som skjer:
Vi har to spørringer som hver returnerer tre kolonner med samme datatyper. Vi ønsker å vise Id, first_name og last_name for alle i selskapet. Vi har også gitt kolonnenavnet Id i begge spørringene slik at de har samme kolonnenavn.
Deretter bruker vi UNION for å kombinere resultatene fra disse spørringene, og fjerner duplikater (selv om det ikke finnes noen her).
Til slutt sorterer vi resultatene etter Id ved hjelp av ORDER BY.
Note
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 klauseer som ORDER BY.
Det er ikke mulig å bruke WHERE eller GROUP BY direkte med tabeller som er kombinert ved hjelp av UNION. For å bruke disse klausulene, må vi benytte en underforespørsel i FROM-delen. Her er et eksempel på hvordan dette gjøres:
123456789SELECT 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'
Ved å bruke en underforespørsel i FROM-delen får vi større fleksibilitet! Det kan virke utfordrende i starten, men å mestre dette vil gjøre det langt enklere å skrive komplekse spørringer.
1. Hvilke kolonner kreves når du bruker UNION-setningen i SQL?
2. Hvordan håndterer UNION-setningen duplikatrader som standard?
Takk for tilbakemeldingene dine!