Κεφάλαιο 4

44
. – Σχεσιακός Λογισμός και η Γλώσσα SQL Κεφάλαιο 4 Η Γλώσσα SQL και Σχεσιακός Λογισμός

description

Κεφάλαιο 4. Η Γλώσσα SQL και Σχεσιακός Λογισμός. Σχεσιακός Λογισμός: ΕΙΣΑΓΩΓΗ. Ο Σχεσιακός Λογισμός (RC) είναι μια μη-διαδικαστική , τυπική γλώσσα που βασίζεται στον κατηγορηματικό λογισμό πρώτης τάξης - PowerPoint PPT Presentation

Transcript of Κεφάλαιο 4

Page 1: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 1

Κεφάλαιο 4Κεφάλαιο 4

Η Γλώσσα SQL και Σχεσιακός Λογισμός

Page 2: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 2

Σχεσιακός Λογισμός: ΕΙΣΑΓΩΓΗΣχεσιακός Λογισμός: ΕΙΣΑΓΩΓΗ

Ο Σχεσιακός Λογισμός (RC) είναι μια μη-διαδικαστική, τυπική γλώσσα που βασίζεται στον κατηγορηματικό λογισμό πρώτης τάξης

Οι ερωταποκρίσεις στην RC προδιαγράφουν ΤΙ πρόκειται να ανακληθεί (δηλωτικά) ενώ το σύστημα (που υποστηρίζει την γλώσσα) αναλαμβάνει το ΠΩΣ

Οι περισσότερες εμπορικές σχεσιακές γλώσσες έχουν τις ρίζες τους στον Σχεσιακό Λογισμό (QUEL, QBE, SQL). Αυτές οι γλώσσες δίνουν έμφαση στην ευκολία χρήσης.

Ως προς την εκφραστικότητα, ΣΧΕΣΙΑΚΗ ΑΛΓΕΒΡΑ και ΣΧΕΣΙΑΚΟΣ ΛΟΓΙΣΜΟΣ είναι ταυτόσημοι.

Page 3: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 3

Σχεσιακός Λογισμός: ΕΙΣΑΓΩΓΗ (2)Σχεσιακός Λογισμός: ΕΙΣΑΓΩΓΗ (2)

Ο Σχεσιακός Λογισμός χρησιμοποιεί την έννοια της ΜΕΤΑΒΛΗΤΗΣ

Υπάρχουν δυο μορφές της Γλώσσας:

– Λογισμός Πλειάδωνοι μεταβλητές αναφέρονται σε πλειάδες από μια Σχέσηπ.χ., t είναι μια μεταβλητή πλειάδος που αναφέρεται σε μια πλειάδα της r(R)

– Λογισμός Πεδίων Τιμών οι μεταβλητές αναφέρονται σε τιμές από ένα Πεδίοπ.χ., d είναι μια μεταβλητή πεδίου που αναφέρεται σε μια τιμή, που έχει μια πλειάδα της r(R) για το γνώρισμα A (από το πεδίο D)

Page 4: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 4

Σχεσιακός Λογισμός ΠλειάδωνΣχεσιακός Λογισμός Πλειάδων

Μια ΕΚΦΡΑΣΗ στον ΣΧΕΣΙΑΚΟ ΛΟΓΙΣΜΟ ορίζει μια νέα Σχέση με βάση της υπάρχουσες σχέσεις.

Μια έκφραση κατασκευάζεται από τα παρακάτω στοιχεία:(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

Page 5: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 5

Εκφράσεις στον Λογισμό ΠλειάδωνΕκφράσεις στον Λογισμό Πλειάδων

(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 στην f1 : (t.City = ‘london’) και είναι bound στην f2 : (t ) (t.DNumber = v.Dno), ενώ η v είναι free in f2

Page 6: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 6

Εκφράσεις στον Λογισμό ΠλειάδωνΕκφράσεις στον Λογισμό Πλειάδων

Παραδείγματα των 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

Page 7: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 7

Παραδείγματα Ερωταποκρίσεων (1)Παραδείγματα Ερωταποκρίσεων (1)

Επανερχόμαστε στην γνωστή ΒΔ των Ναυτικών

SAILORS (Sid, SName, Rating)BOATS (Bid, BName, Color)RESERVE (Sid, Bid, Date)

QUERY1: Βρες τα ονόματα των ΝΑΥΤΙΚΩΝ που έχουν id μεγαλύτερο από 10 και έχουν διαβάθμιση (rating) ‘α’

RANGE of t is SAILORSt.SName where (t.Sid > 10) (t.Rating = ‘a’)

Παρακάτω δίνεται σαν θεωρητικά καθαρό RC query:

{ t.SName | t r(SAILORS) (t.Sid > 10) (t.Rating = ‘a’)) }

Page 8: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 8

Παραδείγματα Ερωταποκρίσεων (2)Παραδείγματα Ερωταποκρίσεων (2)

QUERY2: Βρες τα ονόματα και διαβαθμίσεις των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει το ΣΚΑΦΟΣ με νούμερο 3

RANGE of t is SAILORSRANGE of v is RESERVE t.SName, t.Rating where v ( (t.Sid = v.Sid) v.Bid = 3) )

QUERY3: Βρες τα ονόματα των ΝΑΥΤΙΚΩΝ που δεν έχουν κρατήσει το ΣΚΑΦΟΣ με νούμερο 3

RANGE of t is SAILORSRANGE of v is RESERVE t.SName where ( v ( (t.Sid = v.Sid) v.Bid = 3) ) )

Page 9: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 9

SQL - ΕΙΣΑΓΩΓΗSQL - ΕΙΣΑΓΩΓΗ

SQL (Structured Query Language) είναι η τυποποιημένη “standard” γλώσσα στις Σχεσιακές Βάσεις. Η πρώτη χρήση ήταν στο πρότυπο σύστημα της IBM, που ονομάστηκε SYSTEM-R, το οποίο ανεπτύχθη στα ερευνητικά εργαστήρια της εταιρείας (San Jose, California) στα μέσα της δεκαετίας το 1970. Η SQL έχει υποστεί πολλές τροποποιήσεις.

Υπάρχουν 4 βασικές εντολές:– select (δεν είναι το ίδιο με το SELECTION στην Άλγεβρα)– insert– update– delete

Το αποτέλεσμα μιας εντολής / πράξης σε Σχέσεις είναι (πάντα) μια νέα Σχέση

Page 10: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 10

SQL - Διαχρονικά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)

Page 11: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 11

SQL - Άτυπος ΟρισμόςSQL - Άτυπος Ορισμός

Θεωρήστε τη Σχέση EMPLOYEE και την παρακάτω ερωταπόκριση: “Βρείτε τα ονόματα των Υπαλλήλων που έχουν μισθό μεγαλύτερο των 600,000” Στην SQL:

select e.Namefrom EMPLOYEE ewhere (e.Salary > 600000)

– e είναι μια μεταβλητή πλειάδος που ορίζεται να παίρνει τιμές από την Σχέση EMPLOYEE (στην from πρόταση)

– e.Name, ως περιορισμένη μεταβλητή πλειάδος, προσδιορίζει την τιμή του e στο γνώρισμα Name, και αποτελεί το target list (προσδιορίζει στην select πρόταση τις προβολές των στηλών)

– (e.Salary > 30000) είναι η ικανοποίηση συνθήκης (qualification ) (προσδιορίζει στην where πρόταση όλες τις επιλογές και συνενώσεις)

Page 12: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 12

SQL – Τυπικός Ορισμός (1)SQL – Τυπικός Ορισμός (1)

Η selection clause είναι μια σύγκριση μεταξύ μιας περιορισμένης μεταβλητής πλειάδος x και μιας σταθεράς c της μορφής : x operator c

where operator Παράδειγμα: t.Name = ‘mary’, t.Salary

Η join clause είναι μια σύγκριση μεταξύ δύο περιορισμένων μεταβλητών πλειάδος x και y της μορφής: x operator y όπου x, y ανήκουν σε διαφορετικές Σχέσεις και

operator Παράδειγμα: t.Name = v.EName

Page 13: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 13

SQL -- Τυπικός Ορισμός (2)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

Page 14: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 14

SQL -- Σημασιολογία ΕκτέλεσηςSQL -- Σημασιολογία Εκτέλεσης

.SSN DNumber1234 59998 49876 4

Dno MgrSSN5 33344 98761 8886

X =

SSN DNumber Dno mgrSSN1234 5 5 33441234 5 4 98761234 5 1 88869998 4 5 33449998 4 4 98769998 4 1 88869876 4 5 33449876 4 4 98769876 4 1 8886

SSN DNumber Dno mgrSSN9998 4 4 98769876 4 4 9876

Τέλος, αφού κατασκευαστεί το υποσύνολοτης EMPLOYEE X DEPARTMENTπου ικανοποιεί τη συνθήκη Q, παίρνουμε δυο πλειάδες:

Καρτεσιανό Γινόμενο

EMPLOYEE DEPARTMENT

Page 15: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 15

SQL -- Πλήρης Μορφή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 (επίσης προαιρετικά).

Page 16: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 16

SQL: Παραδείγματα στην ΒΔ Ναυτικών (1)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

Page 17: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 17

SQL: Παραδείγματα στην ΒΔ Ναυτικών (2)SQL: Παραδείγματα στην ΒΔ Ναυτικών (2)

SQUERY2: Βρες τα ονόματα των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει ΣΚΑΦΗ με χρώμα κόκκινο

select s.SNamefrom SAILORS s, BOATS b, RESERVE rwhere s.Sid = r.Sid and r.Bid = b.Bid and b.Color = “red”

SQUERY3: Βρες τα χρώματα των σκαφών που έχει κρατήσει η ναυτικός με το όνομα Ελένη

select b.Colorfrom SAILORS s, BOATS b, RESERVE rwhere s.Sid = r.Sid and r.Bid =b.Bid and s.SName= “eleni”

Page 18: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 18

SQL: Παραδείγματα στην ΒΔ Ναυτικών (3)SQL: Παραδείγματα στην ΒΔ Ναυτικών (3)

SQUERY4: Βρες τα ονόματα των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει τουλάχιστον ένα ΣΚΑΦΟΣ

select s.SNamefrom SAILORS s, RESERVE rwhere s.Sid = r.Sid

SQUERY5: Βρες τα ονόματα των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει ένα κόκκινο ή ένα πράσινο ΣΚΑΦΟΣselect s.SName from SAILORS s, BOATS b, RESERVE rwhere s.Sid = r.Sid and r.Bid = b.Bid and

(b.Color = “red” or b.Color = “green”)

Page 19: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 19

SQL: Παραδείγματα στην ΒΔ Ναυτικών (4)SQL: Παραδείγματα στην ΒΔ Ναυτικών (4)

SQUERY6: Βρες τα ονόματα των ΝΑΥΤΙΚΩΝ που έχουν κρατήσει ένα κόκκινο και ένα πράσινο ΣΚΑΦΟΣ

select s.SName from SAILORS s, BOATS b1, RESERVE r1,

BOATS b2, RESERVE r2where 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”

Page 20: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 20

SQL Αναλυτικά: Παραδείγματα και Σχόλια από τη ΒΔ μιας Εταιρείας

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)

Page 21: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 21

SQL: Παραδείγματα για target list (1)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

Page 22: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 22

SQL: Παραδείγματα για target list (2)SQL: Παραδείγματα για target list (2)

Τα TARGET Lists μπορεί επίσης να περιέχουν τη λέξη κλειδί DISTINCT– Εφόσον η SQL δεν θεωρεί τις Σχέσεις ως σύνολα, διπλές πλειάδες είναι

δυνατόν να παρουσιαστούν, σε αυτή την περίπτωση το DISTINCT χρησιμοποιείται για διαγραφή των διπλών τιμών

CQUERY2: Δείξε όλες τις ΔΙΑΦΟΡΕΤΙΚΕΣ τιμές των μισθών Υπαλλήλων

select distinct e.Salary from EMPLOYEE e

Αυτή η ερωταπόκριση δείχνει επίσης ότι η WHERE πρόταση είναι προαιρετική (χωρίς WHERE, όλες οι πλειάδες παρουσιάζονται)

Page 23: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 23

SQL: Παραδείγματα για target list (3)SQL: Παραδείγματα για target list (3)

ΤοTARGET List μπορεί να περιέχει τον ειδικό χαρακτήρα: “ * ” (αστεράκι)

Όταν ένα * χρησιμοποιείται, σημαίνει ότι όλα τα γνωρίσματα από τις Σχέσεις πρέπει να ανακτηθούν

CQUERY3: Δείξε όλους τους Υπαλλήλους του Τμήματος 4

select *

from EMPLOYEE e

where e.Dnumber = 4

Page 24: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 24

SQL: Χρήση Μεταβλητών ΠλειάδαςSQL: Χρήση Μεταβλητών Πλειάδας

Τα ονόματα των Σχέσεων μπορεί να χρησιμοποιηθούν αντί για τις μεταβλητές πλειάδος

Αν το Σύστημα μπορεί να καταλάβει σε ποια Σχέση κάθε Γνώρισμα ανήκει, τότε οι μεταβλητές πλειάδος μπορεί να είναι συνεπαγόμενες (implicit)

CQUERY4: Για κάθε έργο που εκτελείται στην Αθήνα, παρουσίασε το όνομά του, το νούμερο του τμήματος που το ελέγχει και το όνομα του μάνατζερ του Τμήματος

select PName, DEPARTMENT.DNumber, Name from EMPLOYEE, DEPARTMENT, PROJECTwhere PROJECT.DNumber = DEPARTMENT.DNumber

and MgrSSN = SSN and Location = “Athens”

Page 25: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 25

SQL: Παραδείγματα με Qualification (1)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

Page 26: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 26

SQL: Παραδείγματα με Qualification (2)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 )

Page 27: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 27

SQL: Παραδείγματα με Qualification (3)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” )

Page 28: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 28

SQL: Παραδείγματα με Qualification (4)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” )

Page 29: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 29

SQL: Παραδείγματα με Qualification (5)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 )

Page 30: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 30

SQL: Παραδείγματα με Qualification (6)SQL: Παραδείγματα με Qualification (6)

Κάθε ερωταπόκριση που χρησιμοποιεί τον τελεστή IN (ελέγχει τη συμμετοχή σε σύνολο) μπορεί πάντα να εκφραστεί χωρίς εμφωλιασμό (flat query)

CQUERY9a: Παρουσίασε το όνομα κάθε Υπαλλήλου, που έχει έναν εξαρτώμενο ιδίου φύλλου με τον Υπάλληλο

select Name from EMPLOYEE e, DEPENDENT d

where e.SSN = d.SSN and d.Sex = e.Sex )

Page 31: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 31

SQL: Παραδείγματα με Qualification (7)SQL: Παραδείγματα με Qualification (7)

Παρόμοιοι τελεστές με το IN είναι:not in (ελέγχει τη μη συμμετοχή σε σύνολο)

OP any (OP συσχέτιση με κάποια πλειάδα σε σύνολο)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” )

Page 32: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 32

SQL: Παραδείγματα με Qualification (8)SQL: Παραδείγματα με Qualification (8)

Η SQL επίσης παρέχει τελεστές για σύγκριση συνόλων:– contains, not contains (υπερσύνολο ή όχι)– exists, not exists (κενό σύνολο ή όχι)

CQUERY11: Παρουσίασε τους Υπαλλήλους που εργάζονται σε όλα τα έργα που ελέγχονται από το Τμήμα 4select Name

from EMPLOYEE e

where (select w.PNumber from WORKS_ON where w.SSN = e.SSN)

contains (select PNumber

from PROJECT where DNumber = 4)

Page 33: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 33

SQL: Παραδείγματα με Qualification (9)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 )

Page 34: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 34

SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (1)

SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (1)

Η SQL υποστηρίζει ΠΕΝΤΕ Συναθροιστικές Συναρτήσεις (AGGREGATE FUNCTIONS)

count ( [DISTINCT] X) :αριθμός διακριτών τιμών στο X

sum ( [DISTINCT] X) : άθροισμα των διακριτών τιμών στο X

avg ( [DISTINCT] X) : μέση τιμή των διακριτών τιμών στο X

max (X) :μέγιστη τιμή στο X

min (X) :ελάχιστη τιμή στο X

Οι Συναθροιστικές Συναρτήσεις επιστρέφουν ΜΙΑ τιμή

Page 35: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 35

SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (2)

SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (2)

Μερικές SQL υλοποιήσεις έχουν περιορισμούς (π.χ. δεν επιτρέπουν περισσότερες από μια τιμές από συναθροιστική συνάρτηση στο target list)

CQUERY13: Παρουσίασε τον Μέγιστο μισθό, τον Ελάχιστο μισθό, και το Μέσο μισθό μεταξύ όλων των Υπαλλήλων

select max(Salary), min(Salary), avg(Salary) from EMPLOYEE

QUERY14: Βρες τον αριθμό των Υπαλλήλων

select count(*) fromEMPLOYEE

Page 36: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 36

SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (3)

SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (3)

Qualified Aggregates: Το σύνολο στο οποίο οι Συναθροιστικές Συναρτήσεις εφαρμόζονται μπορεί να περιοριστεί από την where-πρόταση

CQUERY15: Παρουσίασε το Μέσο μισθό μεταξύ όλων των Υπαλλήλων στο Τμήμα με νούμερο 4

select avg(Salary)

from EMPLOYEE

where DNumber = 4

Page 37: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 37

SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (4)

SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (4)

Ομαδοποίηση και Συναθροιστικές Συναρτήσεις: Συσσωρεύσεις ή ομάδες πλειάδων υπολογίζονται με την GROUP BY πρόταση

CQUERY16: Για κάθε τμήμα, βρες την ελάχιστη ηλικία των Υπαλλήλων που έχουν μισθό μεγαλύτερο των 400000

select DNumber, max(BirthDate)from EMPLOYEEwhere Salary > 400000group by DNumber

– Σημειώνεται ότι το Γνώρισμα ομαδοποίησης ΠΡΕΠΕΙ ΕΠΙΣΗΣ να παρουσιάζεται στην select πρόταση

Page 38: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 38

SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (5)

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.

Page 39: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 39

SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση (6)

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

Page 40: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 40

SQL Συναθροιστικές Συναρτήσεις και Ομαδοποίηση(7)

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 )

Page 41: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 41

SQL Ενημερώσεις - Updates (1)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”)

Page 42: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 42

SQL Ενημερώσεις - Updates (2)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

Page 43: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 43

SQL Ενημερώσεις - Updates (3)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”)

Page 44: Κεφάλαιο   4

Ι.Β. – Σχεσιακός Λογισμός και η Γλώσσα SQL 44

SQL Ενημερώσεις - Updates (4)SQL Ενημερώσεις - Updates (4)

Εντολή UPDATEupdate relation_name set target_listwhere qualification

SEMANTICS:-- Εκτέλεσε τις δύο ανάλογες SELECT εντολές, μετά, διέγραψε

τις πλειάδες από την πρώτη και τέλος, κάνε εισαγωγή των νέων

CUPDATE4: update EMPLOYEEset Salary = Salary * 1.14where DNumber in (select DNumber

from DEPARTMENT where DName = “admin”)