Εργαςτιριο Βάςεων Δεδομζνων 2010-2011 Μάθημα 1 ο 1 Ε. Σςαμούρα Σμήμα Πληροφορικήσ ΑΠΘ
Σκοπόσ του 1 ου εργαςτθριακοφ μακιματοσ Σκοπόσ του πρϊτου εργαςτθριακοφ μακιματοσ είναι να μελετιςουμε ερωτιματα επιλογισ δεδομζνων από μία μόνο ςχζςθ. 2
Μορφι ενόσ απλοφ SQL ερωτιματοσ SELECT A 1, A 2,, A n Προαιρετικό FROM R 1, R 2,, R m WHERE Condition SELECT: τα χαρακτθριςτικά που μασ ενδιαφζρουν FROM: το ςφνολο των ςχζςεων ςτισ οποίεσ γίνεται θ αναηιτθςθ για να ςχθματιςτεί το τελικό αποτζλεςμα WHERE: περιοριςμοί που πρζπει να ικανοποιεί το αποτζλεςμα 3
Σειρά εκτζλεςθσ των εντολϊν 1. Σχθματίηεται το καρτεςιανό γινόμενο των ςχζςεων R 1, R 2,, R m τθσ FROM 2. Επιλζγονται πλειάδεσ από το καρτεςιανό γινόμενο που ικανοποιοφν τθν ςυνκικθ τθσ WHERE 3. Προβάλλονται ςτο αποτζλεςμα μόνο τα χαρακτθριςτικά που βρίςκονται ςτθν εντολι SELECT 4. Το αποτζλεςμα του ερωτιματοσ είναι ζνα ςφνολο πλειάδων τθσ μορφισ <Α 1, Α 2,..., Α n > 4
Το ςχιμα τθσ βάςθσ πάνω ςτθν οποία κα δουλζψουμε 5
Οι ςχζςεισ του ςχιματοσ(1) Πελάτησ: περιλαμβάνει τα ςτοιχεία των πελατϊν του video club. ID όνομα τηλέφωνο 1 Perkins 246801 2 Καντακουζηνόσ 246801 3 Παλαιολόγοσ 987654 6
Οι ςχζςεισ του ςχιματοσ(2) Ταινία: περιλαμβάνει τισ ταινίεσ που υπάρχουν διακζςιμεσ ςτο video-club ID Σίτλοσ Χρονιά 1 Rear Window 1954 2 Psycho 1960 3 Ben-Hur 1959 7
Οι ςχζςεισ του ςχιματοσ(3) Συντελεςτήσ: περιλαμβάνει τουσ ςυντελεςτζσ μίασ ταινίασ ID Όνομα 1 Alfred Hitchcock 2 Grace Kelly 3 Anthony Perkins 8
Οι ςχζςεισ του ςχιματοσ(4) Καςζτα: αντιςτοιχεί ςε ζνα μζςο αποκικευςθσ. DVD ι VHS, μίασ ταινίασ ID IDΣαινίασ Σύποσ Ποςότητα Σιμή 1 1 VHS 3 2 2 1 DVD 1 3 3 2 VHS 2 2 9
Οι ςχζςεισ του ςχιματοσ(5) Ενοικίαςη: περιλαμβάνει ποιοι πελάτεσ νοίκιαςαν ποιεσ καςζτεσ κακϊσ και τισ θμερομθνίεσ ενοικίαςθσ και επιςτροφισ των καςετϊν IDΠελάτη IDΚαςέτασ Από Εώσ 1 1 07/10/2006 09/10/2006 1 2 09/20/2006 11/20/2006 2 1 09/10/2006 NULL 10
Οι ςχζςεισ του ςχιματοσ(6) ΤΣ: περιλαμβάνει ποιοι ςυντελεςτζσ ςυμμετείχαν ςε ποιεσ ταινίεσ κακϊσ και τον ρόλο ςυμμετοχισ αυτϊν IDΣαινίασ IDυντελεςτή Ρόλοσ 1 1 Σκηνοθέτησ 1 2 Ηθοποιόσ 2 1 Σκηνοθέτησ 2 3 Ηθοποιόσ 11
Δφο απλά ερωτιματα Ερϊτθμα: Να δοκοφν τα ονόματα όλων των πελατϊν SELECT Όνομα FROM ΠΕΛΑΤΗΣ ID όνομα τηλέφωτο 1 Perkins 246801 2 Καντακουζηνόσ 246801 3 Παλαιολόγοσ 987654 12
Δφο απλά ερωτιματα Ερϊτθμα: Να δοκοφν τα τθλζφωνα όλων των πελατϊν SELECT Τθλζφωνο FROM ΠΕΛΑΤΗΣ ID όνομα τηλέφωτο 1 Perkins 246801 2 Καντακουζηνόσ 246801 3 Παλαιολόγοσ 987654 13
Η εντολι DISTINCT Στο προθγοφμενο ερϊτθμα το τθλ. 246801 εμφανίηεται δφο φορζσ (δόκθκαν οι παρακάτω πλειάδεσ { < 246801 >, < 246801 >, < 987654>} ωσ απάντθςθ) Με τθν εντολι DISTINCT δθλϊνουμε πωσ το επικυμθτό αποτζλεςμα ΔΕΝ κα περιλαμβάνει δφο όμοιεσ πλειάδεσ. Πότε δφο πλειάδεσ είναι όμοιεσ? 14
DISTINCT Παράδειγμα-1 SELECT DISTINCT Τθλζφωνο FROM ΠΕΛΑΤΗΣ { < 246801 >, < 246801 >, < 987654>} ID όνομα τηλέφωτο 1 Perkins 246801 2 Καντακουζηνόσ 246801 3 Παλαιολόγοσ 987654 15
DISTINCT Παράδειγμα-2 SELECT DISTINCT Όνομα, Τθλζφωνο FROM ΠΕΛΑΤΗΣ; { < Perkins, 246801 >, <Καντακουζηνόσ, 246801 >, < Παλαιολόγοσ,987654>} ID όνομα τηλέφωτο 1 Perkins 246801 2 Καντακουζηνόσ 246801 3 Παλαιολόγοσ 987654 16
Το * Το * δίπλα ςτθν εντολι SELECT ςθμαίνει ότι οι πλειάδεσ του αποτελζςματοσ κα περιλαμβάνουν όλα τα χαρακτθριςτικά των ςχζςεων που βρίςκονται μετά τθν εντολι FROM 17
* Παράδειγμα SELECT * FROM ΠΕΛΑΤΗΣ { < 1,Perkins, 246801 >, <2,Καντακουζηνόσ, 246801 >, < 3,Παλαιολόγοσ,987654>}, <4,Καντακουζηνόσ, 246801> ID όνομα τηλέφωτο 1 Perkins 246801 2 Καντακουζηνόσ 246801 3 Παλαιολόγοσ 987654 4 Καντακουζηνόσ 24681 18
Το keyword AS Το keyword AS χρθςιμοποιείται τόςο για τθ μετονομαςία των χαρακτθριςτικϊν των πλειάδων του αποτελζςματοσ, όςο και για τθ μετονομαςία των ςχζςεων μετά τθν εντολι FROM. Η μετονομαςία ζχει τοπικι ιςχφ, δθλαδι ιςχφει μόνον για το τρζχον ερϊτθμα και δεν μεταβάλλει τθν ονομαςία των ςχζςεων ι των χαρακτθριςτικϊν τθσ βάςθσ 19
As Παράδειγμα-1 SELECT ID AS Κωδικόσ, Όνομα, τθλζφωνο AS τθλ. FROM ΠΕΛΑΤΗΣ Δεν αλλάζει τίποτα ωσ προσ το αποτελέςματα. Αλλάζουν μόνον τα ονόματα των χαρακτηριςτικών των πλειάδεν εξόδου ID όνομα τηλέφωτο 1 Perkins 246801 2 Καντακουζηνόσ 246801 3 Παλαιολόγοσ 987654 4 Καντακουζηνόσ 24681 Κωδικόσ όνομα Σηλ. 1 Perkins 246801 2 Καντακουζηνόσ 246801 3 Παλαιολόγοσ 987654 4 Καντακουζηνόσ 24681 20
As Παράδειγμα-2 SELECT * FROM ΠΕΛΑΤΗΣ AS P Το αποτζλεςμα δεν διαφζρει από το αποτζλεςμα του ερωτιματοσ SELECT * FROM ΠΕΛΑΤΗΣ Ωςτόςο, ςτθν πρϊτθ περίπτωςθ, μετά τθν μετονομαςία τθσ ςχζςθσ ΠΕΛΑΤΗΣ ςε P, οποιαδιποτε άλλθ φορά χρειαςτεί να αναφερκοφμε ςτθ ςχζςθ ΠΕΛΑΤΗΣ μζςα ςτο ίδιο ερϊτθμα κα χρθςιμοποιείται μόνον το P. 21
Μεταβολι των τιμϊν των χαρακτθριςτικϊν των πλειάδων εξόδου Με τθν εντολι select μποροφμε να μεταβάλλουμε τισ τιμζσ των χαρακτθριςτικϊν των πλειάδων εξόδου. Πχ. πρόςκεςθ (+)/αφαίρεςθ (-) ςτακερϊν ι εφαρμογι άλλων μακθματικϊν ςυναρτιςεων (sqrt, sin, mod) ςε τιμζσ των χαρακτθριςτικϊν των πλειάδων εξόδου που είναι numerical τφπου (πχ. int,float,double) appending αλφαρθκμθτικϊν ςε τιμζσ των χαρακτθριςτικϊν των πλειάδων εξόδου που είναι αλφαρικμθτικοφ τφπου απομόνωςθ τθσ μζρασ, του μινα ι και του χρόνου τθσ τιμισ ενόσ χαρακτθριςτικοφ που είναι τφπου datetime (θμερομθνία), μζςω των ςυναρτιςεων DAY, MONTH, YEAR. 22
Περίπτωςθ numerical Παράδειγμα-1 SELECT ID + 100 FROM ΠΕΛΑΤΗΣ ID όνομα τηλέφωτο 1 Perkins 246801 2 Καντακουζηνόσ 246801 3 Παλαιολόγοσ 987654 4 Καντακουζηνόσ 24681 ID 101 102 103 104 23
Περίπτωςθ αλφαρθκμθτικοφ Παράδειγμα-2 SELECT ( 2310 +τθλζφωνο) FROM ΠΕΛΑΤΗΣ ID όνομα τηλέφωτο 1 Perkins 246801 2 Καντακουζηνόσ 246801 3 Παλαιολόγοσ 987654 4 Καντακουζηνόσ 24681 2310246801 2310246801 2310987654 231024681 24
Ο όροσ WHERE Όπωσ είδαμε και παραπάνω θ εντολι WHERE περιζχει μία ςυνκικθ που πρζπει να ικανοποιοφν οι πλειάδεσ του αποτελζςματοσ Όταν ζνα χαρακτθριςτικό που βρίςκεται ςτθν εντολι SELECT είναι τφπου numerical μποροφμε να χρθςιμοποιιςουμε τουσ τελεςτζσ <,>,=, <> για να το ςυγκρίνουμε με κάποια ςτακερά. Όταν είναι αλφαρικμθτικοφ τφπου μποροφμε να χρθςιμοποιιςουμε τον τελεςτι LIKE για να το ςυγκρίνουμε με κάποιο άλλο αλφαρικμθτικό. 25
WHERE Παράδειγμα-1 Ερϊτθμα: Να βρεκοφν οι κωδικοί από όςεσ καςζτεσ ζχουν διακζςιμθ ποςότθτα από ζνα ζωσ δφο αντίτυπα, ι όςεσ θ τιμι τουσ είναι μεγαλφτερθ του 2 SELECT ID FROM ΚΑΣΕΤΑ WHERE (Ποςότθτα >= 1 AND Ποςότθτα <= 2) OR Τιμι > 2 ID IDΣαινίασ Σύποσ Ποςότητα Σιμή 1 1 VHS 3 2 2 1 DVD 1 3 3 2 VHS 2 2 η τιμή τουσ είναι μεγαλύτερη του 2 26 έχουν διαθέςιμη ποςότητα από ένα έωσ δύο αντίτυπα
WHERE Παράδειγμα-2 Ερϊτθμα: Να βρεκοφν οι κωδικοί των καςετϊν που είναι τφπου VHS και θ διακζςιμθ ποςότθτα τουσ είναι μεγαλφτερθ του 2 ι θ τιμι τουσ είναι μεγαλφτερθ του 2 SELECT ID FROM ΚΑΣΕΤΑ WHERE Τφποσ = 'VHS' AND (Ποςότθτα > 2 OR Τιμι > 2) ID IDΣαινίασ Σύποσ Ποςότητα Σιμή 1 1 VHS 3 2 2 1 DVD 1 3 3 2 VHS 2 2 27 απορρίπτεται καθώσ Ποςότητα <= 2 AND Τιμή <= 2
Ο τελεςτισ LIKE Για αλφαρικμθτικά δεδομζνα, χριςιμοσ είναι ο τελεςτισ LIKE, για τθν ςφγκριςθ ενόσ αλφαρικμθτικοφ με κάποιο άλλο αλφαρικμθτικό. Με τον τελεςτι LIKE χρθςιμοποιοφνται δφο ειδικοί χαρακτιρεσ (μπαλαντζρ): % για ταφτιςθ οποιαςδιποτε ςυμβολοςειράσ _ για ταφτιςθ οποιουδιποτε χαρακτιρα Πχ. Να βρεκοφν τα ονόματα των πελατϊν που αρχίηουν από Κ SELECT Όνομα FROM ΠΕΛΑΤΗΣ WHERE Όνομα LIKE 'Κ%' 28
Η τιμι NULL Για να ελζγξουμε εάν ζνα χαρακτθριςτικό ζχει τθν τιμι NULL δεν χρηςιμοποιοφνται τα = NULL και <> NULL αλλά IS NULL και IS NOT NULL. Πχ. Να βρεκοφν οι ενοικιάςεισ για τισ οποίεσ δεν ζχει οριςκεί θμερομθνία επιςτροφισ SELECT * FROM ΕΝΟΙΚΙΑΣΗ WHERE Ζωσ IS NULL 29
Ταξινόμθςθ αποτελεςμάτων ORDER BY Πολλζσ φορζσ προκφπτει θ ανάγκθ ταξινόμθςθσ των αποτελεςμάτων βάςει των τιμϊν ενόσ χαρακτθριςτικοφ. Η SQL επιτρζπει τθν ταξινόμθςθ των πλειάδων του αποτελζςματοσ με τθν εντολι ORDER BY Με τα keywords ASC και DESC μετά το χαρακτθριςτικό ωσ προσ το οποίο κζλουμε να γίνει θ ταξινόμθςθ, δθλϊνουμε εάν θ ταξινόμθςθ κζλουμε να γίνει κατά αφξουςα ή φθίνουςα ςειρά Η εντολι ORDER BY (όταν χρθςιμοποιείται ) πρζπει να καλείται ςτο τζλοσ ενόσ SQL ερωτιματοσ και να περιλαμβάνει ζνα (υπό)ςφνολο των χαρακτθριςτικϊν που βρίςκονται μετά τθν εντολι SELECT 30
ORDER BY Παράδειγμα-1 Ερϊτθμα: Να δοκοφν οι κωδικοί των καςετϊν ταξινομθμζνοι ωσ προσ τθ διακζςιμθ ποςότθτά τουσ, κατά αφξοντα τρόπο SELECT ID, Ποςότθτα FROM ΚΑΣΕΤΑ ORDER BY Ποςότθτα; ID IDΣαινίασ Σύποσ Ποςότητα Σιμή 1 1 VHS 3 2 2 1 DVD 1 3 3 2 VHS 2 2 ID Ποςότητα 2 1 31 3 2 1 3
ORDER BY Παράδειγμα-2 Ερϊτθμα: Να δοκοφν οι κωδικοί των καςετϊν ταξινομθμζνοι κατά φκίνοντα τρόπο ωσ προσ τθν τιμι ενοικίαςθσ. Στθν περίπτωςθ ίςων τιμϊν ενοικίαςθσ, θ ταξινόμθςθ να γίνει κατά φκίνοντα τρόπο ωσ προσ τθν ποςότθτα SELECT ID, Τιμι, Ποςότθτα FROM ΚΑΣΕΤΑ ORDER BY Τιμι DESC, Ποσότητα ASC; ID IDΣαινίασ Σύποσ Ποςότητα Σιμή 1 1 VHS 3 2 2 1 DVD 1 3 3 2 VHS 2 2 32 ID Σιμή Ποςότητα 2 3 1 3 2 2 1 2 3