Σχετικά έγγραφα
Ηλεκτρονικοί Υπολογιστές II

1 / 150

1 / 105

Ερωτήματα επιλογής με σύζευξη πινάκων



Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

Ηλεκτρονικοί Υπολογιστές II

DELETE, UPDATE, INSERT.

Πρόλογος Μέρος Ι Μια βόλτα στις βάσεις δεδομένων Μια βόλτα στις βάσεις δεδομένων...25

DELETE, UPDATE, INSERT

1 / 97

1 / 106

Ηλεκτρονικοί Υπολογιστές II

1 / 87

Ηλεκτρονικοί Υπολογιστές II


GROUP BY, HAVING, COUNT, MIN, MAX, SUM, AVG, ROLLUP.

DISTINCT, LIKE, NULL, AND, OR, BETWEEN

Ηλεκτρονικοί Υπολογιστές II

Ηλεκτρονικοί Υπολογιστές II

Ηλεκτρονικοί Υπολογιστές II

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) ΤΕΙ ΔυτικήςΜακεδονίας



1 / 106

Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός. Σχεσιακή Άλγεβρα Σχεσιακός Λογισμός

Σχεδίαση Βάσεων Δεδομένων


Ηλεκτρονικοί Υπολογιστές II

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

ΘΕΜΑΤΑ. Θέμα 1 ο Σύμφωνα με τους παραπάνω πίνακες και τη θέση που έχουν τα ξένα κλειδιά βρείτε τους

Ηλεκτρονικοί Υπολογιστές II

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Επιλέγει όλες τις πλειάδες, από μια σχέση R, που ικανοποιούν τη συνθήκη επιλογής.

Τμήμα Πληροφορικής ΑΠΘ

Εργαστήριο 6 ο 7 ο / Ερωτήματα Ι

Βάσεις Δεδομένων Προχωρημένα Ερωτήματα SQL

Βάσεις Δεδομένων. Εργαστήριο ΙV. Τμήμα Πληροφορικής ΑΠΘ

Περιεχόμενα. Βάσεις Δεδομένων Προχωρημένα Ερωτήματα SQL. Συνένωση Σχέσεων στην SQL2 (3) Συνένωση Σχέσεων στην SQL2. (Join Relations Feature in SQL)

Βάσεις Δεδομένων Σύνθετα SQL queries

Kεφ.2: Σχεσιακό Μοντέλο (επανάληψη) Κεφ.6.1: Σχεσιακή Άλγεβρα

Βάσεις Δεδομένων Σύνθετα SQL queries. Ψευδώνυμα (Aliases) (2) Ψευδώνυμα (Aliases) (1) Ασάφεια και Πλήρη Ονόματα. Ερώτημα χωρίς τον όρο WHERE (1)


Εργαστήριο 8o. Ερωτήματα επιλογής Παραμετρικά ερωτήματα Ερωτήματα δημιουργίας πεδίων. Ευάγγελος Γ. Καραπιδάκης

ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ MYSQL

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 6: SQL (Συζεύξεις, Εμφώλευση, Ομαδοποίηση) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Διάλεξη 04: Εννοιολογική Σχεδίαση Βάσης Δεδομένων II (Entity Relationship Modelling) Διδάσκων: Παναγιώτης Ανδρέου

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Αντώνης Χρυσόπουλος Στέλιος Μόσχογλου Θεοδόσης Σουργκούνης MYSQL PHP ADVANCED. Χέρι χέρι με τον Καρατζαφέρη

ΕΝΗΜΕΡΩΣΗ ΔΕΔΟΜΕΝΩΝ. UPDATE products SET prod_fpa=19 WHERE prod_fpa=23; SELECT prod_descr,purchase,purchase_date FROM products WHERE prod_fpa=9;

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.


Σχεδίαση Βάσεων Δεδομένων

Τμήμα Διοίκησης Επιχειρήσεων

Βάσεις Δεδομένων Ευαγγελία Πιτουρά 2. Εννοιολογικός Σχεδιασμός Βάσεων εδομένων (με χρήση του Μοντέλου Οντοτήτων/Συσχετίσεων)

BΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΕΞΕΤΑΣΗ ΦΕΒΡΟΥΑΡΙΟΥ 2005

Ένας απλός τρόπος αναπαράστασης δεδομένων: ένας διδιάστατος πίνακας που λέγεται σχέση Γνωρίσματα

Η SQL ως γλώσσα ερωτημάτων. Υπενθυμίζουμε: Σχέση = Πίνακας Πλειάδα = Εγγραφή = Γραμμή (Πίνακα) Πεδίο = Γνώρισμα (Σχέσης) = Στήλη (Πίνακα)

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο Διδάσκων Καθ.: Νίκος Τσαπατσούλης

Ένας απλός τρόπος αναπαράστασης δεδομένων: ένας διδιάστατος πίνακας που λέγεται σχέση Γνωρίσματα

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 2 ο Μάθημα: Βασικά Θέματα Βάσεων Δεδομένων. Δρ. Κωνσταντίνος Χ.

Το Μοντέλο των Οντοτήτων Συσχετίσεων Entity Relationship Model. Νικόλαος Ζ. Ζάχαρης

Σχεσιακό Μοντέλο Δεδομένων

Βάσεις δεδομένων. (6 ο μάθημα) Ηρακλής Βαρλάμης

Σχεδίαση και λειτουργία βάσης δεδομένων Το παράδειγμα της μαιευτικής κλινικής Ευάγγελος Καρβούνης

Βάσεις Δεδομένων : Σχεσιακό Μοντέλο 1. Ένας απλός τρόπος αναπαράστασης δεδομένων: ένας διδιάστατος πίνακας που λέγεται σχέση.

Βάσεις Δεδομένων Ενότητα 6

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

Σχεσιακή Άλγεβρα Σχεδιασμός Βάσεων Δεδομένων

Σχεσιακή Άλγεβρα. Βάσεις Δεδομένων : Σχεσιακή Άλγεβρα 1

Βάσεις Δεδομένων. Σχεσιακό Μοντέλο Δεδομένων. Βασίλειος Βεσκούκης Ορισμός Βάσης Δεδομένων Δομή Περιορισμοί

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 8: SQL (Πρακτική Εξάσκηση 2) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

2 ο Σύνολο Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Διδάσκοντες: Δ. Φωτάκης, Δ. Σούλιου Επιμέλεια διαφανειών: Δ. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο. Εργαστηριακή Άσκηση 4 7/02/2012

Παράδειγμα Select Introduction Group By Join Aliases.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (3)

A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 5 η ΕΝΟΤΗΤΑ: ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 7β: SQL (Πρακτική Εξάσκηση 1) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Σχεδιασμός μιας Β : Βήματα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Βάσεις δεδομένων. (7 ο μάθημα) Ηρακλής Βαρλάμης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΟΝΟΜΑΤΕΠΩΝΥΜΟ : Αντικείμενα: Βάσεις δεδομένων, σχέσεις μεταξύ πινάκων, ερωτήματα, φόρμες και αναφορές.

#1.1 Τι είναι η Βάση Δεδομένων

MYSQL 2. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Σχεδιασµός µιας Β. Ένας απλός τρόπος αναπαράστασης δεδοµένων: ένας διδιάστατος πίνακας που λέγεται σχέση Γνωρίσµατα

Μετατροπή Σχήματος Ο/Σ σεσχεσιακό

Σχέσεις. ιδάσκοντες:. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Μετατροπή Σχήματος Ο/Σ σε Σχεσιακό

Μετατροπή Σχήματος Ο/Σ σεσχεσιακό

Το Σχεσιακό Μοντέλο. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΘΕΜΑΤΑ. Ερώτηση 1 Κατά τη Φυσική Αποθήκευση (Physical storage) μιας ΒΔ αποθηκεύονται στον δίσκο τα:

Συναρτησιακές Εξαρτήσεις και Κανονικοποίηση

Σύνολα Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Τμήμα Πληροφορικής ΑΠΘ

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

Κεφάλαιο 10 Άλλες Πράξεις Θεωρίας Συνόλων

Βάσεις Δεδομένων (Ε) Εισαγωγή στην υλοποίηση σχεσιακών βάσεων δεδομένων

Transcript:

Ερωτήματα SQL με σύζευξη πινάκων ΜΗ ΕΙΝΑΙ ΒΑΣΙΛΙΚΗΝ ΑΤΡΑΠΟΝ ΕΠΙ ΓΕΩΜΕΤΡΙΑΝ Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr 1 / 30

Σκοπός του μαθήματος Εκτελείτε ερωτήματα ανάσυρσης δεδομένων από πολλούς πίνακες Εφαρμόζετε κατάλληλες συνδέσεις (JOIN) στους πίνακες Εκτελείτε ερωτήματα που αντιστοιχούν στις σχεσιακές πράξεις καρτεσιανού γινομένου, σύζευξης, τομής, διαφοράς και διαίρεσης Αντιληφθείτε τις διαφορές και ομοιότητες ανάμεσα στους διαφορετικούς τύπους συζεύξεων 2 / 30

Το σχήμα της βάσης company departments(depid, depname, manager) employees(empid, firstname, lastname, depid, salary, hiredate) projects(proid, title, budget, startdate, enddate, progress) workson(empid, proid) departments, τα τμήματα της εταιρείας employees, οι υπάλληλοι της εταιρείας projects, τα έργα που εκτελεί η εταιρεία workson, η απασχόληση των υπαλλήλων στα έργα 3 / 30

Το σχήμα της βάσης company departments, τα τμήματα της εταιρείας employees, οι υπάλληλοι της εταιρείας projects, τα έργα που εκτελεί η εταιρεία workson, η απασχόληση των υπαλλήλων στα έργα 4 / 30

Πρωτεύοντα και ξένα κλειδιά Κάθε πίνακας έχει ένα πρωτεύον κλειδί, δηλαδή ένα υποσύνολο των πεδίων παίρνει μοναδικές τιμές που δεν επαναλαμβάνονται Το πρωτεύον κλειδί μπορεί να είναι απλό (ένα πεδίο), ή σύνθετο (συνδυασμός πεδίων) Κάθε εγγραφή ενός πίνακα μπορεί να προσδιοριστεί με τη χρήση του πρωτεύοντος κλειδιού Η σύνδεση δεδομένων από διαφορετικούς πίνακες σύζευξη γίνεται (συνήθως) με τη χρήση του ξένου κλειδιού Το ξένο κλειδί είναι η μεταφορά του πρωτεύοντος κλειδιού ενός πίνακα σε έναν άλλο πίνακα Ενας πίνακας μπορεί να έχει πολλά ξένα κλειδιά ή να μην έχει κανένα 5 / 30

Συσχέτιση departments και employees Ο πίνακας departments έχει πρωτεύον κλειδί το πεδίο depid Ο πίνακας employees έχει πρωτεύον κλειδί το πεδίο empid Ο πίνακας employees έχει ξένο κλειδί το πεδίο depid, ο οποίο παίρνει τιμές που αναφέρονται στις τιμές του πεδίου depid του πίνακα departments: departments.depid = employees.depid Το πεδίο employees.depid δεν είναι πρωτεύον κλειδί και δεν παίρνει μοναδικές τιμές: πολλοί υπάλληλοι εργάζονται στο ίδιο τμήμα Οι πίνακες departments και employees συσχετίζονται μεταξύ τους με συσχέτιση Ενα προς Πολλά 6 / 30

Συσχέτιση employees και projects Ο πίνακας workson έχει πρωτεύον κλειδί το συνδυασμό των πεδίων empid και proid (σύνθετο κλειδί) Ο πίνακας departments έχει πρωτεύον κλειδί το πεδίο depid Ο πίνακας projects έχει πρωτεύον κλειδί το πεδίο poid Ενας υπάλληλος απασχολείται σε πολλά έργα, ένα έργο απασχολεί πολλούς υπαλλήλους, επομένως η συσχέτιση είναι Πολλά προς Πολλά Σε τέτοιες περιπτώσεις απαιτούνται δύο ξένα κλειδιά, τα οποία πρέπει να τοποθετηθούν σε ξεχωριστό πίνακα Η λύση βρίσκεται στη δημιουργία του πίνακα workson ο οποίος έχει δύο ξένα κλειδιά: empid και proid Η σύζευξη των πινάκων employees και projects γίνεται μέσω του πίνακα workson 7 / 30

Συσχέτιση employees και projects μέσω workson Ο πίνακας employees έχει πρωτεύον κλειδί το πεδίο empid Το πεδίο empid είναι ξένο κλειδί στον πίνακα workson Η συσχέτιση ανάμεσα στους πίνακες employees και workson είναι Ενα προς Πολλά: ένας υπάλληλος απασχολείται σε πολλά έργα Ο πίνακας projects έχει πρωτεύον κλειδί το πεδίο proid Το πεδίο proid είναι ξένο κλειδί στον πίνακα workson Η συσχέτιση ανάμεσα στους πίνακες projects και workson είναι Ενα προς Πολλά: ένα έργο απασχολεί πολλούς υπαλλήλους 8 / 30

Το σχήμα της βάσης company departments, τα τμήματα της εταιρείας employees, οι υπάλληλοι της εταιρείας projects, τα έργα που εκτελεί η εταιρεία workson, η απασχόληση των υπαλλήλων στα έργα 9 / 30

Καρτεσιανό γινόμενο στη βάση δεδομένων company Ο συνδυασμός των πινάκων departments και employees departments employees λέγεται καρτεσιανό γινόμενο, και περιλαμβάνει όλους τους συνδυασμούς των δεδομένων των πινάκων departments και employees: Το αποτέλεσμα είναι πίνακας με πεδία τα πεδία τόσο του πίνακα departments όσο και τα πεδία του πίνακα employees Το αποτέλεσμα έχει εγγραφές όλους τους συνδυασμούς των εγγραφών του πίνακα departments με τις εγγραφές του πίνακα employees Το καρτεσιανό γινόμενο είναι χρήσιμο μόνο ως ενδιάμεσο αποτέλεσμα 10 / 30

Καρτεσιανό γινόμενο, στην SQL departments employees Καρτεσιανό γινόμενο τμημάτων και υπαλλήλων SELECT FROM departments, employees ; Η σύνταξη στην SQL είναι απλή: γράφουμε τους πίνακες μετά το FROM και τους χωρίζουμε με κόμμα Μπορούμε να γράψουμε περισσότερο από δύο πίνακες Προσοχή! το αποτέλεσμα μπορεί να περιέχει μεγάλο όγκο εγγραφών, πχ δύο πίνακες με 20 και 50 εγγραφές αντίστοιχα, δίνουν στο αποτέλεσμα 20 50 = 1000 εγγραφές 11 / 30

Φυσική σύζευξη στην SQL Σύζευξη τμημάτων και υπαλλήλων departments employees SELECT FROM departments NATURAL JOIN employees ; Π empid,lastname,depname (departments employees) Να βρεθεί ο κωδικός και το επώνυμο των υπαλλήλων, καθώς και το όνομα του τμήματος στο οποίο απασχολούνται SELECT empid, lastname, depname FROM departments NATURAL JOIN employees ; 12 / 30

Σύζευξη θήτα στην SQL departments departments.depid=employees.depid employees Σύζευξη τμημάτων και υπαλλήλων SELECT FROM departments, employees WHERE departments. d e p i d = employees. d e p i d ; Προσέξτε τη γραφή πίνακας.πεδίο Το καρτεσιανό γινόμενο είναι χρήσιμο μόνο ως ενδιάμεσο αποτέλεσμα Στη φράση WHERE μπορούν να προστεθούν επιπλέον περιορισμοί (με AND) Στη θήτα σύζευξη είναι δυνατό να πραγματοποιηθεί και με πεδία που δεν έχουν το ίδιο όνομα 13 / 30

Εσωτερική σύζευξη στην SQL Σύζευξη τμημάτων και υπαλλήλων SELECT FROM departments INNER JOIN employees ON departments. d e p i d = employees. d e p i d ; Οι δύο πίνακες χωρίζονται με τη φράση INNER JOIN Αντί για WHERE υπάρχει (υποχρεωτικά) μετά το INNER JOIN η φράση ON Η πρώτη έκδοση της SQL δεν υποστηρίζει αυτό τον τρόπο γραφής 14 / 30

Παράδειγμα INNER JOIN 1 Να δοθεί το επώνυμο των υπαλλήλων και το όνομα του τμήματος στο οποίο εργάζονται Π firstname,lastname,depname (departments departments.depid=employees.depid employees) SELECT employees. lastname, departments. depname FROM departments INNER JOIN employees ON employees. d e p i d = departments. d e p i d ; Η ερώτηση ζητά δεδομένα που είναι αποθηκευμένα σε δύο πίνακες Επομένως χρειάζεται σύζευξη των πινάκων employees και departments Η σύζευξη γίνεται με βάση το κοινό του πεδίο depid Το πεδίο depid είναι πρωτεύον κλειδί στον πίνακα departments Το πεδίο depid είναι ξένο κλειδί στον πίνακα employees Η σύζευξη με βάση πρωτεύον και ξένο κλειδί είναι η πλέον συνηθισμένη περίπτωση σύζευξης 15 / 30

Μετονομασία πινάκων Με χρήση του AS FROM employees AS e Χωρίς χρήση του AS FROM employees e Στη σύζευξη FROM employees e INNER JOIN departments d 16 / 30

Παράδειγμα INNER JOIN 2 Να δοθεί το όνομα των υπαλλήλων, το όνομα του τμήματος στο οποίο εργάζονται, και ο μισθός τους Π firstname,lastname,depname,salary (ϱ d (departments) d.depid=e.depid ϱ e (employees)) SELECT e. f i r s t n a m e, e. lastname, d. depname, e. s a l a r y FROM employees e INNER JOIN departments d ON e. d e p i d = d. d e p i d ; firstname lastname depname salary Μαρία Αθανασίου Διοίκησης/Επίβλεψης 2787.69 Κρινιώ Μαροπούλου Διοίκησης/Επίβλεψης 1754.67 Κυριάκος Ρούσσης Διοίκησης/Επίβλεψης 1852.99 Μαρία Αλεβιζάτου Οικονομολόγων/Λογιστών 1321.92 Δέσποινα Παπαδοπούλου Οικονομολόγων/Λογιστών 1609.52 Πέτρος Αρβανιτάκης Οικονομολόγων/Λογιστών 1323.80............ 17 / 30

Παράδειγμα INNER JOIN 3 Να δοθεί το όνομα των υπαλλήλων, το όνομα του τμήματος στο οποίο εργάζονται και ο μισθός τους, για υπαλλήλους με μισθός μεταξύ 1050 και 1300 Π firstname,lastname,depname,salary (σ salary 1050 salary 1300 (ϱ d (departments) d.depid=e.depid ϱ e (employees))) SELECT e. f i r s t n a m e, e. lastname, d. depname, e. s a l a r y FROM employees e INNER JOIN departments d ON e. d e p i d = d. d e p i d WHERE e. s a l a r y BETWEEN 1050 AND 1300; Ο όρος WHERE μπορεί να χρησιμοποιηθεί για περιορισμό των εγγραφών. Η παράσταση συνθήκης μπορεί να αφορά οποιοδήποτε πεδίο από αυτά που υπάρχουν στους δύο πίνακες. 18 / 30

Παράδειγμα INNER JOIN 4 Να βρεθεί ο κωδικός και το όνομα όλων των υπαλλήλων που απασχολούνται στο έργο με κωδικό 38, με αύξουσα ταξινόμηση ως προς το επώνυμο Π empid,firstname,lastname (σ proid=38 (ϱ e (employees) e.empid=w.empid ϱ w (workson))) SELECT e. empid, e. f i r s t n a m e, e. lastname FROM employees e INNER JOIN workson w ON e. empid = w. empid WHERE w. p r o i d = 38 ORDER BY e. lastname ASC; Ο όρος ORDER BY πάντα στο τέλος. Προσέξτε πως χρειάζεται σύζευξη ακόμα και αν όλα τα πεδία που εμφανίζονται στη φράση SELECT βρίσκονται σε ένα πίνακα (γιατί;) 19 / 30

Πολλά προς πολλά Να βρεθούν τα ονόματα των υπαλλήλων και ο κωδικός και ο προϋπολογισμός των έργων στα οποία συμμετέχουν υπάλληλοι με μισθό μεγαλύτερο του 1700 Π firstname,lastname,proid,budget (σ salary>1700 (ϱ e (employees) d.depid=e.depid ϱ w (workson) w.proid=p.proid ϱ p (projects))) SELECT e. f i r s t n a m e, e. lastname, p. p r o i d, p. budget FROM ( employees e INNER JOIN workson w ON e. empid = w. empid ) INNER JOIN p r o j e c t s p ON p. p r o i d = w. p r o i d WHERE e. s a l a r y > 1700; 20 / 30

Πολλά προς πολλά Εναλλακτικός τρόπος Να βρεθούν τα ονόματα των υπαλλήλων και ο κωδικός και ο προϋπολογισμός των έργων στα οποία συμμετέχουν υπάλληλοι με μισθό μεγαλύτερο του 1700 Π firstname,lastname,proid,budget (σ e.empid=w.empid p.proid=w.proid e.salary>1700 (ϱ e (employees) ϱ w (workson) ϱ p (projects))) SELECT e. f i r s t n a m e, e. lastname, p. p r o i d, p. budget FROM employees e, workson w, p r o j e c t s p WHERE e. empid = w. empid AND p. p r o i d = w. p r o i d AND e. s a l a r y > 1700; 21 / 30

Ερώτημα με 4 πίνακες Να βρεθεί το όνομα των υπαλλήλων και του τμήματος των υπαλλήλων για όλους τους υπαλλήλους που προσλήφθηκαν μετά τις 1/1/2005 και απασχολούνται σε έργα με προϋπολογισμό πάνω από 300,000 Π firstname,lastname,depname (σ hiredate> 2004 01 01 budget>100000 (ϱ d (departments) d.depid=e.depid ϱ e (employees) e.empid=w.empid ϱ w (workson) w.proid=p.proid ϱ p (projects)) SELECT e. f i r s t n a m e, e. lastname, d. depname FROM ( ( departments d INNER JOIN employees e ON d. d e p i d = e. d e p i d ) INNER JOIN workson w ON e. empid = w. empid ) INNER JOIN p r o j e c t s p ON p. p r o i d = w. p r o i d WHERE e. h i r e d a t e > 2004 01 01 AND p. budget > 300000; 22 / 30

Παράδειγμα εξωτερικής σύζευξης το πρόβλημα Να βρεθούν τα ονόματα των υπαλλήλων του τμήματος 4 και οι κωδικοί των έργων που συμμετέχουν Π e.firstname,e.lastname,w.proid (σ e.depid=4 (ϱ e (employees) d.depid=e.depid ϱ w (workson))) SELECT e. f i r s t n a m e, e. lastname, w. p r o i d FROM employees e INNER JOIN workson w ON e. empid = w. empid WHERE e. d e p i d = 4 ; firstname lastname proid Νίκος Βλάχος 12 Βαγγέλης Χριστόπουλος 12 Παύλος Περίδης 43 Ευθαλεία Μικράκη 21 Τι γίνεται με τους υπαλλήλους του τμήματος 4 που δεν απασχολούνται σε κανένα έργο; Πως μπορούμε να τους εμφανίσουμε στο αποτέλεσμα; 23 / 30

Παράδειγμα εξωτερικής σύζευξης Η λύση Να βρεθούν τα ονόματα των υπαλλήλων του τμήματος 4 και οι κωδικοί των έργων που συμμετέχουν Π e.firstname,e.lastname,w.proid (σ e.depid=4 (ϱ e (employees) e.empid=w.empid ϱ w (workson))) SELECT e. f i r s t n a m e, e. lastname, w. p r o i d FROM employees e LEFT JOIN workson w ON e. empid = w. empid WHERE e. d e p i d = 4 ; firstname lastname proid Νίκος Βλάχος 12 Βαγγέλης Χριστόπουλος 12 Νίκος Στεργιόπουλος NULL Παύλος Περίδης 43 Ευθαλεία Μικράκη 21 Το όνομα του υπαλλήλου εμφανίζεται στο αποτέλεσμα. Η στήλη proid συμπληρώνεται με NULL. Η τιμή NULL δημιουργήθηκε κατά την εκτέλεση του 24 / 30

Αριστερή και δεξιά σύζευξη Ισοδυναμία Να βρεθούν τα ονόματα των υπαλλήλων του τμήματος 4 και οι κωδικοί των έργων που συμμετέχουν Αριστερή σύζευξη Π e.firstname,e.lastname,w.proid (σ e.depid=4 (ϱ e (employees) e.empid=w.empid ϱ w (workson))) SELECT e. f i r s t n a m e, e. lastname, w. p r o i d FROM emp loye es e LEFT JOIN workson w ON e. empid = w. empid WHERE e. d e p i d = 4 ; Δεξιά σύζευξη Π e.firstname,e.lastname,w.proid (σ e.depid=4 (ϱ w (workson) w.empid=e.empid ϱ e (employees))) SELECT e. f i r s t n a m e, e. lastname, w. p r o i d FROM workson w RIGHT JOIN emp loye es e ON w. empid = e. empid WHERE e. d e p i d = 4 ; 25 / 30

Αριστερή και δεξιά σύζευξη 1 Οι δύο προτάσεις SQL είναι απολύτως ισοδύναμες και δίνουν το ίδιο αποτέλεσμα. 2 Κατά παράδοση, προτιμάται η αριστερή σύζευξη. 3 Οι εξωτερικές συζεύξεις χρησιμοποιούνται όταν θέλουμε στο αποτέλεσμα όλες τις εγγραφές ενός πίνακα, ανεξάρτητα αν αυτές έχουν σύνδεση με τον άλλο πίνακα που υπάρχει στη σύζευξη. 4 Κατά την εξωτερική σύζευξη, αν υπάρχουν μη συνδεδεμένες εγγραφές, δημιουργούνται τιμές NULL. 5 Ο έλεγχος (WHERE) για τιμές NULL είναι πολύ συχνός στις εξωτερικές συνδέσεις. 26 / 30

Εξωτερική σύζευξη και διαφορά Ποιοι υπάλληλοι δεν απασχολούνται σε κανένα έργο; Π e. (σ w.empid IS NULL (ϱ e (employees) e.empid=w.empid ϱ w (workson))) SELECT e. FROM employees e LEFT JOIN workson w ON e. empid = w. empid WHERE w. empid IS NULL; 1 Το ερώτημα δε μπορεί να απαντηθεί με φυσική ή εσωτερική σύζευξη. 2 Οι τιμές των πεδίων e.empid και w.empid είτε ταυτίζονται, είτε κάποια τιμή του πεδίου e.empid δεν έχει αντίστοιχη τιμή στον πίνακα workson. 3 Τέτοιες περιπτώσεις συλλαμβάνονται με τον έλεγχο για τιμές NULL. 27 / 30

Εξωτερική σύζευξη επιπλέον ανάλυση Ποιοι υπάλληλοι δεν απασχολούνται σε κανένα έργο; SELECT e. empid, w. empid FROM employees e LEFT JOIN workson w ON e. empid = w. empid WHERE w. empid IS NULL; e.empid w.empid 311 NULL 721 NULL 811 NULL Η συνθήκη e.empid = w.empid δεν ισχύει για τρεις εγγραφές Πχ, το 311, υπάρχει στον πίνακα employees αλλά δεν υπάρχει στον πίνακα workson Η αριστερή σύζευξη επιτρέπει την εμφάνιση της τιμής 311 στο πεδίο e.empid Το πεδίο w.empid θα συμπληρωθεί με NULL 28 / 30

Εξωτερική σύζευξη σύνοψη 1 Τρεις εγγραφές του πίνακα employees δεν έχουν ταιριαστές εγγραφές στον πίνακα workson 2 Ο πίνακας workson δεν περιέχει καμία εγγραφή με NULL τιμές Ο τρόπος με τον οποίο συνδυάστηκαν οι δύο πίνακες παρήγαγε τις τιμές NULL, που αντιστοιχούν στα πεδία empid, proid του πίνακα workson 3 Η αριστερή εξωτερική σύζευξη, ορίζει πως στο αποτέλεσμα θα υπάρχουν όλες οι εγγραφές του αριστερού πίνακα και στα πεδία του δεξιού πίνακα θα τοποθετηθούν είτε τιμές που αντιστοιχούν στον κανόνα της σύζευξης, εδώ e.empid = w.empid, είτε τιμές NULL, εκεί όπου δεν βρέθηκαν ταιριαστές εγγραφές 4 Επομένως, οι τρεις εγγραφές με NULL τιμές στα πεδία του πίνακα workson, δεν οφείλονται σε αποθηκευμένες τιμές, αλλά σε παραγόμενες μετά από εξωτερική σύζευξη 29 / 30

Σχόλια και ερωτήσεις Σας ευχαριστώ για την προσοχή σας Είμαι στη διάθεσή σας για σχόλια, απορίες και ερωτήσεις 30 / 30