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

Σχετικά έγγραφα

1 / 150

1 / 105

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

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

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

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

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

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



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

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

DELETE, UPDATE, INSERT.

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

DELETE, UPDATE, INSERT

1 / 97

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

1 / 106

1 / 87


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

DISTINCT, LIKE, NULL, AND, OR, BETWEEN

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

Μικροβιολογία & Υγιεινή Τροφίμων

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


Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Πιθανότητες. Συνδυαστική Ανάλυση Διδάσκων: Επίκουρος Καθηγητής Κωνσταντίνος Μπλέκας

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

Υπολογιστές Ι. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

Τεχνολογία Πολιτισμικού Λογισμικού

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

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

Γενικά Μαθηματικά Ι. Ενότητα 15: Ολοκληρώματα Με Ρητές Και Τριγωνομετρικές Συναρτήσεις Λουκάς Βλάχος Τμήμα Φυσικής

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

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

Ιστορία της μετάφρασης


Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

Γενικά Μαθηματικά Ι. Ενότητα 12: Κριτήρια Σύγκλισης Σειρών. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

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

Εκκλησιαστικό Δίκαιο

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

Εφαρμοσμένη Στατιστική

Βάσεις Περιβαλλοντικών Δεδομένων

Εκκλησιαστικό Δίκαιο

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

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

Βασικοί άξονες Μαθηματικά στην εκπαίδευση:

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

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

Ηλεκτρισμός & Μαγνητισμός

Βάσεις Περιβαλλοντικών Δεδομένων

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

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

Γενικά Μαθηματικά Ι. Ενότητα 1: Συναρτήσεις και Γραφικές Παραστάσεις. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Ηλεκτρισμός & Μαγνητισμός

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Ιστορία της μετάφρασης

Υπολογιστές Ι. Άδειες Χρήσης. Τύποι δεδομένων. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Οικονομετρία. Εξειδίκευση του υποδείγματος. Μορφή της συνάρτησης: Πολυωνυμική, αντίστροφη και αλληλεπίδραση μεταβλητών

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

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Β. Διαφορικός Λογισμός

Λογισμός 3. Ενότητα 19: Θεώρημα Πεπλεγμένων (γενική μορφή) Μιχ. Γ. Μαριάς Τμήμα Μαθηματικών ΑΝΟΙΚΤΑ ΑΚΑ ΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

ΓΕΝΙΚΗ ΚΑΙ ΑΝΟΡΓΑΝΗ ΧΗΜΕΙΑ

Εισαγωγή στους Αλγορίθμους

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

Ηλεκτρισμός & Μαγνητισμός

Γενικά Μαθηματικά Ι. Ενότητα 9: Κίνηση Σε Πολικές Συντεταγμένες. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Βασικές Αρχές Φαρμακοκινητικής

Μιγαδικός λογισμός και ολοκληρωτικοί Μετασχηματισμοί

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

Τεχνολογία Πολιτισμικού Λογισμικού

ΓΕΝΙΚΗ ΚΑΙ ΑΝΟΡΓΑΝΗ ΧΗΜΕΙΑ

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Μιγαδικός λογισμός και ολοκληρωτικοί Μετασχηματισμοί

Εκκλησιαστικό Δίκαιο

Κλασική Ηλεκτροδυναμική Ι

Εισαγωγή στους Αλγορίθμους

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Πιθανότητες. Συναρτήσεις πολλών μεταβλητών Διδάσκων: Επίκουρος Καθηγητής Κωνσταντίνος Μπλέκας

Εργαστήριο Χημείας Ενώσεων Συναρμογής

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Εργαστήριο Χημείας Ενώσεων Συναρμογής

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Γενικά Μαθηματικά Ι. Ενότητα 14: Ολοκλήρωση Κατά Παράγοντες, Ολοκλήρωση Ρητών Συναρτήσεων Λουκάς Βλάχος Τμήμα Φυσικής

Κβαντική Επεξεργασία Πληροφορίας

1 / 106

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

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

Γενικά Μαθηματικά Ι. Ενότητα 13: Ακτίνα Σύγκλισης, Αριθμητική Ολοκλήρωση, Ολοκλήρωση Κατά Παράγοντες. Λουκάς Βλάχος Τμήμα Φυσικής

Διπλωματική Ιστορία Ενότητα 2η:

Στατιστική Ι. Ενότητα 3: Στατιστική Ι (3/4) Αναπλ. Καθηγητής Νικόλαος Σαριαννίδης Τμήμα Διοίκησης Επιχειρήσεων (Κοζάνη)

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ηλεκτρονικοί Υπολογιστές II Ερωτήματα SQL με σύζευξη πινάκων Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

Ερωτήματα 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

Τέλος Ενότητας

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Σημειώματα

Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0. Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 1.0 διαθέσιμη εδώ. http://ecourse.uoi.gr/course/view.php?id=1065.

Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης. «Ηλεκτρονικοί Υπολογιστές II. Ερωτήματα SQL με σύζευξη πινάκων». Έκδοση: 1.0. Ιωάννινα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http://ecourse.uoi.gr/course/view.php?id=1065.

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1] https://creativecommons.org/licenses/by-sa/4.0/.