Βάσεις Δεδομένων (Databases) ΕΠΛ 342 Χειμερινό Εξάμηνο 2011 Διδάσκοντες Καθηγητές Γιώργος Σαμάρας (ΧΩΔ01 109)
Δομημένη Γλώσσα Ερωτήσεων SQL DML Σχεσιακοί Τελεστές Τελεστές Συνόλων Ανάκτηση με NULLs Συνδέσεις-Συνενώσεις Σύνθετα Ερωτήματα
Δηλωτική Ερώτηση SELECT Title, TeamName FROM WHERE Rank = 1; Title TeamName Champions 3
SQL Select: Δήλωση Πλήρης Μορφή: SELECT attribute list FROM table list WHERE selection-condition GROUP BY grouping attribute(s) HAVING grouping condition ORDER BY {attribute ASC DESC} pairs 4
Σχήμα βάσης για τα παραδείγματα Βάση φοιτητών: STUDENT (SID, Name, Major, Class, QPA, Phone); [STUDENT (SID, FName, LName, DEPT, Class, );] COURSE (CID, Name, Credits); ENROLLS (CID,SID,Term, Grade); STAFF (SSN, SID, Name, Major); Βάση Βιβλιοθηκάριων: LIBRARIAN (SSN, Name, City, Gender, Salary, SNO); SECTION (SNO, Name, HeadSSN); DEPENDENT (Name, LIBSSN, DSSN, Gender, DoB) 5
Σχεσιακοί Τελεστές στην SQL STUDENT(SID,Name, Major); COURSE(CID,Name,Credits); ENROLLS(CID,SID,Term, Grade); π λίστα_χαρακτηριστικών (r) SELECT SID, Name, Major FROM STUDENT; σ συνθήκη_επιλογής (r) SELECT FROM STUDENT WHERE Major = CS ; 6
Σχεσιακοί Τελεστές στην SQL r x s SELECT STUDENT., ENROLLS. FROM STUDENT, ENROLLS; r r.a θ s.b s SELECT STUDENT., ENROLLS. FROM STUDENT, ENROLLS WHERE STUDENT.SID = ENROLLS.SID; 7
Ψευδώνυμα στην SQL: Ο Τελεστής AS Αλλαγή ονομάτων των χαρακτηριστικών στο αποτέλεσμα των ερωτήσεων: SELECT SID AS Student_ID FROM STUDENT; Ψευδώνυμο Πίνακα μπορεί να επιτευχθεί με τον AS τελεστή στο FROM-clause: (Το AS Προαιρετικό) SELECT S.Major FROM STUDENT AS S WHERE S.name = 'Ruchi Agrawal'; Αλλαγή ονομάτων των χαρακτηριστικών εντός των ερωτήσεων: SELECT * FROM STUDENT AS S(ID,FN,MJ) WHERE S.FN = 'Thalia' AND S.MJ = COE'; 8
Ομαδοποίηση των πλειάδων: Το GROUP BY και HAVING Clauses Η ομαδοποίηση των πλειάδων βασίζετε σε τιμή ορισμένων χαρακτηριστικών που ονομάζονται χαρακτηριστικά ομαδοποίησης SELECT A, F(B) FROM r WHERE C GROUPING BY A HAVING P F(B) = συναθροιστικές λειτουργίες στο χαρακτηριστικό B C = συνθήκη επιλογής-συνένωσης (selection-join) P = ένα κατηγόρημα στις πλειάδες τις κάθε ομάδας Τα χαρακτηριστικά ομαδοποίησης A πρέπει να εμφανίζονται στο SELECT-clause για να έχει νόημα 9
Συναθροιστικές Λειτουργίες Η SQL παρέχει 5 συναθροιστικές συναρτήσεις : SUM, MAX, MIN, AVG, και COUNT [COUNT( )] Q: Εμφάνισε όλα τα στατιστικά για τους μισθούς των βιβλιοθηκάριων. SELECT SUM (Salary) AS TotalSalaries, MAX (Salary) AS MaxSalary, MIN (Salary) AS MinSalary, AVG (Salary) AS AvgSalary, COUNT (*) AS Cardinality, COUNT (DISTINCT Salary) AS Salarylevels FROM LIBRARIAN; Μπορούν να εφαρμοστούν και σε υπολογισμένες τιμές: SUM(Price * Quantity). 10
Αριθμητικές Πράξεις Αριθμητικοί τελεστές (+; -; *; /) μπορούν να εφαρμοσθούν σε αριθμητικές τιμές σε μια δήλωση Q: SELECT 1.1 * SUM (Salary) FROM LIBRARIAN; Αύξηση (+) και μείωση (-) μπορούν να εφαρμοσθούν στους τύπους δεδομένων: date, time και timestamp. 11
Ομαδοποίηση των πλειάδων Παράδειγμα 1: SELECT DEPT, CLASS, COUNT(*) AS NoStudents FROM STUDENT WHERE QPA >= 3.5 GROUP BY DEPT, CLASS; Το WHERE γίνετε πρώτο και μετά η ομαδοποίηση. 12
Ομαδοποίηση των πλειάδων Παράδειγμα 2: SELECT DEPT, CLASS, COUNT(*) AS NoStudents FROM STUDENT WHERE QPA >= 3.5 GROUP BY DEPT, CLASS HAVING COUNT ( ) >= 5; 13
Ταξινόμηση αποτελέσματος: Το ORDER BY Clause ORDER BY λίστα σειράς λίστα σειράς: λίστα από ζεύγη <χαρακτηριστικό,σειρά> σειρά: ASC (εξ ορισμού), DESC Q: SELECT * FROM STUDENT WHERE QPA >= 3.5 ORDER BY LName ASC, FName ASC, MI DESC; 14
Δομημένη Γλώσσα Ερωτήσεων SQL DML Σχεσιακοί Τελεστές Ανάθεση Σχεσιακών Τελεστών Ανάκτηση με NULLs Συνδέσεις-Συνενώσεις Σύνθετα Ερωτήματα
Αποτελέσματα σαν Σύνολα Το Select δεν αφαιρεί τις διπλές πλειάδες Η αφαίρεση είναι ακριβή απαιτεί ταξινόμηση Οι διπλές πλειάδες μπορεί να είναι μέρος του αποτελέσματος Οι διπλές πλειάδες απαιτούνται από τις περισσότερες συναθροιστικές λειτουργίες Η αφαίρεση επιτυγχάνετε με το DISTINCT SELECT DISTINCT Term FROM STUDENT, ENROLLS WHERE STUDENT.SID = ENROLLS.SID AND STUDENT.SID = 123; Εξ ορισμού έχουμε SELECT [ALL] 16
Βασικές λειτουργίες Ανάθεσης r s r s r s σχέση r A B C D A F C B D σχέση s B G A D A F Μπορούμε να κάνουμε,, μεταξύ 2 οποιονδήποτε σχέσεων; Πρέπει να είναι συμβατά Συνένωσης R = S και Ανταποκρινόμενα χαρακτηριστικά να έχουν το ίδιο πεδίο ορισμού Ιδιότητες Το και το είναι μεταβατικές λειτουργίες Η Διαφορά δεν είναι μεταβατική (commutative) 17
Τελεστές Συνόλων Η SQL υποστηρίζει UNION και EXCEPT (διαφορά) UNION ALL κρατά τις διπλές πλειάδες ( SELECT SID FROM STUDENT WHERE Major = CS ) UNION ( SELECT SID FROM STUDENT WHERE Major = Math ); ( SELECT SID FROM STUDENT) EXCEPT ( SELECT SID FROM STUDENT WHERE Major = Math ); 18
Αλληλουχία σειράς χαρακτήρων (String) Η Αλληλουχία συμβολίζετε με 2 κατακόρυφες γραμμές ( ) ενώνει σε μια μονό σειρά, δυο ή περισσότερες σειρές χαρακτήρων Q1: Εμφάνισε σε μια τιμή (μια στήλη) Το όνομα όλων των φοιτητών και το τηλέφωνό τους SELECT Fname Lname AS Name, PhoneNumber FROM STUDENT; Q2: SELECT Name FROM COURSE WHERE Dept CourseNumber = CS1555 ; 19
Ταυτοποίηση Μοτίβου LIKE υποστηρίζει την σύγκριση τμημάτων από σειρές Το σύμβολο '%' δηλώνει ταύτιση πλήθους χαρακτήρων περιλαμβανομένου των κενών Σημείωση: Το δεν είναι σωστό Ο σύμβολο '_' ταιριάζει ένα μόνο χαρακτήρα Επέστρεψε όλους τους φοιτητές με Pitt τοπικό τηλέφωνο SELECT Name FROM STUDENT WHERE Phone LIKE '412.62%'; 20
Ταυτοποίηση Μοτίβου Επέστρεψε όλους τους φοιτητές με τοπικό τηλέφωνο που αρχίζει με 6 και το 3 ο ψηφίο είναι 3. SELECT Name FROM STUDENT WHERE Phone LIKE 6_3%'; Κωδικός Escape ορίζει το χαρακτήρα escape που προκαλεί την SQL να μεταφράσει τον χαρακτήρα (%) σαν τον ίδιο σε ένα: SELECT VideoName FROM RENTALS WHERE Discount LIKE '10&%' ESCAPE '&'; 21
Δομημένη Γλώσσα Ερωτήσεων SQL DML Σχεσιακοί Τελεστές Ανάθεση Σχεσιακών Τελεστών Ανάκτηση με NULLs Συνδέσεις-Συνενώσεις Σύνθετα Ερωτήματα
Σχήμα βάσης για τα παραδείγματα Βάση φοιτητών: STUDENT (SID, Name, Major, Class, QPA, Phone); [STUDENT (SID, FName, LName, DEPT, Class, );] COURSE (CID, Name, Credits); ENROLLS (CID,SID,Term, Grade); STAFF (SSN, SID, Name, Major); Βάση Βιβλιοθηκάριων: LIBRARIAN (SSN, Name, City, Gender, Salary, SNO); SECTION (SNO, Name, HeadSSN); DEPENDENT (Name, LIBSSN, DSSN, Gender, DoB) 23
Έλεγχος για NULL τιμές Οι NULL τιμές πρέπει να αναφέρονται και ελέγχονται ρητά Η SQL παρέχει τους IS NULL και IS NOT NULL τελεστές για τις NULL τιμές Παράδειγμα: SELECT SID, Name FROM STUDENT AS S WHERE S.name IS NULL; 24
Συγκρίνοντας NULL Τιμές Το NULL σε μια συνθήκη παράγει UNKNOWN Η SQL παρέχει τελεστές για δοκιμή κάθε τελεστή IS FALSE και IS NOT FALSE IS TRUE και IS NOT TRUE IS UNKNOWN και IS NOT UNKNOWN Παράδειγμα: SELECT SID, Name FROM STUDENT AS S WHERE ((S.Major= CS and S.Gender = F )) IS NOT FALSE; Φιλτράρει όλες τις γραμμές στο STUDENT οι οποίες στο Major, Gender, ή και στα 2 έχουν NULL 25
Πίνακες Επαλήθευσης X TRUE UNK FALSE NOT FALSE UKN TRUE OR TRUE UNK FALSE TRUE TRUE TRUE TRUE UNK TRUE UNK UNK FALSE TRUE UNK FALSE AND TRUE UNK FALSE TRUE TRUE UNK FALSE UNK UNK UNK FALSE FALSE FALSE FALSE FALSE 26
Δομημένη Γλώσσα Ερωτήσεων SQL DML Σχεσιακοί Τελεστές Ανάθεση Σχεσιακών Τελεστών Ανάκτηση με NULLs Συνδέσεις-Συνενώσεις Σύνθετα Ερωτήματα
Εντολή Σύνδεσης - Join (SQL2) Το JOIN δημιουργήθηκε για να καθορίζει την συνθήκη της σύνδεσης στο FROM-clause: table1 JOIN table2 ON join-condition Παραδείγματα για το θ-join: SELECT SID, S.Name, Term FROM (STUDENT S JOIN ENROLLS E ON S.SID=E.SID) WHERE E.CID = 1555; 28
Φυσική Σύνδεση (Natural Join) NATURAL JOIN (χωρίς ON-clause) table1 NATURAL JOIN table2 Αλλάζουμε το όνομα των χαρακτηριστικών αν χρειαστεί, π.χ., SELECT * FROM (LIBRARIAN NATURAL JOIN SECTION AS S(SNO, SName, Head)) WHERE Sname = Children ; Φυσική σύνδεση πάνω σε ορισμένα χαρακτηριστικά: USING (λίστα χαρακτηριστικών) SELECT SID, S.Name, Term FROM (STUDENT NATURAL JOIN ENROLLS USING (SID)) WHERE ENROLLS.CID = 1555; 29
Άλλες Συνδέσεις: Εντολές Εκτεταμένων Σχεσιακών Τελεστών Εξωτερικές συνδέσεις: LEFT OUTER JOIN ή LEFT JOIN RIGHT OUTER JOIN ή RIGHT JOIN FULL OUTER JOIN ή FULL JOIN CROSS JOIN: παράγει ένα διασταυρωμένο γινόμενο (cross product) UNION JOIN: Outer Union τελεστής 30
Συνθήκες Διαστημάτων BETWEEN, και η άρνησή του NOT BETWEEN, μπορούν να χρησιμοποιηθούν με αριθμητικούς, χαρακτήρες και χρονολογικούς τύπους δεδομένων Απλοποιεί την διατύπωση των συνθηκών επιλογών Π.χ., SELECT * FROM LIBRARIAN WHERE (Salary >= 25000 AND Salary <= 35000); SELECT * FROM LIBRARIAN WHERE (Salary BETWEEN 25000 AND 35000); 31
Δομημένη Γλώσσα Ερωτήσεων SQL DML Σχεσιακοί Τελεστές Ανάθεση Σχεσιακών Τελεστών Ανάκτηση με NULLs Συνδέσεις-Συνενώσεις Σύνθετα Ερωτήματα
Σύνθετες, Εμπεριεχόμενες Ερωτήσεις & Σύνολο συγκρίσεων Δυο ορισμοί για το σύνολο: Άμεσος ή Ρητός: καταγραφή των μελών του συνόλου εντός των ( ) Π.χ., (1, 2, 3) και ('Science', 'Art', 'Children') Έμμεσος: ορίζετε σαν υποερώτημα (εμπεριεχόμενο ερώτημα) του οποίου ο πίνακας εξόδου (σύνολο) χρησιμοποιείτε από την συνθήκη επιλογής της εμπεριεχούσης SELECT δήλωσης Μοναδιαία υποερώτηση (Scalar subquery): Μια υποερώτηση της οποίας η έξοδος είναι μια μονή στήλη και μια μόνο γραμμή Αυτό μπορεί να χρησιμοποιηθεί σε κάθε δήλωση στην οποία μια μονή τιμή μπορεί να εμφανισθεί 33
Μοναδιαία υποερώτηση (Scalar Subquery) SELECT SID, Name FROM STUDENT WHERE SID = ( SELECT SID FROM STAFF AS F WHERE F.SSN = 132-32-2222 ); 34