Κεφάλαιο 4 Η Γλώσσα SQL και Σχεσιακός Λογισµός Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.46
Σχεσιακός Λογισµός: ΕΙΣΑΓΩΓΗ Ο Σχεσιακός Λογισµός (RC) είναι µια µη-διαδικαστική, τυπική γλώσσα που βασίζεται στον κατηγορηµατικό λογισµό πρώτης τάξης Οι ερωταποκρίσεις στην RC προδιαγράφουν ΤΙ πρόκειται να ανακληθεί (δηλωτικά) ενώ το σύστηµα (που υποστηρίζει την γλώσσα) αναλαµβάνει το ΠΩΣ Οι περισσότερες εµπορικές σχεσιακές γλώσσες έχουν τις ρίζες τους στον Σχεσιακό Λογισµό (QUEL, QBE, SQL). Αυτές οι γλώσσες δίνουν έµφαση στην ευκολία χρήσης. Ως προς την εκφραστικότητα, ΣΧΕΣΙΑΚΗ ΑΛΓΕΒΡΑ και ΣΧΕΣΙΑΚΟΣ ΛΟΓΙΣΜΟΣ είναι ταυτόσηµοι. Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.47
Σχεσιακός Λογισµός: ΕΙΣΑΓΩΓΗ (2) Ο Σχεσιακός Λογισµός χρησιµοποιεί την έννοια της ΜΕΤΑΒΛΗΤΗΣ Υπάρχουν δυο µορφές της Γλώσσας: Λογισµός Πλειάδων οι µεταβλητές αναφέρονται σε πλειάδες από µια Σχέση π.χ., t είναι µια µεταβλητή πλειάδος που αναφέρεται σε µια πλειάδα της r(r) Λογισµός Πεδίων Τιµών οι µεταβλητές αναφέρονται σε τιµές από ένα Πεδίο π.χ., d είναι µια µεταβλητή πεδίου που αναφέρεται σε µια τιµή, που έχει µια πλειάδα της r(r) για το γνώρισµα A (από το πεδίο D) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.48
Σχεσιακός Λογισµός Πλειάδων Μια ΕΚΦΡΑΣΗ στον ΣΧΕΣΙΑΚΟ ΛΟΓΙΣΜΟ ορίζει µια νέα Σχέση µε βάση της υπάρχουσες σχέσεις. Μια έκφραση κατασκευάζεται από τα παρακάτω στοιχεία: (1) Μεταβλητές πλειάδων (π.χ., t, v, w, t 1, t 2, t 3,... t n ), οι οποίες ορίζονται να παίρνουν τιµές από ένα στιγµιότυπο σχέσης r(r) Οι µεταβλητές µπορεί να είναι περιορισµένες (restricted,) όπου, t.a, µε A ένα γνώρισµα της R, συµβολίζει το A-τµήµα της τιµής του t Παράδειγµα: t.name (2) Συνθήκες της µορφής x τελεστής y, όπου x, y είναι περιορισµένες µεταβλητές πλειάδος ή σταθερές τιµές και ο τελεστής { =,, <, >,, } Παράδειγµα: t.name = Μαρία, t.city v.city Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.49
Εκφράσεις στον Λογισµό Πλειάδων (3) Well-Formed Formulas (WFFs), ορίζονται ως: µια συνθήκη είναι WFF αν f είναι µια WFF, τότε είναι και η (f) και η (f) (όπου είναι το Λογικό NOT) αν f και g είναι WFFs, τότε είναι και η (f & g) και η (f g) (όπου &,, είναι τα Λογικά AND, OR αντίστοιχα) αν f είναι WFF µε ελεύθερη µεταβλητή t, τότε είναι και οι t(f), t(f) (όπου, είναι οι υπαρξιακός (existential) και καθολικός (universal) ποσοδείκτες) Μια µεταβλητή πλειάδος t ονοµάζεται δεσµευµένη (bound) σε µια έκφραση f αν είναι µια από µεταβλητές που ποσοδεικτούνται στην f. Αλλιώς, η t είναι ελεύθερη (free) στην f. Παράδειγµα: t είναι free στην f 1 : (t.city = london ) και είναι bound στην f 2 : ( t ) (t.dnumber = v.dno), ενώ η v είναι free in f 2 Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.50
Εκφράσεις στον Λογισµό Πλειάδων Παραδείγµατα των WFFs t.city = v.city (t.city = v.city) (t.city = v.city) (t.city v.city) (t.city = v.city) & (w.city = London) t (t.city = v.city) t (t.city = Athens) αν f είναι µια WFF, τότε µια έκφραση στον λογισµό πλειάδων είναι κάθε έκφραση της µορφής: { t i.a j t i r(r k ) AND f } όπου τα R k είναι σχήµατα σχέσεων και τα A j είναι γνωρίσµατα στις R k Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.51
Παραδείγµατα Ερωταποκρίσεων (1) Επανερχόµαστε στην γνωστή Β των Ναυτικών SAILORS (Sid, SName, Rating) BOATS (Bid, BName, Color) RESERVE (Sid, Bid, Date) QUERY1: Βρες τα ονόµατα των ΝΑΥΤΙΚΩΝ που έχουν id µεγαλύτερο από 10 και έχουν διαβάθµιση (rating) α RANGE of t is SAILORS t.sname where (t.sid > 10) & (t.rating = a ) Παρακάτω δίνεται σαν θεωρητικά καθαρό RC query: { t.sname t r(sailors) & ((t.sid > 10) & (t.rating = a )) } Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.52
Παραδείγµατα Ερωταποκρίσεων (2) QUERY2: Βρες τα ονόµατα και διαβαθµίσεις των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει το ΣΚΑΦΟΣ µε νούµερο 3 RANGE of t is SAILORS RANGE of v is RESERVE t.sname, t.rating where v ( (t.sid = v.sid) & (v.bid = 3) ) QUERY3: Βρες τα ονόµατα των ΝΑΥΤΙΚΩΝ που δεν έχουν κρατήσει το ΣΚΑΦΟΣ µε νούµερο 3 RANGE of t is SAILORS RANGE of v is RESERVE t.sname where ( v ( (t.sid = v.sid) & (v.bid = 3) ) ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.53
SQL - ΕΙΣΑΓΩΓΗ SQL (Structured Query Language) είναι η τυποποιηµένη standard γλώσσα στις Σχεσιακές Βάσεις. Η πρώτη χρήση ήταν στο πρότυπο σύστηµα της IBM, που ονοµάστηκε SYSTEM-R, το οποίο ανεπτύχθη στα ερευνητικά εργαστήρια της εταιρείας (San Jose, California) στα µέσα της δεκαετίας το 1970. Η SQL έχει υποστεί πολλές τροποποιήσεις. Υπάρχουν 4 βασικές εντολές: select (δεν είναι το ίδιο µε το SELECTION στην Άλγεβρα) insert update delete Το αποτέλεσµα µιας εντολής / πράξης σε Σχέσεις είναι (πάντα) µια νέα Σχέση Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.54
SQL - ιαχρονικά Η γλώσσα SQL --- παγκόσµια σταθερά σε Β Sequel 75 (System R) SQL86» H Πρώτη προσπάθεια για τυποποίηση SQL89» referential integrity SQL92» agents, client/server, embedded SQL, dynamic SQL (cursors), temporary tables, standard error codes SQL3» object SQL Ιδιότητες» αρµονία µε DCE, X/Open» multimedia (text, audio, video, BLOBs) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.55
SQL - Άτυπος Ορισµός Θεωρήστε τη Σχέση EMPLOYEE και την παρακάτω ερωταπόκριση: Βρείτε τα ονόµατα των Υπαλλήλων που έχουν µισθό µεγαλύτερο των 600,000 Στην SQL: select e.name from EMPLOYEE e where (e.salary > 600000) e είναι µια µεταβλητή πλειάδος που ορίζεται να παίρνει τιµές από την Σχέση EMPLOYEE (στην from πρόταση) e.name, ως περιορισµένη µεταβλητή πλειάδος, προσδιορίζει την τιµή του e στο γνώρισµα Name, και αποτελεί το target list (προσδιορίζει στην select πρόταση τις προβολές των στηλών) (e.salary > 30000) είναι η ικανοποίηση συνθήκης (qualification ) (προσδιορίζει στην where πρόταση όλες τις επιλογές και συνενώσεις) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.56
SQL Τυπικός Ορισµός (1) Η selection clause είναι µια σύγκριση µεταξύ µιας περιορισµένης µεταβλητής πλειάδος x και µιας σταθεράς c της µορφής : x operator c where operator { =,, <, >,, } Παράδειγµα: t.name = mary, t.salary > 30000 Η join clause είναι µια σύγκριση µεταξύ δύο περιορισµένων µεταβλητών πλειάδος x και y της µορφής: x operator y όπου x, y ανήκουν σε διαφορετικές Σχέσεις και operator { =,, <, >,, } Παράδειγµα: t.name = v.ename Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.57
SQL -- --Τυπικός Ορισµός (2) Η qualification είναι ένας Boolean συνδυασµός (δηλαδή, µε τα Λογικά and, or, not) µεταξύ selection και join προτάσεων.) Παράδειγµα: (t.name = v.ename) and (t.salary > 30000) Σηµασιολογία του QUALIFICATION Μια qualification Q περιγράφει το υποσύνολο του Καρτεσιανού Γινοµένου όλων των δυνατών τιµών των περιορισµένων της µεταβλητών που ικανοποιεί την Q Παράδειγµα: : Έστω οι Σχέσεις: EMPLOYEE(SSN, DNumber) και DEPARTMENT(Dno, mgrssn), µε e και d µεταβλητές πλειάδος Q = (e.dnumber = d.dno) and (d.mgrssn = 9876) Σηµασιολογία του Q: Το σύνολο των ζευγών e, d που ικανοποιούν την Q Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.58
SQL -- --Σηµασιολογία Εκτέλεσης EMPLOYEE SSN DNumber 1234. 5 9998 4 9876 4 DEPARTMENT Dno MgrSSN 5 3334 4 9876 1 8886 X = Καρτεσιανό Γινόµενο SSN DNumber Dno mgrssn 1234 5 5 3344 1234 5 4 9876 1234 5 1 8886 9998 4 5 3344 9998 4 4 9876 9998 4 1 8886 9876 4 5 3344 9876 4 4 9876 9876 4 1 8886 Τέλος, αφού κατασκευαστεί το υποσύνολο της EMPLOYEE X DEPARTMENT που ικανοποιεί τη συνθήκη Q, παίρνουµε δυο πλειάδες: SSN DNumber Dno mgrssn 9998 4 4 9876 9876 4 4 9876 Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.59
SQL -- -- Πλήρης Μορφή select [ distinct ] target_list from tuple_variable_list [ where qualification ] [ group by grouping_attributes ] [ having group_condition ] [ order by target_list_subset ] Μια ερωταπόκριση αποτιµάται πρώτα µε την εφαρµογή της WHERE πρότασης, µετά των GROUP-BY και HAVING (προαιρετικά), και τέλος της SELECT πρότασης (στόχος λίστα γνωρισµάτων) µε ταξινόµηση των πλειάδων στην απάντηση ή διαγραφή διπλών τιµών, αν απαιτείται από την ORDER BY πρόταση ή το DISTINCT (επίσης προαιρετικά). Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.60
SQL: Παραδείγµατα στην Β Ναυτικών (1) Επανερχόµαστε στην Β των Ναυτικών: SAILORS (Sid, SName, Rating) BOATS (Bid, BName, Color) RESERVE (Sid, Bid, Date) SQUERY1: Βρες τα ονόµατα των ΝΑΥΤΙΚΩΝ που έχουν κάνει κράτηση για το ΣΚΑΦΟΣ µε νούµερο 2 select s.sname from SAILORS s, RESERVE r where s.sid = r.sid and r.bid = 2 Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.61
SQL: Παραδείγµατα στην Β Ναυτικών (2) SQUERY2: Βρες τα ονόµατα των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει ΣΚΑΦΗ µε χρώµα κόκκινο select from where s.sname SAILORS s, BOATS b, RESERVE r s.sid = r.sid and r.bid = b.bid and b.color = red SQUERY3: Βρες τα χρώµατα των σκαφών που έχει κρατήσει η ναυτικός µε το όνοµα Ελένη select from where b.color SAILORS s, BOATS b, RESERVE r s.sid = r.sid and r.bid =b.bid and s.sname= eleni Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.62
SQL: Παραδείγµατα στην Β Ναυτικών (3) SQUERY4: Βρες τα ονόµατα των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει τουλάχιστον ένα ΣΚΑΦΟΣ select from where s.sname SAILORS s, RESERVE r s.sid = r.sid SQUERY5: Βρες τα ονόµατα των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει ένα κόκκινο ή ένα πράσινο ΣΚΑΦΟΣ select from where s.sname SAILORS s, BOATS b, RESERVE r s.sid = r.sid and r.bid = b.bid and (b.color = red or b.color = green ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.63
SQL: Παραδείγµατα στην Β Ναυτικών (4) SQUERY6: Βρες τα ονόµατα των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει ένα κόκκινο και ένα πράσινο ΣΚΑΦΟΣ select s.sname from SAILORS s, BOATS b1, RESERVE r1, BOATS b2, RESERVE r2 where s.sid = r1.sid and r1.bid = b1.bid and b1.color = red and s.sid = r2.sid and r2.bid = b2.bid and b2.color = green Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.64
SQL Αναλυτικά: Παραδείγµατα και Σχόλια από τη Β µιας Εταιρείας EMPLOYEE ( SSN, Name, BirthDate, Address, Sex, Salary, SupSSN, DNumber) DEPARTMENT ( DNumber, DName, MgrSSN, MgrStartDate) PROJECT ( PNumber, PName, Location, DNumber) DEPT_LOCATION ( DNumber, DLocation) WORKS_ON ( SSN, PNumber, HoursPW) DEPENDENT ( SSN, DependName, Sex, BirthDate, Relationship) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.65
SQL: Παραδείγµατα για target list (1) TARGET LISTS: Κάθε στοιχείο στην target list είναι σε γενική µορφή: attribute_name = expression όπου expression είναι µια αριθµητική έκφραση σε περιορισµένες µεταβλητές πλειάδος και σταθερές (όπως επίσης, built-ins και aggregates.) CQUERY1: Παρουσίασε, αυξηµένους κατά 10000 τους µισθούς των Υπαλλήλων, που έχουν εργαστεί σε δύο διαφορετικά έργα περισσότερο από 25 ώρες select e.name, Salary = e.salary + 10000 from where EMPLOYEE e, WORKS_ON w1, WORKS_ON w2 e.ssn = w1.ssn and e.ssn = w2.ssn and w1.hourspw > 25 and w2.hourspw > 25 and w1.pnumber!= w2.pnumber Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.66
SQL: Παραδείγµατα για target list (2) Τα TARGET Lists µπορεί επίσης να περιέχουν τη λέξη κλειδί DISTINCT Εφόσον η SQL δεν θεωρεί τις Σχέσεις ως σύνολα, διπλές πλειάδες είναι δυνατόν να παρουσιαστούν, σε αυτή την περίπτωση το DISTINCT χρησιµοποιείται για διαγραφή των διπλών τιµών CQUERY2: είξε όλες τις ΙΑΦΟΡΕΤΙΚΕΣ τιµές των µισθών Υπαλλήλων select from distinct e.salary EMPLOYEE e Αυτή η ερωταπόκριση δείχνει επίσης ότι η WHERE πρόταση είναι προαιρετική (χωρίς WHERE, όλες οι πλειάδες παρουσιάζονται) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.67
SQL: Παραδείγµατα για target list (3) ΤοTARGET List µπορεί να περιέχει τον ειδικό χαρακτήρα: * (αστεράκι) Όταν ένα * χρησιµοποιείται, σηµαίνει ότι όλα τα γνωρίσµατα από τις Σχέσεις πρέπει να ανακτηθούν CQUERY3: είξε όλους τους Υπαλλήλους του Τµήµατος 4 select * from EMPLOYEE e where e.dnumber = 4 Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.68
SQL: Χρήση Μεταβλητών Πλειάδας Τα ονόµατα των Σχέσεων µπορεί να χρησιµοποιηθούν αντί για τις µεταβλητές πλειάδος Αν το Σύστηµα µπορεί να καταλάβει σε ποια Σχέση κάθε Γνώρισµα ανήκει, τότε οι µεταβλητές πλειάδος µπορεί να είναι συνεπαγόµενες (implicit) CQUERY4: Για κάθε έργο που εκτελείται στην Αθήνα, παρουσίασε το όνοµά του, το νούµερο του τµήµατος που το ελέγχει και το όνοµα του µάνατζερ του Τµήµατος select from where PName, DEPARTMENT.DNumber, Name EMPLOYEE, DEPARTMENT, PROJECT PROJECT.DNumber = DEPARTMENT.DNumber and MgrSSN = SSN and Location = Athens Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.69
SQL: Παραδείγµατα µε Qualification (1) QUALIFICATIONS: Κάθε στοιχείο µιας qualification έχει τη γενική µορφή: expression = expression CQUERY5: Βρες τα ονόµατα των Υπαλλήλων, των οποίων ο µισθός είναι περισσότερου του διπλασίου του µισθού κάποιου άλλου Υπαλλήλου (δώστε και τα ονόµατα των δευτέρων) select from where Name1 = e1.name, Name2 = e1.name EMPLOYEE e1, EMPLOYEE e2 2 * e1.salary < e2.salary Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.70
SQL: Παραδείγµατα µε Qualification (2) Η SQL υποστηρίζει άµεσα τις πράξεις συνόλων, όπως: union minus intersect CQUERY6: Βρες τα ονόµατα των Υπαλλήλων που εργάζονται στο Τµήµα µε νούµερο 4 και έχουν µισθό τουλάχιστον 400000 (select Name from EMPLOYEE where DNumber = 4 ) minus (select Name from EMPLOYEE where Salary < 400000 ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.71
SQL: Παραδείγµατα µε Qualification (3) CQUERY7: Παρουσίασε τα ονόµατα των έργων, που έχουν έναν Υπάλληλο µε όνοµα jenny ως εργαζόµενο ή ως µάνατζερ του Τµήµατος που ελέγχει το έργο (select PName from EMPLOYEE, PROJECT, DEPARTMENT where EMPLOYEE.DNumber=DEPARTMENT.DNumber and MgrSSN = SSN and Name = jenny ) union (select PName from EMPLOYEE, PROJECT, WORKS_ON where PROJECT.PNumber = WORKS_ON.PNumber and WORKS_ON.SSN=EMPLOYEE.SSN and Name = jenny ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.72
SQL: Παραδείγµατα µε Qualification (4) ΕΜΦΩΛΙΑΣΜΟΣ (nesting) SQL Ερωταποκρίσεων: Ένα πλήρες SELECT query (αποκαλείται, nested query) µπορεί να υπάρχει µέσα στην πρόταση WHERE ενός άλλου query (αποκαλείται, το outer query) CQUERY8: Παρουσίασε όλους τους Υπαλλήλους που εργάζονται στο Τµήµα «Έρευνα» select from where Name EMPLOYEE DNumber in (select DNumber from DEPARTMENT where DName = research ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.73
SQL: Παραδείγµατα µε Qualification (5) Συσχετισµένα (CORRELATED) NESTED Queries: Εάν η συνθήκη στην WHERE πρόταση ενός nested query αναφέρεται σε ένα γνώρισµα του outer query, τότε τα δύο λέγονται Συσχετιζόµενα Το αποτέλεσµα του nested query είναι διαφορετικό για κάθε πλειάδα των Σχέσεων στο outer query CQUERY9: Παρουσίασε το όνοµα κάθε Υπαλλήλου, που έχει έναν εξαρτώµενο ιδίου φύλλου µε τον Υπάλληλο select Name from EMPLOYEE e where e.ssn in (select d.ssn from DEPENDENT d where d.ssn = e.ssn and d.sex = e.sex ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.74
SQL: Παραδείγµατα µε Qualification (6) Κάθε ερωταπόκριση που χρησιµοποιεί τον τελεστή IN (ελέγχει τη συµµετοχή σε σύνολο) µπορεί πάντα να εκφραστεί χωρίς εµφωλιασµό (flat query) CQUERY9a: Παρουσίασε το όνοµα κάθε Υπαλλήλου, που έχει έναν εξαρτώµενο ιδίου φύλλου µε τον Υπάλληλο select Name from EMPLOYEE e, DEPENDENT d where e.ssn = d.ssn and d.sex = e.sex ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.75
SQL: Παραδείγµατα µε Qualification (7) Παρόµοιοι τελεστές µε το IN είναι: not in (ελέγχει τη µη συµµετοχή σε σύνολο) OP any (OP συσχέτιση µε κάποια πλειάδα σε σύνολο) OP all (OP συσχέτιση µε όλες τις πλειάδες σε σύνολο) where OP { =,, <, >,, } CQUERY10: Παρουσίασε τους Υπαλλήλους που έχουν µεγαλύτερο µισθό από όλους τους Υπαλλήλους του Τµήµατος «Έρευνα» select from where Name EMPLOYEE Salary > all (select Salary from EMPLOYEE e, DEPARTMENT d where e.dnumber = d.dnumber and DName = research ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.76
SQL: Παραδείγµατα µε Qualification (8) Η SQL επίσης παρέχει τελεστές για σύγκριση συνόλων: contains, not contains (υπερσύνολο ή όχι) exists, not exists (κενό σύνολο ή όχι) CQUERY11: Παρουσίασε τους Υπαλλήλους που εργάζονται σε όλα τα έργα που ελέγχονται από το Τµήµα 4 select from Name EMPLOYEE e where (select w.pnumber from WORKS_ON where w.ssn = e.ssn) contains (select PNumber from PROJECT where DNumber = 4) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.77
SQL: Παραδείγµατα µε Qualification (9) CQUERY9b: Παρουσίασε το όνοµα κάθε Υπαλλήλου, που έχει έναν εξαρτώµενο ιδίου φύλλου µε τον Υπάλληλο select Name from EMPLOYEE e where exists (select * from DEPENDENT d where d.ssn=e.ssn and d.sex = e.sex) CQUERY12: Παρουσίασε τους Υπαλλήλους που δεν έχουν εξαρτώµενους select Name from EMPLOYEE e where not exists (select * from DEPENDENT d where d.ssn=e.ssn ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.78
SQL Συναθροιστικές Συναρτήσεις και Οµαδοποίηση (1) Η SQL υποστηρίζει ΠΕΝΤΕ Συναθροιστικές Συναρτήσεις (AGGREGATE FUNCTIONS) count ( [DISTINCT] X) :αριθµός διακριτών τιµών στο X sum ( [DISTINCT] X) : άθροισµα των διακριτών τιµών στο X avg ( [DISTINCT] X) : µέση τιµή των διακριτών τιµών στο X max (X) :µέγιστη τιµή στο X min (X) :ελάχιστη τιµή στο X Οι Συναθροιστικές Συναρτήσεις επιστρέφουν ΜΙΑ τιµή Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.79
SQL Συναθροιστικές Συναρτήσεις και Οµαδοποίηση (2) Μερικές SQL υλοποιήσεις έχουν περιορισµούς (π.χ. δεν επιτρέπουν περισσότερες από µια τιµές από συναθροιστική συνάρτηση στο target list) CQUERY13: Παρουσίασε τον Μέγιστο µισθό, τον Ελάχιστο µισθό, και το Μέσο µισθό µεταξύ όλων των Υπαλλήλων select from max(salary), min(salary), avg(salary) EMPLOYEE QUERY14: Βρες τον αριθµό των Υπαλλήλων select from count(*) EMPLOYEE Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.80
SQL Συναθροιστικές Συναρτήσεις και Οµαδοποίηση (3) Qualified Aggregates: Το σύνολο στο οποίο οι Συναθροιστικές Συναρτήσεις εφαρµόζονται µπορεί να περιοριστεί από την where-πρόταση CQUERY15: Παρουσίασε το Μέσο µισθό µεταξύ όλων των Υπαλλήλων στο Τµήµα µε νούµερο 4 select from avg(salary) EMPLOYEE where DNumber = 4 Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.81
SQL Συναθροιστικές Συναρτήσεις και Οµαδοποίηση (4) Οµαδοποίηση και Συναθροιστικές Συναρτήσεις: Συσσωρεύσεις ήοµάδες πλειάδων υπολογίζονται µε την GROUP BY πρόταση CQUERY16: Για κάθε τµήµα, βρες την ελάχιστη ηλικία των Υπαλλήλων που έχουν µισθό µεγαλύτερο των 400000 select DNumber, max(birthdate) from EMPLOYEE where Salary > 400000 group by DNumber Σηµειώνεται ότι το Γνώρισµα οµαδοποίησης ΠΡΕΠΕΙ ΕΠΙΣΗΣ να παρουσιάζεται στην select πρόταση Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.82
SQL Συναθροιστικές Συναρτήσεις και Οµαδοποίηση (5) CQUERY17: Για κάθε έργο, βρες το νούµερο και όνοµα του έργου, καθώς και τον αριθµό των Υπαλλήλων που εργάζονται στο έργο select from where p.pnumber, p.pname, count(*) PROJECT p, WORKS_ON w p.pnumber = w.pnumber group by PNumber, PName Οι οµαδοποιήσεις και συναρτήσεις εφαρµόζονται ΜΕΤΑ τη Συνένωση των Σχέσεων PROJECT και WORKS_ON. Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.83
SQL Συναθροιστικές Συναρτήσεις και Οµαδοποίηση (6) HAVING Πρόταση: Τα Qualifications, που απαιτείται να ικανοποιούνται για κάθε οµάδα που συγκροτείται στην group by- πρόταση, µπαίνουν σε µια HAVING πρόταση CQUERY18: Βρες τον Μέσο µισθό Υπαλλήλων, που γεννήθηκαν µετά το 1950 για κάθε τµήµα µε περισσότερους των 10 Υπαλλήλων select from DNumber, avg(salary) EMPLOYEE where BirthDate > 1.1.51 group by DNumber having count(*) > 10 Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.84
SQL Συναθροιστικές Συναρτήσεις και Οµαδοποίηση(7) CQUERY19: Βρες τον µέσο µισθό Υπαλλήλων που γεννήθηκαν µετά το 1950, για κάθε Τµήµα µε περισσότερους των 10 Υπαλλήλων select from e1.dnumber, avg(e1.salary) EMPLOYEE e1 where e1.birthdate > 1.1.51 group by e1.dnumber having 10 < any (select from count(e2.ssn) EMPLOYEE e2 where e2.dnumber = e1.dnumber ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.85
SQL Ενηµερώσεις - Updates (1) Εντολή INSERT insert into relation_name select-statement ή insert into relation_name values (value_list) CUPDATE1: Εισαγωγή ενός νέου τµήµατος insert into DEPARTMENT values (6, inventory, 9879, 30.5.45 ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.86
SQL Ενηµερώσεις - Updates (2) Έστω ότι έχουµε µια Σχέση DEPT_INFO: DEPT_INFO ( DeptName, NoOfEmpl, TotalSalary) Μπορούµε να εισάγουµε πλειάδες (CUPDATE2): insert into DEPT_INFO select d.dname, count(*), sum(e.salary) from DEPARTMENT d, EMPLOYEE e where d.dnumber=e.dnumber group by d.dname Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.87
SQL Ενηµερώσεις - Updates (3) Εντολή DELETE delete from relation_name where-qualification SEMANTICS: -- Εκτέλεσε την ανάλογη SELECT εντολή και έπειτα ιέγραψε τις πλειάδες του αποτελέσµατος από τη Σχέση CUPDATE3: delete from EMPLOYEE where DNumber in (select DNumber from where DEPARTMENT DName = admin ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.88
SQL Ενηµερώσεις - Updates (4) Εντολή UPDATE update relation_name set target_list where qualification SEMANTICS: -- Εκτέλεσε τις δύο ανάλογες SELECT εντολές, µετά, διέγραψε τις πλειάδες από την πρώτη και τέλος, κάνε εισαγωγή των νέων CUPDATE4: update EMPLOYEE set Salary = Salary * 1.14 where DNumber in (select DNumber from DEPARTMENT where DName = admin ) Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.89