PostgreSQL Ένωση, Ένωση ΟΛΟΙ με Παραδείγματα

⚡ Έξυπνη Σύνοψη

PostgreSQL Η συνάρτηση UNION συνδυάζει τα αποτελέσματα δύο ή περισσότερων εντολών SELECT σε ένα ενιαίο σύνολο αποτελεσμάτων και αφαιρεί τις διπλότυπες γραμμές, ενώ η συνάρτηση UNION ALL διατηρεί κάθε γραμμή, παρέχοντας μια ταχύτερη επιλογή όταν τα διπλότυπα δεν έχουν σημασία.

  • 🔗 Συνδυασμός: Η συνάρτηση UNION συγχωνεύει γραμμές από πολλαπλές εντολές SELECT σε ένα σύνολο αποτελεσμάτων.
  • 🧹 Διπλότυπα: Η συνάρτηση UNION καταργεί τις διπλότυπες γραμμές, ενώ η συνάρτηση UNION ALL διατηρεί κάθε αντίστοιχη γραμμή.
  • 📐 κανόνες: Κάθε SELECT πρέπει να επιστρέφει τον ίδιο αριθμό στηλών με συμβατούς τύπους δεδομένων.
  • ↕️ ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ: Μία μόνο εντολή ORDER BY στο τέλος ταξινομεί το συνδυασμένο σύνολο αποτελεσμάτων.
  • Απόδοση: Η συνάρτηση UNION ALL εκτελείται πιο γρήγορα επειδή παραλείπει το βήμα αφαίρεσης διπλότυπων.
  • 🤖 Βοήθεια με την Τεχνητή Νοημοσύνη: Οι βοηθοί τεχνητής νοημοσύνης ευθυγραμμίζουν τις στήλες και επιλέγουν μεταξύ ΕΝΩΣΗΣ και ΕΝΩΣΗΣ ΟΛΩΝ.

PostgreSQL ΕΝΩΣΗ και ΕΝΩΣΗ ΟΛΟΙ

Τι είναι PostgreSQL Ενωση?

The PostgreSQL Ο τελεστής UNION χρησιμοποιείται για το συνδυασμό συνόλων αποτελεσμάτων από περισσότερες από μία δηλώσεις SELECT σε ένα σύνολο αποτελεσμάτων. Τυχόν διπλότυπες σειρές από τα αποτελέσματα των εντολών SELECT εξαλείφονται. Ο χειριστής UNION λειτουργεί υπό δύο προϋποθέσεις:

  • Τα ερωτήματα SELECT πρέπει να επιστρέφουν τον ίδιο αριθμό στηλών.
  • Οι τύποι δεδομένων όλων των αντίστοιχων στηλών πρέπει να είναι συμβατοί.

Ο τελεστής UNION χρησιμοποιείται συνήθως για να συνδυάσει δεδομένα από σχετικούς πίνακες που δεν έχουν κανονικοποιηθεί τέλεια.

Σύνταξη

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

Ακολουθεί μια εξήγηση για τις παραπάνω παραμέτρους:

Οι εκφράσεις_1, έκφραση_2, … έκφραση_n είναι οι υπολογισμοί ή οι στήλες που πρέπει να ανακτήσετε.

Οι πίνακες είναι οι πίνακες από τους οποίους πρέπει να ανακτήσετε εγγραφές.

Οι προϋποθέσεις WHERE είναι οι προϋποθέσεις που πρέπει να πληρούνται για την ανάκτηση εγγραφών.

Σημείωση: Δεδομένου ότι ο τελεστής UNION δεν επιστρέφει διπλότυπα, η χρήση της συνάρτησης UNION DISTINCT δεν θα έχει καμία επίδραση στα αποτελέσματα.

PostgreSQL Ένωση

Ο τελεστής UNION αφαιρεί διπλότυπα, με τον ίδιο τρόπο που ΕΠΙΛΕΞΤΕ ΔΙΑΚΡΙΤΙΚΟ κάνει. Ας το δείξουμε αυτό. Έχουμε μια βάση δεδομένων με το όνομα Demo με τους ακόλουθους πίνακες:

Βιβλίο:

PostgreSQL Ένωση

Τιμή:

PostgreSQL Ένωση

Ας εκτελέσουμε την ακόλουθη εντολή:

SELECT id
FROM Book
UNION
SELECT id
FROM Price;

Η εντολή θα επιστρέψει τα εξής:

PostgreSQL Ένωση

Η στήλη id εμφανίζεται και στους πίνακες Βιβλίο και Τιμή. Ωστόσο, εμφανίζεται μόνο μία φορά στο αποτέλεσμα. Ο λόγος είναι ότι PostgreSQL Ο τελεστής UNION δεν επιστρέφει διπλότυπα.

PostgreSQL Ένωση Όλων

Αυτός ο τελεστής συνδυάζει σύνολα αποτελεσμάτων από περισσότερες από μία δηλώσεις SELECT χωρίς να αφαιρεί διπλότυπα. Ο τελεστής απαιτεί κάθε δήλωση SELECT να έχει παρόμοιο αριθμό πεδίων σε σύνολα αποτελεσμάτων παρόμοιων τύπων δεδομένων.

Σύνταξη:

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION ALL
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

Ακολουθεί μια εξήγηση για τις παραπάνω παραμέτρους:

Οι εκφράσεις_1, έκφραση_2, … έκφραση_n είναι οι υπολογισμοί ή οι στήλες που πρέπει να ανακτήσετε.

Οι πίνακες είναι οι πίνακες από τους οποίους πρέπει να ανακτήσετε εγγραφές.

Οι προϋποθέσεις WHERE είναι οι προϋποθέσεις που πρέπει να πληρούνται για την ανάκτηση εγγραφών.

Σημείωση: Και οι δύο εντολές SELECT πρέπει να έχουν ίσο αριθμό εκφράσεων.

Θα χρησιμοποιήσουμε τους παρακάτω πίνακες:

Βιβλίο:

PostgreSQL Ένωση Όλων

Τιμή:

PostgreSQL Ένωση Όλων

Εκτελέστε την ακόλουθη εντολή:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Θα πρέπει να επιστρέψει τα ακόλουθα:

PostgreSQL Ένωση Όλων

Τα διπλότυπα δεν έχουν αφαιρεθεί.

ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ

The PostgreSQL Ο τελεστής UNION μπορεί να χρησιμοποιηθεί μαζί με τον όρο ORDER BY για την παραγγελία των αποτελεσμάτων του ερωτήματος. Για να το αποδείξουμε αυτό, θα χρησιμοποιήσουμε τους παρακάτω πίνακες:

Τιμή:

ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ

Τιμή 2:

ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ

Ακολουθεί η εντολή που δείχνει πώς να χρησιμοποιείτε τον τελεστή UNION μαζί με τον όρο ORDER BY:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price;

Η εντολή θα επιστρέψει τα εξής:

ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ

Οι εγγραφές ταξινομήθηκαν από τη στήλη τιμών. Η ρήτρα ταξινομεί τις εγγραφές σε αύξουσα σειρά από προεπιλογή. Για να τα ταξινομήσετε με φθίνουσα σειρά, προσθέστε τον όρο DESC όπως φαίνεται παρακάτω:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

Η εντολή θα επιστρέψει τα εξής:

ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ

Οι εγγραφές έχουν ταξινομηθεί με βάση τη στήλη τιμής σε φθίνουσα σειρά.

Πότε να χρησιμοποιήσω την Ένωση και πότε την Ένωση Όλων;

Χρησιμοποιήστε τον τελεστή UNION όταν έχετε πολλούς πίνακες με παρόμοια δομή αλλά χωρισμένους για κάποιο λόγο. Είναι καλός όταν χρειάζεται να καταργήσετε ή να εξαλείψετε διπλότυπες εγγραφές.

Χρησιμοποιήστε τον τελεστή UNION ALL όταν δεν χρειάζεται να καταργήσετε ή να εξαλείψετε διπλότυπες εγγραφές.

Χρήση του pgAdmin

Τώρα ας δούμε πώς εκτελούνται και οι τρεις ενέργειες χρησιμοποιώντας το pgAdmin.

Πώς να το χρησιμοποιήσετε: PostgreSQL Ένωση με χρήση του pgAdmin

Ακολουθεί μια βήμα προς βήμα διαδικασία για τον τρόπο χρήσης PostgreSQL ΕΝΩΣΗ μέσω pgAdmin:

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin.

Βήμα 2) Από τη γραμμή πλοήγησης στα αριστερά, κάντε κλικ στην επιλογή Βάσεις δεδομένων και, στη συνέχεια, κάντε κλικ στην επιλογή Επίδειξη.

Χρήση PostgreSQL Ένωση με χρήση του pgAdmin

Βήμα 3) Πληκτρολογήστε το ερώτημα στο πρόγραμμα επεξεργασίας ερωτημάτων:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

Βήμα 4) Κάντε κλικ στο κουμπί Εκτέλεση.

Χρήση PostgreSQL Ένωση με χρήση του pgAdmin

Θα πρέπει να επιστρέψει τα ακόλουθα:

Χρήση PostgreSQL Ένωση με χρήση του pgAdmin

Ένωση Όλων

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin.

Βήμα 2) Από τη γραμμή πλοήγησης στα αριστερά, κάντε κλικ στην επιλογή Βάσεις δεδομένων και, στη συνέχεια, κάντε κλικ στην επιλογή Επίδειξη.

Χρήση PostgreSQL Union All Using pgAdmin

Βήμα 3) Πληκτρολογήστε το ερώτημα στο πρόγραμμα επεξεργασίας ερωτημάτων:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Βήμα 4) Κάντε κλικ στο κουμπί Εκτέλεση.

Χρήση PostgreSQL Union All Using pgAdmin

Θα πρέπει να επιστρέψει τα ακόλουθα:

Χρήση PostgreSQL Union All Using pgAdmin

ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ

Ο τελεστής UNION ALL μπορεί να συνδυαστεί με την ρήτρα ORDER BY για να παραγγείλετε αποτελέσματα στο σύνολο αποτελεσμάτων. Για παράδειγμα:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price
ORDER BY id;

Η εντολή θα επιστρέψει τα εξής:

Χρήση PostgreSQL ΠΑΡΑΓΓΕΛΙΑ ΜΕ ΤΗ χρήση του pgAdmin

Τα αποτελέσματα έχουν παραγγελθεί.

Κάντε λήψη της βάσης δεδομένων που χρησιμοποιείται σε αυτό το σεμινάριο

Συχνές Ερωτήσεις

Η συνάρτηση UNION ALL είναι ταχύτερη επειδή απλώς συνενώνει γραμμές. Η συνάρτηση UNION πρέπει να ταξινομήσει ή να κατακερματίσει τις συνδυασμένες γραμμές για να αφαιρέσει διπλότυπα, κάτι που προσθέτει επιπλέον κόστος. Όταν τα διπλότυπα δεν έχουν σημασία, η συνάρτηση UNION ALL είναι η πιο αποτελεσματική επιλογή.

Ναι. Κάθε SELECT σε μια UNION πρέπει να επιστρέφει τον ίδιο αριθμό στηλών και οι αντίστοιχες στήλες πρέπει να έχουν συμβατούς τύπους δεδομένων με την ίδια σειρά. Διαφορετικά. PostgreSQL εμφανίζει σφάλμα και το ερώτημα αποτυγχάνει.

Ναι. Τα ονόματα των στηλών μπορεί να διαφέρουν επειδή η συνάρτηση UNION αντιστοιχίζει τις στήλες κατά θέση και όχι κατά όνομα. Οι τύποι δεδομένων πρέπει να είναι συμβατοί και το σύνολο αποτελεσμάτων χρησιμοποιεί τα ονόματα στηλών από την πρώτη πρόταση SELECT.

Η συνάρτηση UNION στοιβάζει τις γραμμές δύο συνόλων αποτελεσμάτων κάθετα σε μία λίστα στηλών, αφαιρώντας τα διπλότυπα. Μια συνάρτηση JOIN συνδυάζει στήλες από διαφορετικούς πίνακες οριζόντια με βάση ένα σχετικό κλειδί, επομένως διευρύνει τις γραμμές αντί να τις προσαρτά.

Η εντολή ORDER BY ταξινομεί το τελικό συνδυασμένο αποτέλεσμα, επομένως η εντολή ORDER BY ταξινομεί το τελικό συνδυασμένο αποτέλεσμα, επομένως PostgreSQL επιτρέπει μόνο μία εντολή ORDER BY που τοποθετείται μετά την τελευταία επιλογή SELECT. Η ταξινόμηση των μεμονωμένων ερωτημάτων πρώτα δεν θα είχε νόημα μόλις συγχωνευτούν οι γραμμές τους.

Βοηθοί τεχνητής νοημοσύνης όπως το GitHub Copilot ευθυγραμμίζουν τις λίστες στηλών κάθε SELECT, επισημαίνουν τους τύπους δεδομένων που δεν ταιριάζουν και προτείνουν UNION ή UNION ALL με βάση το εάν πρέπει να διατηρούνται διπλότυπα, μειώνοντας τα συνηθισμένα σφάλματα ερωτημάτων.

Ναι. Εξετάζοντας τους πίνακες και τον στόχο σας, ένας βοηθός Τεχνητής Νοημοσύνης μπορεί να διαπιστώσει εάν οι διπλότυπες γραμμές είναι πιθανές και ουσιαστικές και, στη συνέχεια, να προτείνει ΕΝΩΣΗ ΟΛΩΝ όταν τα διπλότυπα είναι αποδεκτά για την αύξηση της ταχύτητας ή ΕΝΩΣΗ όταν πρέπει να αφαιρεθούν.

Η συνάρτηση UNION επιστρέφει γραμμές που βρέθηκαν σε οποιοδήποτε από τα δύο ερωτήματα. Η συνάρτηση INTERSECT επιστρέφει μόνο γραμμές που υπάρχουν και στα δύο ερωτήματα και η συνάρτηση EXCEPT επιστρέφει γραμμές στο πρώτο ερώτημα αλλά όχι στο δεύτερο. Και τα τρία αφαιρούν διπλότυπα από προεπιλογή.

Συνοψίστε αυτήν την ανάρτηση με: