Βάσεις Δεδομένων I (Θ) Ενότητα 9: Yλοποίηση σχεσιακών βάσεων δεδομένων - Σύνθετες εντολές SQL Χ. Σκουρλάς Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Τέλος Ενότητας.
Advertisements

Οργάνωση πληροφοριών Ταξινόμηση (Θ) Ενότητα 9: Qualified Dublin Core Δάφνη Κυριάκη-Μάνεση Τμήμα Βιβλιοθηκονομίας και Συστημάτων Πληροφόρησης Το περιεχόμενο.
Βασικές αρχές ευρετηρίασης
Η ανοσοαποτύπωση ως επιβεβαιωτική μέθοδος
Τριφασικά συμμετρικά δίκτυα σε συνδεσμολογία Υ (1/2)
Περιλήψεις Γιατί; Πως; Τι είναι; Ποιος τις κάνει;
Αυτοματοποιημένη ευρετηρίαση
Διαμόρφωση πεδίων Περιγραφικά πεδία Διαχειριστικά πεδία Δομικά πεδία.
Άσκηση με αντίσταση Είναι ο οποιοσδήποτε τύπος ενεργητικής άσκησης στον οποίο η δυναμική ή στατική μυϊκή σύσπαση βρίσκει αντίσταση από μία εξωτερική.
Γενικά Ανιχνεύει μη αναμενόμενα (όχι του συστήματος ΑΒΟ) αλλοαντισώματα ή/και αυτοαντισώματα σε δείγμα ορού ασθενή. Ελέγχεται ο ορός σε 2-3 δείγματα.
Βάσεις Δεδομένων I (Θ) Ενότητα 11: Ενιαίο παράδειγμα σχεδίασης σχεσιακής βάσης δεδομένων και υλοποίησης με Γλώσσα SQL Χ. Σκουρλάς Τμήμα Μηχανικών Πληροφορικής.
Πολιτική πληροφόρησης Ενότητα 11: Ανακεφαλαίωση Μέρος Ι Δρ Αλέξανδρος Κουλούρης Τμήμα Βιβλιοθηκονομίας & Συστημάτων Πληροφόρησης Ανοικτά Ακαδημαϊκά Μαθήματα.
Η αναγκαιότητα συνθετικής προσέγγισης 1/6
Διάνοιξη πόρων Με ακτινοβολούμενη θερμότητα. Θερμαινόμενα σίδερα.
Έλεγχος Ροής με την Εντολή Επανάληψης FOR 1/9
Καμπυλότητα Φακού P c
Δράση μάσκας Μείωση ερεθισμού και επαναφορά των διασταλμένων πόρων.
Παράγοντες που επηρεάζουν τη δύναμη ενός μυός 1/2
Ορισμός Μάλαξη είναι ένα σύστημα μηχανικών χειρισμών που εκτελούνται στην επιφάνεια του ανθρώπινου σώματος (εδώ στο πρόσωπο), με τα χέρια ή με ειδικά μηχανήματα.
Βάσεις Δεδομένων II (Θ) Ενότητα 6: Τεχνολογία PL/SQL - cursors Χ. Σκουρλάς Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας Το.
Αλκίνια Χαρακτηριστική ομάδα: τριπλός δεσμός.
Περιγραφή Είναι κύματα που εκπέμπονται σε πολύ μεγάλες συχνότητες.
Αλδεΰδες και Κετόνες Δομή και ιδιότητες.
Βάσεις Δεδομένων I (Θ) Ενότητα 8: Εισαγωγή στην υλοποίηση σχεσιακών βάσεων δεδομένων Χ. Σκουρλάς Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα.
Βάσεις Δεδομένων I Ενότητα 8: Εισαγωγή στην υλοποίηση σχεσιακών βάσεων δεδομένων Χ. Σκουρλάς Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας Το περιεχόμενο.
Βάσεις Δεδομένων I Ενότητα 9: Yλοποίηση σχεσιακών βάσεων δεδομένων - Σύνθετες εντολές SQL Χ. Σκουρλάς Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας Το περιεχόμενο.
Σύσταση και Ανάλυση Γλευκών και Οίνων (Θ)
Συστήματα Θεματικής Πρόσβασης (Θ) Ενότητα 5: Θεματική επεξεργασία απεικονιστικών τεκμηρίων Δάφνη Κυριάκη-Μάνεση Τμήμα Βιβλιοθηκονομίας και Συστημάτων Πληροφόρησης.
Μέρη μηχανής φύλλου όφσετ
Υπηρεσίες Πληροφόρησης Ενότητα 7: Είδη υπηρεσιών πληροφόρησης – Εξυπηρέτηση (β’ μέρος) Δρ. Ευγενία Βασιλακάκη Τμήμα Βιβλιοθηκονομίας και Συστημάτων Πληροφόρησης.
Τεχνολογία οφθαλμικών φακών Ι (Ε) Ενότητα 2: Διόρθωση αμετρωπιών με οφθαλμικούς φακούς Θεμιστοκλής Γιαλελής, Οπτικός, MSc, PhD candidate ΕΔΙΠ του τμήματος.
Τεχνολογία οφθαλμικών φακών Ι (Ε) Ενότητα 5: Έγχρωμοι φακοί Θεμιστοκλής Γιαλελής, Οπτικός, MSc, PhD candidate ΕΔΙΠ του τμήματος Οπτικής και Οπτομετρίας.
Περιγραφή Ενότητας Σκοπός του μαθήματος είναι να παρουσιάσει τις απαραίτητες έννοιες ώστε οι φοιτητές να κατανοήσουν την τεχνολογία των βάσεων δεδοµένων.
Σύντομη περιγραφή Μια περιήγηση σε αφυπνιζόμενα προγράμματα (triggers), δηλαδή προγράμματα ενεργοποιούμενα από ενέργειες INSERT, UPDATE, DELETE στη βάση.
Eιδικά θέματα βάσεων χωρικών δεδομένων και θεωρία συστημάτων
Κανόνες Ασφαλείας Εργοταξίων
Περιγραφή Ενότητας Σκοπός του μαθήματος αυτού και κεντρικός σκοπός του μαθήματος των Βάσεων Δεδομένων Ι είναι η παρουσίαση των απαραίτητων εννοιών ώστε.
ΟΙΚΟΝΟΜΙΚΑ ΤΟΥ ΕΛΕΓΧΟΥ ΤΗΣ ΡΥΠΑΝΣΗΣ
Άλλες μορφές νευρώσεων
Επικοινωνιακός Προγραμματισμός Ι
Άσκηση 8 (1 από 3) Προβολές 1. Να επιλέξετε ένα θέμα βασισμένο σε κάποια παράγραφο / υποπαράγραφο του κεφαλαίου 6 των σημειώσεων και να κάνετε μια εργασία.
Υπολογιστική Γεωμετρία και Εφαρμογές στις ΒΧΔ
Ταυτότητα και περίγραμμα μαθήματος
ΠΡΟΤΥΠΟ ΕΛΟΤ EN ISO 3251 Ζύγιση μάζας υγρού μελανιού (m1 g)
Ενότητα 13 Αξιολόγηση μαθήματος και διδάσκοντος από την εφαρμογή της Μονάδας Ολικής Ποιότητας (ΜΟΔΙΠ) του ΤΕΙ Αθήνας Αξιολόγηση του μαθήματος Αξιολόγηση.
Περιγραφή Ενότητας Σκοπός του μαθήματος είναι η παρουσίαση των απαραίτητων εννοιών αλλά και των δηλώσεων SQL ώστε οι φοιτητές να κατανοήσουν σε κάποιο.
Περιγραφή Ενότητας Σκοπός του μαθήματος είναι η παρουσίαση δηλώσεων SQL που περιλαμβάνουν EXIST, ANY, ALL. Χ. Σκουρλάς.
Άσκηση 9 (1 από 2) Ανακαλύψτε στο χάρτη σας μερικά χαρτογραφικά αντικείμενα που να ανήκουν στις παρακάτω κατηγορίες : φυσικά, τεχνητές κατασκευές, αφηρημένα.
Τοπολογικές σχέσεις 1/3 Βρείτε και περιγράψτε τις τοπολογικές σχέσεις σύμφωνα με τους (Pantazis, Donnay 1996) για τα παρακάτω γεω-γραφικά αντικείμενα:
Επικοινωνιακός Προγραμματισμός Ι
Εικαστικές συνθέσεις - Χρώμα στο χώρο
Γενική και Μαθηματική Χαρτογραφία (Ε)
Οργάνωση και Διοίκηση Πρωτοβάθμιας (Θ)
Βάσεις Δεδομένων και web-based Εφαρμογές
Λιθογραφία – Όφσετ (Θ) Ενότητα 8.2: Εκτυπωτική Διαδικασία Μηχανής
Επικοινωνιακός Προγραμματισμός Ι
Αισθητική Σώματος Ι (Ε)
Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας
Ειδικά θέματα βάσεων χωρικών δεδομένων και θεωρία συστημάτων -E
Γενική και Μαθηματική Χαρτογραφία (Ε)
Αισθητική Σώματος Ι (Ε)
Ενότητα 8: Συστήματα Υγείας στην Ευρώπη: Γαλλία
Eιδικά θέματα βάσεων χωρικών δεδομένων και θεωρία συστημάτων -Θ
Συστήματα Θεματικής Πρόσβασης (Θ)
Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας
Γενική και Μαθηματική Χαρτογραφία (Ε)
Ενότητα 1: ……………….. Όνομα Επώνυμο Τμήμα __
Βάσεις Δεδομένων ΙΙ Ενότητα 6: Τεχνολογία PL/SQL - cursors Χ. Σκουρλάς
Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Δυτικής Αττικής
Επικοινωνιακός Προγραμματισμός Ι
Μεταγράφημα παρουσίασης:

Βάσεις Δεδομένων I (Θ) Ενότητα 9: Yλοποίηση σχεσιακών βάσεων δεδομένων - Σύνθετες εντολές SQL Χ. Σκουρλάς Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Περιγραφή Ενότητας Σκοπός του μαθήματος είναι η παρουσίαση των απαραίτητων εννοιών αλλά και των δηλώσεων SQL ώστε οι φοιτητές να κατανοήσουν σε κάποιο βάθος την τεχνολογία υλοποίησης βάσεων δεδομένων. Γίνεται παρουσίαση, με τη βοήθεια παραδειγμάτων µε γλώσσα SQL. Χ. Σκουρλάς 1

Στόχος Ενότητας Κύριος στόχος του μαθήματος είναι να εφοδιάσει τους φοιτητές µε γνώσεις έτσι ώστε να κατανοήσουν σε κάποιο βάθος θέματα υλοποίησης βάσεων με χρήση SQL. Λέξεις κλειδιά: Υλοποίηση σχεσιακής βάσης δεδομένων, SQL, SELECT … SELECT, GROUP BY, GROUP BY … HAVING, JOIN, UNION, INTERSECT, MINUS. 2

Επισκόπηση κάποιων σύνθετων εντολών της γλώσσας SQL

Απλές αναζητήσεις βασιζόμενες σε ένα πίνακα Εντολή SELECT … FROM tablename …; Μία αρκετά γενική μορφή της εντολής αναζήτησης είναι η παρακάτω: SELECT απλές στήλες, τίτλοι στα αποτελέσματα, πράξεις μεταξύ στηλών, συναρτήσεις, τελεστής DISTINCT, χρήση παρενθέσεων FROM όνομα πίνακα WHERE συνθήκη, όπου η συνθήκη ανάλογα και με την εντολη θα περιλαμβάνει παρενθέσεις, τελεστές Boole (AND, OR, NOT), BETWEEN … AND, LIKE, τελεστές σύγκρισης (>, =, <=, <> ), φωλιασμένη αναζήτηση GROUP BY απλές στήλες ή πράξεις μεταξύ στηλών (επιτρέπεται η χρήση παρενθέσεων) HAVING συνθήκη που περιλαμβάνει στήλες που ανήκουν στην υποπρόταση GROUP BY ή άλλες στήλες με ταυτόχρονη χρήση (ομαδοποιητικών, αθροιστικών) συναρτήσεων ORDER BY κριτήρια ταξινόμησης; 4

Μία κάπως σύνθετη εντολή (oracle) SELECT ename, job, sal FROM scoEMP WHERE (job IN ('ANALYST', 'PROGRAMMER', ‘CLERK’)) AND (sal>= 1300 OR sal+NVL(comm,0) >= 1500) AND ename LIKE ‘%ES’ AND hiredate BETWEEN ‘01/01/1970’ AND ‘31/12/1989’ ORDER BY job, ename, sal; 5

Υποαναζήτηση φωλιασμένη σε αναζήτηση SELECT ename, job, sal, deptno FROM scoEMP WHERE sal > (SELECT MIN(sal) FROM scoEMP WHERE deptno IN (10, 20)) ORDER BY deptno, ename; Η υποπρόταση SELECT MIN(sal) FROM scoEMP WHERE deptno IN (10, 20)) έχει ως αποτέλεσμα Επομένως η αρχική εκτελείται ως SELECT ename, job, sal, deptno FROM scoEMP WHERE sal > 800 ORDER BY deptno, ename; ΜΙΝ(SAL) 800 6

Χρήση υποπρότασης GROUP BY 1/2 SELECT deptno, COUNT(*) FROM scoemp GROUP BY DEPTNO; Ο παρακάτω πίνακας διαμερίζεται λόγω της υποπρότασης GROUP BY DEPTNO EmpnoEnameJobMgrHiredateSalComm.Deptno 7369SMITHCLERK790217/12/ ALLENSALESMAN769820/02/ WARDSALESMAN769822/02/ JONESMANAGER783902/04/ MARTINSALESMAN769828/09/ BLAKEMANAGER783901/05/ CLARKMANAGER783909/06/ SCOTTANALYST756619/04/ KINGPRESIDENT 17/11/ TURNERSALESMAN769808/09/ ADAMSCLERK778823/05/ JAMESCLERK769803/12/ FORDANALYST756603/12/ MILLERCLERK778223/01/ BATESANALYST778223/05/071300NULL 7

Χρήση υποπρότασης GROUP BY 2/2 EmpnoEnameJobMgrHiredateSalComm.Deptno 7369SMITHCLERK790217/12/ JONESMANAGER783902/04/ SCOTTANALYST756619/04/ ADAMSCLERK778823/05/ FORDANALYST756603/12/ ALLENSALESMAN769820/02/ WARDSALESMAN769822/02/ MARTINSALESMAN769828/09/ BLAKEMANAGER783901/05/ TURNERSALESMAN769808/09/ JAMESCLERK769803/12/ deptnoCount(*) CLARKMANAGER783909/06/ KINGPRESIDENT 17/11/ MILLERCLERK778223/01/ Ως εξής: Και το αποτέλεσμα είναι: 8

SELECT 1/11 SELECT deptno, AVG(sal), COUNT(*) FROM scoemp GROUP BY DEPTNO; SELECT deptno, AVG(sal), COUNT(*) FROM scoemp GROUP BY DEPTNO HAVING deptno > 20 AND COUNT(*)>1; SELECT deptno, AVG(sal), COUNT(*) FROM scoemp GROUP BY DEPTNO HAVING (deptno > 20) AND (COUNT(*)>1 OR AVG(sal)>1200); 9

SELECT 2/11 SELECT deptno, AVG(sal), COUNT(*) FROM EMPLOYEE GROUP BY DEPTNO ORDER BY DEPTNO DEPTNOAVG(SAL)COUNT(*) , , rows selected. 0,01 seconds SELECT deptno, AVG(sal), COUNT(*) FROM EMPLOYEE GROUP BY DEPTNO HAVING deptno > 20 AND COUNT(*)>1 ORDER BY DEPTNO 10

SELECT 3/11 Statement processed. 0,01 seconds SELECT deptno, AVG(sal), COUNT(*) FROM EMPLOYEE GROUP BY DEPTNO HAVING (deptno > 20) AND (COUNT(*)>1 OR AVG(sal)>1200) DEPTNOAVG(SAL)COUNT(*) , DEPTNOAVG(SAL)COUNT(*) , Statement processed. 0,01 seconds 11

SELECT 4/11 SELECT deptno, AVG(sal), COUNT(*) FROM EMPLOYEE GROUP BY DEPTNO ORDER BY DEPTNO DEPTNOAVG(SAL)COUNT(*) , ,

SELECT 5/11 SELECT deptno, AVG(sal), COUNT(*) FROM EMPLOYEE GROUP BY DEPTNO ORDER BY DEPTNO DEPTNOAVG(SAL)COUNT(*) , , rows selected. 0,02 seconds 13

SELECT 6/11 SELECT deptno, AVG(sal), COUNT(*) FROM EMPLOYEE GROUP BY DEPTNO HAVING COUNT(*)>2 ORDER BY DEPTNO DEPTNOAVG(SAL)COUNT(*) , , rows selected. 0,02 seconds 14

SELECT 7/11 SELECT deptno, AVG(sal), COUNT(*) FROM EMPLOYEE WHERE JOB NOT IN ('ANALYST') GROUP BY DEPTNO HAVING COUNT(*)>2 ORDER BY DEPTNO DEPTNOAVG(SAL)COUNT(*) , , rows selected. 0,01 seconds 15

SELECT 8/11 SELECT deptno, job, AVG(sal), COUNT(*) FROM EMPLOYEE GROUP BY DEPTNO,JOB ORDER BY DEPTNO,JOB DEPTNOJOBAVG(SAL)COUNT(*) 10CLERK MANAGER PRESIDENT ANALYST CLERK MANAGER CLERK MANAGER SALESMAN ANALYST rows selected. 0,01 seconds 16

SELECT 9/11 CREATE TABLE my_employee(empno NUMBER(4) NOT NULL, ename VARCHAR2(10), deptno NUMBER(2)) CREATE TABLE my_department(deptno NUMBER(2) NOT NULL, dname VARCHAR2(14)) INSERT INTO my_department SELECT deptno, dname FROM department 4 row(s) inserted. 0,01 seconds INSERT INTO my_employee SELECT empno, ename, deptno FROM employee 15 row(s) inserted. 0,01 seconds 17

SELECT 10/11 SELECT * FROM my_department DEPTNODNAME 10ACCOUNTING 20RESEARCH 30SALES 40OPERATIONS 4 rows selected. 0,01 seconds SELECT * FROM my_employee EMPNOENAMEDEPTNO 7369SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER BATES- 18

SELECT 11/11 19

Έστω βάση Διοίκησης Προσωπικού αποτελούμενη από τους παρακάτω πίνακες EmpnoEnameJobMgrHiredateSalComm.Deptno 7369SMITHCLERK790217/12/ ALLENSALESMAN769820/02/ WARDSALESMAN769822/02/ JONESMANAGER783902/04/ MARTINSALESMAN769828/09/ BLAKEMANAGER783901/05/ CLARKMANAGER783909/06/ SCOTTANALYST756619/04/ KINGPRESIDENT 17/11/ TURNERSALESMAN769808/09/ ADAMSCLERK778823/05/ JAMESCLERK769803/12/ FORDANALYST756603/12/ MILLERCLERK778223/01/ BATESANALYST756617/11/ DeptnoDnameLoc 10ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON SELECT * FROM emp; SELECT * FROM dept; 20

Αναζητήσεις βασιζόμενες σε περισσότερους από έναν πίνακες Εντολή SELECT … FROM table_1, table_2 … WHERE join …; /* Μπορούμε να γράψουμε απλές εντολές SELECT που θα βασίζονται: Σε δύο πίνακες με χρήση σύνδεσης. Σε τρεις ή περισσότερους πίνακες με χρήση σύνδεσης ανά δύο και χρήση λογικών τελεστών. Σε δύο πίνακες με χρήση εξωτερικής σύνδεσης κ.λπ. */ SELECT empno, ename, job, sal, sal+nvl(comm,0), emp.deptno, dname FROM emp, dept WHERE emp.deptno = dept.deptno AND job IN ('ANALYST', 'PROGRAMMER') ORDER BY ename; 21

Σύνδεση πινάκων EmpnoEnameJobMgrHiredateSalCommemp. Deptno DnameLoc 7369SMITHCLERK790217/12/ RESEARCHDALLAS 7499ALLENSALESMAN769820/02/ SALESCHICAGO 7521WARDSALESMAN769822/02/ SALESCHICAGO 7566JONESMANAGER783902/04/ RESEARCHDALLAS 7654MARTINSALESMAN769828/09/ SALESCHICAGO 7698BLAKEMANAGER783901/05/ SALESCHICAGO 7782CLARKMANAGER783909/06/ ACCOUNTINGNEW YORK 7788SCOTTANALYST756619/04/ RESEARCHDALLAS 7839KINGPRESIDENT 17/11/ ACCOUNTINGNEW YORK 7844TURNERSALESMAN769808/09/ SALESCHICAGO 7876ADAMSCLERK778823/05/ RESEARCHDALLAS 7900JAMESCLERK769803/12/ SALESCHICAGO 7902FORDANALYST756603/12/ RESEARCHDALLAS 7934MILLERCLERK778223/01/ ACCOUNTINGNEW YORK 7998BATESANALYST756617/11/ Σε λογικό επίπεδο γίνεται σύνδεση των δύο πινάκων: Προσοχή η υπάλληλος 7998 δεν συμπεριλαμβάνεται στη σύνδεση. 22

Επιλογή στηλών για προβολή Και να η επιλογή στηλών (ή πράξεων μεταξύ των στηλών) για προβολή EmpnoEnameJobSalSal+NVL(Comm,0)Emp.DeptnoDname 7902FORDANALYST RESEARCH 7788SCOTTANALYST RESEARCH Να και μία παραλλαγή της προηγούμενης εντολής. SELECT empno, ename, job, sal, sal+nvl(comm,0), emp.deptno, dname FROM dept, emp WHERE dept.deptno= emp.deptno AND job IN ('ANALYST', 'PROGRAMMER') ORDER BY ename; 23

Σύνδεση πινάκων Σε λογικό επίπεδο γίνεται σύνδεση των δύο πινάκων: EmpnoEnameJobMgrHiredateSalCom m Emp. Deptno DnameLoc 7782CLARKMANAGER783909/06/ ACCOUNTING NEW YORK 7839KINGPRESIDENT 17/11/ ACCOUNTING NEW YORK 7934MILLERCLERK778223/01/ ACCOUNTING NEW YORK 7369SMITHCLERK790217/12/ RESEARCHDALLAS 7566JONESMANAGER783902/04/ RESEARCHDALLAS 7788SCOTTANALYST756619/04/ RESEARCHDALLAS 7876ADAMSCLERK778823/05/ RESEARCHDALLAS 7902FORDANALYST756603/12/ RESEARCHDALLAS 7499ALLENSALESMAN769820/02/ SALESCHICAGO 7521WARDSALESMAN769822/02/ SALESCHICAGO 7654MARTINSALESMAN769828/09/ SALESCHICAGO 7698BLAKEMANAGER783901/05/ SALESCHICAGO 7844TURNERSALESMAN769808/09/ SALESCHICAGO 7900JAMESCLERK769803/12/ SALESCHICAGO 24

Επιλογή στηλών για προβολή Και να η επιλογή στηλών (ή πράξεων μεταξύ των στηλών) για προβολή 25 EmpnoEnameJobSalSal+NVL(Comm,0)Emp.DeptnoDname 7902FORDANALYST RESEARCH 7788SCOTTANALYST RESEARCH

26

Σύνδεση πινάκων EmpnoEnameJobMgrHiredateSalCommEmp. Deptno DnameLoc 7369SMITHCLERK790217/12/ RESEARCHDALLAS 7499ALLENSALESMAN769820/02/ SALESCHICAGO 7521WARDSALESMAN769822/02/ SALESCHICAGO 7566JONESMANAGER783902/04/ RESEARCHDALLAS 7654MARTINSALESMAN769828/09/ SALESCHICAGO 7698BLAKEMANAGER783901/05/ SALESCHICAGO 7782CLARKMANAGER783909/06/ ACCOUNTINGNEW YORK 7788SCOTTANALYST756619/04/ RESEARCHDALLAS 7839KINGPRESIDENT 17/11/ ACCOUNTINGNEW YORK 7844TURNERSALESMAN769808/09/ SALESCHICAGO 7876ADAMSCLERK778823/05/ RESEARCHDALLAS 7900JAMESCLERK769803/12/ SALESCHICAGO 7902FORDANALYST756603/12/ RESEARCHDALLAS 7934MILLERCLERK778223/01/ ACCOUNTINGNEW YORK 7998BATESANALYST756617/11/ Σε λογικό επίπεδο γίνεται σύνδεση των δύο πινάκων: 27

Αποτελέσματα Προσοχή η υπάλληλος 7998 συμπεριλαμβάνεται στη σύνδεση. Επομένως τα αποτελέσματα είναι: 28 EmpnoEnameJobSalSal+NVL(Comm,0)Emp.DeptnoDname 7998BATESANALYST FORDANALYST RESEARCH 7788SCOTTANALYST RESEARCH

SELECT SELECT ename, job, sal, deptno FROM EMPLOYEE WHERE sal >(SELECT MIN(sal) FROM EMPLOYEE WHERE deptno IN (SELECT deptno FROM department WHERE dname='ACCOUNTING' OR dname='SALES')) ORDER BY deptno, ename ENAMEJOBSALDEPTNO CLARKMANAGER KINGPRESIDENT MILLERCLERK ADAMSCLERK FORDANALYST JONESMANAGER SCOTTANALYST ALLENSALESMAN BLAKEMANAGER MARTINSALESMAN TURNERSALESMAN WARDSALESMAN BATESANALYST

SELECT SELECT empno, ename, job, sal, sal+NVL(comm,0), employee.deptno FROM employee INNER JOIN department ON employee.deptno = department.deptno EMPNOENAMEJOBSALSAL+NVL(COMM,0)DEPTNO 7369SMITHCLERK ALLENSALESMAN WARDSALESMAN JONESMANAGER MARTINSALESMAN BLAKEMANAGER CLARKMANAGER SCOTTANALYST KINGPRESIDENT TURNERSALESMAN ADAMSCLERK JAMESCLERK FORDANALYST MILLERCLERK

SELECT SELECT department.deptno, dname FROM department LEFT JOIN employee ON department.deptno = employee.deptno DEPTNODNAME 10ACCOUNTING 40OPERATIONS 20RESEARCH 30SALES 31

SELECT SELECT empno, ename, job, sal, sal+nvl(comm,0), EMPLOYEE.deptno, dname FROM EMPLOYEE, DEPARTMENT WHERE employee.deptno(+) = department.deptno ORDER BY ename EMPNOENAMEJOBSALSAL+NVL(COMM,0)DEPTNODNAME 7876ADAMSCLERK RESEARCH 7499ALLENSALESMAN SALES 7698BLAKEMANAGER SALES 7782CLARKMANAGER ACCOUNTING 7902FORDANALYST RESEARCH 7900JAMESCLERK950 30SALES 7566JONESMANAGER RESEARCH 7839KINGPRESIDENT ACCOUNTING 7654MARTINSALESMAN SALES 7934MILLERCLERK ACCOUNTING 7788SCOTTANALYST RESEARCH 7369SMITHCLERK800 20RESEARCH 7844TURNERSALESMAN SALES 7521WARDSALESMAN SALES OPERATIONS 32

Υλοποίηση εντολών με SQL Προσοχή! Κάποια προϊόντα δεν υποστηρίζουν όλους τους παρακάτω τελεστές. Για παράδειγμα το προϊόν της mySQL δεν υποστηρίζει INTERSECT, MINUS και επομένως ο ενδιαφερόμενος πρέπει να υλοποιήσει με χρήση SQL τις αντίστοιχες εντολές. Σύνθεση απλών αναζητήσεων με χρήση τελεστών της θεωρίας συνόλων: UNION / INTERSECT / MINUS SELECT empno, ename, job, sal, sal+nvl(comm,0), emp.deptno, dname FROM emp, dept WHERE emp.deptno(+) = dept.deptno UNION (ή INTERSECT ή MINUS) SELECT empno, ename, job, sal, sal+nvl(comm,0), emp.deptno, dname FROM emp, dept WHERE emp.deptno = dept.deptno(+) ORDER BY ename; 33

Υλοποίηση εντολών με SQL SELECT empno, ename, job, sal, sal+nvl(comm,0), EMPLOYEE.deptno, dname FROM EMPLOYEE, DEPARTMENT WHERE EMPLOYEE.deptno(+) = DEPARTMENT.deptno UNION SELECT empno, ename, job, sal, sal+nvl(comm,0), EMPLOYEE.deptno, dname FROM EMPLOYEE, DEPARTMENT WHERE EMPLOYEE.deptno = DEPARTMENT.deptno(+) ORDER BY ename 34

EMPNOENAMEJOBSALSAL+NVL(COMM,0)DEPTNODNAME 7876ADAMSCLERK RESEARCH 7499ALLENSALESMAN SALES 7999BATESANALYST BLAKEMANAGER SALES 7782CLARKMANAGER ACCOUNTING 7902FORDANALYST RESEARCH 7900JAMESCLERK950 30SALES 7566JONESMANAGER RESEARCH 7839KINGPRESIDENT ACCOUNTING 7654MARTINSALESMAN SALES 7934MILLERCLERK ACCOUNTING 7788SCOTTANALYST RESEARCH 7369SMITHCLERK800 20RESEARCH 7844TURNERSALESMAN SALES 7521WARDSALESMAN SALES OPERATIONS 35

SELECT empno, ename, job, sal, sal+nvl(comm,0), EMPLOYEE.deptno, dname FROM EMPLOYEE, DEPARTMENT WHERE EMPLOYEE.deptno(+) = DEPARTMENT.deptno INTERSECT SELECT empno, ename, job, sal, sal+nvl(comm,0), EMPLOYEE.deptno, dname FROM EMPLOYEE, DEPARTMENT WHERE EMPLOYEE.deptno = DEPARTMENT.deptno(+) ORDER BY ename 36

37 EMPNOENAMEJOBSALSAL+NVL(COMM,0)DEPTNODNAME 7876ADAMSCLERK RESEARCH 7499ALLENSALESMAN SALES 7698BLAKEMANAGER SALES 7782CLARKMANAGER ACCOUNTING 7902FORDANALYST RESEARCH 7900JAMESCLERK950 30SALES 7566JONESMANAGER RESEARCH 7839KINGPRESIDENT ACCOUNTING 7654MARTINSALESMAN SALES 7934MILLERCLERK ACCOUNTING 7788SCOTTANALYST RESEARCH 7369SMITHCLERK800 20RESEARCH 7844TURNERSALESMAN SALES 7521WARDSALESMAN SALES

Περιπτώσεις SQL JOINs – παραδείγματα σε mySQL CREATE TABLE DEPT(DEPTNO INT(2) NOT NULL, DNAME VARCHAR(14), LOC VARCHAR(14), PRIMARY KEY(DEPTNO)); CREATE TABLE EMP(EMPNO INT(4) NOT NULL, ENAME VARCHAR(10), JOB VARCHAR(25), HIREDATE DATE, MGR INT(4), SAL FLOAT(7,2), COMM FLOAT(7,2), DEPTNO INT(2), PRIMARY KEY(EMPNO), FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO)); CREATE TABLE PROJ (projno INT(3) NOT NULL, pname VARCHAR(15), budget FLOAT(12,2), PRIMARY KEY(projno)); CREATE TABLE ASSIGN( EMPNO INT(4) NOT NULL, PROJNO INT(3) NOT NULL, PTIME INT(3), PRIMARY KEY(EMPNO,PROJNO), FOREIGN KEY(EMPNO) REFERENCES EMP(EMPNO), FOREIGN KEY(PROJNO) REFERENCES PROJ(PROJNO)); 38

INSERT INTO DEPT(DEPTNO, DNAME, LOC) VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO DEPT(DEPTNO, DNAME, LOC) VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO DEPT(DEPTNO, DNAME, LOC) VALUES (30, 'SALES', 'CHICAGO'); INSERT INTO DEPT(DEPTNO, DNAME, LOC) VALUES (40, 'OPERATIONS', 'BOSTON'); INSERT INTO EMP VALUES (10, 'CODD', 'ANALYST', '1989/01/01', 15, 3000, NULL, 10); INSERT INTO EMP VALUES (15, 'ELMASRI', 'ANALYST', '1995/05/02', 15, 1200, 150, 10); INSERT INTO EMP VALUES (20, 'NAVATHE', 'SALESMAN', '1977/07/07', 20, 2000, NULL, 20); INSERT INTO EMP VALUES (30, 'DATE', 'PROGRAMMER', '2004/05/04', 15, 1800, 200, 10); INSERT INTO EMP VALUES (11, 'CODD', 'ANALYST', '1989/01/01', 15, 2900, NULL, 10); INSERT INTO EMP VALUES (12, 'CODD', 'PROGRAMMER', '1995/05/02', 15, 1200, 150, 10); INSERT INTO EMP VALUES (21, 'CODD', 'SALESMAN', '1977/07/07', 20, 2000, NULL, 10); INSERT INTO EMP VALUES (22, 'CODD', 'PROGRAMMER', '1995/05/02', 15, 1200, 150, 20); INSERT INTO EMP VALUES (23, 'CODD', 'SALESMAN', '1977/07/07', 20, 2000, NULL, 20); INSERT INTO EMP VALUES (77, 'BATES', 'SALESMAN', '1987/07/07', 20, 2000, NULL, NULL); 39

INSERT INTO proj(projno, pname, budget) VALUES(100, 'PAYROLL', ); INSERT INTO proj(projno, pname, budget) VALUES(200, 'PERSONNEL', ); INSERT INTO proj(projno, pname, budget) VALUES(300, 'SALES', ); INSERT INTO assign(empno, projno, ptime) VALUES(10,100, 40); INSERT INTO assign(empno, projno, ptime) VALUES(10, 200, 60); INSERT INTO assign(empno, projno, ptime) VALUES(15, 100, 100); INSERT INTO assign(empno, projno, ptime) VALUES(20, 200, 100); INSERT INTO assign(empno, projno, ptime) VALUES(30, 100, 100); 40

SELECT EMPNO, ENAME, EMP.DEPTNO, DEPT.DNAME, SAL, COMM FROM emp INNER JOIN dept ON emp.deptno=dept.deptno ORDER BY ename; 41

SELECT empno, ename, dept.deptno FROM emp INNER JOIN dept ON emp.deptno=dept.deptno ORDER BY ename; SELECT empno, ename, dept.deptno FROM emp JOIN dept ON emp.deptno=dept.deptno ORDER BY ename; 42

SELECT EMPNO, ENAME, EMP.DEPTNO, DEPT.DNAME, SAL, COMM FROM emp INNER JOIN dept ON emp.deptno=dept.deptno ORDER BY ename; 43

SELECT empno, ename, dept.deptno FROM emp LEFT JOIN dept ON emp.deptno=dept.deptno ORDER BY ename; 44

SELECT empno, ename, dept.deptno FROM emp RIGHT JOIN dept ON emp.deptno=dept.deptno ORDER BY ename; 45

SELECT column_names FROM table1 FULL JOIN table2 ON table1.column_name=table2.column_name; Δεν υποστηρίζεται στο προϊόν mySQL. 46

SELECT empno, ename, dept.deptno FROM emp LEFT JOIN dept ON emp.deptno=dept.deptno UNION SELECT empno, ename, dept.deptno FROM emp RIGHT JOIN dept ON emp.deptno=dept.deptno ORDER BY ename; 47

SELECT ASSIGN.EMPNO, ENAME, DNAME, ASSIGN.PROJNO, PTIME FROM DEPT INNER JOIN EMPON DEPT.DEPTNO=EMP.EMPNO JOIN ASSIGN ON EMP.EMPNO=ASSIGN.EMPNO JOIN PROJ ON ASSIGN.PROJNO=PROJ.PROJNO; 48

Oracle INNER JOIN (or simple join). Oracle LEFT OUTER JOIN (or LEFT JOIN). Oracle RIGHT OUTER JOIN (or RIGHT JOIN). Oracle FULL OUTER JOIN (or FULL JOIN). Oracle/PLSQL: Joins 49

Περιορισμοί - Constraints CREATE TABLE account(accno NUMBER NOT NULL, balance NUMBER, bname CHAR(20), type CHAR(1) CHECK (type=‘D’ OR type=‘C’); Εναλλακτικά ALTER TABLE account ADD CONSTRAINT type _constraint CHECK (type=‘D’ OR type=‘C’); ALTER TABLE account ADD CONSTRAINT PrimaryKey_constraint PRIMARY KY(accno)); ALTER TABLE account ADD (FOREIGN KEY(bname) REFERENCES bank(bname)); ALTER TABLE account MODIFY CONSTRAINT type_constraint CHECK (type=‘D’ OR type=‘C’ OR type=‘S’); ALTER TABLE account DROP CONSTRAINT type_constraint; 50

Μετάπτωση (ORACLE) Συνάρτηση DECODE SELECT dname, DECODE(dname, 'ACCOUNTING', 'ΛΟΓΙΣΤΗΡΙΟ', 'RESEARCH', 'ΕΡΕΥΝΑ', 'SALES', 'ΠΩΛΗΣΕΙΣ', 'OPERATIONS', 'ΥΠΟΣΤΗΡΙΞΗ', 'ΑΛΛΟ ΤΜΗΜΑ' ) FROM Dept; 51

Μετάπτωση (ORACLE) Η συνάρτηση αυτή μπορεί να μας δώσει πολλές λύσεις και σε πολλά προβλήματα αναδιοργάνωσης της βάσης. Ακολουθεί παράδειγμα δημιουργίας νέου πίνακα και αυτόματη μεταγραφή των στοιχείων από τον παλιό. CREATE TABLE New_Dept (….); INSERT INTO New_Dept SELECT deptno, decode(dname....), loc FROM Dept; Διαφέρουν οι παρακάτω εντολές; Γιατί; select SUM(sal) / COUNT(sal) from Emp; select AVG(sal) from Emp; select SUM(sal) / COUNT(*) from Emp; 52

Τέλος Ενότητας Ερωτήσεις;

Σημειώματα

Σημείωμα Αναφοράς Copyright Τεχνολογικό Εκπαιδευτικό Ίδρυμα Αθήνας, Χ. Σκουρλάς Χ. Σκουρλάς. «Βάσεις Δεδομένων I (Θ). Ενότητα 9: Yλοποίηση σχεσιακών βάσεων δεδομένων - Σύνθετες εντολές SQL». Έκδοση: 1.0. Αθήνα Διαθέσιμο από τη δικτυακή διεύθυνση: ocp.teiath.gr.ocp.teiath.gr

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό. Οι όροι χρήσης των έργων τρίτων επεξηγούνται στη διαφάνεια «Επεξήγηση όρων χρήσης έργων τρίτων». Τα έργα για τα οποία έχει ζητηθεί άδεια αναφέρονται στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.

Επεξήγηση όρων χρήσης έργων τρίτων Δεν επιτρέπεται η επαναχρησιμοποίηση του έργου, παρά μόνο εάν ζητηθεί εκ νέου άδεια από το δημιουργό. © διαθέσιμο με άδεια CC-BY διαθέσιμο με άδεια CC-BY-SA διαθέσιμο με άδεια CC-BY-NC-SA διαθέσιμο με άδεια CC-BY-NC Επιτρέπεται η επαναχρησιμοποίηση του έργου και η δημιουργία παραγώγων αυτού με απλή αναφορά του δημιουργού. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού, και διάθεση του έργου ή του παράγωγου αυτού με την ίδια άδεια. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού. Δεν επιτρέπεται η εμπορική χρήση του έργου. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού και διάθεση του έργου ή του παράγωγου αυτού με την ίδια άδεια. Δεν επιτρέπεται η εμπορική χρήση του έργου. διαθέσιμο με άδεια CC-BY-ND Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού. Δεν επιτρέπεται η δημιουργία παραγώγων του έργου. διαθέσιμο με άδεια CC-BY-NC-ND Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού. Δεν επιτρέπεται η εμπορική χρήση του έργου και η δημιουργία παραγώγων του. διαθέσιμο με άδεια CC0 Public Domain διαθέσιμο ως κοινό κτήμα Επιτρέπεται η επαναχρησιμοποίηση του έργου, η δημιουργία παραγώγων αυτού και η εμπορική του χρήση, χωρίς αναφορά του δημιουργού. χωρίς σήμανσηΣυνήθως δεν επιτρέπεται η επαναχρησιμοποίηση του έργου.

Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει:  το Σημείωμα Αναφοράς  το Σημείωμα Αδειοδότησης  τη δήλωση Διατήρησης Σημειωμάτων  το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους.

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Αθηνών» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.