MySQL UNION – Komplet vejledning

Hvad er en forening?

Fagforeninger kombinerer resultaterne fra flere SELECT-forespørgsler til et konsolideret resultatsæt.

De eneste krav for at dette skal fungere er, at antallet af kolonner skal være det samme fra alle de SELECT-forespørgsler, som skal kombineres.

Antag, at vi har to tabeller som følger

MySQL UNIONMySQL UNION

Lad os nu oprette en UNION-forespørgsel for at kombinere begge tabeller ved hjælp af DISTINCT

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

Her fjernes duplikerede rækker, og kun unikke rækker returneres.

Union-Distinct

Bemærk: MySQL bruger DISTINCT-sætningen som standard, når der udføres UNION-forespørgsler, hvis intet er angivet.

Lad os nu oprette en UNION-forespørgsel for at kombinere begge tabeller ved hjælp af ALL

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

Her er duplikerede rækker inkluderet og da vi bruger ALLE.

Union-Alle

Hvorfor bruge fagforeninger?

Antag, at der er en fejl i dit databasedesign, og du bruger to forskellige tabeller beregnet til samme formål. Du ønsker at konsolidere disse to tabeller til én, mens du udelader eventuelle duplikerede poster fra at krybe ind i den nye tabel. Du kan bruge UNION i sådanne tilfælde.

Resumé

  • UNION-kommandoen bruges til at kombinere mere end ét SELECT-forespørgselsresultat i en enkelt forespørgsel, der indeholder rækker fra alle udvalgte forespørgsler.
  • Antallet af kolonner og datatyper i VÆLG udsagn skal være den samme, for at UNION-kommandoen virker.
  • DISTINCT-udtrykket bruges til at eliminere duplikerede værdier fra UNION-forespørgselsresultatsættet. MySQL bruger DISTINCT-sætningen som standard, når der udføres UNION-forespørgsler, hvis intet er angivet.
  • ALL-sætningen bruges til at returnere alle selv de duplikerede rækker i UNION-forespørgslen.

Praktiske eksempler vha MySQL arbejdsbord

I vores myFlixDB lader vi kombinere

medlemsnummer og fulde_navne fra tabellen Medlemmer

med

movie_id og titel fra filmtabellen

Vi kan bruge følgende forespørgsel

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

Udførelse af ovenstående script i MySQL arbejdsbord mod myflixdb giver os følgende resultater vist nedenfor.

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