ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ Relational Model SQL Μαθ. #11
Ε-R Model for a COMPANY database
The COMPANY relational database schema
A relational database instance of the COMPANY schema
SQL Μια γλώσσα σχεσιακής βάσης δεδοµένων Σχεσιακή Άλγεβρα: υψηλού επιπέδου διαδικασιακή γλώσσα Ο χρήστης καθορίζει το «πως», µε ποία σειρά, να εκτελεσθεί η ερώτηση Οι πιο πολλές βάσεις δεδοµένων παρέχουν µια υψηλού επιπέδου δηλωτική (µη-διαδικασιακή) γλώσσα, έτσι Ο χρήστης καθορίζει το «τι» είναι το αποτέλεσµα, αφήνοντας τη βελτιστοποίηση και απόφαση του «πως» να εκτελεσθεί η query στο DBMS SQL (Structure Query Language) είναι η πιο γνωστή τέτοια γλώσσα
SQL Μια γλώσσα σχεσιακής βάσης δεδοµένων SQL εντολές για ορισµό δεδοµένων, ερωτήσεων και αλλαγών. Εποµένως είναι και τα δυο DDL (γλώσσα ορισµού) DML(γλώσσα επεξεργασίας) Παρέχει επίσης δυνατότητα ορισµού «όψεων» ηµιουργία και καταστροφή δεικτών
Σχεσιακό Μοντέλο Γλώσσα Ορισµού εδοµένων SQL: χρησιµοποιεί τους όρους «πίνακα», «γραµµή», και «στήλη» για σχέση, πλειάδα, και πεδίο ορισµού αντίστοιχα Οι εντολές της SQL για ορισµό δεδοµένων είναι CREATE TABLE DROP TABLE ALTER TABLE
SQL example DROP TABLE DEPENDENT ; ALTER TABLE EMPLOYEE ADD JOB VARCHAR ;
Ερωτήσεις στην SQL Η SQL έχει µια βασική εντολή για την ανάκτηση πληροφοριών από τη βάση δεδοµένων Την SELECT FROM WHERE ενότητα (SFW) Αποτελείται από τους τρεις όρους, SELECT, FROM, και WHERE και έχει την ακόλουθη µορφή SELECT <λίστα πεδίων> FROM <λίστα πινάκων> WHERE <συνθήκη> Όπου <λίστα πεδίων> είναι η λίστα των πεδίων των οποίων οι τιµές θα ανακτηθούν από την ερώτηση (query) <λίστα πινάκων> είναι η λίστα των σχέσεων που χρειάζονται για την επεξεργασία της ερώτησης <συνθήκη> είναι η λογική έκφραση η οποία αναγνωρίζει τις πλειάδες που θα ανακτηθούν από την ερώτηση
Παράδειγµα ερωτήσεων στην SQL Ερώτηση Q0 Βρες την ηµεροµηνία γεννήσεως και διεύθυνση του υπαλλήλου µε όνοµα John B. Smith SELECT BDATE, ADDRESS FROM EMPLOYEE WHERE FNAME= JOHN AND MINIT= B AND LNAME= SMITH H query διαλέγει όλους τους υπαλλήλους που ικανοποιούν την συνθήκη του «WHERE» και µετά προβάλλει το αποτέλεσµα επί των πεδίων BDATE και ADDRESS τα οποία αναφέρονται στον SELECT όρο Η Q0 είναι όµοια της σχεσιακής έκφρασης
Ερώτηση Q1 Βρες το όνοµα και διεύθυνση του υπαλλήλου που δουλεύει στο research τµήµα SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DNAME= RESEARCH AND DNUMBER=DNO Στον WHERE όρο η συνθήκη DNAME = RESEARCH είναι η συνθήκη επιλογής και αντιστοιχεί στον τελεστή επιλογής της σχεσιακής άλγεβρας ( ) DNUMBER=DNO είναι ο join condition που αντιστοιχεί στην συνθήκη κάτω από την οποία εκτελείται ο τελεστής join της σχεσιακής άλγεβρας ( ) Η Q1 είναι όµοια της σχεσιακής έκφρασης Μπορεί να βελτιστοποιηθεί???
Σχεσιακό Μοντέλο ιφορούµενα ονόµατα στηλών Πρόβληµα Το ίδιο όνοµα στήλης σε περισσότερο από ένα πίνακα Λύση Προσδιόρισε (qualify) το όνοµα µιας στήλης µε τη χρήση συνώνυµου η µε προσήµανση του ονόµατος της σχέσης
Ερώτηση Q2 Q1 Βρες το όνοµα και διεύθυνση του υπαλλήλου που δουλεύει στο research τµήµα Θεωρείστε ότι DNO και LNAME της σχέσεως EMPLOYEE ονοµαζόταν DNUMBER και NAME και το DNAME του DEPARTMENT ονοµαζόταν NAME SELECT E.FNAME, E.NAME, E.ADDRESS FROM EMPLOYEE E, DEPARTMENT D WHERE D.NAME= RESEARCH AND D.NUMBER=E.NUMBER
Μη ορισµός του WHERE και τη χρήση του * SELECT SSN FROM EMPLOYEE SELECT SSN, DNAME FROM EMPLOYEE, DEPARTMNET Βρες τους όλους τους υπαλλήλους που δουλεύουν στο τµήµα 5 SELECT * FROM EMPLOYEE WHERE DNO=5
Εµφωλευµένες (φωλιασµένες) ερωτήσεις και συγκρίσεις συνόλων Βρες το όνοµα κάθευπαλλήλουπουέχειεξαρτώµενο µε το ίδιο µικρό όνοµακαιτοίδιοφύλοµε τονυπάλληλο SELECT E.FNAME, E.LNAME FROM EMPLOYEE E WHERE E.SSN IN SELECT ESSN FROM DEPENDENT WHERE E.FNAME=DEPENDENT_NAME AND SEX= E.SEX
Χωρίς Εµφώλευση Βρες το όνοµα κάθε υπαλλήλου που έχει εξαρτώµενο µετοίδιοµικρό όνοµα και το ίδιο φύλο µε τον υπάλληλο SELECT E.FNAME. E.LNAME FROM EMPLOYEE E, DEPENDENT D WHERE ESSN=E.SSN AND FNAME=DEPENDENT_NAME AND D.SEX=E.SEX
ΗεντολήEXIST Χρησιµοποιείται για να ελέγχει κατά πόσο το αποτέλεσµα µιας συσχετισµένης query είναι κενό ή όχι Χρησιµοποιώντας το προηγούµενο παράδειγµα Βρες το όνοµα κάθε υπαλλήλου που έχει εξαρτώµενο µε το ίδιο µικρό όνοµα και το ίδιο φύλο µε τον υπάλληλο SELECT E.FNAME, E.LNAME FROM EMPLOYEE E WHERE EXIST (SELECT * FROM DEPENDENT WHERE ESSN=E.SSN AND E.FNAME=DEPENDENT_NAME AND SEX=E.SEX
ΗεντολήEXIST Βρες το όνοµα κάθε υπαλλήλου που δεν έχει εξαρτώµενα SELECT E.FNAME, E.LNAME FROM EMPLOYEE E WHERE NOT EXIST (SELECT * FROM DEPENDENT ESSN=E.SSN)
Aggregate Functions and Grouping (Συναρτήσεις συνάθροισης και οµαδοποίησης) Η SQL περιέχει ένα σύνολο συνάρτησης «συνάθροισης» COUNT: επιστρέφει τον αριθµό των πλειάδων η τιµών που καθορίζονται στην query SUM, AVG, MAX, ΜΙΝ: εφαρµόζονται σε ένα σύνολο η πολυσύνολο από αριθµητικές τιµές και επιστρέφουν αντίστοιχα, το «άθροισµα», «µέσο όρο», «µέγιστο», και «ελάχιστο» αυτών των τιµών
Παράδειγµα Βρες το άθροισµα, τον µέγιστο, τον ελάχιστο, και τον µέσο όρο όλων των µισθών των υπαλλήλων SELECT SUM(SALARY), MAX(SALARY) MIN(SALARY), AVG(SALARY) FROM EMPLOYEE
Grouping (οµαδοποίηση) Για κάθε τµήµαβρεςτοναριθµό τουτµήµατος, τον αριθµό τωνυπαλλήλωντουτµήµατος, και τον µέσο όρο των µισθών τους SELECT DNO, COUNT(*), AVG(SALARY) FROM EMPLOYEE GROUP BY DNO Ο GROUP BY όρος ορίζει τα γνωρίσµατα οµαδοποίησης τα οποία πρέπει να παρουσιάζονται επίσης στον SELECT όρο, ώστε η τιµήτης εφαρµογής κάθε συνάρτησης στην οµάδα των πλειάδων να εµφανίζεται µαζί µετηντιµή των πεδίων ορισµού της οµαδοποίησης
Σχεσιακό Μοντέλο Εντολές αλλαγής δεδοµένων στην SQL INSERT Π.χ. Για την εισαγωγή καινούργιων πλειάδων σε µια σχέση INSERT INTO EMPLOYEE VALUE ( RICHARD, K, MARINI, )
Σχεσιακό Μοντέλο Εντολές αλλαγής δεδοµένων στην SQL DELETE Π.χ. Αφαιρείπλειάδεςαπόµια σχέση DELETE FROM EMPLOYEE WHERE LNAME= BROWN
Σχεσιακό Μοντέλο Εντολές αλλαγής δεδοµένων στην SQL UPDATE Π.χ. Για την αλλαγή πεδίων ορισµού επιλεγµένων πλειάδων UPDATE PROJECT SET PLOCATION= BELLAIRE, DNUM=5 WHERE PNUMBER=10
Σχεσιακό Μοντέλο Views in SQL (Όψεις στην SQL) Μια view (όψη) στη SQL είναι ένας πίνακας ο οποίος προέρχεται από άλλους πίνακες εν υπάρχει κατά ανάγκη σε φυσική µορφή Θεωρείται σαν ένας «ιδεατός πίνακας» σε αντίθεση µε τον βασικό πίνακα του οποίου οι πλειάδες αποθηκεύονται στο database εν υπάρχουν περιορισµοί για υπερωτήσεις πάνω στην όψη, αλλά Περιορισµοί για αλλαγές των ιδεατών πλειάδων της όψης
Views in SQL (Όψεις στην SQL) Μπορούµενασκεφτούµετηόψησανένατρόπο ορισµού κάποιου πίνακα που εµείς η άλλοι χρήστες αναφέρονται συχνά Για παράδειγµα, εάν πολύ συχνά ενδιαφερόµαστε για ερωτήσεις που ανακτούν το όνοµαενός υπαλλήλου και τα ονόµατα των projects που αυτός δουλεύει πάνω... Αντί να ορίσουµε µια JOIN των EMPLOYEE, WORKS_ON, PROJECT κάθε φορά, µπορούµε να ορίσουµε έναview η οποία θα καταλήγει σε αυτές τις JOINs
Ορισµός µιας όψης στην SQL CREATE VIEW WORKS_ON1 AS SELECT FNAME, LNAME, PNAME, HOURS FROM EMPLOYEE, PROJECT, WORKS_ON WHERE SSN=ESSN AND PNO=PNUMBER O πιο κάτω ιδεατός πίνακας δηµιουργείται WORKS_ON1(FNAME, LNAME, PNAME, HOURS)
Μπορούµετώραναορίσουµετηνπιοκάτωquery Βρες το όνοµα και επώνυµο όλων των υπαλλήλων που δουλεύουν στο ProductX SELECT PNAME, FNAME, LNAME FROM WORKS_ON1 WHERE PNAME= PRODUCTX