440 likes | 655 Views
Κεφάλαιο 4. Η Γλώσσα SQL και Σχεσιακός Λογισμός. Σχεσιακός Λογισμός: ΕΙΣΑΓΩΓΗ. Ο Σχεσιακός Λογισμός (RC) είναι μια μη-διαδικαστική , τυπική γλώσσα που βασίζεται στον κατηγορηματικό λογισμό πρώτης τάξης
E N D
Κεφάλαιο 4 Η Γλώσσα SQL και Σχεσιακός Λογισμός
Σχεσιακός Λογισμός: ΕΙΣΑΓΩΓΗ • ΟΣχεσιακός Λογισμός (RC) είναι μια μη-διαδικαστική, τυπική γλώσσα που βασίζεται στον κατηγορηματικό λογισμό πρώτης τάξης • Οι ερωταποκρίσεις στην RC προδιαγράφουνΤΙπρόκειται να ανακληθεί (δηλωτικά) ενώ το σύστημα (που υποστηρίζει την γλώσσα) αναλαμβάνει τοΠΩΣ • Οι περισσότερες εμπορικές σχεσιακές γλώσσες έχουν τις ρίζες τους στον Σχεσιακό Λογισμό(QUEL, QBE, SQL). Αυτές οι γλώσσες δίνουν έμφαση στην ευκολία χρήσης. • Ως προς την εκφραστικότητα, ΣΧΕΣΙΑΚΗ ΑΛΓΕΒΡΑ καιΣΧΕΣΙΑΚΟΣ ΛΟΓΙΣΜΟΣ είναι ταυτόσημοι.
Σχεσιακός Λογισμός: ΕΙΣΑΓΩΓΗ (2) • Ο Σχεσιακός Λογισμός χρησιμοποιεί την έννοια της ΜΕΤΑΒΛΗΤΗΣ • Υπάρχουν δυο μορφές της Γλώσσας: • Λογισμός Πλειάδων οι μεταβλητές αναφέρονται σε πλειάδεςαπό μια Σχέση π.χ., t είναι μια μεταβλητή πλειάδος που αναφέρεται σε μια πλειάδα της r(R) • Λογισμός Πεδίων Τιμών οι μεταβλητές αναφέρονται σε τιμέςαπό ένα Πεδίο π.χ., d είναι μια μεταβλητή πεδίου που αναφέρεται σε μια τιμή, που έχει μια πλειάδα της r(R) για το γνώρισμα A (από το πεδίο D)
Σχεσιακός Λογισμός Πλειάδων • Μια ΕΚΦΡΑΣΗ στον ΣΧΕΣΙΑΚΟ ΛΟΓΙΣΜΟ ορίζει μια νέα Σχέση με βάση της υπάρχουσεςσχέσεις. • Μια έκφρασηκατασκευάζεται από τα παρακάτω στοιχεία: (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
Εκφράσεις στον Λογισμό Πλειάδων (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
Εκφράσεις στον Λογισμό Πλειάδων • Παραδείγματα των 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) • Επανερχόμαστε στην γνωστή ΒΔ των Ναυτικών 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) • 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 - ΕΙΣΑΓΩΓΗ • 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)
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) • Η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) • Η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 -- Σημασιολογία Εκτέλεσης EMPLOYEE DEPARTMENT . = X Καρτεσιανό Γινόμενο Τέλος, αφού κατασκευαστεί το υποσύνολο της EMPLOYEE X DEPARTMENT που ικανοποιεί τη συνθήκη Q, παίρνουμε δυο πλειάδες: Ü Ü
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) • Επανερχόμαστε στην ΒΔ των Ναυτικών: 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) • 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 from SAILORS s, BOATS b, RESERVE r where s.Sid = r.Sid and r.Bid =b.Bid and s.SName= “eleni”
SQL: Παραδείγματα στην ΒΔ Ναυτικών (3) • SQUERY4:Βρες τα ονόματα των ΝΑΥΤΙΚΩΝπου έχουν κρατήσει τουλάχιστον ένα ΣΚΑΦΟΣ select s.SName from SAILORS s, RESERVE r where s.Sid = r.Sid • SQUERY5: Βρες τα ονόματα των ΝΑΥΤΙΚΩΝπου έχουν κρατήσει ένα κόκκινο ή ένα πράσινο ΣΚΑΦΟΣ select s.SName 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) • 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 Αναλυτικά: Παραδείγματα και Σχόλια από τη ΒΔμιας Εταιρείας 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) • TARGETLISTS: Κάθε στοιχείο στην 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) • Τα TARGET Lists μπορεί επίσης να περιέχουν τη λέξη κλειδίDISTINCT • Εφόσον η SQL δεν θεωρεί τις Σχέσεις ωςσύνολα, διπλές πλειάδεςείναι δυνατόν να παρουσιαστούν, σε αυτή την περίπτωση το DISTINCT χρησιμοποιείται για διαγραφή των διπλών τιμών • CQUERY2: Δείξε όλες τις ΔΙΑΦΟΡΕΤΙΚΕΣτιμές των μισθών Υπαλλήλων select distinct e.Salary from EMPLOYEE e • Αυτή η ερωταπόκριση δείχνει επίσης ότι η WHERE πρότασηείναι προαιρετική (χωρίς WHERE, όλες οι πλειάδες παρουσιάζονται)
SQL: Παραδείγματα για target list (3) • ΤοTARGET List μπορεί να περιέχει τον ειδικό χαρακτήρα: “*” (αστεράκι) Όταν ένα * χρησιμοποιείται, σημαίνει ότι όλα τα γνωρίσματααπό τις Σχέσεις πρέπει να ανακτηθούν • CQUERY3: Δείξε όλους τουςΥπαλλήλους του Τμήματος 4 select * from EMPLOYEE e where e.Dnumber = 4
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) • 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) • Η SQL υποστηρίζει άμεσα τις πράξεις συνόλων, όπως: • union • minus • intersect • CQUERY6: Βρες τα ονόματα των Υπαλλήλων που εργάζονται στο Τμήμα με νούμερο 4 και έχουν μισθό τουλάχιστον400000 (select Name from EMPLOYEE where DNumber = 4) minus (select Name from EMPLOYEE where Salary < 400000 )
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) • ΕΜΦΩΛΙΑΣΜΟΣ(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) • Συσχετισμένα (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) • Κάθε ερωταπόκριση που χρησιμοποιεί τον τελεστήIN (ελέγχει τη συμμετοχή σε σύνολο) μπορεί πάντανα εκφραστεί χωρίς εμφωλιασμό (flat query) • CQUERY9a: Παρουσίασε το όνομα κάθε Υπαλλήλου, που έχει έναν εξαρτώμενο ιδίου φύλλου με τον Υπάλληλο select Name from EMPLOYEE e, DEPENDENT d where e.SSN = d.SSN and d.Sex = e.Sex )
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) • Η 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) • 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) • Η 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) • Μερικές SQL υλοποιήσεις έχουν περιορισμούς (π.χ. δεν επιτρέπουν περισσότερες από μια τιμές από συναθροιστική συνάρτηση στο target list) • CQUERY13: Παρουσίασε τον Μέγιστο μισθό, τον Ελάχιστο μισθό, και το Μέσο μισθό μεταξύ όλων των Υπαλλήλων select max(Salary), min(Salary), avg(Salary) from EMPLOYEE • QUERY14: Βρες τον αριθμό των Υπαλλήλων select count(*) from EMPLOYEE
SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (3) • QualifiedAggregates: Το σύνολο στο οποίο οιΣυναθροιστικές Συναρτήσειςεφαρμόζονταιμπορεί να περιοριστεί από τηνwhere-πρόταση • CQUERY15: Παρουσίασε το Μέσο μισθό μεταξύ όλων των Υπαλλήλων στο Τμήμα με νούμερο 4 select avg(Salary) from EMPLOYEE where DNumber = 4
SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (4) • Ομαδοποίηση και Συναθροιστικές Συναρτήσεις: Συσσωρεύσεις ήομάδεςπλειάδων υπολογίζονταιμε την GROUP BY πρόταση • CQUERY16: Για κάθε τμήμα, βρες την ελάχιστη ηλικίατων Υπαλλήλων που έχουν μισθό μεγαλύτερο των 400000 select DNumber, max(BirthDate) from EMPLOYEE where Salary > 400000 group by DNumber • Σημειώνεται ότι το Γνώρισμα ομαδοποίησης ΠΡΕΠΕΙ ΕΠΙΣΗΣ να παρουσιάζεται στηνselectπρόταση
SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (5) • CQUERY17: Για κάθε έργο, βρες το νούμερο και όνομα του έργου, καθώς και τον αριθμό των Υπαλλήλων που εργάζονται στο έργο selectp.PNumber, p.PName, count(*) from PROJECT p, WORKS_ON w where p.PNumber = w.PNumber group by PNumber, PName • Οι ομαδοποιήσεις και συναρτήσεις εφαρμόζονταιΜΕΤΑτη Συνένωση των Σχέσεων PROJECT και WORKS_ON.
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) • 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) • Εντολή 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) • Έστω ότι έχουμε μια Σχέση DEPT_INFO: DEPT_INFO ( DeptName, NoOfEmpl, TotalSalary) • Μπορούμε να εισάγουμε πλειάδες (CUPDATE2): insert into DEPT_INFO selectd.DName, count(*), sum(e.Salary) fromDEPARTMENT d, EMPLOYEE e whered.DNumber=e.DNumber group by d.DName
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) • Εντολή 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”)