Βαςεις δεδομενων 1 Δρ. Aλεξανδροσ Βακαλουδθσ
Επεξεργαςία βάςθσ δεδομζνων Μιλιςαμε για ςχεδίαςθ με το μοντζλο οντοτιτων ςυςχετίςεων Και τθν υλοποίθςθ ςε πίνακεσ Ρολφ ωραία, ζχουμε καταςκευάςει τθ βάςθ Με ποιο ςκοπό? να ειςάγουμε Τροποποιοφμε Διαγράφουμε δεδομζνα Και να επιλζγουμε δεδομζνα βάςει κριτθρίων Ρ.χ. όνομα φοιτθτι με ΑΕΜ 23423 Μακιματα 6 ου εξαμινου Μζςοσ όροσ βακμολογίασ ςτα Λειτουργικα 1
Structured Query Language SQL Είναι θ γλϊςςα τθν οποία χρθςιμοποιοφμε για να «επικοινωνοφμε» με τθ βάςθ δεδομζνων Είτε απ ευκειασ γράφοντασ εντολζσ SQL Μζςα από τθ κονςόλα τθσ SQL Γράφουμε τθν εντολι, εκτελείται, παίρνουμε πίςω τθν απάντθςθ Η κυρίωσ μζςα από κϊδικα εφαρμογϊν
Structured Query Language Αυτιν τθν (απλι) γλϊςςα κα δοφμε ςτθ ςυνζχεια Είναι ςχετικά απλι Ουςιαςτικά είναι ςπαηοκεφαλιζσ: πϊσ να μετατρζψουμε μία ερϊτθςθ ςε κϊδικα SQL για τθ βάςθ δεδομζνων Select name from students where aem=34343
Embedded SQL Πλεσ οι γλϊςςεσ προγραμματιςμοφ υποςτθρίηουν επικοινωνία με βάςεισ δεδομζνων Δθλαδι Σφνδεςθ Εκτζλεςθ ερωτθμάτων SQL Επιςτροφι αποτελεςμάτων Ρολφ ςθμαντικό γιατί μασ επιτρζπει να χτίςουμε λειτουργικζσ εφαρμογζσ πάνω ςτισ βάςεισ δεδομζνων
Μζρθ τθσ SQL DDL Data Definition Language Εντολζσ για δθμιουργία αντικειμζνων ςε μία βάςθ, π.χ. πωσ δθμιουργοφμε ζνα πίνακα DML Data Manipulation Language Εντολζσ για αλλαγι αντικειμζνων, π.χ. πωσ προςκζτουμε ζνα πεδίο ςε ζνα πίνακα (SQL) Structured Query Language Εντολζσ για διαχείριςθ δεδομζνων (επιλογι, αλλαγι, διαγραφι ειςαγωγι)
Άνακτθςθ δεδομζνων με SQL Χρθςιμοποιοφμε εντολζσ τθσ μορφισ SELECT <ονόματα πεδίων> FROM <ονόματα πινάκων> WHERE <κριτιρια> ORDER BY <ονόματα πεδίων> GROUP BY <ονόματα πεδίων> HAVING < κριτιρια> Ρ.χ. Δϊςε μου τα μακιματα του 6 ου εξαμινου SELECT name FROM modules WHERE semester=6 Θα επιςτρέψει τά ονόματα των μαθημάτων που ικανοποιοφν το κριτήριο
Και άλλα παραδείγματα Δϊςε μου το όνομα και το τθλζφωνο του φοιτθτι με ΑΕΜ 32424 Select name, tel from students where aem= 32424 Δϊςε τισ θμερομθνίεσ γζννθςθσ των φοιτθτϊν με διψθφιο ΑΕΜ Select DOB from students where aem<100
Κριτιρια SQL Εμφανίηονται μετά το WHERE Αναφζρονται ςε ςυγκεκριμζνα πεδία των πινάκων Χρθςιμοποιοφν λογικοφσ τελεςτζσ AND, OR, NOT
Κριτιριο αναφοράσ IN Δϊςε μου τα ονομάτα των φοιτθτϊν που αντζγραψαν ςτισ εξετάςεισ, τα ΑΕΜ τουσ είναι 23434, 33333, 44444, 55555, 66666 Ρρϊτοσ τρόποσ Select name from students where aem= 23434 or aem= 33333 or aem= 44444 or aem= 55555 or aem= 66666 Αποδεκτό αλλά πολφπλοκο Άλλοσ τρόποσ: το κριτιριο ΙΝ Σφνταξθ ΙΝ (<τιμζσ) Το παραπάνω ερϊτθμα γίνεται Select name from students where aem in (23434, 33333, 44444, 55555, 66666)
Άλλα κριτιρια BETWEEN για τιμζσ ςε εφροσ Ρ.χ. αν κζλουμε τουσ υπαλλιλουσ οι οποίοι με μιςκο (sal) 1000-2000 Where sal>1000 and sal <2000 Where sal between 1000 and 2000 BEFORE AFTER Χρθςιμοποιείται για θμερομθνίεσ DOB AFTER 01/01/1970 ;
Μοναδικότθτα Distinct Ρολλζσ φορζσ κζλουμε να ενφανιςκεί μία φορά ζνα αποτζλεςμα ενόσ ερωτιματοσ Ρ.χ. δϊςε μου όλα τα μικρά ονόματα των φοιτθτϊν Select firstname from students Θα μασ δϊςει όλα τα μικρά ονόματα Άρα αν υπάρχουν 45 Γιαννθσ, κα εμφανιςκεί 45 φορζσ Για να εμφανιςκεί μία φορα κάκε διαφορετικι τιμι χρθςιμοποιοφμε τον όρο DISTINCT Select distinct firstname from students Θα επιςτρζψει μόνο τισ διαφορετικζσ τιμζσ (άρα μία φορά το Γιάννθσ)
Ταξινόμθςθ Με ποια ςειρά κα εμφανιςτοφν τα δεδομζνα? Με τθ ςειρά με τθν οποία ειςιχκθςαν ςτθ βάςθ Μποροφμε να αλλάξουμε τθ ςειρά βάηοντασ τθν εντολι ORDER BY <πεδία> ςτο τζλοσ του ερωτιματοσ Ρ.χ. Select name from students where aem in (23434, 33333, 44444, 55555, 66666) order by name, aem, fathersname Η ταξινόμθςθ κα γίνει με πρϊτο κριτιριο το όνομα, δευτερο το ΑΕΜ και τρίτο το πατρϊνυμο
Ταξινόμθςθ Η ταξινόμθςθ ακολουκεί τον τφπο του πεδίου VARCHAR2 -> αλφαβθτικά Αρικμοί -> από το μικρότερο Ημερομθνίεσ -> από το πιο παλιό Αν κζλουμε να αντιςτρζψουμε τθ ςειρά, προςκζτουμε ςτο τζλοσ τθ λζξθ desc
Επιλογι από πολλοφσ πίνακεσ JOIN query (ςφηευξθ πινάκων) Ρολλζσ φορζσ χρειάηεται να επιλζξουμε δεδομζνα από παραπάνω από ζνα πίνακεσ Οι οποίοι προφανϊσ ςυνδζονται Ρωσ? Με ξζνα κλειδιά
Ραράδειγμα Ζςτω θ βάςθ του ΤΕΙ με πίνακεσ Departments (id, name) students(id, AEM, name department) Modules(id, name, semester, department) Ποιοι φοιτητές παρακoλουθοφν τα μαθήματα 1 ου εξαμήνου του τμήματος πληροφορικής Select students.name, aem, modules.name from students, departments, modules where students. department=departments.id and modules. department=departments.id and modules.semester=1 and departments.name= ΡΛΗΟΦΟΙΚΗ
Ραρατθριςεισ Select students.name, aem, modules.name from students, departments, modules where students. department=departments.id and modules. department=departments.id and modules.semester=1 and departments.name= ΡΛΗΟΦΟΙΚΗ Τα κριτιρια modules.semester=1 and departments.name= ΡΛΗΟΦΟΙΚΗ είναι προφανι και προζρχονται από τισ απαιτιςεισ του ερωτιματοσ Τα υπόλοιπα κριτιρια από ποφ προζρχονται?
Συνδζοντασ πίνακεσ Select students.name, aem, modules.name from students, departments, modules where students. department=departments.id and modules. department=departments.id and modules.semester=1 and departments.name= ΡΛΗΟΦΟΙΚΗ Πταν ζνα ερϊτθμα χρθςιμοποιεί πολλοφσ πίνακεσ, υπάρχουν «κρυφά» κριτιρια Τθν ζνωςθ των κοινϊν τουσ πεδίων Στο ςυγκεκριμζνο παράδειγμα, οι τρεισ πίνακεσ πρζπει να ςυνδεκουν modules. department=departments.id department=departments.id
Επεξθγθςθ Πταν εκτελοφμε ζνα ςυηευκτικό ερϊτθμα, θ βάςθ δεδομζνων αρχικά δθμιουργεί το καρτεςιανό γινόμενο των πινάκων Δθλαδι κάκε ςυνδυαςμό των γραμμϊν του ενόσ πίνακα με τισ γραμμζσ άλλου πίνακα Από αυτό το καρτεςιανό γινόμενο επιλζγουμε τισ ςωςτζσ γραμμζσ
Επεξιγθςθ - παράδειγμα 1 Ρλθροφορικι 2 Μθχανολογία 3 Λογιςτικι Ραπαδιάσ 1 Δθμθτριου 2 1 Ρλθροφορικι Ραπαδιάσ 1 2 Μθχανολογία Ραπαδιάσ 1 3 Λογιςτικι Ραπαδιάσ 1 1 Ρλθροφορικι Δθμθτριου 2 2 Μθχανολογία Δθμθτριου 2 3 Λογιςτικι Δθμθτριου 2
Ραραδείγματα ερωτθμάτων Ζςτω θ βάςθ του ΤΕΙ με πίνακεσ Departments (id, name) students(id, AEM, name department) Modules(id, name, semester, department) Ροιοι είναι οι φοιτθτζσ του τμιματοσ Μθχανολογίασ (αλφαβθτικά) Ροιοι είναι οι φοιτθτζσ του τμιματοσ 1 (με ΑΕΜ) Ροια τα μακιματα 6 ου εξαμινου πλθροφορικισ Ροιοι φοιτθτζσ παρακολουκοφν το μάκθμα ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ 2 (αλφαβθτικά)
Σφνοψθ ςυηευκτικϊν ερωτθμάτων Εκτόσ από τα προφανι κριτιρια του ερωτιματοσ Χρειάηεται να ςυηεφξουμε με κρυφά κριτιρια τουσ πίνακεσ του ερωτιματοσ Με κριτιρια ιςότθτασ με βάςθ πρωτζυον/ξζνο κλειδί Αν π.χ. ζχουμε 5 πίνακεσ, χρειαηόμαςτε 4 τζτοια κριτιρια
Εξωτερικι ςφηευξθ Ρ.χ. Δϊςε τουσ φοιτθτζσ που παρακολουκοφν κάκε μάκθμα Select modules.name, students.name from students,modules where students.module =modules.id(+) Ζνα ζνα μάκθμα (π.χ. επιλογι) δεν το ζχει επιλζξει οφτε ζνασ φοιτθτισ κα εμφανιςκεί? Οχι
OUTER JOIN Ζαν κελουμε να εμφανιςκοφν γραμμζσ ενόσ πίνακα οι οποίεσ δεν ζχουν ςφνδεςθ με άλλο πίνακα Ρ.χ. μάκθμα το οποίο δεν ζχει φοιτθτζσ Χρθςιμοποιοφμε τθν εξωτερικι ςφηευξθ (outer join) Select modules.name, students.name from students.modules where students.module =modules.id(+) Ο τελεςτισ (+) δθλϊνει ότι μια τουλάχιςτον φορά κα εμφανιςκεί ςτο αποτζλεςμα κάκε module ανεξάρτθτα αν δεν ζχει αντίςτοιχεσ γραμμζσ ςτον πίνακα students Σε αυτιν τθν εμφάνιςθ, τα ςτοιχεία του students κα είναι κενά
Συναρτιςεισ κειμζνου Συναρτιςεισ επάνω ςε τφπουσ δεδομζνων VARCHAR2 LENGTH (το μικοσ των χαρακτιρων) LEFT (oι χ πρϊτοι χαρακτιρεσ) RIGHT (οι χ τελευταίοι χαρακτιρεσ) LOWER (ςε μικρά γράμματα) UPPER (ςε μεγάλα γράμματα)
Ραραδείγματα Δϊςε μου τα ονόματα των φοιτθτϊν με επίκετο μεγαλφτερο από 20 χαρακτιρεσ Select name from students where length(name)>20 Δϊςε που τα πρϊτα τρία γράμματα κάκε τμιματοσ Select left(name,3) from departments
Αρικμθτικζσ Συναρτιςεισ ABS (απόλυτοσ αρικμόσ) MOD (υπόλοιπo διαίρεςθσ) ROUND (ςτρογγυλοποίθςθ ςτα Χ δεκαδικά) TRUNC (το κάτω μζροσ ςτρογγυλοποίθςθσ) SQRT (τετραγωνικι ρίηα).
Χριςθ ςυναρτιςεων Η SQL χρθςιμοποιείται και για τθν εξαγωγι ςτατιςτικϊν ςυμπεραςμάτων Ρ.χ. Ροςοι φοιτθτζσ είναι ςτο τμιμα πλθροφορικισ Ρροςοχι! Πχι ποιοι είναι αλλά πόςοι είναι
Συγκεντρωτικζσ ςυναρτιςεισ COUNT Ρλικοσ AVG Μεςοσ όροσ MAX Μζγιςτο MIN Ελάχιςτο SUM Άκροιςμα Και πολλζσ άλλεσ ςυναρτιςεισ π.χ. διαςπορά
Ραραδείγματα Ρόςοι φοιτθτζσ είναι ςτο τμιμα 5? Select count(id) from students where dept=5 Οι ςυναρτιςεισ μποροφν να χρθςιμοποιοφνται ςε ςυνδυαςμό Ροςα γράμματα είναι το μεγαλφτερο επίκετο φοιτθτι? Select max(length(name)) from students;
Συναρτιςεισ και Ομαδοποίθςθ Ρολλζσ φορζσ δεν αρκεί θ εξαγωγι μίασ τιμισ από όλο το πινακα Χρειάηονται διαφορετικζσ τιμζσ ανά περίπτωςθ Ρ.χ. Μζτρθςε πόςοι φοιτθτζσ κατάγονται από κάκε πολθ Το οποίο ςθμαίνει Ομαδοποίθςε ανά πόλθ τισ εγγραφεσ του πίνακα φοιτθτζσ Μζτρθςε πόςοι είναι ςε κάκε πόλθ Εμφάνιςε το αποτζλεςμα Σερρεσ 123 Δραμα 54 Καβάλα 52 Θεςςαλονικθ 50
Συναρτιςεισ και Ομαδοποίθςθ Χρθςιμοποιοφμε τθν εντολι GROUP BY ομαδοποίθςε κατά Ρ.χ. Μζτρθςε πόςοι φοιτθτζσ κατάγονται από κάκε πολθ Select city, count(id) from students group by city Δθλαδι, ομαδοποίθςε τουσ ανά πόλθ Μετρθςε τουσ ανά πόλθ Δϊςε ΡΟΛΗ, <αποτζλεςμα μζτρθςθσ) Δϊςε τον αρικμό μακθμάτων ανά τμιμα και εξάμθνο
Σφνταξθ GROUP BY Η χριςθ τθσ GROUP BY είναι λίγο ιδιαίτερθ γιατί υπάρχουν οι παρακάτω (λογικοί) περιοριςμοί Στο τμιμα SELECT ζχουμε πεδια και ςυγκεντρωτικζσ ςυναρτιςεισ Πποιο πεδίο δεν είναι ςε ςυγκεντρωτικζσ ςυναρτιςεισ πρζπει να αναφζρεται ςτο τμιμα GROUP BY
Σφνοψθ SQL Η γλϊςςα επικοινωνίασ με τθ βάςθ δεδομζνων Για τθν ανάκτθςθ δεδομζνων ζχουμε εντολζσ SELECT FROM WHERE Στο WHERE ειςάγουμε τα κριτιρια αναηιτθςθσ ΔΕΝ ΕΚΝΑΙ ΔΥΣΚΟΛΗ Είναι ςπαηοκεφαλιζσ Και ςυνεπϊσ χρειάηεται ΜΟΝΟ ΕΞΑΣΚΗΣΗ
Επόμενθ εβδομάδα Και άλλα κριτιρια (HAVING) Εντολζσ τροποποίθςθσ INSERT, UPDATE, DELETE Και άλλεσ ςυναρτιςεισ