mysql union comprehensive tutorial with union examples
Αυτό το σεμινάριο εξηγεί την εντολή MySQL UNION, τους τύπους της, Union vs Union All και παραδείγματα για τον συνδυασμό δεδομένων από 2 ή περισσότερα ερωτήματα:
Το MySQL UNION χρησιμοποιείται για το συνδυασμό αποτελεσμάτων από πολλαπλές ερωτήσεις SELECT σε ένα σύνολο αποτελεσμάτων. Είναι επίσης δυνατό να έχετε όλα τα σύνθετα ερωτήματα / λειτουργίες στα ερωτήματα SELECT και να εκτελέσετε το UNION με άλλες δηλώσεις SELECT για να αποδώσετε ένα συνδυασμένο αποτέλεσμα.
καλύτερη δωρεάν αφαίρεση κακόβουλου λογισμικού για τα Windows 7
Το προεπιλεγμένο χαρακτηριστικό μιας δήλωσης UNION θα ήταν να αφαιρέσετε τις διπλές καταχωρήσεις ή τις σειρές από το σύνολο σειρών που προκύπτει, ωστόσο, παρέχει τρόπους για την ανάκτηση των διπλών εγγραφών, καθώς και με τη ρήτρα UNION ALL
Τι θα μάθετε:
- Κατανόηση της ΕΝΩΣΗΣ μέσω της Θεωρίας του Σετ
- Τι πρόβλημα επιλύει η MySQL UNION
- MySQL UNION εναντίον UNION ALL
- συμπέρασμα
Κατανόηση της ΕΝΩΣΗΣ μέσω της Θεωρίας του Σετ
Η λειτουργία της UNION θα μπορούσε να γίνει πολύ κατανοητή από τις αρχές της θεωρίας SET.
Ας υποθέσουμε ότι έχουμε πίνακες A & B όπως αντιπροσωπεύονται από σύνολα παρακάτω και έχουν κάποια αλληλεπικαλυπτόμενα δεδομένα (ή μπορεί να είναι εντελώς άσχετα) - Η UNION θα περιλαμβάνει τον συνδυασμό δεδομένων και από τους δύο πίνακες.
Ας δούμε ένα παράδειγμα όπου τα σύνολα Α & Β έχουν κάποια κοινά στοιχεία. Το UNION θα περιέχει όλες τις τιμές από το σύνολο A & B με τις διπλές τιμές να παραλείπονται.
Τώρα, τι γίνεται αν τα σύνολα A & B είναι χωριστά και δεν περιέχουν κοινά στοιχεία; Και εδώ, η ΕΝΩΣΗ θα επιστρέψει το ίδιο αποτέλεσμα.
Ας συζητήσουμε το σενάριο όπου υπάρχουν αλληλεπικαλυπτόμενα στοιχεία μεταξύ συνόλων και θέλουμε να εμφανίζονται και οι διπλές τιμές στο σύνολο αποτελεσμάτων.
Η MySQL παρέχει έναν τρόπο για να το κάνετε αυτό χρησιμοποιώντας την επιλογή UNION ALL όπως φαίνεται στην παρακάτω εικόνα.
Τι πρόβλημα επιλύει η MySQL UNION
Το MySQL UNION χρησιμοποιείται όταν έχετε παρόμοια δεδομένα σε 2 ή περισσότερους πίνακες και θέλετε να δείτε μια συνδυασμένη προβολή των δεδομένων που περιέχονται και στους δύο πίνακες αντί να εκτελέσετε δηλώσεις SELECT για μεμονωμένους πίνακες.
Για παράδειγμα - Ας υποθέσουμε ότι υπάρχουν 2 πίνακες - Υπάλληλος και Μαθητης σχολειου. Και εργάζεστε σε μια βάση δεδομένων ατόμων που θέλει απλώς να έχει ένα όνομα, ηλικία και ημερομηνία γέννησης για όλους τους υπαλλήλους και τους μαθητές.
Χωρίς UNION, θα χρειαστεί να εκτελέσετε ξεχωριστά ερωτήματα SELECT και για τους δύο πίνακες και, στη συνέχεια, να εκτελέσετε τον επιθυμητό υπολογισμό με το ληφθέν σύνολο αποτελεσμάτων.
Σύνταξη MySQL UNION
Τα παρακάτω ερωτήματα θα επιστρέψουν μια ένωση 2 ή περισσότερων από 2 δηλώσεων SELECT.
SELECT {column1}, {column2} FROM {table1} UNION (ALL | DISTINCT) SELECT {column3}, {column4} FROM {table2} UNION (ALL | DISTINCT) SELECT ...
Ας προσπαθήσουμε να δούμε διαφορετικά στοιχεία της σύνταξης
- Μπορούμε να δούμε ότι είναι δυνατό να συνδυάσετε πολλά ερωτήματα SELECT με το UNION για να λάβετε το σύνολο σειρών που προκύπτει.
- Όνομα στήλης και τύποι δεδομένων: Είναι σημαντικό να κατανοήσετε ότι οι στήλες που θέλουμε να συνδυάσουμε πρέπει να έχουν τον ίδιο ή συμβατό τύπο δεδομένων. Για παράδειγμα: εάν έχετε τη στήλη 1 ως STRING, τότε η στήλη3 θα πρέπει να είναι και STRING (ή συμβατή με το STRING).
- Τα ονόματα και οι θέσεις της στήλης καθορίζονται από την πρώτη δήλωση SELECT στο ερώτημα UNION. Για παράδειγμα, στην παραπάνω σύνταξη: Η στήλη1 και η στήλη2 ονομάζονται στήλες κεφαλίδας στο σύνολο αποτελεσμάτων και οι τιμές της στήλης3 και της στήλης4 αντιστοιχίζονται στη στήλη1 και στη στήλη2, αντίστοιχα.
- Τα αποτελέσματα ενός ερωτήματος UNION από προεπιλογή καταργούν διπλές καταχωρήσεις. Για παράδειγμα, σε αυτήν την περίπτωση, εάν υπάρχει διπλή καταχώριση που έχει ακριβή αντιστοίχιση και έχει τις ίδιες τιμές για τη στήλη1 και τη στήλη2, τότε αυτές οι σειρές θα παραλειφθούν από το σύνολο αποτελεσμάτων.
Εάν επιθυμείτε διπλότυπα, τότε μπορούμε να χρησιμοποιήσουμε την επιλογή «ΟΛΑ» μαζί με την ΕΝΩΣΗ.
Η χρήση του ΔΙΑΚΡΙΤΗ υπονοείται από προεπιλογή. Λάβετε υπόψη ότι θα μπορούσε επίσης να προσδιοριστεί ρητά, ώστε να έχει μεγαλύτερη αναγνωσιμότητα.
Ας δούμε ένα δείγμα ενός ερωτήματος UNION.
Ας υποθέσουμε ότι υπάρχουν 2 πίνακες - υπάλληλος και μαθητής - ο καθένας έχει προσωπικά στοιχεία.
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));
Τώρα, εισαγάγετε ορισμένα εικονικά δεδομένα και στους δύο αυτούς πίνακες όπως φαίνεται παρακάτω:
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');
Όπως μπορείτε να δείτε παραπάνω, έχουμε προσθέσει σκόπιμα μια σειρά που έχει τα ίδια χαρακτηριστικά για το όνομα, την ηλικία και την ημερομηνία γέννησης.
Ας δούμε τώρα πώς μπορούμε να συνδυάσουμε τα δεδομένα σε αυτούς τους 2 πίνακες χρησιμοποιώντας εντολές UNION. Θα ρωτήσουμε το όνομα χρήστη και την ηλικία και από τους δύο πίνακες.
Απλή ΕΝΩΣΗ
Ερώτηση:
SELECT name, age FROM employee UNION SELECT name, age FROM student;
Θα δείτε 9 εγγραφές στο αποτέλεσμα (που σημαίνει ότι το παραπάνω ερώτημα έχει παραλείψει την διπλή καταχώριση).
Παραγωγή:
όνομα | ηλικία |
---|---|
Ίαν | 26 |
Ντάρεν | 32 |
Abhishek | 28 |
Έιτς | 30 |
Στίβεν | 40 |
Καρτίκ | είκοσι |
Ακάς | 22 |
Σίρλι | 19 |
Τζοάνα | είκοσι ένα |
ΕΝΩΣΗ ΜΕ ΕΝΩΣΗ ΟΛΑ
Η χρήση της ενότητας UNION με ΟΛΑ θα διασφαλίσει ότι θα εμφανίζονται και οι διπλές καταχωρίσεις.
Ερώτηση:
SELECT name, age FROM employee UNION ALL SELECT name, age FROM student;
Παραγωγή:
όνομα | ηλικία |
---|---|
Ίαν | 26 |
Ντάρεν | 32 |
Abhishek | 28 |
Έιτς | 30 |
Στίβεν | 40 |
Καρτίκ | είκοσι |
Ακάς | 22 |
Σίρλι | 19 |
Τζοάνα | είκοσι ένα |
Καρτίκ | είκοσι |
ΕΝΩΣΗ με συνθήκη
Ας προσθέσουμε όρους στις δηλώσεις SELECT όπου θέλουμε δεδομένα από υπαλλήλους ηλικίας κάτω των 30 ετών και μαθητές ηλικίας κάτω των 25 ετών.
Ερώτηση:
SELECT name, age FROM employee where age <30 UNION SELECT name, age FROM student where age < 25;
Παραγωγή:
όνομα | ηλικία |
---|---|
Έιτς | 30 |
Abhishek | 28 |
Καρτίκ | είκοσι |
Ακάς | 22 |
Σίρλι | 19 |
Τζοάνα | είκοσι ένα |
Όπως μπορείτε να δείτε παραπάνω, το σύνολο αποτελεσμάτων περιλαμβάνει το συνδυασμένο αποτέλεσμα με επικυρωμένες μεμονωμένες συνθήκες SELECT.
Παραγγελία αποτελεσμάτων UNION
Τα αποτελέσματα ενός ερωτήματος UNION δεν ταξινομούνται από προεπιλογή.
Προκειμένου να επιβληθεί μια παραγγελία από μια στήλη που υπάρχει στο σύνολο που προκύπτει, μπορεί να καθοριστεί ένας όρος ORDER BY στο τέλος της εντολής UNION.
Ας χρησιμοποιήσουμε τα ίδια δεδομένα Εργαζομένων / Φοιτητών και να παραγγείλουμε τα αποτελέσματα της ΕΝΩΣΗΣ σε αύξουσα σειρά ανά ηλικία.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY age asc
Παραγωγή:
όνομα | ηλικία |
---|---|
Σίρλι | 19 |
Καρτίκ | είκοσι |
Τζοάνα | είκοσι ένα |
Ακάς | 22 |
Ίαν | 26 |
Abhishek | 28 |
Ντάρεν | 32 |
Στίβεν | 40 |
Το παραπάνω σύνολο αποτελεσμάτων ταξινομείται κατά τιμές ηλικίας σε αυξανόμενη σειρά. Μπορούμε επίσης να χρησιμοποιήσουμε ψευδώνυμα στηλών για να αναφερθούμε στις στήλες στον όρο ORDER BY.
Για παράδειγμα: - Ένα ερώτημα όπως το παρακάτω θα αποφέρει επίσης το ίδιο αποτέλεσμα.
SELECT name as customer_name, age as customer_age FROM employee UNION SELECT name, age FROM student ORDER BY customer_age asc
Υπάρχει ένας άλλος τρόπος για να χρησιμοποιήσετε τον όρο ORDER BY, αναφέροντας απλώς τη θέση της στήλης αντί για το όνομα της στήλης.
Για παράδειγμα: Στο παραπάνω ερώτημα UNION, επιλέγουμε όνομα και ηλικία που σημαίνει ότι αυτές οι στήλες βρίσκονται στις θέσεις 1 & 2, αντίστοιχα.
Έτσι, για ΠΑΡΑΓΓΕΛΙΑ ΑΝΑ ηλικία, μπορούμε απλά να καθορίσουμε τη θέση αντί για το πραγματικό όνομα της στήλης.
Ως εκ τούτου, το παρακάτω ερώτημα θα αποδώσει επίσης το ίδιο αποτέλεσμα.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY 2 asc
MySQL UNION εναντίον UNION ALL
Η MySQL παρέχει 2 παραλλαγές του UNION, δηλ. ΕΝΩΣΗ ΔΙΑΚΡΙΣΗ και ΕΝΩΣΗ ΟΛΑ
Λάβετε υπόψη ότι το DISTINCT υπονοείται από προεπιλογή, ακόμη και αν δεν αναφέρεται.
Η κύρια διαφορά μεταξύ των δύο είναι το UNION ALL επιτρέπει να συνδυάζει και να επιστρέφει διπλές σειρές, ενώ το UNION επιστρέφει μόνο τις συνδυασμένες σειρές αφαιρώντας διπλά.
Ο παρακάτω πίνακας εξηγεί τις λεπτομέρειες:
Παράμετρος | ΕΝΩΣΗ | ΕΝΩΣΗ ΟΛΑ |
---|---|---|
Ορισμός | Είναι ισοδύναμο με το UNION DISTINCT - αγνοεί διπλές σειρές δεδομένων κατά την επιστροφή του αποτελέσματος | Επιστρέφει όλες τις σειρές, συμπεριλαμβανομένων των διπλότυπων |
Σύνταξη | ΕΠΙΛΟΓΗ {columnList} FROM {table1} ΕΝΩΣΗ ΕΠΙΛΟΓΗ {columnList} FROM {table2} | ΕΠΙΛΟΓΗ {columnList} FROM {table1} ΕΝΩΣΗ ΟΛΑ ΕΠΙΛΟΓΗ {columnList} FROM {table2} |
Απαιτήσεις δεδομένων | Τα δεδομένα που συνδυάζονται πρέπει να έχουν παρόμοιους τύπους δεδομένων και θα πρέπει να λαμβάνονται με την ίδια σειρά κατά την ανάκτηση από πολλούς πίνακες | Ίδιο με την ΕΝΩΣΗ |
Συχνές Ερωτήσεις
Q # 1) Είναι το Union πιο γρήγορο από το JOIN;
Απάντηση: Τα UNION και JOIN χρησιμοποιούνται για σχεδόν 2 διαφορετικούς σκοπούς.
Από τεχνικής απόψεως, το UNION είναι πολύ πιο γρήγορο από το JOIN (ειδικά για μεγάλα σύνολα δεδομένων) καθώς το UNION συνδυάζει σειρές δεδομένων από τις μεμονωμένες δηλώσεις SELECT.
Q # 2) Τι είναι ο χειριστής UNION ALL;
Απάντηση: Παρόμοια με το UNION, ο τελεστής UNION ALL επιστρέφει επίσης το UNION μεταξύ 2 ερωτημάτων SELECT, αλλά η διαφορά είναι ότι περιέχει επίσης τις διπλές σειρές / καταχωρήσεις.
Q # 3) Ποια είναι η διαφορά μεταξύ UNION και JOIN;
Απάντηση: Τόσο το UNION όσο και το JOIN χρησιμοποιούνται για το συνδυασμό δεδομένων από 2 ή περισσότερους πίνακες. Αλλά υπάρχει μια τεράστια διαφορά όσον αφορά το σύνολο αποτελεσμάτων που αποκτήθηκε και τον τρόπο ανάκτησης των δεδομένων.
Οι ομοιότητες και οι διαφορές μεταξύ JOIN και UNION αναφέρονται στον παρακάτω πίνακα:
ΕΝΩΣΗ | ΣΥΜΜΕΤΟΧΗ |
---|---|
Συνδυάζει δεδομένα από πολλούς πίνακες | Συνδυάζει δεδομένα από πολλούς πίνακες |
Δεν απαιτείται συγκεκριμένη συνθήκη για τη συγκέντρωση ή τον συνδυασμό δεδομένων | Το JOIN λειτουργεί σε μια συνθήκη JOIN που απαιτείται για την επικύρωση των δεδομένων που προέρχονται στο σύνολο αποτελεσμάτων |
Τα δεδομένα από διαφορετικούς πίνακες λαμβάνονται ως διαφορετικές σειρές του συνόλου αποτελεσμάτων | Τα δεδομένα από διαφορετικούς πίνακες συνδυάζονται σε μία σειρά - για μια σειρά στο σύνολο αποτελεσμάτων θα μπορούσαν να περιέχουν 2 στήλες από τον πίνακα 1, 3 στήλες από τον πίνακα 2 κ.λπ. ανάλογα με την συνθήκη JOIN και το ερώτημα SELECT |
Οι ΕΝΩΣΕΙΣ είναι απλές και απλές | Οι ΣΥΝΔΕΣΕΙΣ απαιτούν πολύπλοκες συνθήκες και ανάλογα με τις ανάγκες μπορούν να χρησιμοποιηθούν πολλαπλοί τύποι συνδέσεων όπως INNER / OUTER κ.λπ. |
συμπέρασμα
Σε αυτό το σεμινάριο, μάθαμε για τη χρήση του MySQL UNION για να συνδυάσουμε δεδομένα από 2 ή περισσότερες δηλώσεις SELECT.
Η δήλωση UNION είναι πραγματικά χρήσιμη για τη συγκέντρωση παρόμοιων δεδομένων από μεγάλα σύνολα διαφορετικών πινάκων και στη συνέχεια την εκτέλεση ανάλυσης στα συνδυασμένα δεδομένα.
Η εντολή UNION υποστηρίζει επίσης μια ρήτρα ΟΛΩΝ που επιτρέπει την ανάκτηση των διπλών εγγραφών επίσης.
Συνιστώμενη ανάγνωση
- Τι είναι το MySQL και γιατί χρησιμοποιείται;
- Διαφορά μεταξύ SQL Vs MySQL Vs SQL Server (με παραδείγματα)
- Inner Join Vs Outer Join: Ακριβής διαφορά με παραδείγματα
- MySQL JOIN Tutorial: Εσωτερικό, εξωτερικό, σταυρό, αριστερά, δεξιά και μόνος
- MySQL Δημιουργία εκπαιδευτικού προγράμματος με παραδείγματα κώδικα
- MySQL Δημιουργία εκπαιδευτικού πίνακα με παραδείγματα
- Tutorial MySQL Update Statement - Ενημέρωση σύνταξης ερωτημάτων και παραδείγματα
- Κορυφαίες 40 καλύτερες ερωτήσεις συνέντευξης MySQL και απαντήσεις (2021 ερωτήσεις)