mysql union comprehensive tutorial with union examples
Denne vejledning forklarer MySQL UNION-kommandoen, dens typer, Union vs Union All og eksempler til at kombinere data fra 2 eller flere forespørgsler:
MySQL UNION bruges til at kombinere resultater fra flere SELECT-forespørgsler til et enkelt resultatsæt. Det er også muligt at have alle de komplekse forespørgsler / operationer i SELECT-forespørgslerne og udføre UNION med andre SELECT-sætninger for at give et kombineret resultat.
gratis systemoptimering til Windows 7
Standardkarakteristikken for en UNION-erklæring ville være at fjerne de dobbelte poster eller rækker fra det resulterende sæt af rækker, men det giver dog også måder at hente duplikatposter ved hjælp af UNION ALL-klausulen.
Hvad du vil lære:
- Forståelse af UNION gennem sætteori
- Hvilket problem løser MySQL UNION
- MySQL UNION Vs UNION ALL
- Konklusion
Forståelse af UNION gennem sætteori
UNION-operation kunne forstås meget godt ud fra SET-teoriens principper.
Antag, at vi har tabeller A & B som repræsenteret af sætene nedenfor, og at de har nogle overlappende data (eller det kan også være fuldstændig uafhængigt) - UNION vil omfatte kombinationen af data fra begge tabeller.
Lad os se et eksempel, hvor sæt A & B har nogle fælles elementer. UNION vil indeholde alle værdier fra sæt A & B med de duplikerede værdier udeladt.
Hvad nu, hvis sæt A & B er adskilt og ikke indeholder nogen fælles elementer? Også her vil UNION returnere det samme resultat.
Lad os diskutere scenariet, hvor der er overlappende elementer mellem sæt, og vi vil have, at de dobbelte værdier også skal vises i resultatsættet.
MySQL giver en måde at gøre det ved hjælp af UNION ALL-indstillingen som vist i nedenstående billede.
Hvilket problem løser MySQL UNION
MySQL UNION bruges, når du har lignende data på tværs af 2 eller flere tabeller, og du vil se en kombineret visning af dataene i begge tabeller i stedet for at køre SELECT-sætninger for individuelle tabeller.
For eksempel - Antag at der er 2 borde - Medarbejder og Studerende. Og du arbejder på en persondatabase, der bare vil have et navn, alder og fødselsdato for alle medarbejdere og studerende.
Uden UNION skal du udføre separate SELECT-forespørgsler for begge tabeller og derefter udføre den ønskede beregning med det opnåede resultatsæt.
MySQL UNION-syntaks
Nedenstående forespørgsler returnerer en UNION på 2 eller mere end 2 SELECT-sætninger.
SELECT {column1}, {column2} FROM {table1} UNION (ALL | DISTINCT) SELECT {column3}, {column4} FROM {table2} UNION (ALL | DISTINCT) SELECT ...
Lad os prøve at se forskellige komponenter i syntaksen
- Vi kan se, at det er muligt at kombinere flere SELECT-forespørgsler med UNION for at få det resulterende række sæt.
- Kolonnenavn og datatyper: Det er vigtigt at forstå, at de kolonner, vi vil kombinere, skal have den samme eller kompatible datatype. For eksempel: hvis du har kolonne1 som STRING, skal kolonne3 også være STRING (eller STRING-kompatibel).
- Kolonnenavne og positioner bestemmes ud fra den første SELECT-sætning i UNION-forespørgslen. For eksempel i ovenstående syntaks: kolonne1 og kolonne2 er navngivet som overskriftskolonner i resultatsættet, og værdierne for kolonne3 og kolonne4 er tilknyttet henholdsvis kolonne1 og kolonne2.
- Resultaterne af en UNION-forespørgsel fjerner som standard duplikatposter. For eksempel, i dette tilfælde, hvis der er en duplikatpost, der har et nøjagtigt match og har de samme værdier for kolonne1 og kolonne2, udelades disse rækker fra resultatsættet.
Hvis der ønskes dubletter, kan vi bruge muligheden 'ALL' sammen med UNIONEN.
Brug af DISTINCT er underforstået som standard. Bemærk, at det også kunne specificeres eksplicit at have mere læsbarhed.
Lad os se et eksempel på et UNION-forespørgsel.
Antag at der er to tabeller - medarbejder og studerende - der hver har personlige oplysninger.
CREATE TABLE employee (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100)); CREATE TABLE student (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
Indtast nu nogle dummy-data i begge disse tabeller som vist nedenfor:
INSERT INTO employee values (1,'Darren', 32, '1988-05-20', 'ENGINEERING'), (2,'Abhishek', 28, '1992-05-20', 'ACCOUNTING'), (3,'Amit', 30, '1990-09-20', 'ENGINEERING'), (4,'Steven', 40, '1980-05-21', 'HUMAN RESOURCES'), (5,'Kartik', 20, '2000-05-12', 'TRAINEE'); ---------------------------------------------- INSERT INTO student values (1,'Akash', 22, '1998-05-17', 'COMPUTER'), (2,'Ian', 26, '1994-06-18', 'COMPUTER'), (3,'Shirley', 19, '2001-11-20', 'MECHANICAL'), (4,'Joana', 21, '1999-05-21', 'ELECTRONICS'), (5,'Kartik', 20, '2000-05-12', 'COMPUTER');
Som du kan se ovenfor, har vi bevidst tilføjet en række, der har de samme attributter for navn, alder og fødselsdato.
Lad os nu se, hvordan vi kan kombinere dataene i disse 2 tabeller ved hjælp af UNION-kommandoer. Vi spørger brugernavn og alder fra begge tabeller.
Enkel UNION
Forespørgsel:
SELECT name, age FROM employee UNION SELECT name, age FROM student;
Du vil se 9 poster i resultatet (hvilket betyder, at ovenstående forespørgsel har udeladt den dobbelte post).
Produktion:
navn | alder |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | tyve |
Akash | 22 |
Shirley | 19 |
Joana | enogtyve |
UNION Med UNION ALL
Brug af UNION med AL-klausul vil sikre, at de dobbelte poster også vises.
Forespørgsel:
SELECT name, age FROM employee UNION ALL SELECT name, age FROM student;
Produktion:
navn | alder |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | tyve |
Akash | 22 |
Shirley | 19 |
Joana | enogtyve |
Kartik | tyve |
UNION med tilstand
Lad os tilføje betingelser til SELECT-udsagnene, hvor vi ønsker data om medarbejderne under 30 år og studerende under 25 år.
Forespørgsel:
SELECT name, age FROM employee where age <30 UNION SELECT name, age FROM student where age < 25;
Produktion:
navn | alder |
---|---|
Amit | 30 |
Abhishek | 28 |
Kartik | tyve |
Akash | 22 |
Shirley | 19 |
Joana | enogtyve |
Som du kan se ovenfor, inkluderer resultatsættet det kombinerede resultat med individuelle SELECT-betingelser valideret.
Bestilling af UNION-resultater
Resultaterne af en UNION-forespørgsel er ikke ordnet som standard.
For at pålægge en ordre med en kolonne, der findes i det resulterende sæt, kan en ORDER BY-klausul specificeres i slutningen af UNION-kommandoen.
Lad os bruge de samme medarbejder / studerende data og bestille, at UNION resulterer i stigende rækkefølge efter alder.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY age asc
Produktion:
navn | alder |
---|---|
Shirley | 19 |
Kartik | tyve |
Joana | enogtyve |
Akash | 22 |
Ian | 26 |
Abhishek | 28 |
Darren | 32 |
Steven | 40 |
Ovenstående resultatsæt er sorteret efter aldersværdier i stigende rækkefølge. Vi kan også bruge kolonnealiaser til at henvise til kolonnerne i ORDER BY-klausulen.
For eksempel: - En forespørgsel som nedenfor giver også det samme resultat.
SELECT name as customer_name, age as customer_age FROM employee UNION SELECT name, age FROM student ORDER BY customer_age asc
Der er en anden måde at bruge ORDER BY-klausulen ved blot at nævne kolonnens position i stedet for kolonnenavnet.
For eksempel: I ovenstående UNION-forespørgsel vælger vi navn og alder, hvilket indebærer, at disse kolonner er på henholdsvis position 1 & 2.
Så for at BESTILLE Efter alder kan vi simpelthen angive placeringen i stedet for det faktiske kolonnenavn.
Derfor vil nedenstående forespørgsel også give det samme resultat.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY 2 asc
MySQL UNION Vs UNION ALL
MySQL leverer 2 varianter af UNION, dvs. UNION DISTINCT og UNION ALLE
Bemærk, at DISTINCT er underforstået som standard, selvom det ikke er angivet.
Den største forskel mellem dem begge er UNION ALL tillader også at kombinere og returnere duplikerede rækker, mens UNION bare returnerer de kombinerede rækker ved at fjerne duplikater.
Nedenstående tabel forklarer detaljerne:
Parameter | UNION | UNION ALLE |
---|---|---|
Definition | Svarer til UNION DISTINCT - ignorerer duplikerede datarækker, mens resultatet returneres | Returnerer alle rækker inklusive dubletter |
Syntaks | VÆLG {columnList} FRA {tabel1} UNION VÆLG {columnList} FRA {tabel2} | VÆLG {columnList} FRA {tabel1} UNION ALLE VÆLG {columnList} FRA {tabel2} |
Datakrav | Data, der kombineres, skal have lignende datatyper og skal hentes i samme rækkefølge, når de hentes fra flere tabeller | Samme som UNION |
Ofte stillede spørgsmål
Q # 1) Er Union hurtigere end JOIN?
Svar: UNION og JOINs bruges til praktisk talt 2 forskellige formål.
Teknisk set er UNION langt hurtigere end JOIN (især for store datasæt), da UNION bare sammenkæder rækker med data fra de enkelte SELECT-sætninger.
Q # 2) Hvad er UNION ALL-operatøren?
Svar: I lighed med UNION returnerer UNION ALL-operatøren også UNION mellem 2 SELECT-forespørgsler, men forskellen er, at den også indeholder de duplikerede rækker / poster.
Q # 3) Hvad er forskellen mellem UNION og JOIN?
Svar: Både UNION og JOIN bruges til at kombinere data fra 2 eller flere tabeller. Men der er en enorm forskel med hensyn til det opnåede resultatsæt og den måde, data hentes på.
Ligheder og forskelle mellem JOIN og UNION er anført i nedenstående tabel:
UNION | TILSLUTTE |
---|---|
Kombinerer data fra flere tabeller | Kombinerer data fra flere tabeller |
Kræver ingen specifik betingelse for at samle eller kombinere data | JOIN fungerer på en JOIN-betingelse, der kræves for at validere data, der kommer i resultatsæt |
Data fra forskellige tabeller tages som forskellige rækker i resultatsættet | Data fra forskellige tabeller kombineres i en enkelt række - for eksempel kan en række i resultatsættet indeholde 2 kolonner fra tabel1, 3 kolonner fra tabel 2 osv. Afhængigt af tilstanden JOIN og SELECT-forespørgsel |
UNIONer er enkle og ligetil | JOINS kræver komplekse forhold, og alt efter behov kan flere typer sammenføjninger som INNER / OUTER osv. Bruges. |
Konklusion
I denne vejledning har vi lært om brugen af MySQL UNION til at kombinere data fra 2 eller flere SELECT-sætninger.
UNION-erklæringen er virkelig nyttig til at samle lignende data fra store sæt forskellige tabeller og derefter køre en analyse af de kombinerede data.
UNION-kommandoen understøtter også en ALL-klausul, der også muliggør hentning af duplikatposter.
Anbefalet læsning
- Hvad er MySQL, og hvorfor bruges det?
- Forskellen mellem SQL Vs MySQL Vs SQL Server (med eksempler)
- Indre sammenføjning mod ydre sammenføjning: Præcis forskel med eksempler
- MySQL JOIN Tutorial: Indre, ydre, kryds, venstre, højre og selv
- MySQL Opret visningsvejledning med kodeeksempler
- MySQL Opret tabelvejledning med eksempler
- MySQL Update Statement Tutorial - Update Query Syntax & Eksempler
- Top 40 bedste MySQL-interviewspørgsmål og -svar (2021 spørgsmål)