Η Γλώσσα SQL και Σχεσιακός Λογισμός Κεφάλαιο 4 Η Γλώσσα SQL και Σχεσιακός Λογισμός
Σχεσιακός Λογισμός: ΕΙΣΑΓΩΓΗ 4/9/2017 Σχεσιακός Λογισμός: ΕΙΣΑΓΩΓΗ Ο Σχεσιακός Λογισμός (RC) είναι μια μη-διαδικαστική, τυπική γλώσσα που βασίζεται στον κατηγορηματικό λογισμό πρώτης τάξης Οι ερωταποκρίσεις στην RC προδιαγράφουν ΤΙ πρόκειται να ανακληθεί (δηλωτικά) ενώ το σύστημα (που υποστηρίζει την γλώσσα) αναλαμβάνει το ΠΩΣ Οι περισσότερες εμπορικές σχεσιακές γλώσσες έχουν τις ρίζες τους στον Σχεσιακό Λογισμό (QUEL, QBE, SQL). Αυτές οι γλώσσες δίνουν έμφαση στην ευκολία χρήσης. Ως προς την εκφραστικότητα, ΣΧΕΣΙΑΚΗ ΑΛΓΕΒΡΑ και ΣΧΕΣΙΑΚΟΣ ΛΟΓΙΣΜΟΣ είναι ταυτόσημοι.
Σχεσιακός Λογισμός: ΕΙΣΑΓΩΓΗ (2) 4/9/2017 Σχεσιακός Λογισμός: ΕΙΣΑΓΩΓΗ (2) Ο Σχεσιακός Λογισμός χρησιμοποιεί την έννοια της ΜΕΤΑΒΛΗΤΗΣ Υπάρχουν δυο μορφές της Γλώσσας: Λογισμός Πλειάδων οι μεταβλητές αναφέρονται σε πλειάδες από μια Σχέση π.χ., t είναι μια μεταβλητή πλειάδος που αναφέρεται σε μια πλειάδα της r(R) Λογισμός Πεδίων Τιμών οι μεταβλητές αναφέρονται σε τιμές από ένα Πεδίο π.χ., d είναι μια μεταβλητή πεδίου που αναφέρεται σε μια τιμή, που έχει μια πλειάδα της r(R) για το γνώρισμα A (από το πεδίο D)
Σχεσιακός Λογισμός Πλειάδων 4/9/2017 Σχεσιακός Λογισμός Πλειάδων Μια ΕΚΦΡΑΣΗ στον ΣΧΕΣΙΑΚΟ ΛΟΓΙΣΜΟ ορίζει μια νέα Σχέση με βάση της υπάρχουσες σχέσεις. Μια έκφραση κατασκευάζεται από τα παρακάτω στοιχεία: (1) Μεταβλητές πλειάδων (π.χ., t, v, w, t1, t2, t3, ... tn ), οι οποίες ορίζονται να παίρνουν τιμές από ένα στιγμιότυπο σχέσης r(R) Οι μεταβλητές μπορεί να είναι περιορισμένες (restricted,) όπου, t.A, με A ένα γνώρισμα της R, συμβολίζει το A-τμήμα της τιμής του t Παράδειγμα: t.Name (2) Συνθήκες της μορφής x τελεστής y, όπου x, y είναι περιορισμένες μεταβλητές πλειάδος ή σταθερές τιμές και ο τελεστής Î { =, ¹, <, >, £, ³ } Παράδειγμα: t.Name = ‘Μαρία’, t.City ¹ v.City
Εκφράσεις στον Λογισμό Πλειάδων 4/9/2017 Εκφράσεις στον Λογισμό Πλειάδων (3) Well-Formed Formulas (WFFs), ορίζονται ως: t μια συνθήκη είναι WFF t αν f είναι μια WFF, τότε είναι και η (f) και η Ø(f) (όπου Ø είναι το Λογικό NOT) t αν f και g είναι WFFs, τότε είναι και η (f & g) και η (f | g) (όπου &, |, είναι τα Λογικά AND, OR αντίστοιχα) t αν f είναι WFF με ελεύθερη μεταβλητή t, τότε είναι και οι $t(f), "t(f) (όπου $, " είναι οι υπαρξιακός (existential) και καθολικός (universal) ποσοδείκτες) Μια μεταβλητή πλειάδος t ονομάζεται δεσμευμένη (bound) σε μια έκφραση f αν είναι μια από μεταβλητές που ποσοδεικτούνται στην f. Αλλιώς, η t είναι ελεύθερη (free) στην f. Παράδειγμα: t είναι free στην f1 : (t.City = ‘london’) και είναι bound στην f2 : ("t ) (t.DNumber = v.Dno), ενώ η v είναι free in f2
Εκφράσεις στον Λογισμό Πλειάδων 4/9/2017 Εκφράσεις στον Λογισμό Πλειάδων Παραδείγματα των 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, τότε μια έκφραση στον λογισμό πλειάδων είναι κάθε έκφραση της μορφής: { ti.Aj | ti Î r(Rk) AND f } όπου τα Rk είναι σχήματα σχέσεων και τα Aj είναι γνωρίσματα στις Rk
Παραδείγματα Ερωταποκρίσεων (1) 4/9/2017 Παραδείγματα Ερωταποκρίσεων (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’)) }
Παραδείγματα Ερωταποκρίσεων (2) 4/9/2017 Παραδείγματα Ερωταποκρίσεων (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 t.SName where Ø ( $v ( (t.Sid = v.Sid) & (v.Bid = 3) ) )
4/9/2017 SQL - ΕΙΣΑΓΩΓΗ SQL (Structured Query Language) είναι η τυποποιημένη “standard” γλώσσα στις Σχεσιακές Βάσεις. Η πρώτη χρήση ήταν στο πρότυπο σύστημα της IBM, που ονομάστηκε SYSTEM-R, το οποίο ανεπτύχθη στα ερευνητικά εργαστήρια της εταιρείας (San Jose, California) στα μέσα της δεκαετίας το 1970. Η SQL έχει υποστεί πολλές τροποποιήσεις. Υπάρχουν 4 βασικές εντολές: select (δεν είναι το ίδιο με το SELECTION στην Άλγεβρα) insert update delete Το αποτέλεσμα μιας εντολής / πράξης σε Σχέσεις είναι (πάντα) μια νέα Σχέση
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)
4/9/2017 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 – Τυπικός Ορισμός (1) 4/9/2017 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) 4/9/2017 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 -- Σημασιολογία Εκτέλεσης 4/9/2017 SQL -- Σημασιολογία Εκτέλεσης EMPLOYEE DEPARTMENT . = X Καρτεσιανό Γινόμενο Τέλος, αφού κατασκευαστεί το υποσύνολο της EMPLOYEE X DEPARTMENT που ικανοποιεί τη συνθήκη Q, παίρνουμε δυο πλειάδες: Ü Ü
SQL -- Πλήρης Μορφή select [ distinct ] target_list 4/9/2017 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: Παραδείγματα στην ΒΔ Ναυτικών (1) 4/9/2017 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) 4/9/2017 SQL: Παραδείγματα στην ΒΔ Ναυτικών (2) SQUERY2: Βρες τα ονόματα των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει ΣΚΑΦΗ με χρώμα κόκκινο select s.SName from SAILORS s, BOATS b, RESERVE r where s.Sid = r.Sid and r.Bid = b.Bid and b.Color = “red” SQUERY3: Βρες τα χρώματα των σκαφών που έχει κρατήσει η ναυτικός με το όνομα Ελένη select b.Color where s.Sid = r.Sid and r.Bid =b.Bid and s.SName= “eleni”
SQL: Παραδείγματα στην ΒΔ Ναυτικών (3) 4/9/2017 SQL: Παραδείγματα στην ΒΔ Ναυτικών (3) SQUERY4: Βρες τα ονόματα των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει τουλάχιστον ένα ΣΚΑΦΟΣ select s.SName from SAILORS s, RESERVE r where s.Sid = r.Sid SQUERY5: Βρες τα ονόματα των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει ένα κόκκινο ή ένα πράσινο ΣΚΑΦΟΣ from SAILORS s, BOATS b, RESERVE r where s.Sid = r.Sid and r.Bid = b.Bid and (b.Color = “red” or b.Color = “green”)
SQL: Παραδείγματα στην ΒΔ Ναυτικών (4) 4/9/2017 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 Αναλυτικά: Παραδείγματα και Σχόλια από τη ΒΔ μιας Εταιρείας 4/9/2017 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: Παραδείγματα για target list (1) 4/9/2017 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 EMPLOYEE e, WORKS_ON w1, WORKS_ON w2 where e.SSN = w1.SSN and e.SSN = w2.SSN and w1.HoursPW > 25 and w2.HoursPW > 25 and w1.PNumber != w2.PNumber
SQL: Παραδείγματα για target list (2) 4/9/2017 SQL: Παραδείγματα για target list (2) Τα TARGET Lists μπορεί επίσης να περιέχουν τη λέξη κλειδί DISTINCT Εφόσον η SQL δεν θεωρεί τις Σχέσεις ως σύνολα, διπλές πλειάδες είναι δυνατόν να παρουσιαστούν, σε αυτή την περίπτωση το DISTINCT χρησιμοποιείται για διαγραφή των διπλών τιμών CQUERY2: Δείξε όλες τις ΔΙΑΦΟΡΕΤΙΚΕΣ τιμές των μισθών Υπαλλήλων select distinct e.Salary from EMPLOYEE e Αυτή η ερωταπόκριση δείχνει επίσης ότι η WHERE πρόταση είναι προαιρετική (χωρίς WHERE, όλες οι πλειάδες παρουσιάζονται)
SQL: Παραδείγματα για target list (3) 4/9/2017 SQL: Παραδείγματα για target list (3) ΤοTARGET List μπορεί να περιέχει τον ειδικό χαρακτήρα: “ * ” (αστεράκι) Όταν ένα * χρησιμοποιείται, σημαίνει ότι όλα τα γνωρίσματα από τις Σχέσεις πρέπει να ανακτηθούν CQUERY3: Δείξε όλους τους Υπαλλήλους του Τμήματος 4 select * from EMPLOYEE e where e.Dnumber = 4
SQL: Χρήση Μεταβλητών Πλειάδας 4/9/2017 SQL: Χρήση Μεταβλητών Πλειάδας Τα ονόματα των Σχέσεων μπορεί να χρησιμοποιηθούν αντί για τις μεταβλητές πλειάδος Αν το Σύστημα μπορεί να καταλάβει σε ποια Σχέση κάθε Γνώρισμα ανήκει, τότε οι μεταβλητές πλειάδος μπορεί να είναι συνεπαγόμενες (implicit) CQUERY4: Για κάθε έργο που εκτελείται στην Αθήνα, παρουσίασε το όνομά του, το νούμερο του τμήματος που το ελέγχει και το όνομα του μάνατζερ του Τμήματος select PName, DEPARTMENT.DNumber, Name from EMPLOYEE, DEPARTMENT, PROJECT where PROJECT.DNumber = DEPARTMENT.DNumber and MgrSSN = SSN and Location = “Athens”
SQL: Παραδείγματα με Qualification (1) 4/9/2017 SQL: Παραδείγματα με Qualification (1) QUALIFICATIONS: Κάθε στοιχείο μιας qualification έχει τη γενική μορφή: expression = expression CQUERY5: Βρες τα ονόματα των Υπαλλήλων, των οποίων ο μισθός είναι περισσότερου του διπλασίου του μισθού κάποιου άλλου Υπαλλήλου (δώστε και τα ονόματα των δευτέρων) select Name1 = e1.Name, Name2 = e1.Name from EMPLOYEE e1, EMPLOYEE e2 where 2 * e1.Salary < e2.Salary
SQL: Παραδείγματα με Qualification (2) 4/9/2017 SQL: Παραδείγματα με Qualification (2) Η SQL υποστηρίζει άμεσα τις πράξεις συνόλων, όπως: union minus intersect CQUERY6: Βρες τα ονόματα των Υπαλλήλων που εργάζονται στο Τμήμα με νούμερο 4 και έχουν μισθό τουλάχιστον 400000 (select Name from EMPLOYEE where DNumber = 4 ) minus (select Name where Salary < 400000 )
SQL: Παραδείγματα με Qualification (3) 4/9/2017 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: Παραδείγματα με Qualification (4) 4/9/2017 SQL: Παραδείγματα με Qualification (4) ΕΜΦΩΛΙΑΣΜΟΣ (nesting) SQL Ερωταποκρίσεων: Ένα πλήρες SELECT query (αποκαλείται, nested query) μπορεί να υπάρχει μέσα στην πρόταση WHERE ενός άλλου query (αποκαλείται, το outer query) CQUERY8: Παρουσίασε όλους τους Υπαλλήλους που εργάζονται στο Τμήμα «Έρευνα» select Name from EMPLOYEE where DNumber in (select DNumber from DEPARTMENT where DName = “research” )
SQL: Παραδείγματα με Qualification (5) 4/9/2017 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: Παραδείγματα με Qualification (6) 4/9/2017 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: Παραδείγματα με Qualification (7) 4/9/2017 SQL: Παραδείγματα με Qualification (7) Παρόμοιοι τελεστές με το IN είναι: t not in (ελέγχει τη μη συμμετοχή σε σύνολο) t OP any (OP συσχέτιση με κάποια πλειάδα σε σύνολο) t OP all (OP συσχέτιση με όλες τις πλειάδες σε σύνολο) where OP Î { =, ¹, <, >, £, ³ } CQUERY10: Παρουσίασε τους Υπαλλήλους που έχουν μεγαλύτερο μισθό από όλους τους Υπαλλήλους του Τμήματος «Έρευνα» select Name from EMPLOYEE where Salary > all (select Salary from EMPLOYEE e, DEPARTMENT d where e.DNumber = d.DNumber and DName = “research” )
SQL: Παραδείγματα με Qualification (8) 4/9/2017 SQL: Παραδείγματα με Qualification (8) Η SQL επίσης παρέχει τελεστές για σύγκριση συνόλων: contains, not contains (υπερσύνολο ή όχι) exists, not exists (κενό σύνολο ή όχι) CQUERY11: Παρουσίασε τους Υπαλλήλους που εργάζονται σε όλα τα έργα που ελέγχονται από το Τμήμα 4 select Name from EMPLOYEE e where (select w.PNumber from WORKS_ON where w.SSN = e.SSN) contains (select PNumber from PROJECT where DNumber = 4)
SQL: Παραδείγματα με Qualification (9) 4/9/2017 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 Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (1) 4/9/2017 SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (1) Η SQL υποστηρίζει ΠΕΝΤΕ Συναθροιστικές Συναρτήσεις (AGGREGATE FUNCTIONS) t count ( [DISTINCT] X) :αριθμός διακριτών τιμών στο X t sum ( [DISTINCT] X) : άθροισμα των διακριτών τιμών στο X t avg ( [DISTINCT] X) : μέση τιμή των διακριτών τιμών στο X t max (X) :μέγιστη τιμή στο X t min (X) :ελάχιστη τιμή στο X Οι Συναθροιστικές Συναρτήσεις επιστρέφουν ΜΙΑ τιμή
SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (2) 4/9/2017 SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (2) Μερικές SQL υλοποιήσεις έχουν περιορισμούς (π.χ. δεν επιτρέπουν περισσότερες από μια τιμές από συναθροιστική συνάρτηση στο target list) CQUERY13: Παρουσίασε τον Μέγιστο μισθό, τον Ελάχιστο μισθό, και το Μέσο μισθό μεταξύ όλων των Υπαλλήλων select max(Salary), min(Salary), avg(Salary) from EMPLOYEE QUERY14: Βρες τον αριθμό των Υπαλλήλων select count(*) from EMPLOYEE
SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (3) 4/9/2017 SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (3) Qualified Aggregates: Το σύνολο στο οποίο οι Συναθροιστικές Συναρτήσεις εφαρμόζονται μπορεί να περιοριστεί από την where-πρόταση CQUERY15: Παρουσίασε το Μέσο μισθό μεταξύ όλων των Υπαλλήλων στο Τμήμα με νούμερο 4 select avg(Salary) from EMPLOYEE where DNumber = 4
SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (4) 4/9/2017 SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (4) Ομαδοποίηση και Συναθροιστικές Συναρτήσεις: Συσσωρεύσεις ή ομάδες πλειάδων υπολογίζονται με την GROUP BY πρόταση CQUERY16: Για κάθε τμήμα, βρες την ελάχιστη ηλικία των Υπαλλήλων που έχουν μισθό μεγαλύτερο των 400000 select DNumber, max(BirthDate) from EMPLOYEE where Salary > 400000 group by DNumber Σημειώνεται ότι το Γνώρισμα ομαδοποίησης ΠΡΕΠΕΙ ΕΠΙΣΗΣ να παρουσιάζεται στην select πρόταση
SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (5) 4/9/2017 SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (5) CQUERY17: Για κάθε έργο, βρες το νούμερο και όνομα του έργου, καθώς και τον αριθμό των Υπαλλήλων που εργάζονται στο έργο select p.PNumber, p.PName, count(*) from PROJECT p, WORKS_ON w where p.PNumber = w.PNumber group by PNumber, PName Οι ομαδοποιήσεις και συναρτήσεις εφαρμόζονται ΜΕΤΑ τη Συνένωση των Σχέσεων PROJECT και WORKS_ON.
SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (6) 4/9/2017 SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (6) HAVING Πρόταση: Τα Qualifications, που απαιτείται να ικανοποιούνται για κάθε ομάδα που συγκροτείται στην group by- πρόταση, μπαίνουν σε μια HAVING πρόταση CQUERY18: Βρες τον Μέσο μισθό Υπαλλήλων, που γεννήθηκαν μετά το 1950 για κάθε τμήμα με περισσότερους των 10 Υπαλλήλων select DNumber, avg(Salary) from EMPLOYEE where BirthDate > “1.1.51” group by DNumber having count(*) > 10
SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση(7) 4/9/2017 SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση(7) CQUERY19: Βρες τον μέσο μισθό Υπαλλήλων που γεννήθηκαν μετά το 1950 , για κάθε Τμήμα με περισσότερους των 10 Υπαλλήλων select e1.DNumber, avg(e1.Salary) from EMPLOYEE e1 where e1.BirthDate > “1.1.51” group by e1.DNumber having 10 < any (select count(e2.SSN) from EMPLOYEE e2 where e2.DNumber = e1.DNumber )
SQL Ενημερώσεις - Updates (1) 4/9/2017 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 Ενημερώσεις - Updates (2) 4/9/2017 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 Ενημερώσεις - Updates (3) 4/9/2017 SQL Ενημερώσεις - Updates (3) Εντολή DELETE delete from relation_name where-qualification SEMANTICS: -- Εκτέλεσε την ανάλογη SELECT εντολή και έπειτα Διέγραψε τις πλειάδες του αποτελέσματος από τη Σχέση CUPDATE3: delete from EMPLOYEE where DNumber in (select DNumber from DEPARTMENT where DName = “admin”)
SQL Ενημερώσεις - Updates (4) 4/9/2017 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”)