Διάλεξη 14: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) II. Διδάσκων: Παναγιώτης Ανδρέου

Σχετικά έγγραφα
Διάλεξη 13: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) I. Διδάσκων: Παναγιώτης Ανδρέου

Lecture 16: SQL DML III

Βάσεις Δεδομένων Προχωρημένα Ερωτήματα SQL

Περιεχόμενα. Βάσεις Δεδομένων Προχωρημένα Ερωτήματα SQL. Συνένωση Σχέσεων στην SQL2 (3) Συνένωση Σχέσεων στην SQL2. (Join Relations Feature in SQL)

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 10: Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός (Relational Algebra/Calculus) ΙI

Βάσεις δεδομένων. (7 ο μάθημα) Ηρακλής Βαρλάμης

Lecture 14: SQL DML I

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples ΙΙ Ξένου Ρουμπίνη

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ Relational Model. SQL Μαθ. #11

SQL Data Manipulation Language

Βάσεις Δεδομένων Σύνθετα SQL queries

Βάσεις δεδομένων. (6 ο μάθημα) Ηρακλής Βαρλάμης

Βάσεις Δεδομένων Σύνθετα SQL queries. Ψευδώνυμα (Aliases) (2) Ψευδώνυμα (Aliases) (1) Ασάφεια και Πλήρη Ονόματα. Ερώτημα χωρίς τον όρο WHERE (1)

Διάλεξη 16: SQL DML IV, SQL DCL, SQL TCL. Διδάσκων: Παναγιώτης Ανδρέου

Βάσεις Δεδομένων (Databases)

Βάσεις Δεδομένων (Databases)

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 6: SQL (Συζεύξεις, Εμφώλευση, Ομαδοποίηση) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Βάσεις Δεδομένων. Εργαστήριο ΙV. Τμήμα Πληροφορικής ΑΠΘ

Βάσεις Δεδομένων (Databases)


Αρχεία και Βάσεις Δεδομένων

Βάσεις Δεδομένων. Σχεσιακό Μοντέλο Δεδομένων. Βασίλειος Βεσκούκης Ορισμός Βάσης Δεδομένων Δομή Περιορισμοί

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples Ξένου Ρουμπίνη

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Επιλέγει όλες τις πλειάδες, από μια σχέση R, που ικανοποιούν τη συνθήκη επιλογής.

BΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΕΞΕΤΑΣΗ ΦΕΒΡΟΥΑΡΙΟΥ 2005

S Q Q L L -- SQL (Structured Query Language) select insert update delete 2.47

Βάσεις δεδομένων. (8 ο μάθημα) Ηρακλής Βαρλάμης


Η SQL ως γλώσσα ερωτημάτων. Υπενθυμίζουμε: Σχέση = Πίνακας Πλειάδα = Εγγραφή = Γραμμή (Πίνακα) Πεδίο = Γνώρισμα (Σχέσης) = Στήλη (Πίνακα)

Lecture 17: SQL DML IV

Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός. Σχεσιακή Άλγεβρα Σχεσιακός Λογισμός

Διάλεξη 15: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) III. Διδάσκων: Παναγιώτης Ανδρέου

Οργάνωση Βάσεων Βιοϊατρικών Δεδομένων Εξόρυξη Γνώσης Βιοϊατρικών Δεδομένων. Σεμινάριο 7: Αλγόριθμοι για επεξεργασία ερωτήσεων και βελτιστοποίηση

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

GROUP BY, HAVING, COUNT, MIN, MAX, SUM, AVG, ROLLUP.

Ηλεκτρονικοί Υπολογιστές II

Τμήμα Διοίκησης Επιχειρήσεων

Εισαγωγή στη Σχεσιακή Άλγεβρα

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Τμήμα Πληροφορικής ΑΠΘ

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

Διάλεξη 07: Σχεσιακό Μοντέλο II (Relational Data Model) Διδάσκων: Παναγιώτης Ανδρέου

Εισαγωγή στις Βάσεις Δεδομζνων II

Βάσεις Δεδομένων (Databases)

Διάλεξη 08: Αντιστοίχηση Εννοιολογικού σε Σχεσιακό Μοντέλο (ER/EER to Relational) Διδάσκων: Παναγιώτης Ανδρέου

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ (Relational Model) Μαθ. #10

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ.

Επεξεργασία Ερωτήσεων

Lecture 8: RM I + RA I

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Κεφάλαιο 4. Η Γλώσσα SQL και Σχεσιακός Λογισµός. Ι.Β. Σχεσιακός Λογισµός και η Γλώσσα SQL Σελίδα 2.46

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Σχεσιακή Άλγεβρα Relational Algebra

Εισαγωγή στην. Εισαγωγή Σ Β. Αρχεία ευρετηρίου Κατάλογος. συστήματος. Αρχεία δεδομένων

Σχεδιασμός Βάσεων Δεδομένων

Kεφ.2: Σχεσιακό Μοντέλο (επανάληψη) Κεφ.6.1: Σχεσιακή Άλγεβρα

Εισαγωγή στις Βάσεις Δεδομζνων II

Lecture 15: SQL DML II

Επεξεργασία Ερωτήσεων

Επεξεργασία Ερωτήσεων

Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Data Cube. Μ.Χατζόπουλος 1

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών. ΗΥ-460 Συστήµατα ιαχείρισης Βάσεων εδοµένων ηµήτρης Πλεξουσάκης Βασίλης Χριστοφίδης

Βάσεις Δεδομένων (Databases)

Βάσεις δεδομένων. (5 ο μάθημα) Ηρακλής Βαρλάμης


ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 7β: SQL (Πρακτική Εξάσκηση 1) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 12: SQL Data Definition Language. Διδάσκων: Παναγιώτης Ανδρέου

Σχεσιακή Άλγεβρα Σχεδιασμός Βάσεων Δεδομένων

DELETE, UPDATE, INSERT

SQL: Συναρτήσεις Συνάθροισης

Κεφάλαιο 9 Συναθροίσεις

Βάσεις Δεδομένων Ευαγγελία Πιτουρά 2. Εννοιολογικός Σχεδιασμός Βάσεων εδομένων (με χρήση του Μοντέλου Οντοτήτων/Συσχετίσεων)

PROJECT ΕΡΓΑΣΤΗΡΙΩΝ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Ι. Τμήμα Μηχανικών Πληροφορικής Τ.Ε.

Παράδειγμα Select Introduction Group By Join Aliases.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (3)

Το εσωτερικό ενός Σ Β

Κεφάλαιο 3. Ερωτήματα SQL

Ηλεκτρονικοί Υπολογιστές II

Η αναλυτική περιγραφή της γλώσσας SQL αποτελεί αντικείµενο των σελίδων που ακολουθούν. Η ΓΛΩΣΣΑ ΟΡΙΣΜΟΥ Ε ΟΜΕΝΩΝ

SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Department of Computer Science University of Cyprus. EPL342 Databases. Lecture 10: RA IΙ. RA Advanced + Examples

DELETE, UPDATE, INSERT.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Ηλεκτρονικοί Υπολογιστές II

Διδάσκων: Παναγιώτης Ανδρέου

Σύνολα Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 5: SQL (Απλή SELECT) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι


Lecture 21: Functional Dependencies and Normalization

Βάσεις δεδομένων. Ηρακλής Βαρλάμης

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο. Εργαστηριακή Άσκηση 4 7/02/2012

#5. Σχεσιακό Μοντέλο

Επεξεργασία Ερωτήσεων: Επανάληψη και Ασκήσεις

SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Certified Data Base Designer (CDBD)

Transcript:

Διάλεξη 14: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) II Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: Συνενώσεις με Καρτεσιανό Γινόμενο και JOIN Συναθροιστικές Συναρτήσεις Ομαδοποίηση(GROUP BY, HAVING) Διδάσκων: Παναγιώτης Ανδρέου EPL342: Databases Panayiotis Andreou 2013 1

Καρτεσιανό Γινόμενο και Συνενώσεις σε SQL Παράδειγμα με δύο ή περισσότερους πίνακες: Αναφορά με Ταυτότητα, Όνομα Υπαλλήλου και όνομα τμήματος του υπαλλήλου Οι πίνακες (σχέσεις) συνενώνονται βάση των ξένων κλειδιών D: DEPARTMENT DNO DNAME E: EMPLOYEE E: EMPLOYEE SSN ENAME DOB GENDER DNO SSN ENAME DOB GENDER DNUMBER Σχεσιακή Άλγεβρα: π SSN,ENAME,DNAME σ E.DNO=D.DNO (EMPLOYEE x DEPARMENT) π SSN,ENAME,DNAME (EMPLOYEE E.DNO=D.DNO DEPARMENT) π SSN,ENAME,DNAME (EMPLOYEE *DEPARMENT) EPL342: Databases Panayiotis Andreou 2013 2

Καρτεσιανό Γινόμενο και Συνενώσεις σε SQL Οι συνενώσεις σε SQL μπορούν να γίνουν με τους τελεστές: Καρτεσιανό Γινόμενο και JOIN Το αποτέλεσμα είναι μία καινούρια όψη η οποία συμπεριλαμβάνει όλα τα γνωρίσματα των σχέσεων Καρτεσιανό Γινόμενο,/CROSS JOIN: ΣΑ: SQL: Συνένωση JOIN: ΣΑ: SQL: π SSN,ENAME,DNAME σ E.DNO=D.DNO (EMPLOYEE x DEPARMENT) SELECT SSN,ENAME,DNAME FROM EMPLOYEE, DEPARMENT ( ή EMPLOYEE CROSS JOIN DEPARMENT) WHERE EMPLOYEE.DNO=DEPARTMENT.DNO π SSN,ENAME,DNAME (EMPLOYEE E.DNO=D.DNO DEPARMENT) SELECT SSN,ENAME,DNAME FROM EMPLOYEE JOIN DEPARMENT ( ή EMPLOYEE INNER JOIN DEPARMENT) ON EMPLOYEE.DNO=DEPARTMENT.DNO EPL342: Databases Panayiotis Andreou 2013 3

Αντιστοίχηση Σχεσιακής Άλγεβρας με SQL DML A R B a 1 b 2 c 4 S B C 1 x 2 y 3 z R.. S A B C a 1 x b 2 y Συνένωση Θ/ Θ Join ( ) SELECT R.A, R.B, S.C FROM R JOIN S ON θ θ: R.B=S.B SELECT R.A, R.B, S.C FROM R, S (CROSS JOIN) SELECT A,B,C FROM R * S SELECT R.A, R.B FROM R JOIN S ON θ? FROM R LEFT JOIN S ON θ SELECT R.A, R.B, S.C FROM R FULL OUTER JOIN S ON θ EPL342: Databases Panayiotis Andreou 2013 4

Διφορούμενα Ονόματα Γνωρισμάτων Στις συνενώσεις, υπάρχει μεγάλη πιθανότητα κάποια ονόματα μεταξύ διαφορετικών σχέσεων να είναι όμοια (Διφορούμενα Ονόματα Γνωρισμάτων) Π.χ., Employee(ssn, name), Department(dno, name), Project(pid, name) Για να αντιμετωπίσουμε αυτό το πρόβλημα, μπορούμε: Να αναφερόμαστε με το όνομα του πίνακα σαν πρόθεμα Π.χ., Employee.name, Department.name, Project.name Να χρησιμοποιούμε μοναδικά ονόματα για όλα τα γνωρίσματα Πρακτικά πολύ δύσκολο όταν υπάρχουν πολλοί πίνακες Να χρησιμοποιούμε συγκεκριμένη ονοματολογία Π.χ., <Όνομα Πίνακα>_<Όνομα Γνωρίσματος> Για παράδειγμα: Department(dno, Department_name), Project(pid, Project_name) Να χρησιμοποιούμε τη μετονομασία (AS) EPL342: Databases Panayiotis Andreou 2013 5

Διφορούμενα Ονόματα Γνωρισμάτων Παράδειγμα μετονομασίας SELECT FROM WHERE E.SSN, E.ENAME, D.DNAME EMPLOYEE [AS] E, DEPARMENT [AS] D E.DNO=D.DNO Όπως αναφέραμε, η μετονομασία είναι ο μόνος τρόπος να αναφερθούμε στον ίδιο πίνακα 2 ή περισσότερες φορές SELECT E.SSN, E.ENAME, S.SSN, S.ENAME FROM EMPLOYEE E, EMPLOYEE S WHERE E.SUPERSSN=S.SSN E: EMPLOYEE SSN ENAME SUPERSSN Ακόμη και εάν δεν υπάρχουν διφορούμενα ονόματα, είναι κάλο να χρησιμοποιείται το AS για πιο ευανάγνωστο κώδικα. Για μετονομασία γνωρισμάτων (όχι σε TSQL) FROM EMPLOYEE AS E(EID, ENAME, EDNO) EPL342: Databases Panayiotis Andreou 2013 6

Παράδειγμα με 3 Πίνακες E: EMPLOYEE SSN ENAME DOB GENDER DNO P: PROJECT PNO PNAME W: WORKS_ON SSN PNO HOURS Καρτεσιανό Γινόμενο SELECT E.SSN, E.ENAME, D.DNAME FROM EMPLOYEE E, WORKS_ON W, PROJECT P WHERE E.SSN=W.SSN AND P.PNO=W.PNO Συνένωση JOIN SELECT E.SSN, E.ENAME, D.DNAME FROM EMPLOYEE E INNER JOIN WORKS_ON W ON E.SSN=W.SSN INNER JOIN PROJECT P ON P.PNO=W.PNO EPL342: Databases Panayiotis Andreou 2013 7

Καρτεσιανό Γινόμενο vs. JOIN Το Καρτεσιανό Γινόμενο με επιλογή (WHERE Θ) είναι ισοδύναμο με το JOIN ON Θ Tο JOIN έχει το πλεονέκτημα ότι δεν περιπλέκει την συνθήκη συνένωσης με την συνθήκη της επερώτησης Π.χ., Αναφορά με υπαλλήλους που δουλεύουν για το Research Department SELECT E.SSN, E.ENAME, D.DNAME FROM EMPLOYEE E, DEPARMENT D WHERE E.DNO=D.DNO AND D.DNAME= Research SELECT SSN,ENAME,DNAME FROM EMPLOYEE E JOIN DEPARMENT D ON E.DNO=D.DNO WHERE D.DNAME= Research EPL342: Databases Panayiotis Andreou 2013 8

Φυσική Συνένωση (NATURAL JOIN) Το ΝΑΤURAL JOIN (σε ANSI SQL, π.χ., υλοποιείται σε PostgreSQL αλλά όχι σε Τ SQL) υλοποιεί την συνένωση με τέτοιο τρόπο ώστε η συνθήκη συνένωσης να είναι τα κοινά γνωρίσματα. Παράδειγμα Φυσικής Συνένωσης NATURAL JOIN: ΣΑ: π SSN,ENAME,DNAME (EMPLOYEE *DEPARMENT) SQL: SELECT SSN,ENAME,DNAME FROM EMPLOYEE NATURAL JOIN DEPARMENT Δεν συμπεριλαμβάνει τα κοινά γνωρίσματα στην όψη Εάν δεν υπάρχει κοινά διατυπωμένο γνώρισμα μπορεί να προηγηθεί μετονομασία: Π.χ., SELECT * FROM EMPLOYEE NATURAL JOIN DEPARMENT AS DEPARMENT(DNUMBER, DNAME) EPL342: Databases Panayiotis Andreou 2013 9

Ημι Συνένωση (SemiJoin) Όμοιο με JOIN αλλά επιστρέφει μόνο τα γνωρίσματα του πρώτου πίνακα Υλοποιείται με το JOIN Παράδειγμα Ημι Συνένωσης (SEMI JOIN): ΣΑ: π SSN,ENAME,DNAME (P P.DID=D.DNO D) SQL: SELECT PID, NAME, DID FROM P JOIN D ON P.DID=D.DNO PERSON (P) PID PNAME DID 1 Andreas 1 2 Kostas 1 3 Maria 1 4 Eleni 2 5 Nikos 2 6 Eleni 3 DEPARTMENT (D) DNO DNAME 1 ACC 2 HR PID PNAME DID 1 Andreas 1 2 Kostas 1 3 Maria 1 4 Eleni 2 5 Nikos 2 EPL342: Databases Panayiotis Andreou 2013 10

Αριστερή/Δεξιά Συνένωση (Left Join) Παρόμοιο με JOIN με τη διαφορά ότι επιστρέφει και τις πλειάδες που δεν ικανοποιούν την συνθήκη συνένωσης από τον πρώτο πίνακα (αριστερό πίνακα) Τα γνωρίσματα πλειάδων που δεν ικανοποιούν την συνθήκη έχουν τιμή null Παράδειγμα Αριστερής Συνένωσης: ΣΑ: π SSN,ENAME,DNAME (P P.DID=D.DNO D) SQL: SELECT PID, NAME, DID FROM P LEFT JOIN D ON P.DID=D.DNO EPL342: Databases Panayiotis Andreou 2013 11

Αριστερή/Δεξιά Συνένωση (Left Join) Η δεξιά συνένωση είναι συμμετρική με την αριστερή P LEFT JOIN D ON P.DID=D.DNO D RIGHT JOIN P ON P.DID=D.DNO Προσοχή στις περιπτώσεις με περισσότερους από 2 πίνακες Η αριστερή συνένωση πρέπει να διαδοθεί ανάλογα Παράδειγμα: Τι θα επιστρέψει το πιο κάτω; SELECT PID, NAME, DID FROM P LEFT JOIN D ON P.DID=D.DNO INNER JOIN D ON D.CID=C.CID LEFT JOIN D ON D.CID=C.CID EPL342: Databases Panayiotis Andreou 2013 12

Ολική Εξωτερική Συνένωση (Full Outer Join) Παρόμοιο με LEFT JOIN με τη διαφορά ότι επιστρέφει και τις πλειάδες που δεν ικανοποιούν την συνθήκη συνένωσης και από τους δύο πίνακες Παράδειγμα Αριστερής Συνένωσης: ΣΑ: π SSN,ENAME,DNAME (P P.DID=D.DNO D) SQL: SELECT PID, NAME, DID FROM P FULL OUTER JOIN D ON P.DID=D.DNO PERSON PID PNAME DID 1 Andreas 1 2 Kostas 1 3 Maria 1 4 Eleni 2 5 Nikos 2 6 Eleni 3 DEPARTMENT DNO DNAME 1 ACC 2 HR 4 IT PID PNAME DID DNO DNAME 1 Andreas 1 1 ACC 2 Kostas 1 1 ACC 3 Maria 1 1 ACC 4 Eleni 2 2 HR 5 Nikos 2 2 HR 6 Eleni 3 null null null null null 4 IT EPL342: Databases Panayiotis Andreou 2013 13

Αντι Συνένωση (AntiJoin) Πως θα εκφράσουμε τον τελεστή AntiJoin της σχεσιακής άλγεβρας σε SQL; Θυμηθείτε ότι R S: Νέα σχέση η οποία συνενώνει τις R και S και περιλαμβάνει μόνο γνωρίσματα που ανήκουν στην R και όλες τις πλειάδες που ΔΕΝ ικανοποιούν την συνθήκη Θ PERSON PID NAME DID 1 Andreas 1 2 Kostas 1 3 Maria 1 4 Eleni 2 5 Nikos 2 6 Eleni 3 DEPARTMENT DNO DNAME 1 ACC 2 HR PERSON_DEPARTMENT PID NAME DID 6 Eleni 3 EPL342: Databases Panayiotis Andreou 2013 14

Συναθροιστικές Συναρτήσεις Παρόμοια με την ΣΑ, η SQL επιτρέπει την χρήση συναθροιστικών συναρτήσεων για την ανάκτηση χρήσιμων στατιστικών Παραδείγματα συναρτήσεων: COUNT, SUM, MAX, MIN, και AVG Μπορούν να δηλωθούν με DISTINCT για να επιστρέψουν τις μοναδικές τιμές Επερώτηση: Βρες τον μέγιστο μισθό από τους υπαλλήλους SELECT MAX(SALARY) FROM EMPLOYEE Επερώτηση: Βρες πόσοι είναι οι υπάλληλοι SELECT COUNT(*) FROM EMPLOYEE Επερώτηση: Βρες τα μοναδικά φύλα από τους υπαλλήλους SELECT COUNT(DISTINCT GENDER) FROM EMPLOYEE EPL342: Databases Panayiotis Andreou 2013 15

Συναθροιστικές Συναρτήσεις Οι συναθροιστικές συναρτήσεις μπορούν να χρησιμοποιηθούν με τις συνενώσεις ή καρτεσιανό E: EMPLOYEE SSN ENAME DOB GENDER DNO SALARY 1 Andreas 1/1/80 M 1 1000 2 Kostas 1/1/85 M 1 1500 3 Maria 4/3/83 F 1 2000 4 Eleni 6/7/85 F 2 2500 D: DEPARTMENT DNO DNAME 1 ACC 2 HR 3 IT 5 Victoria 27/2/84 F 3 3000 Επερώτηση: Βρες τον μέγιστο μισθό από τους υπαλλήλους του τμήματος ACC SELECT MAX(SALARY) AS MSAL FROM Ε JOIN D ON E.DNO=D.DNO WHERE D.DNAME= ACC SELECT MAX(SALARY) FROM Ε, D MSAL WHERE E.DNO=D.DNO AND D.DNAME= ACC 2000 EPL342: Databases Panayiotis Andreou 2013 16

Ομαδοποίηση Η ομαδοποίηση, συνεργάζεται (συνήθως) με συναθροιστικές συναρτήσεις για την παραγωγή στατιστικών ανά υποομάδες Επιτυγχάνεται μέσω της δήλωσης GROUP BY E: EMPLOYEE SSN ENAME DOB GENDER DNO SALARY 1 Andreas 1/1/80 M 1 1000 2 Kostas 1/1/85 M 1 1500 3 Maria 4/3/83 F 1 2000 4 Eleni 6/7/85 F 2 2500 5 Victoria 27/2/84 F 3 3000 D: DEPARTMENT DNO DNAME 1 ACC 2 HR 3 IT Επερώτηση: Βρες τον μέγιστο μισθό υπαλλήλων για το κάθε τμήμα SELECT D.DNAME, MAX(E.SALARY) AS MSAL DNAME MSAL FROM ΕJOIN D ON E.DNO=D.DNO 1 2000 GROUP BY D.DNAME 2 2500 3 3000 EPL342: Databases Panayiotis Andreou 2013 17

Επιλογή μετά από Ομαδοποίηση Η δήλωση HAVING, χρησιμοποιείται όταν θέλουμε να επιλέξουμε ένα υποσύνολο ενός ομαδοποιημένου αποτελέσματος βάσει συνθήκης. Π.χ., SELECT D.DNAME, MAX(E.SALARY) AS MSAL FROM ΕJOIN D ON E.DNO=D.DNO DNAME MSAL GROUP BY D.DNAME 1 2000 HAVING MAX(E.SALARY) > 2000 2 2500 Το HAVING έχει αντίστοιχη λειτουργία με το WHERE, μόνο που η συνθήκη επιλογής είναι πάνω σε ομάδες παρά σε επί μέρους πλειάδες. Τα γνωρίσματα που εμφανίζονται στο HAVING είναι είτε συναθροιστικές συναρτήσεις (π.χ., COUNT, SUM) ή γνωρίσματα που εμφανίζονται στη λίστα του GROUP BY Π.χ., HAVING AVG(E.SALARY)> 1500, HAVING D.DNAME<3 3 3000 EPL342: Databases Panayiotis Andreou 2013 18

Εννοιολογική Εκτέλεση Ενός SQL Block Ας δούμε λίγο καλύτερα με ποια σειρά εκτελείται ένα SQL μπλοκ σε ένα αφαιρετικό (εννοιολογικό) επίπεδο. Η περιγραφή αυτή είναι σε εννοιολογικό επίπεδο, επομένως το πλάνο εκτέλεσης (query plan) της επερώτησης στα παραδείγματα ΔΕΝ θα είναι βέλτιστο. Η πραγματικό πλάνο εκτέλεσης εναπόκειται αποκλειστικά στην βάση δεδομένων. Αυτό διεκπεραιώνεται από τον βελτιστοποιητή επερωτήσεων (query optimizer) ο οποίος έχει μεγάλη πολυπλοκότητα. Μια υλοποίηση του σε εμπορική βάση λέγεται ότι πήρε 50 ανθρωποχρόνια εργασίας. Θεωρούμε ότι η βάση μας είναι ένας ή περισσότεροι πίνακες αποθηκευμένοι στον δίσκο χωρίς άλλες δομές δεδομένων (ευρετήρια αναζήτησης, κτλ). Η περιγραφή αυτή θα μας επιτρέψει να καταλάβουμε καλύτερα τι παράγεται από μια επερώτηση. EPL342: Databases Panayiotis Andreou 2013 19

Εννοιολογική Εκτέλεση Ενός SQL Block Ένα μπλοκ επερώτησης SQL αποτελείται από έξι όρους (clauses) οι οποίοι εκτελούνται (σε λογικό επίπεδο) όπως φαίνεται πιο κάτω: 6) SELECT <Attribute(s) AS Alias(s)> 3) Αgg1 AS Alias, AggN as Alias 1) FROM <table(s)> 2) [WHERE <condition>] 3) [GROUP BY <grouping attribute(s)>] 4) [HAVING <group condition>] 5) [ORDER BY <attribute list>] Ένα Query εκτελείται εννοιολογικά με την ακόλουθη σειρά: 1. FROM: Συνένωσε (ή Καρτεσιανό Γινόμενο) τους πίνακες του table list, π.χ., FROM Employee E, Department D 2. WHERE: Διάσχισε Γραμμικά τον Πίνακα που παράγεται στο βήμα 1 αποτιμώντας την έκφραση <condition> σε κάθε πλειάδα. π.χ., WHERE E.Dno=D.Dnumber and D.Dname= Research EPL342: Databases Panayiotis Andreou 2013 20

Εννοιολογική Εκτέλεση Ενός SQL Block Έστω το ενδιάμεσο αποτέλεσμα: TEMP1(DNO, SSN, Salary) 3. GROUP BY: Διάσχισε γραμμικά το TEMP1, ομαδοποιώντας τα αποτελέσματα βάσει του grouping attribute(s) και υπολογίζοντας ανά ομάδα τις αιτούμενες συναθρ. Πράξεις που έχουν δηλωθεί στο SELECT και HAVING: MAX, MIN, COUNT, SUM: Υλοποιούνται με μια μεταβλητή ανά ομάδα AVG = SUM / COUNT π.χ., GROUP BY DNO Έστω το ενδιάμεσο αποτέλεσμα: TEMP2(DNO, AVG(salary)) 4. HAVING: Διάσχισε TEMP2 εφαρμόζοντας το <group condition> πάνω σε κάθε πλειάδα, π.χ., HAVING AVG(Salary)>3000 5. ORDER BY: Ταξινόμησε τα αποτελέσματα βάσει της συνθήκης π.χ., ORDER BY AVG(Salary) 6. SELECT: Πρόβαλε τα αιτούμενα γνωρίσματα (από το TEMP2) εφαρμόζοντας τα σχετικά aliases στα απλά γνωρίσματα. π.χ., SELECT DNO (τα γνωρίσματα του ORDER BY δεν χρειάζεται να εμφανίζονται στο SELECT) EPL342: Databases Panayiotis Andreou 2013 21

Ομαδοποίηση Επερώτηση: Βρες τον αριθμό υπαλλήλων και μέσο μισθό ανά τμήμα SELECT DNO, COUNT (*), AVG (SALARY) FROM EMPLOYEE GROUP BY DNO Εννοιολογική Εκτέλεση Επερώτησης: Η βάση εκτελεί μια γραμμική διέλευση του πίνακα Employee. Για κάθε πλειάδα, βρίσκει το DNO της πλειάδας, βάσει του οποίου αυξάνει τους ακόλουθους μετρητές: A. TUPLE_COUNT[DNO], B. SALARY_SUM[DNO], C. SALARY_COUNT_NONULLS[DNO], Στο τέλος τυπώνει για κάθε DNO τα ακόλουθα: DΝΟ,A, B/C EPL342: Databases Panayiotis Andreou 2013 22

Επισημάνσεις Η λίστα με τα γνωρίσματα που υπάρχουν στο SELECT ΠΡΕΠΕΙ να υπάρχει στο GROUP BY αλλά όχι το αντίθετο. Π.χ., SELECT DNO, GENDER, AVG(SALARY) FROM E GROUP BY DNO ΛΑΘΟΣ Γιατί; Διότι όπως είδαμε στην εκτέλεση ενός SQL Block το SELECT εκτελείται τελευταίο και το GENDER δεν θα υπάρχει στις μεταβλητές ομαδοποίησης Οι συναθροιστικές πράξεις μπορεί να χρησιμοποιηθούν για επιλογή (δηλ., HAVING) μόνο και να μην επιστραφούν στη λίστα του SELECT Εάν υπάρχει NULL στο γνώρισμα ομαδοποίησης τότε τα ομαδοποιημένα αποτελέσματα εμφανίζονται σε μια νέα επιπλέον ομάδα. Π.χ., Ε(ID,CITY): (1,A), (2,B), (3,B), (4,NULL) SELECT CITY, COUNT(ID) (NULL, 0), (A, 1), (B, 2) EPL342: Databases Panayiotis Andreou 2013 23

Επισημάνσεις Συναθροιστικές Συναρτήσεις SUM, AVG (SUM/COUNT), MAX, MIN μπορούν να εφαρμοστούν σε σύνολα ή πολυσύνολα (σχέσεις με μοναδικές έγγραφες ή μη) αριθμητικών τιμών. Οι ΜΑΧ, ΜΙΝ εφαρμόζονται και σε αλφαριθμητικά δεδομένα (π.χ., a < b ) ToCOUNT σε TSQL εφαρμόζεται στα πάντα εκτός από text, image, ή ntext. Οι συναθροιστικές συναρτήσεις ορίζονται πάντοτε στο όρο SELECT και στο HAVING Π.χ., SELECT * FROM A WHERE salary=max(salary) ΛΑΘΟΣ Θυμηθείτε ότι και στην ΣΑ δεν επιτρεπόταν να συγκρίνουμε τιμή με σύνολο EPL342: Databases Panayiotis Andreou 2013 24

Επισημάνσεις (συν.) Οι συναθροιστικές συναρτήσεις ΔΕΝ αγνοούν τα διπλότυπα Π.χ., r(r)=5, 3 μοναδικές πόλεις COUNT(CITY)=5 Για να αγνοηθούν τα διπλότυπα χρησιμοποιείται το DISTINCT COUNT(DISTINCT CITY)=3 Οι συναθροιστικές συναρτήσεις αγνοούν τα NULL Π.χ., r(r)=5, 4 πόλεις, 1 null COUNT(CITY)=4 Πρέπει να είμαστε προσεκτικοί για τα αποτελέσματα που χρειαζόμαστε Ο τελεστής * δηλώνει πως θα ληφθούν υπόψη όλα τα γνωρίσματα στον υπολογισμό μιας συναθροιστικής συνάρτησης Συνεπώς το COUNT(*) μετράει γραμμές, δηλ., συνδυασμό όλων των γνωρισμάτων που συμμετέχουν (δεν παίζει ρόλο αν κάποια έχουν την τιμή NULL) Δεν υποστηρίζεται το COUNT(DISTINCT *) EPL342: Databases Panayiotis Andreou 2013 25

Ασκήσεις Δώστε τα αποτελέσματα για όλα τα είδη JOIN στα πιο κάτω δεδομένα (P.CID=C.CID) PRODUCTS (P) PID PNAME CID 1 PA 1 2 PB 1 3 PC 1 4 PD 2 5 PE 2 6 PF 3 7 PG <NULL> CATEGORIES (C) CID CNAME 1 CA 2 CB 3 CC 4 CD Δώστε τα προϊόντα τα οποία έχουν το PID τους είναι το ίδιο με κάποιο CID από τις κατηγορίες EPL342: Databases Panayiotis Andreou 2013 26

Ασκήσεις E: EMPLOYEE D: DEPARTMENT SSN ENAME DOB GENDER DNO SALARY DNO DNAME 1 Andreas 1/1/80 M 1 1000 2 Kostas 1/1/85 M 1 1500 3 Maria 4/3/83 F 1 2000 4 Eleni 6/7/85 F 2 2500 1 ACC 2 HR 3 IT 4 MNG 5 Victoria 27/2/84 F 3 3000 Δώστε τον αριθμό των υπαλλήλων, μέγιστο και ελάχιστο μισθό Δώστε τον αριθμό των υπαλλήλων ανά τμήμα (για όλα τα τμήματα) Δώστε τον μέσο μισθό των υπαλλήλων ανά τμήμα και φύλο (για όλα τα τμήματα) Δώστε τον υπάλληλο με τον μέγιστο μισθό Δώστε τον υπάλληλο με τον δεύτερο μεγαλύτερο μισθό EPL342: Databases Panayiotis Andreou 2013 27