Τι είναι τα set operators (Union) και τι διαφορά έχουν από τα Joins στην SQL

Τι είναι τα set operators (Union) και τι διαφορά έχουν από τα Joins στην SQL
Τι είναι τα set operators (Union) και τι διαφορά έχουν από τα Joins στην SQL

Σε αυτό το άρθρο θα αναλύσουμε τη χρήση των set operators, τα είδη που υπάρχουν και τι διαφορές υπάρχουν ανάμεσα σε αυτά και στα SQL Joins.

Στον κόσμο της SQL (Structured Query Language) πολλές φορές θα θέλουμε να συνδυάσουμε δύο διαφορετικά σετ δεδομένων σε ένα καινούργιο. Αυτό επιτυγχάνεται με τη χρήση set operators / union operator.

Ποια είναι η διαφορά με τα SQL Joins;

Στα SQL Joins συγκρίνουμε κολόνες από δύο διαφορετικούς πίνακες φτιάχνοντας εγγραφές που αποτελούνται από τις κολόνες αυτών των δύο πινάκων.

Στα Union operators ενώνουμε τις εγγραφές (γραμμές) δύο διαφορετικών σετ αποτελεσμάτων (query) σε ένα ενιαίο.

Set operators

Υπάρχουν τέσσερα είδη set operator: Union all, Union, Except, Intersect

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

Πάμε να τα εξηγήσουμε ένα ένα τα με παραδείγματα.

Για αρχή θα φτιάξουμε δύο πίνακες με δεδομένα ώστε να είναι πιο εύκολα κατανοητή η διαφορά του κάθε τύπου:

create table pelatis (
  onoma_pelati varchar(50));

create table pwlitis (
  onoma_pwliti varchar(50));
  
insert into pelatis values
('Stratos'),
('Nikos'),
('Iasonas');

insert into pwlitis values
('Stratos'),
('Giorgos'),
('Stefanos');
select * from pelatis;
select * from pwlitis;
Τι είναι τα set operators (Union) και τι διαφορά έχουν από τα Joins στην SQL

Union All

Στο Union All operator ενώνουμε τα αποτελέσματα από πολλά queries σε ένα ενιαίο το οποίο περιέχει και όσες εγγραφές είναι εξ’ ολοκλήρου διπλότυπες.

Τι είναι τα set operators (Union) και τι διαφορά έχουν από τα Joins στην SQL
select * from pelatis
union all
select * from pwlitis;
Τι είναι τα set operators (Union) και τι διαφορά έχουν από τα Joins στην SQL

Βλέπουμε ότι ο “Stratos” εμφανίζεται δύο φορές καθότι υπάρχει και στα δύο σετ αποτελεσμάτων.

Union

Στο Union operator σε αντίθεση με το Union All όταν ενώνουμε τα αποτελέσματα από πολλά queries σε ένα ενιαίο, δεν περιέχει όσες εγγραφές είναι εξ’ ολοκλήρου διπλότυπες.

select * from pelatis
union
select * from pwlitis;
Τι είναι τα set operators (Union) και τι διαφορά έχουν από τα Joins στην SQL

Βλέπουμε αυτή τη φορά ο “Stratos” υπάρχει μόνο μία φορά, παρότι υπάρχει και στα δύο σετ αποτελεσμάτων.

Except

Στο Except operator εμφανίζεται το πρώτο σετ αποτελεσμάτων αφού πρώτα έχουν αφαιρεθεί τα αποτελέσματα του δεύτερου.

Τι είναι τα set operators (Union) και τι διαφορά έχουν από τα Joins στην SQL
select * from pelatis
except
select * from pwlitis;
Τι είναι τα set operators (Union) και τι διαφορά έχουν από τα Joins στην SQL

Δεν εμφανίζεται ο “Stratos” καθώς υπήρχε στο δεύτερο σετ αποτελεσμάτων.

Intersect

Στο Intersect operator εμφανίζονται μόνο όσες εγγραφές είναι ίδιες και στα δύο σετ αποτελεσμάτων.

Τι είναι τα set operators (Union) και τι διαφορά έχουν από τα Joins στην SQL
select * from pelatis
intersect
select * from pwlitis;
Τι είναι τα set operators (Union) και τι διαφορά έχουν από τα Joins στην SQL

Στη προκειμένη περίπτωση μόνο η εγγραφή “Stratos” είναι κοινή και στα δύο σετ αποτελεσμάτων.

Κανόνες χρήσεις:

  • Θα πρέπει ο αριθμός στηλών και η σειρά τους να είναι ίδια σε όλα τα queries.
  • Θα πρέπει οι τύποι δεδομένων να είναι συμβατοί. (δηλαδή δεν γίνεται στο πρώτο query το τηλέφωνο να ορίζεται ως κείμενο και στο δεύτερο ως ακέραιος)

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση