Τι είναι η ένωση;
Τα συνδικάτα συνδυάζουν τα αποτελέσματα από πολλά ερωτήματα SELECT σε ένα συγκεντρωτικό σύνολο αποτελεσμάτων.
Οι μόνες απαιτήσεις για να λειτουργήσει αυτό είναι ότι ο αριθμός στηλών πρέπει να είναι ο ίδιος από όλα τα ερωτήματα SELECT που πρέπει να συνδυαστούν.
Ας υποθέσουμε ότι έχουμε δύο πίνακες ως εξής
Ας δημιουργήσουμε τώρα ένα ερώτημα UNION για να συνδυάσουμε και τους δύο πίνακες χρησιμοποιώντας το DISTINCT
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;
Εδώ καταργούνται διπλές σειρές και επιστρέφονται μόνο μοναδικές σειρές.
Σημείωση: Η MySQL χρησιμοποιεί την ρήτρα DISTINCT ως προεπιλογή κατά την εκτέλεση ερωτημάτων UNION εάν δεν έχει καθοριστεί τίποτα.
Ας δημιουργήσουμε τώρα ένα ερώτημα UNION για να συνδυάσουμε και τους δύο πίνακες χρησιμοποιώντας ΟΛΑ
SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;
Εδώ περιλαμβάνονται διπλές σειρές και αφού χρησιμοποιούμε ΟΛΑ.
Γιατί να χρησιμοποιήσετε συνδικάτα
Ας υποθέσουμε ότι υπάρχει ένα ελάττωμα στο σχεδιασμό της βάσης δεδομένων σας και χρησιμοποιείτε δύο διαφορετικούς πίνακες που προορίζονται για τον ίδιο σκοπό. Θέλετε να ενοποιήσετε αυτούς τους δύο πίνακες σε έναν, παραλείποντας παράλληλα τυχόν διπλότυπες εγγραφές να περάσουν στον νέο πίνακα. Μπορείτε να χρησιμοποιήσετε το UNION σε τέτοιες περιπτώσεις.
Περίληψη
- Η εντολή UNION χρησιμοποιείται για να συνδυάσει περισσότερα από ένα αποτελέσματα ερωτήματος SELECT σε ένα ερώτημα που περιέχει σειρές από όλα τα επιλεγμένα ερωτήματα.
- Ο αριθμός στηλών και τύπων δεδομένων στις δηλώσεις SELECT πρέπει να είναι ο ίδιος για να λειτουργήσει η εντολή UNION.
- Η ρήτρα DISTINCT χρησιμοποιείται για την εξάλειψη διπλών τιμών από το σύνολο αποτελεσμάτων ερωτημάτων UNION. Η MySQL χρησιμοποιεί την ρήτρα DISTINCT ως προεπιλογή κατά την εκτέλεση ερωτημάτων UNION εάν δεν έχει καθοριστεί τίποτα.
- Ο όρος ALL χρησιμοποιείται για να επιστρέψει όλες ακόμη και τις διπλές σειρές στο ερώτημα UNION.
Πρακτικά παραδείγματα που χρησιμοποιούν τον πάγκο εργασίας MySQL
Στο myFlixDB ας συνδυάσουμε
Members_number και full_names από τον πίνακα μελών
με
movie_id και τίτλος από τον πίνακα ταινιών
Μπορούμε να χρησιμοποιήσουμε το ακόλουθο ερώτημα
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
Η εκτέλεση του παραπάνω σεναρίου στον πάγκο εργασίας MySQL έναντι του myflixdb μας δίνει τα ακόλουθα αποτελέσματα που εμφανίζονται παρακάτω.
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 |