MySQL UNION - Komplett handledning

Anonim

Vad är en fackförening?

Fackföreningar kombinerar resultaten från flera SELECT-frågor i en konsoliderad resultatuppsättning.

De enda kraven för att detta ska fungera är att antalet kolumner ska vara detsamma från alla SELECT-frågor som behöver kombineras.

Anta att vi har två tabeller enligt följande

Låt oss nu skapa en UNION-fråga för att kombinera båda tabellerna med DISTINCT

SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;

Här tas dubbla rader bort och endast unika rader returneras.

Obs! MySQL använder DISTINCT-satsen som standard vid körning av UNION-frågor om inget anges.

Låt oss nu skapa en UNION-fråga för att kombinera båda tabellerna med ALL

SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;

Här ingår dubbla rader och eftersom vi använder ALL.

Varför använda fackföreningar

Antag att det finns en brist i din databasdesign och att du använder två olika tabeller avsedda för samma ändamål. Du vill konsolidera dessa två tabeller i en medan du utelämnar dubbletter från att smyga in i den nya tabellen. Du kan använda UNION i sådana fall.

Sammanfattning

  • UNION-kommandot används för att kombinera mer än ett SELECT-frågeresultat till en enskild fråga som innehåller rader från alla valda frågor.
  • Antalet kolumner och datatyper i SELECT-satserna måste vara detsamma för att UNION-kommandot ska fungera.
  • DISTINCT-klausulen används för att eliminera dubbletter av UNION-sökresultatuppsättningen. MySQL använder DISTINCT-satsen som standard vid körning av UNION-frågor om inget anges.
  • ALL-klausulen används för att returnera alla även de dubbla raderna i UNION-frågan.

Praktiska exempel med MySQL-arbetsbänk

I vår myFlixDB kan vi kombinera

medlemsnummer och fullständiga namn från medlemstabellen

med

movie_id och titel från filmtabellen

Vi kan använda följande fråga

SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;

Att utföra ovanstående skript i MySQL-arbetsbänken mot myflixdb ger oss följande resultat som visas nedan.

 
membership_number full_names
1 Janet Jones
2 Janet Smith Jones
3 Robert Phil
4 Gloria Williams
5 Leonard Hofstadter
6 Sheldon Cooper
7 Rajesh Koothrappali
8 Leslie Winkle
9 Howard Wolowitz
16 67% Guilty
6 Angels and Demons
4 Code Name Black
5 Daddy's Little Girls
7 Davinci Code
2 Forgetting Sarah Marshal
9 Honey mooners
19 movie 3
1 Pirates of the Caribean 4
18 sample movie
17 The Great Dictator
3 X-Men