go backarticles

Articles of SQLschool.gr Team

Getting Started: Writing T-SQL (Part 5)

Fivi Panopoulou - Sotiris Karras

Σε αυτό το post θα δούμε τον operator join. Με αυτόν θα μπορέσουμε να συνδυάσουμε πληροφορίες από περισσότερους του ενός πίνακες στο result set μας. O συγκεκριμένος τελεστής χρησιμοποιείται στο FROM clause και συνδέει δύο πίνακες. Ο ένας πίνακας είναι συντακτικά πριν τον τελεστή και συνεπώς λέμε ότι αυτός είναι ο αριστερός πίνακας και ο άλλος ακολουθεί αμέσως μετά τον τελεστή και έτσι είναι ο δεξής πίνακας. Έχουμε τρείς βασικούς τύπους join, το cross join, το inner join και το outer join.

CROSS JOIN

Με το cross join παίρνουμε το καρτεσιανό γινόμενο των δύο πινάκων. Κάθε γραμμή του πρώτου πίνακα συνδυάζεται με κάθε γραμμή του δεύτερου πίνακα. Το πλήθος των γραμμών του αποτελέσματος είναι ο αριθμός γραμμών του πρώτου πίνακα επί τον αριθμό γραμμών του δεύτερου πίνακα. Για παράδειγμα, έστω ότι θέλουμε να δούμε πώς θα ήταν ο συνδυασμός όλων των υπαλλήλων με όλων των περιοχών. Αυτό μπορούμε να το δούμε με το Query 1 το οποίο θα μας επιστρέψει 477 γραμμές, οι οποίες προκύπτουν από τον συνδυασμό των 9 υπαλλήλων με τις 53 περιοχές.

-- QUERY 1: CROSS JOIN - EmployeeTerritories SELECT EmployeeID,TerritoryIDFROM EmployeesCROSS JOIN TerritoriesGO

INNER JOIN

To inner join είναι ο τύπος που χρησιμοποιείται πιο συχνά. Για αυτό, αν δεν προσδιοριστεί ο τύπος του join, υπονοείται το inner join. Αυτό μας δίνει τον συνδυασμό των γραμμών που ικανοποιούν μια συνθήκη.

 

Ας δούμε ένα παράδειγμα:

 
-- QUERY 2: Customers' orders SELECT Customers.CustomerID,CompanyName,City,       OrderID,OrderDateFROM CustomersINNER JOIN Orders    ON Customers.CustomerID = Orders.CustomerIDORDER BY Customers.CustomerID, OrderDate;GO

Με το Query 2 παίρνουμε τον συνδυασμό πελατών και παραγγελιών. Στο result set εμφανίζεται κάθε πελάτης που έχει κάνει κάποια παραγγελία μαζί με τα επιλεγμένα στοιχεία για την παραγγελία αυτή (δηλαδή το id και η ημερομηνία). Αν κάποιος πελάτης έχει κάνει 4 παραγγελίες ο πελάτης αυτός θα εμφανίζεται σε 4 διαφορετικές γραμμές, καθώς επίσης αν ο πελάτης δεν έχει κάνει καμία παραγγελία ποτέ, δεν θα εμφανιστεί καθόλου. Το result set έχει την παρακάτω μορφή και έχει 830 γραμμές:

 

 

OUTER JOIN

Το outer join έχει τρεις μορφές, το left outer join, to right outer join και το full outer join. Με αυτό παίρνουμε τον συνδυασμό των εγγραφών από τους δύο πίνακες για τις οποίες ικανοποιείται η δεδομένη συνθήκη, αλλά και κάποιες ακόμα ανάλογά με την μορφή του outer join που επιλέγουμε. Στην περίπτωση του left outer join παίρνουμε και όσες εγγραφές του αριστερού πίνακα δεν αντιστοιχούνται με βάση την δεδομένη συνθήκη με κάποια εγγραφή του δεξιού πίνακα. Τα πεδία του δεξιού  πίνακα που εμφανίζονται στο αποτέλεσμα για τις εγγραφές αυτές θα είναι null.  Αντίστοιχα, με το right outer join παίρνουμε όσες εγγραφές ικανοποιούν την συνθήκη και τις εγγραφές που απομένουν από το δεξιό πίνακα. Στο full outer join, στο αποτέλεσμα μας θα προστεθούν όσες εγγραφές δεν έχουν αντιστοιχισθεί τόσο από το δεξί όσο και από τον αριστερό πίνακα.

 

 

 
-- QUERY 3: Customers' orders, including customers without ordersSELECT Customers.CustomerID,CompanyName,City,       OrderID,OrderDateFROM CustomersLEFT OUTER JOIN Orders    ON Customers.CustomerID = Orders.CustomerIDORDER BY Customers.CustomerID, OrderDate;GO
  

Στο Query 3 ζητάμε και πάλι τους πελάτες με τις παραγγελίες τους, όπως κάναμε και στο Query 2, μόνο που τώρα χρησιμοποιούμε left outer join αντί για inner join. Έτσι παίρνουμε και τους πελάτες που δεν έχουν κάνει καμία παραγγελία. Το αποτέλεσμα έχει την ίδια μορφή όμως τώρα το πλήθος των γραμμών είναι 803. Για τους 3 πελάτες που δεν έχουν κάνει ποτέ κάποια παραγγελία τα πεδία OrderID και OrderDate είναι NULL όπως φαίνεται παρακάτω:

 

 

   

Σημείωση: Στην T-SQL δεν υπάρχει ξεχωριστή σύνταξη για natural join. Το natural join δύο πινάκων  είναι ένα inner join με συνθήκη ισότητας πάνω στις στήλες με το ίδιο όνομα και έτσι αντιστοιχεί σε ακριβώς αυτό.


Fivi Panopoulou

Fivi Panopoulou

System Engineer • Speaker

Το 2007 ξεκίνησα τις σπουδές μου στη σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών στο Εθνικό Μετσόβιο Πολυτεχνείο.Κατά την διάρκεια των σπουδών μου εκεί αγάπησα τον προγραμματισμό και τα συστήματα πληροφορικής, καθώς επίσης απέκτησα το ιδιαίτερο ενδιαφέρον μου για τις βάσεις δεδομένων. Κατά την διάρκεια της διπλωματικής μου ασχολήθηκα με ζητήματα ανωνυμοποίησης δεδομένων και την ανάπτυξη σχετικού εργαλείου. Τα τελευταία χρόνια των σπουδών μου, μου δόθηκε η ευκαιρία να ασχοληθώ περισσότερο και να διευρύνω τους ορίζοντές μου ως Microsoft Student Partner και μέσω της κοινότητας Student Guru. Στα πλαίσια των κοινοτήτων αυτών, ξεκίνησα να ασχολούμαι με παρουσιάσεις αλλά και να γνωρίζω τον SQL Server. Από την πρώτη στιγμή που ασχολήθηκα μαζί του, συνειδητοποίησα πόσο ήθελα να εμβαθύνω τις γνώσεις μου σχετικά με αυτόν και τα συστήματα διαχείρισης βάσεων δεδομένων γενικότερα, πράγμα που προσπαθώ να κάνω έκτοτε. Πριν χρόνια είχα την τύχη να συμμετέχω στο πρόγραμμα mentoring, μέσω του οποίου γνώρισα τον κ. Χατζηπαυλή. Από τότε συμμετέχω στην ομάδα του SQLschool.gr.


Sotiris Karras

Sotiris Karras

System Engineer • Speaker

Είμαι απόφοιτος της σχολής Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών του Εθνικού Μετσόβιου Πολυτεχνείου και στα ενδιαφέροντά μου συμπεριλαμβάνεται o τομέας του Knowledge and Data Engineering. Πιο συγκεκριμένα, έχω ασχοληθεί ακαδημαϊκά και ερευνητικά με τον τομέα του data privacy και data anonymity, ενώ πάθος μου είναι ό,τι έχει να κάνει με relational databases και data management. Στο παρελθόν, έχω συνεργαστεί με την Microsoft Hellas ως Microsoft Student Partner για ακαδημαϊκές δραστηριότητες και ήμουν μέρος του MVP mentoring προγράμματός της, στο οποίο είχα την τύχη να γνωρίσω τον κ. Χατζηπαυλή.


Relative Articles

Leave your comment

COMMENT

FULL NAME

EMAIL ADDRESS

We use Gravatar

WEB SITE



captcha


 

Newsletter

If you want to receive updates from us subscribe below with your email.
Follow us in
PASS chapter logo

The Official PASS Local Group for Greece

About us Contact us Terms of Use Privacy Sing in Register
sql school greece logo
© 2010-2020 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.