ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) ΤΕΙ ΔυτικήςΜακεδονίας

Σχετικά έγγραφα
1 / 97

1 / 87

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

DISTINCT, LIKE, NULL, AND, OR, BETWEEN

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

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





Ερωτήματα επιλογής με σύζευξη πινάκων

1 / 150

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

1 / 105

DELETE, UPDATE, INSERT

DELETE, UPDATE, INSERT.

Πρόλογος Μέρος Ι Μια βόλτα στις βάσεις δεδομένων Μια βόλτα στις βάσεις δεδομένων...25


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

1 / 106

1 / 106

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


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

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

Σχεδίαση Βάσεων Δεδομένων

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ.

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

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

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

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

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

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

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

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

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

Βάσεις Δεδομένων Ι 8. Ερωτήματα (B) Τμήμα Διοίκησης Επιχειρήσεων (Μεσολόγγι) ΤΕΙ Δυτικής Ελλάδας

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

Βάσεις Δεδομένων. Ενότητα 7.1: Structured Query Language - 1 ο Μέρος. Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

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

SQL Data Manipulation Language

Διαχείριση Πολιτισμικών Δεδομένων

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

ΘΕΜΑΤΑ. Θέμα 1 ο Σύμφωνα με τους παραπάνω πίνακες και τη θέση που έχουν τα ξένα κλειδιά βρείτε τους

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

Βάσεις Δεδομένων. Βασίλειος Βεσκούκης Εισαγωγή στη γλώσσα SQL (Structured Query Language) Η γλώσσα SQL

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

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 5 η ΕΝΟΤΗΤΑ: ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

Βάσεις Περιβαλλοντικών Δεδομένων

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

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

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

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

Τεχνολογία Πολιτισμικού Λογισμικού

ΟΝΟΜΑΤΕΠΩΝΥΜΟ : Αντικείμενα: Βάσεις δεδομένων, σχέσεις μεταξύ πινάκων, ερωτήματα, φόρμες και αναφορές.

Σχεδίαση και λειτουργία βάσης δεδομένων Το παράδειγμα της μαιευτικής κλινικής Ευάγγελος Καρβούνης

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

Βάσεις Δεδομένων (Ε) Εισαγωγή στην υλοποίηση σχεσιακών βάσεων δεδομένων

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

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

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

Σύβακας Σταύρος ΠΕ19,MSc. IT ΣΥΒΑΚΑΣ ΣΤΑΥΡΟΣ ΕΡΩΤΗΜΑΤΑ

Τα συγκεντρωτικά ερωτήματα αφορούν στην ομαδοποίηση των δεδομένων και στη. χρήση συναρτήσεων ομαδοποίησης κατά την εκτέλεση ενός ερωτήματος προβολής

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

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

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

Κεφάλαιο 10 Άλλες Πράξεις Θεωρίας Συνόλων

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ - SQL

Certified Data Base Designer (CDBD)

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) Ενότητα Advanced Βάσεις Δεδομένων, Προχωρημένο Επίπεδο. Copyright 2013 ECDL Foundation Ref: SL_AM3_Syl2.

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

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

Τεχνολογία Πολιτισμικού Λογισμικού

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

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

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

Περιεχόμενα. Μέρος Ι Εισαγωγή στα συστήματα βάσεων δεδομένων Πρόλογος... 33

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

ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ MYSQL

ΣΧΕΔΙΑΣΜΟΣ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ ΕΡΓΑΣΤΗΡΙΟ 3

Ηλεκτρονικοί Υπολογιστές ΙI. Βάσεις Δεδομένων. Ακαδημαϊκό Έτος Εργαστήριο 5. Διαφάνεια 1. Κάπαρης Αναστάσιος

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

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ - ΣΧΕΣΙΑΚΗ ΑΛΓΕΒΡΑ

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη

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

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

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

ΕΝΗΜΕΡΩΣΗ ΔΕΔΟΜΕΝΩΝ. UPDATE products SET prod_fpa=19 WHERE prod_fpa=23; SELECT prod_descr,purchase,purchase_date FROM products WHERE prod_fpa=9;

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Transcript:

Structured Query Language (SQL) Δρ. Καρβούνης Ευάγγελος ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) ΤΕΙ ΔυτικήςΜακεδονίας 1 / 97

Περιεχόμενα 1 Εισαγωγικά σχόλια και παρατηρήσεις 2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα πίνακα δεδομένων 3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα πίνακα δεδομένων 4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής 5 Αναζήτηση ημερολογιακών δεδομένων 6 Αναζήτηση κειμένου σε πίνακα δεδομένων 7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές παραστάσεις κατά την προβολή δεδομένων 8 Ταξινόμηση 2 / 97

Δυο λόγια για την SQL Υλοποίηση του σχεσιακού μοντέλου δεδομένων του E.F. Codd, αρχικά ως DSl/Alpha, αργότερα ως SQUARE και SEQUEL. 3 / 97

Δυο λόγια για την SQL Υλοποίηση του σχεσιακού μοντέλου δεδομένων του E.F. Codd, αρχικά ως DSl/Alpha, αργότερα ως SQUARE και SEQUEL. Είναι μια διαδικαστική γλώσσα δεδομένων με δύο μέρη: α) DDL: γλώσσα ορισμού δεδομένων β) DML: γλώσσα χειρισμού δεδομένων. 4 / 97

Δυο λόγια για την SQL Υλοποίηση του σχεσιακού μοντέλου δεδομένων του E.F. Codd, αρχικά ως DSl/Alpha, αργότερα ως SQUARE και SEQUEL. Είναι μια διαδικαστική γλώσσα δεδομένων με δύο μέρη: α) DDL: γλώσσα ορισμού δεδομένων β) DML: γλώσσα χειρισμού δεδομένων. Πρώτη εμπορική υλοποίηση ως System R από την IBM (1970s). 5 / 97

Δυο λόγια για την SQL Υλοποίηση του σχεσιακού μοντέλου δεδομένων του E.F. Codd, αρχικά ως DSl/Alpha, αργότερα ως SQUARE και SEQUEL. Είναι μια διαδικαστική γλώσσα δεδομένων με δύο μέρη: α) DDL: γλώσσα ορισμού δεδομένων β) DML: γλώσσα χειρισμού δεδομένων. Πρώτη εμπορική υλοποίηση ως System R από την IBM (1970s). Η εταιρεία Relational Software Inc. κατασκευάζει το λογισμικό που αργότερα θα γίνει γνωστό ως Oracle 6 / 97

Δυο λόγια για την SQL Υλοποίηση του σχεσιακού μοντέλου δεδομένων του E.F. Codd, αρχικά ως DSl/Alpha, αργότερα ως SQUARE και SEQUEL. Είναι μια διαδικαστική γλώσσα δεδομένων με δύο μέρη: α) DDL: γλώσσα ορισμού δεδομένων β) DML: γλώσσα χειρισμού δεδομένων. Πρώτη εμπορική υλοποίηση ως System R από την IBM (1970s). Η εταιρεία Relational Software Inc. κατασκευάζει το λογισμικό που αργότερα θα γίνει γνωστό ως Oracle 7 / 97

Δυο λόγια για την SQL Υλοποίηση του σχεσιακού μοντέλου δεδομένων του E.F. Codd, αρχικά ως DSl/Alpha, αργότερα ως SQUARE και SEQUEL. Είναι μια διαδικαστική γλώσσα δεδομένων με δύο μέρη: α) DDL: γλώσσα ορισμού δεδομένων β) DML: γλώσσα χειρισμού δεδομένων. Πρώτη εμπορική υλοποίηση ως System R από την IBM (1970s). Η εταιρεία Relational Software Inc. κατασκευάζει το λογισμικό που αργότερα θα γίνει γνωστό ως Oracle πόλεμος πάντων μὲν πατήρ ἐστι (Ηράκλειτος) Dialects: SQL-86, SQL-89, SQL-99,..., SQL-2011,... 8 / 97

Δυο λόγια για την SQL Υλοποίηση του σχεσιακού μοντέλου δεδομένων του E.F. Codd, αρχικά ως DSl/Alpha, αργότερα ως SQUARE και SEQUEL. Είναι μια διαδικαστική γλώσσα δεδομένων με δύο μέρη: α) DDL: γλώσσα ορισμού δεδομένων β) DML: γλώσσα χειρισμού δεδομένων. Πρώτη εμπορική υλοποίηση ως System R από την IBM (1970s). Η εταιρεία Relational Software Inc. κατασκευάζει το λογισμικό που αργότερα θα γίνει γνωστό ως Oracle πόλεμος πάντων μὲν πατήρ ἐστι (Ηράκλειτος) Dialects: SQL-86, SQL-89, SQL-99,..., SQL-2011,... NoSQL : Not only SQL 9 / 97

Τυπικό παράδειγμα βάσης δεδομένων Η βάση company Μια εταιρεία μελετών έχει πολλούς υπαλλήλους. Η υπάλληλοι εργάζονται σε διάφορα τμήματα της εταιρείας. Κάθε τμήμα διοικείται από έναν υπάλληλο. Οι υπάλληλοι απασχολούνται σε διάφορα έργα μελετών. Σε κάθε έργο απασχολούνται πιθανά πολλοί υπάλληλοι από διάφορα τμήματα. 10 / 97

Ο πίνακας employees από τη βάση company Εστω η σχέση employees με σχήμα: employees(empid, firstname, lastname, depid, salary, hiredate) empid firstname lastname depid salary hiredate 102 Νικηφόρος Διαμαντίδης 6 1212.50 2003-06-02 109 Μαρία Αθανασίου 1 2787.69 2000-01-26 153 Μαρία Αλεβιζάτου 2 1321.92 2001-05-15 172 Χρήστος Βλάσσης 3 1101.70 2000-07-04 189 Θεόδωρος Αγγελίνας 6 1908.28 2000-06-19.................. Δείγμα από τα δεδομένα του πίνακα. Δείτε τα πλήρη περιεχόμενα εδώ: http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=400 11 / 97

Ονόματα πινάκων Σε αντίθεση με έναν απλό κειμενογράφο ή ένα λογιστικό φύλλο, οι πίνακες των βάσεων δεδομένων έχουν πάντα όνομα Δεν υπάρχει πίνακας σε βάση δεδομένων που να μην έχει όνομα Κάθε πίνακας έχει ένα μοναδικό όνομα σε μια βάση δεδομένων: δεν υπάρχουν δύο πίνακες με το ίδιο όνομα στην ίδια βάση δεδομένων Ο πίνακας που έχουμε δει έχει το όνομα: employees 12 / 97

Πρόσβαση στη βάση company Πρόσβαση στη βάση company Διαδικτυακή πρόσβαση από: http://bit.ly/sqlcmp username: dbuser password: econ98 Διαθέσιμη για μεταφόρτωση από την ιστοσελίδα http://bit.ly/xxy896 σε μορφή: MS Access Open/Libre Office SQL installation script 13 / 97

Περιεχόμενα 1 Εισαγωγικά σχόλια και παρατηρήσεις 2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα πίνακα δεδομένων 3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα πίνακα δεδομένων 4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής 5 Αναζήτηση ημερολογιακών δεδομένων 6 Αναζήτηση κειμένου σε πίνακα δεδομένων 7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές παραστάσεις κατά την προβολή δεδομένων 8 Ταξινόμηση 14 / 97

Το πιο απλό ερώτημα Να δοθούν όλα τα δεδομένα του πίνακα των υπαλλήλων 1 SELECT * 2 FROM employees; SELECT Ολα τα ερωτήματα ανάσυρσης δεδομένων αρχίζουν με SELECT. * Το σύμβολο αυτό υποδηλώνει όλα τα πεδία του πίνακα. FROM Ολα τα ερωτήματα ανάσυρσης δεδομένων έχουν τη δήλωση FROM ώστε να καθοριστεί ο πίνακας (ή η παράσταση πίνακα) από όπου θα γίνει η άντληση δεδομένων. employees Ο πίνακας, τα δεδομένα του οποίου αναζητούμε. 15 / 97

Επιλογή πεδίου από πίνακα Να βρεθεί το επώνυμο των εργαζομένων 1 SELECT lastname 2 FROM employees; Το όνομα του πεδίου τοποθετείται μετά το SELECT Μπορούμε να βάλουμε οποιοδήποτε πεδίο, αρκεί να υπάρχει στον πίνακα που δηλώνεται μετά το FROM 16 / 97

Επιλογή περισσότερων πεδίων από πίνακα Να βρεθεί το όνομα και το επώνυμο των υπαλλήλων 1 SELECT firstname, lastname 2 FROM employees; firstname Νικηφόρος Μαρία Μαρία Χρήστος Θεόδωρος Ηλίας lastname Διαμαντίδης Αθανασίου Αλεβιζάτου Βλάσσης Αγγελίνας Μακρής 17 / 97

Κανόνες επιλογής περισσότερων πεδίων 1 SELECT firstname, lastname 2 FROM employees; Τα ονόματα των πεδίων τοποθετούνται μετά το SELECT. Χωρίζονται μεταξύ τους με κόμματα. Δεν υπάρχει κόμμα μετά το τελευταίο πεδίο. Μπορούμε να τοποθετήσουμε τα πεδία με όποια σειρά θέλουμε. Τοποθετούμε το όνομα του πεδίου (πχ lastname), όχι τη θέση του στον πίνακα, πχ δεύτερο πεδίο, τέταρτο πεδίο κ.τλ. 18 / 97

Μετονομασία πεδίου στο αποτέλεσμα Να δοθεί το επώνυμο των εργαζομένων ως στήλη με όνομα FamilyName 19 / 97

Μετονομασία πεδίου στο αποτέλεσμα Να δοθεί το επώνυμο των εργαζομένων ως στήλη με όνομα FamilyName 1 SELECT lastname AS FamilyName 2 FROM employees; 20 / 97

Μετονομασία πεδίου στο αποτέλεσμα Να δοθεί το επώνυμο των εργαζομένων ως στήλη με όνομα FamilyName 1 SELECT lastname AS FamilyName 2 FROM employees; FamilyName Αθανασίου Μαροπούλου Ρούσσης... 21 / 97

Εμβέλεια αλλαγής ονόματος πεδίου ΟΝΟΜΑ αντί για firstname 1 SELECT lastname AS FamilyName 2 FROM employees; FamilyName Αθανασίου Μαροπούλου Ρούσσης... Το πεδίο δηλώνεται κανονικά μετά το SELECT. Ακολουθεί ο τελεστής μετονομασίας AS. Η ισχύς του νέου ονόματος περιορίζεται μόνο στο αποτέλεσμα του ερωτήματος, δεν αλλάζει κάτι στον ορισμό του πίνακα δεδομένων. 22 / 97

Περιεχόμενα 1 Εισαγωγικά σχόλια και παρατηρήσεις 2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα πίνακα δεδομένων 3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα πίνακα δεδομένων 4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής 5 Αναζήτηση ημερολογιακών δεδομένων 6 Αναζήτηση κειμένου σε πίνακα δεδομένων 7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές παραστάσεις κατά την προβολή δεδομένων 8 Ταξινόμηση 23 / 97

Περιορισμός Να βρεθούν οι εργαζόμενοι του τμήματος 1 24 / 97

Περιορισμός Να βρεθούν οι εργαζόμενοι του τμήματος 1 1 SELECT * 2 FROM employees 3 WHERE depid = 1; 25 / 97

Περιορισμός Να βρεθούν οι εργαζόμενοι του τμήματος 1 1 SELECT * 2 FROM employees 3 WHERE depid = 1; empid firstname lastname depid salary hiredate 109 Μαρία Αθανασίου 1 2787.69 2000-01-26 502 Κρινιώ Μαροπούλου 1 1754.67 2001-03-07 901 Κυριάκος Ρούσσης 1 1852.99 2001-11-01 26 / 97

Περιορισμός Να βρεθούν οι εργαζόμενοι του τμήματος 1 1 SELECT * 2 FROM employees 3 WHERE depid = 1; empid firstname lastname depid salary hiredate 109 Μαρία Αθανασίου 1 2787.69 2000-01-26 502 Κρινιώ Μαροπούλου 1 1754.67 2001-03-07 901 Κυριάκος Ρούσσης 1 1852.99 2001-11-01 Στη σχεσιακή άλγεβρα σ depid=1 (employees) 27 / 97

Ο όρος WHERE σε εντολές SQL 1 SELECT * 2 FROM employees 3 WHERE depid = 1; Τοποθετείται πάντοτε μετά το FROM. Είναι προαιρετική, πολλές εντολές SQL δεν έχουν καθόλου WHERE. Αν υπάρχει, ακολουθείται από μια παράσταση που μπορεί να αποτιμηθεί σε TRUE ή FALSE. Μόνο οι εγγραφές για τις οποίες η παράσταση συνθήκης αποδίδει την τιμή TRUE εμφανίζονται στο αποτέλεσμα. Τα πεδία που ακολουθούν τη δήλωση WHERE πρέπει να υπάρχουν στην παράσταση πίνακα που έχει δηλωθεί μετά το FROM. 28 / 97

Τελεστές σύγκρισης Τελεστής SQL Σημασία = = ίσο με! = ή <> διάφορο από > > μεγαλύτερο από >= μεγαλύτερο ή ίσο με < < μικρότερο από <= μικρότερο ή ίσο με 29 / 97

Περιεχόμενα 1 Εισαγωγικά σχόλια και παρατηρήσεις 2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα πίνακα δεδομένων 3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα πίνακα δεδομένων 4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής 5 Αναζήτηση ημερολογιακών δεδομένων 6 Αναζήτηση κειμένου σε πίνακα δεδομένων 7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές παραστάσεις κατά την προβολή δεδομένων 8 Ταξινόμηση 30 / 97

Απλές σχεσιακές πράξεις Προβολή Επιλογή μέρους από το σύνολο των γνωρισμάτων της σχέσης, πχ: Π lastname,salary (employees) Περιορισμός Επιλογή μέρους από τις πλειάδες της σχέσης, πχ: σ empid=243 (employees) Συνδυασμός Π lastname,salary (σ empid=243 (employees)) 31 / 97

Συνδυασμός προβολής και περιορισμού Να βρεθεί το όνομα, ο μισθός και το τμήμα του υπαλλήλου με κωδικό 243 32 / 97

Συνδυασμός προβολής και περιορισμού Να βρεθεί το όνομα, ο μισθός και το τμήμα του υπαλλήλου με κωδικό 243 Π firstname,lastname,salary,depid (σ empid=243 (employees)) 33 / 97

Συνδυασμός προβολής και περιορισμού Να βρεθεί το όνομα, ο μισθός και το τμήμα του υπαλλήλου με κωδικό 243 Π firstname,lastname,salary,depid (σ empid=243 (employees)) 1 SELECT firstname, lastname, salary, depid 2 FROM employees 3 WHERE empid = 243; 34 / 97

Συνδυασμός προβολής και περιορισμού Να βρεθεί το όνομα, ο μισθός και το τμήμα του υπαλλήλου με κωδικό 243 Π firstname,lastname,salary,depid (σ empid=243 (employees)) 1 SELECT firstname, lastname, salary, depid 2 FROM employees 3 WHERE empid = 243; firstname lastname salary depid Δέσποινα Παπαδοπούλου 1609.52 2 35 / 97

Περιεχόμενα 1 Εισαγωγικά σχόλια και παρατηρήσεις 2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα πίνακα δεδομένων 3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα πίνακα δεδομένων 4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής 5 Αναζήτηση ημερολογιακών δεδομένων 6 Αναζήτηση κειμένου σε πίνακα δεδομένων 7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές παραστάσεις κατά την προβολή δεδομένων 8 Ταξινόμηση 36 / 97

Αναζήτηση με ημερομηνίες Να βρεθεί το όνομα, ο μισθός και το τμήμα των υπαλλήλων που προσλήφθηκαν μετά την 1/6/2006 37 / 97

Αναζήτηση με ημερομηνίες Να βρεθεί το όνομα, ο μισθός και το τμήμα των υπαλλήλων που προσλήφθηκαν μετά την 1/6/2006 Π firstname,lastname,salary,depid (σ hiredate> 2004 06 01 (employees)) 38 / 97

Αναζήτηση με ημερομηνίες Να βρεθεί το όνομα, ο μισθός και το τμήμα των υπαλλήλων που προσλήφθηκαν μετά την 1/6/2006 Π firstname,lastname,salary,depid (σ hiredate> 2004 06 01 (employees)) 1 SELECT firstname, lastname, salary, depid 2 FROM employees 3 WHERE hiredate > 2004-06-01 ; 39 / 97

Αναζήτηση με ημερομηνίες Να βρεθεί το όνομα, ο μισθός και το τμήμα των υπαλλήλων που προσλήφθηκαν μετά την 1/6/2006 Π firstname,lastname,salary,depid (σ hiredate> 2004 06 01 (employees)) 1 SELECT firstname, lastname, salary, depid 2 FROM employees 3 WHERE hiredate > 2004-06-01 ; firstname lastname salary depid Πέτρος Αρβανιτάκης 1323.80 2 Αντώνης Παύλου 1231.62 3 Κυριάκος Ρούσσης 1852.99 1 Βαγγέλης Χριστόπουλος NULL 4 Παύλος Περίδης NULL 4 Βασιλική Περδίκη 1053.54 3 40 / 97

Περιεχόμενα 1 Εισαγωγικά σχόλια και παρατηρήσεις 2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα πίνακα δεδομένων 3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα πίνακα δεδομένων 4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής 5 Αναζήτηση ημερολογιακών δεδομένων 6 Αναζήτηση κειμένου σε πίνακα δεδομένων 7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές παραστάσεις κατά την προβολή δεδομένων 8 Ταξινόμηση 41 / 97

Μαρία Μαρία Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μικρό όνομα Μαρία 42 / 97

Μαρία Μαρία Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μικρό όνομα Μαρία σ firstname= Μαρία (employees) 43 / 97

Μαρία Μαρία Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μικρό όνομα Μαρία σ firstname= Μαρία (employees) 1 SELECT * 2 FROM employees 3 WHERE firstname = Μαρία ; 44 / 97

Μαρία Μαρία Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μικρό όνομα Μαρία σ firstname= Μαρία (employees) 1 SELECT * 2 FROM employees 3 WHERE firstname = Μαρία ; empid firstname lastname depid salary hiredate 109 Μαρία Αθανασίου 1 2787.69 2003-08-29 153 Μαρία Αλεβιζάτου 2 1321.92 2001-05-15 45 / 97

Σύγκριση με κείμενο Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων, που το επώνυμό τους είναι Παπαδοπούλου και μετά (στη σειρά καταλόγου) 46 / 97

Σύγκριση με κείμενο Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων, που το επώνυμό τους είναι Παπαδοπούλου και μετά (στη σειρά καταλόγου) Π salary (σ lastname Παπαδοπούλου (employees)) 47 / 97

Σύγκριση με κείμενο Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων, που το επώνυμό τους είναι Παπαδοπούλου και μετά (στη σειρά καταλόγου) Π salary (σ lastname Παπαδοπούλου (employees)) 1 SELECT * 2 FROM employees 3 WHERE lastname >= Παπαδοπούλου 48 / 97

Σύγκριση με κείμενο Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων, που το επώνυμό τους είναι Παπαδοπούλου και μετά (στη σειρά καταλόγου) Π salary (σ lastname Παπαδοπούλου (employees)) 1 SELECT * 2 FROM employees 3 WHERE lastname >= Παπαδοπούλου empid firstname lastname depid salary hiredate 243 Δέσποινα Παπαδοπούλου 2 1609.52 1999-03-05 412 Αριστείδης Περρής 3 1320.83 1999-11-12 435 Αντώνης Παύλου 3 1231.62 2005-02-05 835 Αθανάσιος Πετράκης 6 1322.01 2001-02-23 901 Κυριάκος Ρούσσης 1 1852.99 2006-11-01 302 Νίκος Στεργιόπουλος 4 1386.05 2002-02-01 49 / 97

Τα πρώτα ερωτήματα SQL 50 / 97

Περιεχόμενα 1 Εισαγωγικά σχόλια και παρατηρήσεις 2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα πίνακα δεδομένων 3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα πίνακα δεδομένων 4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής 5 Αναζήτηση ημερολογιακών δεδομένων 6 Αναζήτηση κειμένου σε πίνακα δεδομένων 7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές παραστάσεις κατά την προβολή δεδομένων 8 Ταξινόμηση 51 / 97

Γενικευμένη προβολή Αλγεβρικές παραστάσεις σε αριθμητικά πεδία salary 1.05 Η πράξη εφαρμόζεται σε όλες τις εγγραφές του πίνακα: αύξηση του μισθού κατά 5%. Λογιστικά φύλλα: «σύρσιμο» τύπου προς τα κάτω. Γλώσσες προγραμματισμού: βρόγχος επανάληψης. 52 / 97

Γενικευμένη προβολή Αλγεβρικές παραστάσεις σε αριθμητικά πεδία salary 1.05 Η πράξη εφαρμόζεται σε όλες τις εγγραφές του πίνακα: αύξηση του μισθού κατά 5%. Λογιστικά φύλλα: «σύρσιμο» τύπου προς τα κάτω. Γλώσσες προγραμματισμού: βρόγχος επανάληψης. Εφαρμογή συναρτήσεων Αριθμητικές, πχ SQRT(salary) Κειμένου, πχ LEFT(firstname, 1) Ημερομηνίας πχ YEAR(hiredate) 53 / 97

Γενικευμένη προβολή και SQL Εφαρμογή σε οποιοδήποτε όρο SELECT FROM WHERE GROUP BY HAVING ORDER BY 54 / 97

Παράδειγμα γενικευμένης προβολής 1 Να βρεθεί το όνομα και ο νέος μισθός όλων των υπαλλήλων που εργάζονται στο τμήμα 2 μετά από αύξηση 150 στο μισθό τους 55 / 97

Παράδειγμα γενικευμένης προβολής 1 Να βρεθεί το όνομα και ο νέος μισθός όλων των υπαλλήλων που εργάζονται στο τμήμα 2 μετά από αύξηση 150 στο μισθό τους Π firstname,lastname,salary+150 (employees) 56 / 97

Παράδειγμα γενικευμένης προβολής 1 Να βρεθεί το όνομα και ο νέος μισθός όλων των υπαλλήλων που εργάζονται στο τμήμα 2 μετά από αύξηση 150 στο μισθό τους Π firstname,lastname,salary+150 (employees) 1 SELECT firstname, lastname, salary+150 2 FROM employees 3 WHERE depid = 2; 57 / 97

Παράδειγμα γενικευμένης προβολής 1 Να βρεθεί το όνομα και ο νέος μισθός όλων των υπαλλήλων που εργάζονται στο τμήμα 2 μετά από αύξηση 150 στο μισθό τους Π firstname,lastname,salary+150 (employees) 1 SELECT firstname, lastname, salary+150 2 FROM employees 3 WHERE depid = 2; firstname lastname salary+150 Δέσποινα Παπαδοπούλου 1759.52 Πέτρος Αρβανιτάκης 1473.80 Μαριλένα Κρέσπα 1255.04 Μαρία Αλεβιζάτου 1471.92 58 / 97

Παράδειγμα γενικευμένης προβολής 2 Να βρεθεί το όνομα και ο μισθός των υπαλλήλων που ο μισθός τους θα ανέβει περισσότερο από 80 αν πάρουν αύξηση 4% 59 / 97

Παράδειγμα γενικευμένης προβολής 2 Να βρεθεί το όνομα και ο μισθός των υπαλλήλων που ο μισθός τους θα ανέβει περισσότερο από 80 αν πάρουν αύξηση 4% Π lastname,firstname,salary (σ salary 0.04>80 (employees)) 60 / 97

Παράδειγμα γενικευμένης προβολής 2 Να βρεθεί το όνομα και ο μισθός των υπαλλήλων που ο μισθός τους θα ανέβει περισσότερο από 80 αν πάρουν αύξηση 4% 1 SELECT * Π lastname,firstname,salary (σ salary 0.04>80 (employees)) 2 FROM employees 3 WHERE salary*0.04 > 80; firstname lastname salary Δέσποινα Παπαδοπούλου 1609.52 Αδαμαντία Αθανασίου 2787.69 Θεόδωρος Αγγελίνας 1908.28......... 61 / 97

Υπολογισμοί με ποσοστά Αν: s 1 είναι η αρχική τιμή του μισθού, όπως είναι αποθηκευμένη στο πεδίο salary του πίνακα employees, s 2 είναι η νέα τιμή, αυτή που προκύπτει μετά την μεταβολή, v είναι το ποσό της μεταβολής, σ είναι η σχετική μεταβολή, και π είναι η σχετική ποσοστιαία μεταβολή 62 / 97

Υπολογισμοί με ποσοστά Αν: s 1 είναι η αρχική τιμή του μισθού, όπως είναι αποθηκευμένη στο πεδίο salary του πίνακα employees, s 2 είναι η νέα τιμή, αυτή που προκύπτει μετά την μεταβολή, v είναι το ποσό της μεταβολής, σ είναι η σχετική μεταβολή, και π είναι η σχετική ποσοστιαία μεταβολή τότε ισχύουν οι σχέσεις: s 2 = s 1 + v σ = s 2 s 1 s 1 π = (s 2 s 1 ) 100 s 1 s 2 = (1 + σ)s 1 s 2 = (1 + π 100 )s 1 63 / 97

Παράδειγμα γενικευμένης προβολής 3 Να βρεθεί ο κωδικός, ο μισθός, ο νέος μισθός των υπαλλήλων μετά από αύξηση 80 αν ο μισθός μεταβληθεί περισσότερο από 4% με φθίνουσα ταξινόμηση ως προς το ποσοστό αύξησης του μισθού. 64 / 97

Παράδειγμα γενικευμένης προβολής 3 Να βρεθεί ο κωδικός, ο μισθός, ο νέος μισθός των υπαλλήλων μετά από αύξηση 80 αν ο μισθός μεταβληθεί περισσότερο από 4% με φθίνουσα ταξινόμηση ως προς το ποσοστό αύξησης του μισθού. 1 SELECT empid, salary, salary+80, 80*100/salary 2 FROM employees 3 WHERE salary+80 > salary*1.04 4 ORDER BY 80*100/salary DESC; 5 65 / 97

Παράδειγμα γενικευμένης προβολής 3 Να βρεθεί ο κωδικός, ο μισθός, ο νέος μισθός των υπαλλήλων μετά από αύξηση 80 αν ο μισθός μεταβληθεί περισσότερο από 4% με φθίνουσα ταξινόμηση ως προς το ποσοστό αύξησης του μισθού. 1 SELECT empid, salary, salary+80, 80*100/salary 2 FROM employees 3 WHERE salary+80 > salary*1.04 4 ORDER BY 80*100/salary DESC; 5 6 empid salary salary+80 80*100/salary 7 ----------------------------------------- 8 205 1050.96 1130.96 7.6121 9 490 1051.92 1131.92 7.6051 10... 11 811 1323.98 1403.98 6.0424 12 342 1351.96 1431.96 5.9173 13... 66 / 97

Περιεχόμενα 1 Εισαγωγικά σχόλια και παρατηρήσεις 2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα πίνακα δεδομένων 3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα πίνακα δεδομένων 4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής 5 Αναζήτηση ημερολογιακών δεδομένων 6 Αναζήτηση κειμένου σε πίνακα δεδομένων 7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές παραστάσεις κατά την προβολή δεδομένων 8 Ταξινόμηση 68 / 97

Ταξινόμηση ORDER BY column [ ASC DESC ] 69 / 97

Ταξινόμηση ORDER BY column [ ASC DESC ] 1 Είναι προαιρετική. 70 / 97

Ταξινόμηση ORDER BY column [ ASC DESC ] 1 Είναι προαιρετική. 2 Αν υπάρχει ORDER BY στην πρόταση SQL, τότε τοποθετείται πάντα στο τέλος. 71 / 97

Ταξινόμηση ORDER BY column [ ASC DESC ] 1 Είναι προαιρετική. 2 Αν υπάρχει ORDER BY στην πρόταση SQL, τότε τοποθετείται πάντα στο τέλος. 3 Μπορεί να περιέχει ονόματα πεδίων που είτε έχουν, είτε δεν έχουν δηλωθεί στο SELECT, αρκεί τα πεδία να υπάρχουν στην έκφραση πίνακα που ακολουθεί το FROM. 72 / 97

Ταξινόμηση ORDER BY column [ ASC DESC ] 1 Είναι προαιρετική. 2 Αν υπάρχει ORDER BY στην πρόταση SQL, τότε τοποθετείται πάντα στο τέλος. 3 Μπορεί να περιέχει ονόματα πεδίων που είτε έχουν, είτε δεν έχουν δηλωθεί στο SELECT, αρκεί τα πεδία να υπάρχουν στην έκφραση πίνακα που ακολουθεί το FROM. 4 Μπορεί να γίνει ταξινόμηση σε ένα πεδίο μετά από κάποιο είδος υπολογισμού (αλγεβρική παράσταση ή κλήση συνάρτησης). 73 / 97

Ταξινόμηση ORDER BY column [ ASC DESC ] 1 Είναι προαιρετική. 2 Αν υπάρχει ORDER BY στην πρόταση SQL, τότε τοποθετείται πάντα στο τέλος. 3 Μπορεί να περιέχει ονόματα πεδίων που είτε έχουν, είτε δεν έχουν δηλωθεί στο SELECT, αρκεί τα πεδία να υπάρχουν στην έκφραση πίνακα που ακολουθεί το FROM. 4 Μπορεί να γίνει ταξινόμηση σε ένα πεδίο μετά από κάποιο είδος υπολογισμού (αλγεβρική παράσταση ή κλήση συνάρτησης). 5 Αν ο προσδιορισμός αύξουσας (ASC) ή φθίνουσας (DESC) ταξινόμησης παραληφθεί τότε γίνεται αύξουσα ταξινόμηση (ASC). 74 / 97

Ταξινόμηση ως προς το τμήμα Να βρεθεί το όνομα, ο μισθός, και το τμήμα των υπαλλήλων, με αύξουσα ταξινόμηση ως προς το τμήμα 75 / 97

Ταξινόμηση ως προς το τμήμα Να βρεθεί το όνομα, ο μισθός, και το τμήμα των υπαλλήλων, με αύξουσα ταξινόμηση ως προς το τμήμα 1 SELECT firstname, lastname, salary, depid 2 FROM employees 3 ORDER BY depid; 4 76 / 97

Ταξινόμηση ως προς το τμήμα Να βρεθεί το όνομα, ο μισθός, και το τμήμα των υπαλλήλων, με αύξουσα ταξινόμηση ως προς το τμήμα 1 SELECT firstname, lastname, salary, depid 2 FROM employees 3 ORDER BY depid; 4 5 firstname lastname salary depid 6 ------------------------------------------ 7 Μαρία Αθανασίου 2787.69 1 8 Κρινιώ Μαροπούλου 1754.67 1 9 Κυριάκος Ρούσσης 1852.99 1 10 Δέσποινα Παπαδοπούλου 1609.52 2 11 Πέτρος Αρβανιτάκης 1323.80 2 12 Μαριλένα Κρέσπα 1105.04 2 13... 77 / 97

Ταξινόμηση ως προς το μισθό Να βρεθεί το όνομα και ο μισθός όλων των υπαλλήλων με αύξουσα ταξινόμηση ως προς το μισθό 78 / 97

Ταξινόμηση ως προς το μισθό Να βρεθεί το όνομα και ο μισθός όλων των υπαλλήλων με αύξουσα ταξινόμηση ως προς το μισθό 1 SELECT firstname, lastname, salary 2 FROM employees 3 ORDER BY salary ASC; 4 79 / 97

Ταξινόμηση ως προς το μισθό Να βρεθεί το όνομα και ο μισθός όλων των υπαλλήλων με αύξουσα ταξινόμηση ως προς το μισθό 1 SELECT firstname, lastname, salary 2 FROM employees 3 ORDER BY salary ASC; 4 5 firstname lastname salary 6 ----------------------------------- 7 Βαγγέλης Χριστόπουλος NULL 8 Ηρακλής Μανωλάκης NULL 9 Παύλος Περίδης NULL 10 Βασιλική Περδίκη 1053.54 11 Περικλής Κιτσάκης 1100.13 12 Κώστας Παπαδόπουλος 1100.23 13... 80 / 97

Φθίνουσα ταξινόμηση ημερομηνιών Να βρεθεί το όνομα, ο κωδικός, και η ημερομηνία πρόσληψης των υπαλλήλων που προσελήφθησαν μετά την 1/1/2004, με φθίνουσα ταξινόμηση ως προς την ημερομηνία πρόσληψης 81 / 97

Φθίνουσα ταξινόμηση ημερομηνιών Να βρεθεί το όνομα, ο κωδικός, και η ημερομηνία πρόσληψης των υπαλλήλων που προσελήφθησαν μετά την 1/1/2004, με φθίνουσα ταξινόμηση ως προς την ημερομηνία πρόσληψης 1 SELECT firstname, lastname, empid, hiredate 2 FROM employees 3 WHERE hiredate > 2004-01-01 4 ORDER BY hiredate DESC; 5 82 / 97

Φθίνουσα ταξινόμηση ημερομηνιών Να βρεθεί το όνομα, ο κωδικός, και η ημερομηνία πρόσληψης των υπαλλήλων που προσελήφθησαν μετά την 1/1/2004, με φθίνουσα ταξινόμηση ως προς την ημερομηνία πρόσληψης 1 SELECT firstname, lastname, empid, hiredate 2 FROM employees 3 WHERE hiredate > 2004-01-01 4 ORDER BY hiredate DESC; 5 6 firstname lastname empid hiredate 7 ------------------------------------------- 8 Βαγγέλης Χριστόπουλος 230 2007-12-03 9 Κυριάκος Ρούσσης 901 2006-11-01 10 Πέτρος Αρβανιτάκης 419 2006-07-17 11 Αντώνης Παύλου 435 2005-02-05 12... 83 / 97

Διπλή ταξινόμηση: τμήμα και μισθός Να βρεθεί ο κωδικός, ο μισθός και το τμήμα των υπαλλήλων με αύξουσα ταξινόμηση ως προς το τμήμα και φθίνουσα ταξινόμηση ως προς το μισθό 84 / 97

Διπλή ταξινόμηση: τμήμα και μισθός Να βρεθεί ο κωδικός, ο μισθός και το τμήμα των υπαλλήλων με αύξουσα ταξινόμηση ως προς το τμήμα και φθίνουσα ταξινόμηση ως προς το μισθό 1 SELECT empid, salary, depid 2 FROM employees 3 ORDER BY depid ASC, salary DESC; 4 85 / 97

Διπλή ταξινόμηση: τμήμα και μισθός Να βρεθεί ο κωδικός, ο μισθός και το τμήμα των υπαλλήλων με αύξουσα ταξινόμηση ως προς το τμήμα και φθίνουσα ταξινόμηση ως προς το μισθό 1 SELECT empid, salary, depid 2 FROM employees 3 ORDER BY depid ASC, salary DESC; 4 5 empid salary depid 6 ----------------------- 7 109 2787.69 1 8 901 1852.99 1 9 502 1754.67 1 10 243 1609.52 2 11 419 1323.80 2 12... 86 / 97

Διπλή ταξινόμηση: μισθός και τμήμα Να βρεθεί ο κωδικός, ο μισθός και το τμήμα των υπαλλήλων με αύξουσα ταξινόμηση ως προς το τμήμα και φθίνουσα ταξινόμηση ως προς το μισθό 87 / 97

Διπλή ταξινόμηση: μισθός και τμήμα Να βρεθεί ο κωδικός, ο μισθός και το τμήμα των υπαλλήλων με αύξουσα ταξινόμηση ως προς το τμήμα και φθίνουσα ταξινόμηση ως προς το μισθό 1 SELECT empid, salary, depid 2 FROM employees 3 ORDER BY salary DESC, depid ASC; 4 88 / 97

Διπλή ταξινόμηση: μισθός και τμήμα Να βρεθεί ο κωδικός, ο μισθός και το τμήμα των υπαλλήλων με αύξουσα ταξινόμηση ως προς το τμήμα και φθίνουσα ταξινόμηση ως προς το μισθό 1 SELECT empid, salary, depid 2 FROM employees 3 ORDER BY salary DESC, depid ASC; 4 5 empid salary depid 6 ----------------------- 7 109 2787.69 1 8 801 2312.56 3 9 189 1908.28 6 10 901 1852.99 1 11 502 1754.67 1 12... 89 / 97

Περισσότερα για τα απλά ερωτήματα SQL DISTINCT, LIKE, NULL, AND, OR, BETWEEN 1 / 66

Σκοπός του μαθήματος Αποκλείσετε διπλοεγγραφές από αποτελέσματα ερωτημάτων Χειρίζεστε άγνωστες ή ελλιπείς τιμές (NULL) Εφαρμόζετε αναζήτηση με βάση ταίριασμα κειμένου Εκτελείτε ερωτήματα πολύπλοκων περιορισμών εφαρμόζοντας λογικούς τελεστές Εκτελείτε ερωτήματα με τη χρήση του τελεστή συνόλου και του τελεστή περιοχής 2 / 66

Περιεχόμενα 1 Απαλοιφή διπλοεγγραφών με DISTINCT 2 Ελεγχος για τιμές NULL 3 Ταίριασμα κειμένου 4 Λογική σύζευξη και διάζευξη 5 Τελεστής συνόλου IN 6 Τελεστής περιοχής τιμών BETWEEN... AND... 3 / 66

Απαλοιφή διπλοεγγραφών Να βρεθεί σε ποια τμήματα απασχολούνται οι υπάλληλοι Χωρίς απαλοιφή διπλοεγγραφών 1 SELECT depid 2 FROM employees; Με απαλοιφή διπλοεγγραφών 1 SELECT DISTINCT depid 2 FROM employees; depid 1 1 1 2 2... depid 1 2 3 4 5 6 4 / 66

Συνδυασμός πεδίων Να δοθεί το τμήμα και ο μισθός των υπαλλήλων 1 SELECT DISTINCT depid, salary 2 FROM employees; depid salary 6 1212.50 1 2787.69 2 1321.92 3 1101.70 6 1908.28...... Εδώ ελέγχεται ο συνδυασμός των τιμών στα πεδία depid και salary Ετσι, μια τιμή στο πεδίο depid μπορεί να εμφανιστεί δεύτερη (ή πολλαπλή) επειδή αντιστοιχίζεται με διαφορετική τιμή στο πεδίο salary Αν το ζεύγος τιμών τμήμα μισθός είναι ίδιο για δύο διαφορετικές εγγραφές τότε θα εμφανιστεί στο αποτέλεσμα μόνο μία φορά (λόγω DISTINCT) 5 / 66

DISTINCT και προβολή στη σχεσιακή άλγεβρα Η σχεσιακή πράξη της προβολής, πχ: Π depid (employees) εκφράζεται στην SQL πάντα με DISTINCT: 1 SELECT DISTINCT depid 2 FROM employees; και όχι χωρίς αυτό, πχ: 1 SELECT depid 2 FROM employees; Ο λόγος είναι απλός: η σχεσιακή άλγεβρα αφορά πράξεις συνόλων, οπότε δε μπορεί να υπάρχουν διπλοεγγραφές, τα στοιχεία ενός συνόλου είναι μοναδικά. 6 / 66

Και κάτι για εξάσκηση Να βρεθούν τα τμήματα στα οποία ο μισθός των υπαλλήλων θα ανέβει πάνω από 80 αν πάρουν αύξηση 3.5% 1 SELECT DISTINCT depid 2 FROM employees 3 WHERE salary*0.035 > 80; Π depid (σ salary 0.035>80 (employees)) depid 1 3 Μόνο στα τμήματα 1 και 3 υπάρχουν υπάλληλοι που αν ο μισθός τους αυξηθεί κατά 3.5% η αύξηση θα είναι μεγαλύτερη από 80. Στα τμήματα αυτά, πιθανά να υπάρχουν περισσότεροι από ένας υπάλληλος με τέτοια αύξηση. Αλλά αυτό που ενδιαφέρει είναι σε ποιο τμήμα, όχι σε ποιους και πόσους υπαλλήλους. 7 / 66

Περιεχόμενα 1 Απαλοιφή διπλοεγγραφών με DISTINCT 2 Ελεγχος για τιμές NULL 3 Ταίριασμα κειμένου 4 Λογική σύζευξη και διάζευξη 5 Τελεστής συνόλου IN 6 Τελεστής περιοχής τιμών BETWEEN... AND... 8 / 66

Χειρισμός τιμών NULL 9 / 66

Χειρισμός τιμών NULL 1 Δε μπορούμε να χειριστούμε τιμές NULL με τελεστές σύγκρισης 10 / 66

Χειρισμός τιμών NULL 1 Δε μπορούμε να χειριστούμε τιμές NULL με τελεστές σύγκρισης 2 Μια τιμή είναι (IS) ή δεν είναι (IS NOT) NULL 11 / 66

Χειρισμός τιμών NULL 1 Δε μπορούμε να χειριστούμε τιμές NULL με τελεστές σύγκρισης 2 Μια τιμή είναι (IS) ή δεν είναι (IS NOT) NULL 3 Ο έλεγχος για τιμές NULL αποδίδει πάντοτε TRUE ή FALSE 12 / 66

Χειρισμός τιμών NULL 1 Δε μπορούμε να χειριστούμε τιμές NULL με τελεστές σύγκρισης 2 Μια τιμή είναι (IS) ή δεν είναι (IS NOT) NULL 3 Ο έλεγχος για τιμές NULL αποδίδει πάντοτε TRUE ή FALSE 4 Δύο τιμές NULL δεν είναι ίσες μεταξύ τους, η μεταξύ τους σύγκριση δεν έχει νόημα 13 / 66

Παραδείγματα με NULL Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων χωρίς καταχωρημένο μισθό 1 SELECT * 2 FROM employees 3 WHERE salary IS NULL; 14 / 66

Παραδείγματα με NULL Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων χωρίς καταχωρημένο μισθό 1 SELECT * 2 FROM employees 3 WHERE salary IS NULL; Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με καταχωρημένο μισθό 1 SELECT * 2 FROM employees 3 WHERE salary IS NOT NULL; 15 / 66

NULL και DISTINCT Χωρίς DISTINCT 1 SELECT salary 2 FROM employees 3 WHERE salary IS NULL; 4 salary 5 ---------- 6 NULL 7 NULL 8 NULL 16 / 66

NULL και DISTINCT Χωρίς DISTINCT 1 SELECT salary 2 FROM employees 3 WHERE salary IS NULL; 4 salary 5 ---------- 6 NULL 7 NULL 8 NULL Με DISTINCT 1 SELECT DISTINCT salary 2 FROM employees 3 WHERE salary IS NULL; 4 salary 5 ---------- 6 NULL 17 / 66

Λάθη στον έλεγχο για NULL Με τον τελεστή = 1 SELECT * 2 FROM employees 3 WHERE salary = NULL; 4 5 Empty set (0.00 sec) 18 / 66

Λάθη στον έλεγχο για NULL Με τον τελεστή = 1 SELECT * 2 FROM employees 3 WHERE salary = NULL; 4 5 Empty set (0.00 sec) Ως κείμενο 1 SELECT * 2 FROM employees 3 WHERE salary = NULL ; 4 5 Empty set, 1 warning (0.00 sec) 19 / 66

NULL και αλγεβρικές πράξεις Πρόσθεση 1000 στο μισθό των υπαλλήλων χωρίς μισθό 1 SELECT empid, salary, salary+1000 2 FROM employees 3 WHERE salary IS NULL; 4 5 empid salary salary+1000 6 --------+--------+-------------+ 7 230 NULL NULL 8 483 NULL NULL 9 593 NULL NULL 10 -------------------------------- 20 / 66

Περιεχόμενα 1 Απαλοιφή διπλοεγγραφών με DISTINCT 2 Ελεγχος για τιμές NULL 3 Ταίριασμα κειμένου 4 Λογική σύζευξη και διάζευξη 5 Τελεστής συνόλου IN 6 Τελεστής περιοχής τιμών BETWEEN... AND... 21 / 66

Ταίριασμα κειμένου Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μικρό όνομα Νίκη 1 SELECT * 2 FROM employees 3 WHERE firstname = Νίκη ; 1 Μπορούμε να κάνουμε συγκρίσεις αλφαριθμητικών με τελεστές σύγκρισης όπως και με αριθμούς. 2 Ωστόσο, το αλφαριθμητικό τοποθετείται πάντα μέσα σε εισαγωγικά. 3 Τα εισαγωγικά μπορεί να είναι μονά ( ) ή διπλά ( ), ποτέ όμως δεν είναι αυτάκια! 22 / 66

Τελεστές ανισότητας και σύγκριση κειμένου Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μικρό μετά τη Νίκη 1 SELECT * 2 FROM employees 3 WHERE firstname > Νίκη ; 23 / 66

Τελεστές ανισότητας και σύγκριση κειμένου Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μικρό μετά τη Νίκη 1 SELECT * 2 FROM employees 3 WHERE firstname > Νίκη ; Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μικρό όνομα μετά το Ν 1 SELECT * 2 FROM employees 3 WHERE firstname > Ν ; 24 / 66

Ταίριασμα κειμένου με τον τελεστή LIKE Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μικρό όνομα που αρχίζει από Ν 1 SELECT * 2 FROM employees 3 WHERE firstname LIKE N% ; 25 / 66

Ταίριασμα κειμένου με τον τελεστή LIKE Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μικρό όνομα που αρχίζει από Ν 1 SELECT * 2 FROM employees 3 WHERE firstname LIKE N% ; Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μικρό όνομα που αρχίζει από Α και τελειώνει σε Α 1 SELECT * 2 FROM employees 3 WHERE firstname LIKE A%A ; 26 / 66

LIKE: χαρακτήρες υποκατάστασης % (ή *) : υποκαθιστά από κανένα ως πολλούς χαρακτήρες (ή?) : υποκαθιστά ακριβώς ένα χαρακτήρα Οι χαρακτήρες υποκατάστασης μπορούν αν συνδυαστούν μεταξύ τους 27 / 66

LIKE: χαρακτήρες υποκατάστασης % (ή *) : υποκαθιστά από κανένα ως πολλούς χαρακτήρες (ή?) : υποκαθιστά ακριβώς ένα χαρακτήρα Οι χαρακτήρες υποκατάστασης μπορούν αν συνδυαστούν μεταξύ τους Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μικρό όνομα που έχει 5 χαρακτήρες και τελειώνει σε Α 1 SELECT * 2 FROM employees 3 WHERE firstname LIKE A ; 28 / 66

Ασκήσεις με ταίριασμα κειμένου 29 / 66

Ασκήσεις με ταίριασμα κειμένου 1 Να βρεθούν οι υπάλληλοι που το όνομά τους αρχίζει από Α. 30 / 66

Ασκήσεις με ταίριασμα κειμένου 1 Να βρεθούν οι υπάλληλοι που το όνομά τους αρχίζει από Α. 2 Να βρεθούν οι υπάλληλοι που το όνομά τους τελειώνει σε ς. 31 / 66

Ασκήσεις με ταίριασμα κειμένου 1 Να βρεθούν οι υπάλληλοι που το όνομά τους αρχίζει από Α. 2 Να βρεθούν οι υπάλληλοι που το όνομά τους τελειώνει σε ς. 3 Να βρεθούν οι υπάλληλοι που το όνομά τους έχει δεύτερο χαρακτήρα το α. 32 / 66

Ασκήσεις με ταίριασμα κειμένου 1 Να βρεθούν οι υπάλληλοι που το όνομά τους αρχίζει από Α. 2 Να βρεθούν οι υπάλληλοι που το όνομά τους τελειώνει σε ς. 3 Να βρεθούν οι υπάλληλοι που το όνομά τους έχει δεύτερο χαρακτήρα το α. 4 Να βρεθούν οι υπάλληλοι που το όνομά τους έχει δεύτερο χαρακτήρα το α και τελειώνει σε ς. 33 / 66

Περιεχόμενα 1 Απαλοιφή διπλοεγγραφών με DISTINCT 2 Ελεγχος για τιμές NULL 3 Ταίριασμα κειμένου 4 Λογική σύζευξη και διάζευξη 5 Τελεστής συνόλου IN 6 Τελεστής περιοχής τιμών BETWEEN... AND... 34 / 66

Ο τελεστής AND 35 / 66

Ο τελεστής AND 1 Δύο παραστάσεις στον όρο WHERE μπορούν να συνδυαστούν μεταξύ τους με το λογικό τελεστή AND. 36 / 66

Ο τελεστής AND 1 Δύο παραστάσεις στον όρο WHERE μπορούν να συνδυαστούν μεταξύ τους με το λογικό τελεστή AND. 2 Χρησιμοποιούμε τον τελεστή AND όταν θέλουμε να ελέγξουμε την τιμή αληθείας και των δύο παραστάσεων ταυτόχρονα. 37 / 66

Ο τελεστής AND 1 Δύο παραστάσεις στον όρο WHERE μπορούν να συνδυαστούν μεταξύ τους με το λογικό τελεστή AND. 2 Χρησιμοποιούμε τον τελεστή AND όταν θέλουμε να ελέγξουμε την τιμή αληθείας και των δύο παραστάσεων ταυτόχρονα. 3 Οι βάσεις δεδομένων ακολουθούν την τριαδική λογική: TRUE, FALSE, UNK. 38 / 66

Ο τελεστής AND 1 Δύο παραστάσεις στον όρο WHERE μπορούν να συνδυαστούν μεταξύ τους με το λογικό τελεστή AND. 2 Χρησιμοποιούμε τον τελεστή AND όταν θέλουμε να ελέγξουμε την τιμή αληθείας και των δύο παραστάσεων ταυτόχρονα. 3 Οι βάσεις δεδομένων ακολουθούν την τριαδική λογική: TRUE, FALSE, UNK. 4 Στο αποτέλεσμα του ερωτήματος εισέρχονται μόνο οι εγγραφές που αποδίδουν TRUE. 39 / 66

Πίνακας αληθείας AND AND TRUE FALSE UNK TRUE TRUE FALSE UNK FALSE FALSE FALSE FALSE UNK UNK FALSE UNK Ο τελεστής AND αποδίδει TRUE μόνο όταν και οι δύο παραστάσεις είναι TRUE 40 / 66

Ενα παράδειγμα με τον τελεστή AND Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων που εργάζονται στο τμήμα 4 και ο μισθός τους είναι μεγαλύτερος από 1100 1 SELECT * 2 FROM employees 3 WHERE depid = 4 4 AND salary > 1100; empid firstname lastname depid salary hiredate 206 Νίκος Βλάχος 4 1102.04 2002-12-03 311 Νίκος Στεργιόπουλος 4 1386.05 2002-02-01 41 / 66

Ο τελεστής OR 42 / 66

Ο τελεστής OR 1 Δύο παραστάσεις στον όρο WHERE μπορούν να συνδυαστούν μεταξύ τους με το λογικό τελεστή OR. 43 / 66

Ο τελεστής OR 1 Δύο παραστάσεις στον όρο WHERE μπορούν να συνδυαστούν μεταξύ τους με το λογικό τελεστή OR. 2 Χρησιμοποιούμε τον τελεστή OR όταν θέλουμε να ελέγξουμε την τιμή αληθείας τουλάχιστον μιας από τις δύο παραστάσεις. 44 / 66

Ο τελεστής OR 1 Δύο παραστάσεις στον όρο WHERE μπορούν να συνδυαστούν μεταξύ τους με το λογικό τελεστή OR. 2 Χρησιμοποιούμε τον τελεστή OR όταν θέλουμε να ελέγξουμε την τιμή αληθείας τουλάχιστον μιας από τις δύο παραστάσεις. 3 Οι βάσεις δεδομένων ακολουθούν την τριαδική λογική: TRUE, FALSE, UNK. 45 / 66

Ο τελεστής OR 1 Δύο παραστάσεις στον όρο WHERE μπορούν να συνδυαστούν μεταξύ τους με το λογικό τελεστή OR. 2 Χρησιμοποιούμε τον τελεστή OR όταν θέλουμε να ελέγξουμε την τιμή αληθείας τουλάχιστον μιας από τις δύο παραστάσεις. 3 Οι βάσεις δεδομένων ακολουθούν την τριαδική λογική: TRUE, FALSE, UNK. 4 Στο αποτέλεσμα του ερωτήματος εισέρχονται μόνο οι εγγραφές που αποδίδουν TRUE. 46 / 66

Πίνακας αληθείας OR OR TRUE FALSE UNK TRUE TRUE TRUE TRUE FALSE TRUE FALSE UNK UNK TRUE UNK UNK Ο τελεστής OR αποδίδει TRUE όταν μία τουλάχιστον παράσταση είναι TRUE. 47 / 66

Ενα παράδειγμα με τον τελεστή OR Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων που εργάζονται στο τμήμα 4 ή ο μισθός τους είναι μεγαλύτερος από 1100 1 SELECT * 2 FROM employees 3 WHERE depid = 4 4 OR salary >= 1100; empid firstname lastname depid salary hiredate... 206 Νίκος Βλάχος 4 1102.04 2002-12-03 230 Βαγγέλης Χριστόπουλος 4 NULL 2002-12-03 234 Αδαμαντία Θεοτοκάτου 5 1534.65 1999-10-01 243 Δέσποινα Παπαδοπούλου 2 1609.52 1999-03-05 311 Νίκος Στεργιόπουλος 4 1386.05 2002-02-01... 48 / 66

Μακριά από παγίδες Να βρεθούν τα ονοματεπώνυμα των υπαλλήλων που εργάζονται στα τμήματα 1 και 3 49 / 66

Μακριά από παγίδες Να βρεθούν τα ονοματεπώνυμα των υπαλλήλων που εργάζονται στα τμήματα 1 και 3 Λάθος απάντηση 1 SELECT firstname, lastname 2 FROM employees 3 WHERE depid = 1 4 AND depid = 3; 50 / 66

Μακριά από παγίδες Να βρεθούν τα ονοματεπώνυμα των υπαλλήλων που εργάζονται στα τμήματα 1 και 3 Λάθος απάντηση 1 SELECT firstname, lastname 2 FROM employees 3 WHERE depid = 1 4 AND depid = 3; Σωστή απάντηση 1 SELECT firstname, lastname 2 FROM employees 3 WHERE depid = 1 4 OR depid = 3; 51 / 66

Σύνθετες παραστάσεις και παρενθέσεις Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων που δεν προσλήφθηκαν το 2002 και εργάζονται στο τμήμα 3 52 / 66

Σύνθετες παραστάσεις και παρενθέσεις Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων που δεν προσλήφθηκαν το 2002 και εργάζονται στο τμήμα 3 Λάθος απάντηση 1 SELECT * 2 FROM employees 3 WHERE depid = 3 4 AND hiredate < 2002-01-01 5 OR hiredate > 2002-12-31 ; 53 / 66

Σύνθετες παραστάσεις και παρενθέσεις Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων που δεν προσλήφθηκαν το 2002 και εργάζονται στο τμήμα 3 Λάθος απάντηση 1 SELECT * 2 FROM employees 3 WHERE depid = 3 4 AND hiredate < 2002-01-01 5 OR hiredate > 2002-12-31 ; Σωστή απάντηση 1 SELECT * 2 FROM employees 3 WHERE depid = 3 4 AND ( hiredate < 2002-01-01 OR 54 / 66

Ασκήσεις με λογική σύζευξη και διάζευξη 55 / 66

Ασκήσεις με λογική σύζευξη και διάζευξη 1 Π empid,lastname,depid (σ depid=1 salary>1500 (employees)) 56 / 66

Ασκήσεις με λογική σύζευξη και διάζευξη 1 Π empid,lastname,depid (σ depid=1 salary>1500 (employees)) 2 Π empid,lastname,depid (σ depid=2 salary<1200 (employees)) 57 / 66

Ασκήσεις με λογική σύζευξη και διάζευξη 1 Π empid,lastname,depid (σ depid=1 salary>1500 (employees)) 2 Π empid,lastname,depid (σ depid=2 salary<1200 (employees)) 3 Π empid,lastname (σ depid=4 salary 0.05>60 (employees)) 58 / 66

Ασκήσεις με λογική σύζευξη και διάζευξη 1 Π empid,lastname,depid (σ depid=1 salary>1500 (employees)) 2 Π empid,lastname,depid (σ depid=2 salary<1200 (employees)) 3 Π empid,lastname (σ depid=4 salary 0.05>60 (employees)) 4 Π empid,lastname ( σ(depid=3 depid=4) salary=null (employees) ) 59 / 66

Περιεχόμενα 1 Απαλοιφή διπλοεγγραφών με DISTINCT 2 Ελεγχος για τιμές NULL 3 Ταίριασμα κειμένου 4 Λογική σύζευξη και διάζευξη 5 Τελεστής συνόλου IN 6 Τελεστής περιοχής τιμών BETWEEN... AND... 60 / 66

Ο τελεστής συνόλου IN Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων που εργάζονται στα τμήματα 2, 3 και 4 1 SELECT * 2 FROM employees 3 WHERE depid = 2 4 OR depid = 3 5 OR depid = 4; Το ίδιο, αλλά πιο απλά 1 SELECT * 2 FROM employees 3 WHERE depid IN (2,3,4); 61 / 66

Άρνηση του IN Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων που δεν εργάζονται στα τμήματα 2, 3 και 4 1 SELECT * 2 FROM employees 3 WHERE depid NOT IN (2,3,4); Η, ισοδύναμα με: 1 SELECT * 2 FROM employees 3 WHERE depid!= 2 4 AND depid!= 3 5 AND depid!= 4; 62 / 66

Περιεχόμενα 1 Απαλοιφή διπλοεγγραφών με DISTINCT 2 Ελεγχος για τιμές NULL 3 Ταίριασμα κειμένου 4 Λογική σύζευξη και διάζευξη 5 Τελεστής συνόλου IN 6 Τελεστής περιοχής τιμών BETWEEN... AND... 63 / 66

Ο τελεστής περιοχής τιμών Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων για εκείνους τους υπαλλήλους που παίρνουν μισθό από 1100 ως 1200 1 SELECT * 2 FROM employees 3 WHERE salary BETWEEN 1100 AND 1200; empid firstname lastname depid salary hiredate 172 Χρήστος Βλάσσης 3 1101.70 2000-07-04 206 Νίκος Βλάχος 4 1102.04 2002-12-03 381 Περικλής Κιτσάκης 6 1100.13 2003-02-14 431 Κώστας Παπαδόπουλος 3 1100.23 2002-09-16 503 Μαριλένα Κρέσπα 2 1105.04 2001-03-07 64 / 66

Ο τελεστής περιοχής τιμών για ημερομηνίες Να βρεθεί ο κωδικός των τμημάτων στα οποία απασχολούνται υπάλληλοι που προσλήφθηκαν μέσα στο 2004 1 SELECT DISTINCT depid 2 FROM employees 3 WHERE hiredate BETWEEN 2004-01-01 4 AND 2004-12-31 ; depid 4 3 65 / 66

SQL: Ερωτήματα ομαδοποίησης και συνάθροισης GROUP BY, HAVING, COUNT, MIN, MAX, SUM, AVG, ROLLUP 1 / 56

Περιεχόμενα 1 Εισαγωγή, γενικές παρατηρήσεις 2 Συναρτήσεις συνάθροισης 3 Τιμές NULL και μοναδικές τιμές 4 Ομαδοποίηση εγγραφών 5 Περιορισμός μετά την ομαδοποίηση 6 Μερικά και ολικά αθροίσματα 2 / 56

Σκοπός του μαθήματος Αν κατανοήσετε αυτό το μάθημα, θα μπορείτε να: Βρίσκετε πλήθος εγγραφών ή ακραίες τιμές (μέγιστα, ελάχιστα) πεδίων. Βρίσκετε αθροίσματα και μέσους όρους αριθμητικών πεδίων. Ομαδοποιείτε εγγραφές με βάση ταυτιζόμενες τιμές σε κάποια πεδία με τη φράση GROUP BY. Εφαρμόζετε τις συναρτήσεις συνάθροισης στις εγγραφές που προκύπτουν από την ομαδοποίηση/συνάθροιση. Εφαρμόζετε την επέκταση της ομαδοποίησης για να παίρνετε μερικά αθροίσματα με την επιλογή WITH ROLLUP. Εφαρμόζετε περιορισμό στις εγγραφές που προκύπτουν μετά την ομαδοποίηση με τη φράση HAVING. 3 / 56

Συναρτήσεις συνάθροισης Υπάρχουν πέντε βασικές συναρτήσεις συνάθροισης, που υποστηρίζονται από όλα τα συστήματα SQL COUNT για την καταμέτρηση πλήθους SUM για το άθροισμα AVG για το μέσο όρο MIN για την ελάχιστη τιμή MAX για την μέγιστη τιμή Υπάρχουν αρκετές άλλες συναρτήσεις (πχ STDEV, VAR), αλλά η υποστήριξή τους ποικίλει από σύστημα σε σύστημα. 4 / 56

Διάγραμμα σύνταξης των συναρτήσεων συνάθροισης COUNT(*) DISTINCT COUNT( όνομα πεδίου) MIN(έκφραση) MAX(έκφραση) DISTINCT όνομα πεδίου AVG( έκφραση ) DISTINCT όνομα πεδίου SUM( έκφραση ) 5 / 56

Ο πίνακας employees από τη βάση company Εστω η σχέση employees με σχήμα: employees(empid, firstname, lastname, depid, salary, hiredate) empid firstname lastname depid salary hiredate 102 Νικηφόρος Διαμαντίδης 6 1212.50 2003-06-02 109 Μαρία Αθανασίου 1 2787.69 2000-01-26 153 Μαρία Αλεβιζάτου 2 1321.92 2001-05-15 172 Χρήστος Βλάσσης 3 1101.70 2000-07-04 189 Θεόδωρος Αγγελίνας 6 1908.28 2000-06-19.................. Δείγμα από τα δεδομένα του πίνακα. Δείτε τα πλήρη περιεχόμενα εδώ: http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=400 6 / 56

Περιεχόμενα 1 Εισαγωγή, γενικές παρατηρήσεις 2 Συναρτήσεις συνάθροισης 3 Τιμές NULL και μοναδικές τιμές 4 Ομαδοποίηση εγγραφών 5 Περιορισμός μετά την ομαδοποίηση 6 Μερικά και ολικά αθροίσματα 7 / 56

Παράδειγμα αθροίσματος στήλης Να βρεθεί το άθροισμα των μισθών όλων των υπαλλήλων G sum(salary) (employees) 8 / 56

Παράδειγμα αθροίσματος στήλης Να βρεθεί το άθροισμα των μισθών όλων των υπαλλήλων 1 SELECT SUM(salary) 2 FROM employees; 3 4 SUM(salary) 5 ------------- 6 38232.03 G sum(salary) (employees) 9 / 56

Παράδειγμα αθροίσματος στήλης Να βρεθεί το άθροισμα των μισθών όλων των υπαλλήλων 1 SELECT SUM(salary) 2 FROM employees; 3 4 SUM(salary) 5 ------------- 6 38232.03 G sum(salary) (employees) 10 / 56

Παράδειγμα αθροίσματος υπό συνθήκη Να βρεθεί το άθροισμα των μισθών όλων των υπαλλήλων του τμήματος 4 G sum(salary) (σ depid=4 (employees)) 11 / 56

Παράδειγμα αθροίσματος υπό συνθήκη Να βρεθεί το άθροισμα των μισθών όλων των υπαλλήλων του τμήματος 4 G sum(salary) (σ depid=4 (employees)) 1 SELECT SUM(salary) 2 FROM employees 3 WHERE depid = 4; 4 5 SUM(salary) 6 ------------- 7 3542.80 12 / 56

Παράδειγμα αθροίσματος γενικευμένης προβολής Να βρεθεί το επιπλέον ποσό που θα δοθεί σε μισθούς αν οι υπάλληλοι του τμήματος 3 πάρουν αύξηση 3% G sum(salary 0.03) sumsal3 (σ depid=3 (employees)) 13 / 56

Παράδειγμα αθροίσματος γενικευμένης προβολής Να βρεθεί το επιπλέον ποσό που θα δοθεί σε μισθούς αν οι υπάλληλοι του τμήματος 3 πάρουν αύξηση 3% G sum(salary 0.03) sumsal3 (σ depid=3 (employees)) 1 SELECT SUM(salary*0.03) AS sumsal3 2 FROM employees 3 WHERE depid = 3; 14 / 56

Παράδειγμα αθροίσματος γενικευμένης προβολής Να βρεθεί το επιπλέον ποσό που θα δοθεί σε μισθούς αν οι υπάλληλοι του τμήματος 3 πάρουν αύξηση 3% G sum(salary 0.03) sumsal3 (σ depid=3 (employees)) 1 SELECT SUM(salary*0.03) AS sumsal3 2 FROM employees 3 WHERE depid = 3; Η μετονομασία του πεδίου είναι χρήσιμη αλλά προαιρετική. Κάντε την πράξη με λογιστικό φύλλο και αναλύστε πλεονεκτήματα/μειονεκτήματα. Προσέξτε πως το μόνο που δηλώνει ο χρήστης στην SQL είναι ονόματα πεδίων και πινάκων. 15 / 56

Παράδειγμα υπολογισμού μέσου όρου Να βρεθεί ο μέσος μισθός όλων των υπαλλήλων G avg(salary) (employees) 16 / 56

Παράδειγμα υπολογισμού μέσου όρου Να βρεθεί ο μέσος μισθός όλων των υπαλλήλων G avg(salary) (employees) 1 SELECT AVG(salary) 2 FROM employees; 3 4 AVG(salary) 5 --------------- 6 1416.001111 17 / 56

Μέσος όρος με περιορισμό εγγραφών Να βρεθεί ο μέσος μισθός των υπαλλήλων του τμήματος 3 G avg(salary) (σ depid=3 (employees)) 18 / 56

Μέσος όρος με περιορισμό εγγραφών Να βρεθεί ο μέσος μισθός των υπαλλήλων του τμήματος 3 G avg(salary) (σ depid=3 (employees)) 1 SELECT AVG(salary) 2 FROM employees 3 WHERE depid = 3; 4 5 AVG(salary) 6 --------------- 7 1311.651250 19 / 56

Ελάχιστη τιμή Να βρεθεί ο μικρότερος μισθός των υπαλλήλων του τμήματος 3 G min(salary) σ depid=3 (employees) 20 / 56

Ελάχιστη τιμή Να βρεθεί ο μικρότερος μισθός των υπαλλήλων του τμήματος 3 G min(salary) σ depid=3 (employees) 1 SELECT MIN(salary) 2 FROM employees 3 WHERE depid = 3; 4 5 MIN(salary) 6 --------------- 7 1050.96 21 / 56

Μέγιστη τιμή Να βρεθεί η ημερομηνία της πιο πρόσφατης πρόσληψης G max(hiredate) (employees) 1 SELECT MAX(hiredate) 2 FROM employees; 3 4 MAX(hiredate) 5 ----------------- 6 2004-10-05 22 / 56

Καταμέτρηση πλήθους Να βρεθεί πόσοι υπάλληλοι εργάζονται στο τμήμα 4 G count(empid) (σ depid=4 (employees)) 23 / 56

Καταμέτρηση πλήθους Να βρεθεί πόσοι υπάλληλοι εργάζονται στο τμήμα 4 G count(empid) (σ depid=4 (employees)) 1 SELECT COUNT(empid) 2 FROM employees 3 WHERE depid = 4; 4 5 COUNT(empid) 6 ---------------- 7 5 24 / 56

COUNT(*) Να βρεθεί πόσοι υπάλληλοι εργάζονται στο τμήμα 4 1 SELECT COUNT(*) 2 FROM employees 3 WHERE depid = 4; 4 5 COUNT(*) 6 ---------------- 7 5 1 COUNT(empid) : Καταμέτρηση εγγραφών με μη NULL τιμές στο πεδίο empid. 2 COUNT(*) : Καταμέτρηση εγγραφών 25 / 56

Δύο συναρτήσεις στο ίδιο ερώτημα Να βρεθεί το εύρος το μισθών του τμήματος 4 G max(salary) min(salary) (employees) 26 / 56

Δύο συναρτήσεις στο ίδιο ερώτημα Να βρεθεί το εύρος το μισθών του τμήματος 4 G max(salary) min(salary) (employees) 1 SELECT MAX(salary)-MIN(salary) 2 FROM employees 3 WHERE depid = 4; 4 5 MAX(salary)-MIN(salary) 6 --------------------------- 7 331.34 27 / 56

Περιεχόμενα 1 Εισαγωγή, γενικές παρατηρήσεις 2 Συναρτήσεις συνάθροισης 3 Τιμές NULL και μοναδικές τιμές 4 Ομαδοποίηση εγγραφών 5 Περιορισμός μετά την ομαδοποίηση 6 Μερικά και ολικά αθροίσματα 28 / 56

Πλήθος μισθοδοτούμενων υπαλλήλων Να βρεθεί το πλήθος καταχωρημένων μισθών 1 SELECT COUNT(salary) 2 FROM employees; 3 4 count(salary) 5 ----------------- 6 27 Να βρεθεί το πλήθος των κωδικών των υπαλλήλων 1 SELECT COUNT(empid) 2 FROM employees; 3 4 count(empid) 5 ---------------- 6 30 Υπάρχουν 30 υπάλληλοι αλλά 27 μισθοί COUNT(salary) δεν μετράει τις τιμές NULL Το πεδίο empid δεν παίρνει ποτέ τιμές NULL γιατί είναι πρωτεύον κλειδί 29 / 56

Τιμές NULL Να βρεθεί το πλήθος των υπαλλήλων χωρίς μισθό 1 SELECT COUNT(salary) 2 FROM employees 3 WHERE salary IS NULL; 4 5 COUNT(salary) 6 ----------------- 7 0 Να βρεθεί το πλήθος των υπαλλήλων χωρίς μισθό 1 SELECT COUNT(empid) 2 FROM employees 3 WHERE salary IS NULL; 4 5 count(empid) 6 ---------------- 7 3 Οι τιμές NULL δεν απαριθμούνται. Το πλήθος των εγγραφών με τιμή NULL στο πεδίο salary είναι 3. 30 / 56

Καταμέτρηση μοναδικών τιμών (Λάθος) Να βρεθεί το πλήθος των τμημάτων των υπαλλήλων 1 SELECT COUNT(depid) 2 FROM employees; 3 4 COUNT(depid) 5 ---------------- 6 30 31 / 56

Καταμέτρηση μοναδικών τιμών (Σωστό) Να βρεθεί το πλήθος των τμημάτων των υπαλλήλων 1 SELECT COUNT(DISTINCT depid) 2 FROM employees; 3 4 COUNT(DISTINCT depid) 5 ------------------------- 6 6 32 / 56

Περιεχόμενα 1 Εισαγωγή, γενικές παρατηρήσεις 2 Συναρτήσεις συνάθροισης 3 Τιμές NULL και μοναδικές τιμές 4 Ομαδοποίηση εγγραφών 5 Περιορισμός μετά την ομαδοποίηση 6 Μερικά και ολικά αθροίσματα 33 / 56

Ομαδοποίηση Μέχρι τώρα είδαμε απλά ερωτήματα, η απάντηση των οποίων ήταν μία τιμή. Πολλές φορές το ζητούμενο είναι μια λίστα τιμών, μία τιμή ανά κατηγορία. Πχ ο μέσος μισθός ανά τμήμα, ή ο αρχαιότερος υπάλληλος ανά τμήμα Για αυτές τις περιπτώσεις θα χρειαστούμε μια νέα φράση: GROUP BY 34 / 56

Πλήθος υπαλλήλων ανά τμήμα Πλήθος υπαλλήλων ανά τμήμα depidg count( ) (employees) 35 / 56

Πλήθος υπαλλήλων ανά τμήμα Πλήθος υπαλλήλων ανά τμήμα depidg count( ) (employees) 1 SELECT depid, COUNT(*) 2 FROM employees 3 GROUP BY depid; depid COUNT(*) 1 3 2 4 3 9 4 5 5 2 6 7 36 / 56

Πλήθος υπαλλήλων ανά τμήμα Πλήθος υπαλλήλων ανά τμήμα depidg count( ) (employees) 1 SELECT depid, COUNT(*) 2 FROM employees 3 GROUP BY depid; depid COUNT(*) 1 3 2 4 3 9 4 5 5 2 6 7 Η SQL έχει πλεονεκτήματα: Δεν χρειάζεται να γνωρίζουμε το μέγεθος του πίνακα. Το ίδιο ακριβώς ερώτημα SQL θα χρησιμοποιηθεί έστω και αν αλλάξουν τα δεδομένα του πίνακα μετά από προσθήκη ή αφαίρεση εγγραφών. 37 / 56

Μικρότερο ανά... Ο μικρότερος μισθός ανά τμήμα υπαλλήλων depidg min(salary) (employees) 38 / 56

Μικρότερο ανά... Ο μικρότερος μισθός ανά τμήμα υπαλλήλων depidg min(salary) (employees) 1 SELECT depid, MIN(salary) 2 FROM employees 3 GROUP BY depid; 4 5 depid MIN(salary) 6 ------------------- 7 1 1754.67 8 2 1105.04 9 3 1050.96 10 4 1054.71 11 5 1051.92 12 6 1100.13 39 / 56

Περιορισμός και ομαδοποίηση Να βρεθεί το άθροισμα των μισθών των υπαλλήλων ανά τμήμα για τους υπαλλήλους που προσλήφθηκαν μέσα στο 2004 depidg sum(salary) (σ hiredate 2004 01 01 hiredate 2004 12 31 (employees)) 40 / 56

Περιορισμός και ομαδοποίηση Να βρεθεί το άθροισμα των μισθών των υπαλλήλων ανά τμήμα για τους υπαλλήλους που προσλήφθηκαν μέσα στο 2004 depidg sum(salary) (σ hiredate 2004 01 01 hiredate 2004 12 31 (employees)) 1 SELECT depid, SUM(salary) 2 FROM employees 3 WHERE hiredate BETWEEN 2004-01-01 4 AND 2004-12-31 5 GROUP BY depid; 41 / 56

Ομαδοποίηση και ταξινόμηση Να βρεθεί το άθροισμα των μισθών των υπαλλήλων ανά τμήμα με φθίνουσα ταξινόμηση ως προς το άθροισμα των μισθών 42 / 56

Ομαδοποίηση και ταξινόμηση Να βρεθεί το άθροισμα των μισθών των υπαλλήλων ανά τμήμα με φθίνουσα ταξινόμηση ως προς το άθροισμα των μισθών 1 SELECT depid, SUM(salary) 2 FROM employees 3 GROUP BY depid 4 ORDER BY SUM(salary) DESC; 5 depid SUM(salary) 6 ------- ------------- 7 3 10493.21 8 6 9853.82 9 1 6395.35 10 2 5360.28 11 4 3542.80 12 5 2586.57 43 / 56

Περιεχόμενα 1 Εισαγωγή, γενικές παρατηρήσεις 2 Συναρτήσεις συνάθροισης 3 Τιμές NULL και μοναδικές τιμές 4 Ομαδοποίηση εγγραφών 5 Περιορισμός μετά την ομαδοποίηση 6 Μερικά και ολικά αθροίσματα 44 / 56

Περιορισμός μετά την ομαδοποίηση Τμήματα με περισσότερους από 4 υπαλλήλους σ count(depid)>4 ( depidg count(empid) (employees) ) 45 / 56

Περιορισμός μετά την ομαδοποίηση Τμήματα με περισσότερους από 4 υπαλλήλους σ count(depid)>4 ( depidg count(empid) (employees) ) 1 SELECT depid, COUNT(depid) 2 FROM employees 3 GROUP BY depid 4 HAVING COUNT(depid) > 4; 46 / 56

Περιορισμός μετά την ομαδοποίηση Τμήματα με περισσότερους από 4 υπαλλήλους σ count(depid)>4 ( depidg count(empid) (employees) ) 1 SELECT depid, COUNT(depid) 2 FROM employees 3 GROUP BY depid 4 HAVING COUNT(depid) > 4; depid COUNT(*) 1 3 2 4 3 9 4 5 5 2 6 7 Ο όρος HAVING τοποθετείται μετά τον όρο GROUP BY. Η σύνταξη είναι παρόμοια με αυτή του όρου WHERE. Ο όρος HAVING περιορίζει το αποτέλεσμα του ερωτήματος με βάση πεδία που παράγονται από τον όρο GROUP BY. 47 / 56

Περιορισμός πριν και μετά την ομαδοποίηση Να βρεθούν τα τμήματα με περισσότερους από 3 υπαλλήλους με μισθό μεγαλύτερο από 1200 σ count(depid)>3 ( depidg count(empid) (σ salary>1200 (employees)) ) 48 / 56

Περιορισμός πριν και μετά την ομαδοποίηση Να βρεθούν τα τμήματα με περισσότερους από 3 υπαλλήλους με μισθό μεγαλύτερο από 1200 σ count(depid)>3 ( depidg count(empid) (σ salary>1200 (employees)) ) 1 SELECT depid 2 FROM employees 3 WHERE salary > 1200 4 GROUP BY depid 5 HAVING COUNT(depid) > 3; 6 7 depid 8 ------- 9 3 10 6 49 / 56

Περιεχόμενα 1 Εισαγωγή, γενικές παρατηρήσεις 2 Συναρτήσεις συνάθροισης 3 Τιμές NULL και μοναδικές τιμές 4 Ομαδοποίηση εγγραφών 5 Περιορισμός μετά την ομαδοποίηση 6 Μερικά και ολικά αθροίσματα 50 / 56

ROLLUP (μερικά αθροίσματα) Πλήθος των υπαλλήλων ανά τμήμα και το συνολικό πλήθος των υπαλλήλων της εταιρείας 51 / 56

ROLLUP (μερικά αθροίσματα) Πλήθος των υπαλλήλων ανά τμήμα και το συνολικό πλήθος των υπαλλήλων της εταιρείας 1 SELECT depid, COUNT(*) 2 FROM employees 3 GROUP BY depid WITH ROLLUP; 52 / 56

ROLLUP (μερικά αθροίσματα) Πλήθος των υπαλλήλων ανά τμήμα και το συνολικό πλήθος των υπαλλήλων της εταιρείας 1 SELECT depid, COUNT(*) 2 FROM employees 3 GROUP BY depid WITH ROLLUP; depid COUNT(*) 1 3 2 4 3 9 4 5 5 2 6 7 NULL 30 WITH ROLLUP : μετά το πεδίο που ακολουθεί τον όρο GROUP BY. Προσοχή την τιμή NULL στο τέλος που αντιστοιχεί στο σύνολο των εγγραφών. 53 / 56

Μερικά αθροίσματα με διπλή ομαδοποίηση Να βρεθεί ο μέσος μισθός των υπαλλήλων ανά τμήμα και έτος πρόσληψης για τμήματα με κωδικό 2 και 6 1 SELECT depid, YEAR(hiredate), AVG(salary) 2 FROM employees 3 WHERE depid IN (2,6) 4 GROUP BY depid, YEAR(hiredate) WITH ROLLUP; 5 6 depid YEAR(hiredate) AVG(salary) 7 ---------------------------------------- 8 2 1999 1609.520000 9 2 2000 1323.800000 10 2 2001 1213.480000 11 2 NULL 1340.070000 12 6 2000 1771.620000 13 6 2001 1336.985000 14 6 2002 1323.980000 15 6 2003 1156.315000 16 6 NULL 1407.688571 17 NULL NULL 1383.100000 54 / 56

Αναστροφή της λίστας πεδίων Ο μέσος μισθός των υπαλλήλων ανά έτος πρόσληψης και τμήμα για τμήματα με κωδικό 2 και 6 1 SELECT YEAR(hiredate), depid, AVG(salary) 2 FROM employees 3 WHERE depid IN (2,6) 4 GROUP BY YEAR(hiredate), depid WITH ROLLUP; 5 6 YEAR(hiredate) depid AVG(salary) 7 ---------------------------------------- 8 1999 2 1609.520000 9 1999 NULL 1609.520000 10 2000 2 1323.800000 11 2000 6 1771.620000 12... 13 NULL NULL 1383.100000 55 / 56

Ερωτήματα SQL με σύζευξη πινάκων 1 / 150

Περιεχόμενα 1 Γενικά για τη σύζευξη πινάκων 2 Καρτεσιανό γινόμενο και θ σύζευξη 3 Φυσική σύζευξη πινάκων στην SQL 4 Εσωτερική σύζευξη πινάκων στην SQL 5 Εξωτερική σύζευξη πινάκων στην SQL 2 / 150

Σκοπός του μαθήματος 3 / 150

Σκοπός του μαθήματος 1 Εκτελείτε ερωτήματα ανάσυρσης δεδομένων από πολλούς πίνακες. 4 / 150

Σκοπός του μαθήματος 1 Εκτελείτε ερωτήματα ανάσυρσης δεδομένων από πολλούς πίνακες. 2 Εκτελείτε ερωτήματα που αντιστοιχούν στις σχεσιακές πράξεις καρτεσιανού γινομένου και σύζευξης. 5 / 150

Σκοπός του μαθήματος 1 Εκτελείτε ερωτήματα ανάσυρσης δεδομένων από πολλούς πίνακες. 2 Εκτελείτε ερωτήματα που αντιστοιχούν στις σχεσιακές πράξεις καρτεσιανού γινομένου και σύζευξης. 3 Εφαρμόζετε κατάλληλες συνδέσεις (JOIN) πινάκων. 6 / 150

Σκοπός του μαθήματος 1 Εκτελείτε ερωτήματα ανάσυρσης δεδομένων από πολλούς πίνακες. 2 Εκτελείτε ερωτήματα που αντιστοιχούν στις σχεσιακές πράξεις καρτεσιανού γινομένου και σύζευξης. 3 Εφαρμόζετε κατάλληλες συνδέσεις (JOIN) πινάκων. 4 Αντιληφθείτε τις διαφορές και ομοιότητες ανάμεσα στους διαφορετικούς τύπους συζεύξεων. 7 / 150

Το σχήμα της βάσης company departments(depid, depname, manager) employees(empid, firstname, lastname, depid, salary, hiredate) projects(proid, title, budget, startdate, enddate, progress) workson(empid, proid) departments, τα τμήματα της εταιρείας employees, οι υπάλληλοι της εταιρείας projects, τα έργα που εκτελεί η εταιρεία workson, η απασχόληση των υπαλλήλων στα έργα 8 / 150

Το σχήμα της βάσης company departments, τα τμήματα της εταιρείας employees, οι υπάλληλοι της εταιρείας projects, τα έργα που εκτελεί η εταιρεία workson, η απασχόληση των υπαλλήλων στα έργα 9 / 150

Πρωτεύοντα και ξένα κλειδιά 10 / 150

Πρωτεύοντα και ξένα κλειδιά 1 Κάθε πίνακας έχει ένα πρωτεύον κλειδί. 11 / 150

Πρωτεύοντα και ξένα κλειδιά 1 Κάθε πίνακας έχει ένα πρωτεύον κλειδί. 2 Το πρωτεύον κλειδί μπορεί να είναι απλό (ένα πεδίο), ή σύνθετο (συνδυασμός πεδίων). 12 / 150

Πρωτεύοντα και ξένα κλειδιά 1 Κάθε πίνακας έχει ένα πρωτεύον κλειδί. 2 Το πρωτεύον κλειδί μπορεί να είναι απλό (ένα πεδίο), ή σύνθετο (συνδυασμός πεδίων). 3 Κάθε εγγραφή ενός πίνακα μπορεί να προσδιοριστεί με τη χρήση του πρωτεύοντος κλειδιού. 13 / 150

Πρωτεύοντα και ξένα κλειδιά 1 Κάθε πίνακας έχει ένα πρωτεύον κλειδί. 2 Το πρωτεύον κλειδί μπορεί να είναι απλό (ένα πεδίο), ή σύνθετο (συνδυασμός πεδίων). 3 Κάθε εγγραφή ενός πίνακα μπορεί να προσδιοριστεί με τη χρήση του πρωτεύοντος κλειδιού. 4 Η σύνδεση δεδομένων από διαφορετικούς πίνακες σύζευξη γίνεται (συνήθως) με τη χρήση του ξένου κλειδιού, 14 / 150

Πρωτεύοντα και ξένα κλειδιά 1 Κάθε πίνακας έχει ένα πρωτεύον κλειδί. 2 Το πρωτεύον κλειδί μπορεί να είναι απλό (ένα πεδίο), ή σύνθετο (συνδυασμός πεδίων). 3 Κάθε εγγραφή ενός πίνακα μπορεί να προσδιοριστεί με τη χρήση του πρωτεύοντος κλειδιού. 4 Η σύνδεση δεδομένων από διαφορετικούς πίνακες σύζευξη γίνεται (συνήθως) με τη χρήση του ξένου κλειδιού, 5 Ενας πίνακας μπορεί να έχει πολλά ξένα κλειδιά ή να μην έχει κανένα. 15 / 150

Συσχέτιση departments και employees Ν:1 Ο πίνακας departments έχει πρωτεύον κλειδί το πεδίο depid. Ο πίνακας employees έχει πρωτεύον κλειδί το πεδίο empid. Ο πίνακας employees έχει ξένο κλειδί το πεδίο depid, το οποίο παίρνει τιμές που αναφέρονται στις τιμές του πεδίου depid του πίνακα departments: departments.depid = employees.depid 16 / 150

Συσχέτιση departments και employees Ν:1 Το πεδίο employees.depid δεν είναι πρωτεύον κλειδί και δεν παίρνει μοναδικές τιμές: πολλοί υπάλληλοι εργάζονται στο ίδιο τμήμα. Οι πίνακες departments και employees συσχετίζονται μεταξύ τους με συσχέτιση Πολλά προς Ενα. 17 / 150 Ο πίνακας departments έχει πρωτεύον κλειδί το πεδίο depid. Ο πίνακας employees έχει πρωτεύον κλειδί το πεδίο empid. Ο πίνακας employees έχει ξένο κλειδί το πεδίο depid, το οποίο παίρνει τιμές που αναφέρονται στις τιμές του πεδίου depid του πίνακα departments: departments.depid = employees.depid

Συσχέτιση departments - employees 18 / 150

Συσχέτιση departments και employees 1:1 Ο πίνακας departments έχει πρωτεύον κλειδί το πεδίο depid. Ο πίνακας employees έχει πρωτεύον κλειδί το πεδίο empid. Ο πίνακας departments έχει ξένο κλειδί το πεδίο manager, το οποίο παίρνει τιμές που αναφέρονται στις τιμές του πεδίου emppid του πίνακα employees: departments.manager = employees.empid 19 / 150

Συσχέτιση departments και employees 1:1 Το πεδίο departments.manager δεν είναι πρωτεύον κλειδί αλλά παίρνει μοναδικές τιμές (UNIQUE). Οι πίνακες departments και employees συσχετίζονται μεταξύ τους με συσχέτιση Ενα προς Ενα. 20 / 150 Ο πίνακας departments έχει πρωτεύον κλειδί το πεδίο depid. Ο πίνακας employees έχει πρωτεύον κλειδί το πεδίο empid. Ο πίνακας departments έχει ξένο κλειδί το πεδίο manager, το οποίο παίρνει τιμές που αναφέρονται στις τιμές του πεδίου emppid του πίνακα employees: departments.manager = employees.empid

Συσχέτιση employees και projects Ν:Ν 21 / 150

Συσχέτιση employees και projects Ν:Ν 1 Ο πίνακας projects έχει πρωτεύον κλειδί το πεδίο proid. 22 / 150

Συσχέτιση employees και projects Ν:Ν 1 Ο πίνακας projects έχει πρωτεύον κλειδί το πεδίο proid. 2 Ο πίνακας workson έχει πρωτεύον κλειδί το συνδυασμό των πεδίων empid και proid (σύνθετο κλειδί). 23 / 150

Συσχέτιση employees και projects Ν:Ν 1 Ο πίνακας projects έχει πρωτεύον κλειδί το πεδίο proid. 2 Ο πίνακας workson έχει πρωτεύον κλειδί το συνδυασμό των πεδίων empid και proid (σύνθετο κλειδί). 3 Το πεδίο empid είναι ξένο κλειδί στον πίνακα workson και αναφέρεται στο πεδίο employees.empid. 24 / 150

Συσχέτιση employees και projects Ν:Ν 1 Ο πίνακας projects έχει πρωτεύον κλειδί το πεδίο proid. 2 Ο πίνακας workson έχει πρωτεύον κλειδί το συνδυασμό των πεδίων empid και proid (σύνθετο κλειδί). 3 Το πεδίο empid είναι ξένο κλειδί στον πίνακα workson και αναφέρεται στο πεδίο employees.empid. 4 Το πεδίο proid είναι ξένο κλειδί στον πίνακα workson και αναφέρεται στο πεδίο projects.proid. 25 / 150

Συσχέτιση employees και projects Ν:Ν 1 Ο πίνακας projects έχει πρωτεύον κλειδί το πεδίο proid. 2 Ο πίνακας workson έχει πρωτεύον κλειδί το συνδυασμό των πεδίων empid και proid (σύνθετο κλειδί). 3 Το πεδίο empid είναι ξένο κλειδί στον πίνακα workson και αναφέρεται στο πεδίο employees.empid. 4 Το πεδίο proid είναι ξένο κλειδί στον πίνακα workson και αναφέρεται στο πεδίο projects.proid. 5 Ενας υπάλληλος απασχολείται σε πολλά έργα, ένα έργο απασχολεί πολλούς υπαλλήλους, επομένως η συσχέτιση είναι Πολλά προς Πολλά. 26 / 150

Συσχέτιση employees και projects Ν:Ν 1 Ο πίνακας projects έχει πρωτεύον κλειδί το πεδίο proid. 2 Ο πίνακας workson έχει πρωτεύον κλειδί το συνδυασμό των πεδίων empid και proid (σύνθετο κλειδί). 3 Το πεδίο empid είναι ξένο κλειδί στον πίνακα workson και αναφέρεται στο πεδίο employees.empid. 4 Το πεδίο proid είναι ξένο κλειδί στον πίνακα workson και αναφέρεται στο πεδίο projects.proid. 5 Ενας υπάλληλος απασχολείται σε πολλά έργα, ένα έργο απασχολεί πολλούς υπαλλήλους, επομένως η συσχέτιση είναι Πολλά προς Πολλά. 6 Η σύζευξη των πινάκων employees και projects γίνεται μέσω του πίνακα workson. 27 / 150

Το σχήμα της βάσης company (MySQL) departments, τα τμήματα της εταιρείας employees, οι υπάλληλοι της εταιρείας projects, τα έργα που εκτελεί η εταιρεία workson, η απασχόληση των υπαλλήλων στα έργα 28 / 150

Το σχήμα της βάσης company (.odp) departments, τα τμήματα της εταιρείας employees, οι υπάλληλοι της εταιρείας projects, τα έργα που εκτελεί η εταιρεία workson, η απασχόληση των υπαλλήλων στα έργα 29 / 150