Kursinnehåll
Intermediär SQL
Intermediär SQL
Union-Klausul
Vi har fångat uppmärksamheten hos en klient som behöver SQL-frågor. Innan vi dyker in i JOINs
, låt oss lära oss om UNION
-satsen, som är viktig för att kombinera flera tabeller.
Här är några viktiga saker att veta om att använda UNION
:
Antal och ordning på kolumner: Alla frågor som kombineras med
UNION
måste ha samma antal kolumner i samma ordning;Datatyper: Kolumnerna i varje fråga måste ha kompatibla datatyper;
Unika rader: Som standard tar
UNION
bort dubblettrader. AnvändUNION ALL
om du vill behålla dubbletter.
För en bättre förståelse av hur man korrekt kombinerar tabeller med hjälp av UNION
-klause, introducerade jag en ytterligare tabell som innehåller information om contractors
.
Det finns inte mycket information här, bara first_name
, last_name
och email
.
Du kan se att denna tabell har likheter med employees
-tabellen. Med hjälp av UNION
-klause kan vi kombinera dessa två tabeller för att till exempel se en lista över alla namn och efternamn på anställda och contractors som är involverade i företaget.
För att göra detta, kommer vi att använda UNION
-klause:
(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
Låt oss bryta ner vad som händer:
Vi har två frågor som vardera returnerar tre kolumner med samma datatyper. Vi vill se Id
, first_name
och last_name
för alla i företaget. Vi har också bytt namn på Id
-kolumnen så att båda frågorna har samma kolumnnamn.
Sedan använder vi UNION
för att kombinera resultaten av dessa frågor, vilket tar bort dubbletter (även om det inte finns några här).
Slutligen sorterar vi resultaten efter Id
med ORDER BY
.
Notera
Vi sorterar efter
Id
, vilket är en gemensam kolumn i båda tabellerna.
Efter att ha använt UNION
får vi en "enkel stor fråga" som vi kan manipulera vidare med klausuler som ORDER BY
.
Vi kan inte direkt använda WHERE
eller GROUP BY
med tabeller kombinerade med UNION
. För att tillämpa dessa klausuler behöver vi använda en subquery i FROM
-sektionen. Här är ett exempel på hur 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'
Att använda en subquery i FROM
-sektionen ger oss mer flexibilitet! Det kan verka knepigt till en början, men att bemästra detta kommer att göra det mycket enklare att skriva komplexa frågor.
1. Vilka kolumner krävs när man använder UNION
-satsen i SQL?
2. Hur behandlar UNION
-satsen dubblettrader som standard?
Tack för dina kommentarer!