Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους

Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους

Οι σχεσιακές βάσεις δεδομένων στηρίζονται στις συσχετίσεις μεταξύ των οντοτήτων τους (πίνακες και views).

Για να μπορέσουμε όμως να καλέσουμε συσχετισμένες εγγραφές από δύο η παραπάνω πίνακες / views θα πρέπει με κάποιον τρόπο να δηλώσουμε με ποιο πεδίο συνδέονται μεταξύ τους.

Αυτό ακριβώς κάνει η χρήση των SQL Join.

Υπάρχουν πέντε είδη Join: Left Join, Right Join, Inner Join, Full Join, Cross join.

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

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

create table pelatis (
  id integer,
  id_xwra integer,
  onoma_pelati varchar(50));
create table xwres (
  id integer,
  onoma_xwras varchar(50));

insert into pelatis values
(1,1,'Stratos'),
(2,1,'Maria'),
(3,4,'Georgia'),
(4,10,'Nikos'),
(5,null,'Iasonas');

insert into xwres values
(1,'Ellada'),
(2,'Ispania'),
(3,'Italia'),
(4,'Agglia'),
(5,'Germania');

select * from pelatis;

select * from xwres;
Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
01

Left Join

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

Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
02

Στο παράδειγμα δηλώνουμε ότι κάνουμε left join τον δεύτερο πίνακα “xwres”στο πεδίο “id_xwres” του πρώτου, με το πεδίο “id” του δεύτερου.

Το αποτέλεσμα είναι σε όσες εγγραφές δεν έχει οριστεί κοινό id να έρχονται και αυτές, με το “id” όμως να εμφανίζεται null (δηλαδή κενό).

select * from pelatis
left join xwres on pelatis.id_xwra = xwres.id;
Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
03

Left Join με μόνο τις εξωτερικές εγγραφές

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

Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
04

Υπάρχουν δύο τρόποι για το ίδιο αποτέλεσμα ο πρώτος είναι ένα κανονικό left join, με την χρήση αυτή την φορά where στο πεδίο που συσχετίζονται όταν είναι null στον δεύτερο πίνακα.

select * from pelatis
left join xwres on pelatis.id_xwra = xwres.id
where xwres.id is null;

Ο ίδιος αριθμός εγγραφών θα επιστρέψει και αν αντί για join και is null χρησιμοποιήσουμε correlated subquery exists (select).

select * from pelatis
where not exists (select xwres.id from xwres where xwres.id = pelatis.id_xwra);
Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
05

Right Join

Το right join λειτουργεί ανάποδα από το left, δηλαδή φέρνουμε όλες τις εγγραφές του δεύτερου πίνακα ακόμα και αν δεν υπάρχουν εγγραφές που ταιριάζουν με τον πρώτο πίνακα στο πεδίο που συσχετίζονται.

Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
06

Αυτή τη φορά θα εμφανιστούν όλες οι εγγραφές από τον πίνακα «xwres» και όσες δεν συσχετίζονται με τον πίνακα «pelatis», θα εμφανιστούν αλλά ως null στο πεδίο.

select * from pelatis
right join xwres on pelatis.id_xwra = xwres.id;
Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
07

Inner Join

Στο Inner Join φέρνουμε μόνο τις εγγραφές που συσχετίζονται στο πεδίο και με τους δύο πίνακες

Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
08

Δηλώνοντας inner πριν το join (αν και αν δεν βάλουμε τίποτα είναι το default) αυτή τη φορά θα δούμε τις εγγραφές που είναι συσχετισμένες δηλαδή μόνο όσους πελάτες έχουν δηλωμένη χώρα.

select * from pelatis
inner join xwres on pelatis.id_xwra = xwres.id;
Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
09

Full Join

Στο Full Join φέρνουμε όλες τις εγγραφές του πρώτου πίνακα και όλες τις εγγραφές του δεύτερο πίνακα είτε συσχετίζονται είτε όχι μεταξύ τους στο πεδίο.

Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
10

Με την εκτέλεση του full join θα δούμε ότι θα μας εμφανιστούν και οι πελάτες που δεν έχουν χώρα και όσοι πελάτες έχουν και όσες χώρες δεν έχουν πελάτη.

select * from pelatis
full join xwres on pelatis.id_xwra = xwres.id;
Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
11

Cross Join

Με το Cross Join δημιουργούμε ένα καρτεσιανό γινόμενο, δηλαδή συνδιάζουμε τις εγγραφές και των δύο πινάκων με τον κάθε δυνατό συνδιασμό.

select onoma_pelati,onoma|_xwras from pelatis
cross join xwres;
Τι είναι τα SQL Joins και πώς συσχετίζονται οι πίνακες μεταξύ τους
12

Αυτή ήτανε η ανάλυση των Joins, η χρήση τους θέλει πολύ προσοχή καθότι πολλές φορές χρησιμοποιούμε Inner Join και χάνουμε τις εγγραφές που δεν έχουν συσχετιστεί μεταξύ τους αν και τις θέλαμε. Αυτό οδηγεί σε λάθος αποτέλεσμα.

Η καλύτερη πρακτική είναι η χρήση Left ή Right Joins όπου δεν απαιτείται η χρήση του Inner.

Μοιράσου το

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