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

Σχετικά έγγραφα
Βάσεις Δεδομένων. Ενότητα 5: Σημασιολογικός Σχεδιασμός. Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

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

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

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

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

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

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

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3:

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

Βάσεις Δεδομένων. Ενότητα 3: Σχεδιασμός και Διαχείριση Βάσεων Δεδομένων. Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

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

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


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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Πληροφορική. Εργαστηριακή Ενότητα 6 η : Ταξινόμηση & Ομαδοποίηση Δεδομένων

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

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

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

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

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


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

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

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

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

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

Τεχνοοικονομική Ανάλυση Οργάνωση και Διοίκησης Έργων και Επιχειρήσεων

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

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

Εισαγωγή στην πληροφορική

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

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

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

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

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

SQL Data Manipulation Language

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

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Βάσεις Δεδομένων. Ενότητα 4: Μοντελοποίηση Συσχέτισης Οντοτήτων. Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

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

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

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

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

Ανοικτά Ακαδημαϊκά Μαθήματα

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

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


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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Α: Γραμμικά Συστήματα

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

1 / 97

Βάσεις Δεδομένων Ι [Σημειώσεις Εργαστηρίου]

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

1 / 87

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

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

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

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

Εργαστήριο βάσεων δεδομένων. Εισαγωγή στη MySQL (2)

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

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

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

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

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

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

DELETE, UPDATE, INSERT.

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Ενότητα 1: Εισαγωγή στις Βάσεις Δεδομένων. Αθανάσιος Σπυριδάκος Διοίκηση Επιχειρήσεων

DELETE, UPDATE, INSERT

ΗΓλώσσαSQL. Εισαγωγή Βασικές Έννοιες Τύποι Δεδομένων Ορισμός Δεδομένων Χειρισμός Δεδομένων

Βάσεις Δεδομένων Ι [Σημειώσεις Εργαστηρίου]

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

Βάσεις Δεδομένων Ι SQL Μέρος 1 ο. Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

ΜΑΘΗΜΑΤΙΚΑ ΓΙΑ ΟΙΚΟΝΟΜΟΛΟΓΟΥΣ

Ανοικτά Ακαδημαϊκά Μαθήματα

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Βάσεις Δεδομένων ΗγλώσσαSQL (Structured Query Language)

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

Το Μοντέλο των Οντοτήτων Συσχετίσεων Entity Relationship Model. Νικόλαος Ζ. Ζάχαρης

MOCϦϣΎϬϴϠϋϝϮμΤϟϢΗϊΟήϤϟ. USE northwind SELECT employeeid, lastname, firstname, title FROM employees GO

PHP 3. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

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

Εργαστήριο βάσεων δεδομένων. Εισαγωγή στη MySQL (2)

Βάσεις Δεδομένων Ι SQL Μέρος 2 ο. Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

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

Transcript:

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Βάσεις Δεδομένων Ενότητα 7.1: Structured Query Language - 1 ο Μέρος Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

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

Σκοποί Ενότητας Ο φοιτητής που θα παρακολουθήσει με επιτυχία την ενότητα αυτή θα διαθέτει τις απαιτούμενες θεωρητικές και πρακτικές γνώσεις ώστε: Να προστατεύει τις Βάσεις Δεδομένων ώστε τα δεδομένα να είναι ασφαλή τόσο από εξωτερικούς παράγοντες όσο και από αστοχίες του εξοπλισμού. 4

Περιεχόμενα Ενότητας Εισαγωγή στην SQL Οι υποδιαρέσεις της SQL (DDL και DML) Οι εντολές CREATE, ALTER, DROP TABLE Η εντολή ερωτημάτων SELECT και οι εφαρμογές της 5

Παράδειγμα 1 6

Παράδειγμα 2 - Πανεπιστήμιο Department {deptname, phone, faxno, location, mgrstaffno, mgrstartdate} Primary key: deptname Foreign key: mgrstaffno references Staff (staffno) Staff {staffno, fname, lname, address, phone, officeno, sex, salary, post, computerid, deptname} Primary key: staffno Foreign key: deptname references Department (deptname) Course {ccode, title, duration, leaderstaffno, deptname} Primary key: ccode Foreign key: leaderstaffno references Staff (staffno) Foreign key: deptname reference Department (deptname) Module {mcode, title, startdate, enddate, coursework, exam, coursecode, cordstaffno} Primary key: mcode Foreign key: coursecode references Course (ccode) Foreign key: cordstaffno references Staff (staffno) Student {matericno, fname, lname, town, street, postcode, dob, sex, loan, coursecode} Primary key: matericno Foreign key: coursecode references Course (ccode) 7

Παράδειγμα 2 Πανεπιστήμιο (2) Next-Of-Kin {matericno, name, phone, relationship} Primary key: matericno, name Foreign key: teachstaffno references Staff (staffno) Foreign key: modulecode references Module (mcode) Foreign key: matericno references Student (matericno) Texts {modulecode, text} Undertake {stdmatericno, modulecode, performance} Primary key: stdmatericno, modulecode Foreign key: stdmatericno references Student (matericno) Foreign key: modulecode references Module (mcode) Primary key: modulecode, text Foreign key: modulecode references Module (mcode) Qualifications {qualstaffno, qualification} Primary key: qualstaffno, qualification Foreign Key: qualstaffno references Staff (staffno) Teaches {teachstaffno, modulecode, hours} Primary key: teachstaffno, modulecode 8

Η Εντολή SELECT SELECT [DISTINCT ALL] {* [χαρακτηριστικά [AS νεος τίτλος]] [, ] } FROM ονομα πινάκων [ψευδόνυμο] [, ] [WHERE συνθήκη] [GROUP BY λίστα χαρακτηριστικών] [HAVING συνθήκη] [ORDER BY λίστα χαρακτηριστικών] [] Προαιρετικά 9

Εντολή SELECT SELECT Καθορίζουμε ποιά χαρακτηριστικά θα εμφανίσουμε. FROM Καθορίζουμε τους πίνακες από όπου θα αντλήσουμε δεδομένα WHERE Θέτουμε τα φίλτρα GROUP BY Ομαδοποιούμε τις γραμμές των δεδομένων HAVING Θέτουμε φίλτρα (ειδικές περιπτώσεις). ORDER BY Ταξινόμηση. Η σειρά σύνταξης δεν πρέπει να αλλάζει Τα SELECT και FROM είναι υποχρεωτικά 10

Όλες οι στήλες και όλες οι γραμμές ενός πίνακα Κατάλογος (με όλες τις λεπτομέρειες) των φοιτητών του Πανεπιστημίου: SELECT matericno, fname, lname, town, street, postcode, dob, sex, loan, coursecode FROM student; Χρησιμοποιείται και το * για όλες τις στήλες: SELECT * FROM student; 11

Καθορισμένες Στήλες, Όλες οι γραμμές Κατάλογος του κωδικού, όνομα, επώνυμο και διεύθυνση των φοιτητών. SELECT matericno, fname, lname, town, street, postcode FROM student; 12

Χρήση DINSTINCT Κατάλογος των Μαθημάτων τα οποία έχουν επιλέξει οι φοιτητές. SELECT modulecode FROM Undertake; Επιστρέφει τους κωδικούς των μαθημάτων που έχουν επιλεγεί. Κάθε κωδικός εμφανίζεται τόσες φορές, όσες και έχει δηλωθεί από φοιτητές. Χρησιμοποιούμε DINSTINCT για να εξαφανίσουμε τις διπλο-εμφανίσεις: SELECT DISTINCT modulecode FROM Undertake; 13

Υπολογιζόμενα Πεδία Κατάλογος των προϊόντων, της τιμής τους και του ΦΠΑ SELECT pcode, description, price, price*0.23 FROM product; Στην εμφάνιση των αποτελεσμάτων ο τίτλος της στήλης του ΦΠΑ θα είναι price*0.23. Για την μεταβολή του τίλτου της στήλης έχουμε: SELECT pcode, description, price, price*0.23 AS FPA FROM product; 14

Ερώτημα με Συνθήκη Κατάλογος των προϊόντων με τιμή μεγαλύτερη των 100. SELECT pcode, description, price FROM product WHERE price > 100; 15

Με Πολλές συνθήκες Κατάλογος των φοιτητών που κατοικούν στην Αθήνα ή στη Λάρισα. SELECT matericno, fname, lname, town, street, postcode FROM student WHERE town= Αθήνα OR town= Λάρισα ; Χρησιμοποιούμε τους τελεστές AND και OR. Συνθήκη 1 AND Συνθήκη 2: Η συνθετη συνθήκη ικανοποιείται όταν ικανοποιούνται και οι δυο συνθήκες. (Σ1 AND Σ2) Σ2 Σ1 Συνθήκη 1 OR Συνθήκη 2: Η συνθετη συνθήκη ικανοποιείται όταν ικανοποιείται τουλάχιστον μια από τις δυο συνθήκες. (Σ1 OR Σ2) Σ2 Σ1 16

Συνθήκη με Διάστημα Τιμών Κατάλογος των προϊόντων με τιμή μεταξύ 50 και 100. SELECT pcode, description, price FROM product WHERE price BETWEEN 50 AND 100; Στο BETWEEN περιλαμβάνονται και οι ακραίες τιμές 17

Συνθήκη με Διάστημα Τιμών (2) Χρησιμοποιείται και το NOT BETWEEN. Ερώτημα με BETWEEN μπορεί να γραφεί και με αυτήν τη μορφή: SELECT pcode, description, prise FROM product WHERE price >=50 AND price <=100; 18

Αναζήτηση με Λίστα Τιμών Κατάλογος των φοιτητών που κατοικούν Αθήνα, Λάρισα ή Πάτρα. SELECT matericno, fname, lname, town, street, postcode FROM student WHERE town= IN( Αθήνα, Λάρισα, Πάτρα ); Χρησιμοποιείται και το (NOT IN). Είναι ίδιο με την παρακάτω εντολή SELECT matericno, fname, lname, town, street, postcode FROM student WHERE town= Αθήνα OR town= Λάρισα OR town = Πάτρα ; Το IN είναι περισσότερο αποτελεσματικό στις λίστες με πολλές τιμές. 19

Χαλαρή Αναζήτηση Εύρεση το προσωπικού (Καθηγητών) που μένουν στον Πειραιά. SELECT staffno, fname, lname, address, salary FROM staff WHERE address LIKE %Πειραιά% ; Η SQL έχει δύο χρήσιμα σύμβολα: - %: Σειρά από χαρακτήρες (* στην MS ACCESS); -_ (underscore): ένας μόνο χαρακτήρας. LIKE %Πειραιά% ; μια σειρά από χαρακτήρες που περιέχει το Πειραιά. 20

IS NULL Κατάλογος των φοιτητών που δεν έχουν βαθμολογηθεί στο μάθημα με κωδικό 101. SELECT stdmatericno, modulecode, performance FROM Undertake WHERE modulecode= 101 AND performance IS NULL; Υπάρχει και το IS NOT NULL για τον έλεγχο μη κενών τιμών. 21

Ταξινόμηση με Ένα Κλειδί Κατάλογος του προσωπικού (Καθηγητών) με τους μισθούς τους, ταξινομημένοι κατά φθίνουσα σειρά του μισθού. SELECT staffno, fname, lname, salary FROM staff ORDER BY salary DESC; Κατάλογος του προσωπικού (Καθηγητών) με τους μισθούς, ταξινομημένοι κατά αύξουσα σειρά του μισθού. SELECT staffno, fname, lname, salary FROM staff ORDER BY salary; [DESC - Φθίνουσα, ASC Αύξουσα] 22

Ταξινόμηση με Πολλές Στήλες (Κλειδιά) Η ταξινόμηση γίνεται με το πρώτο κλειδί. Στην περίπτωση που δυο γραμμές έχουν την ίδια τιμή στο πρώτο κλειδί ταξινόμησης τότε χρησιμοποιείται το δεύτερο SELECT staffno, fname, lname, address, salary FROM staff ORDER BY lname, fname; 23

Συναρτήσεις ISO Πρότυπο: COUNT Μετράμε τις εγγραφές SUM Αθροίζεται ένα αριθμητικό πεδίο. AVG Μέση τιμή. MIN Ελάχιστη τιμή. MAX Μέγιστη τιμή COUNT, MIN και MAX εφαρμόζονται σε αριθμητικά και μη αριθμητικά δεδομένα, SUM και AVG χρησιμοποιούνται μόνο σε αριθμητικά δεδομένα. Εκτός της COUNT(*), κάθε άλλη συνάρτηση πρώτα εξαφανίζει τις κενές τιμές του πεδίου και μετά εκτελεί τις πράξεις στις εγγραφές με μη κενά στο πεδίο 24

Συναρτήσεις (2) COUNT(*) μετρά τον αριθμό των εγγραφών Μπορούμε να χρησιμοποιήσουμε DISTINCT για να εξαφανίσουμε τις διπλο-μετρήσεις Οι Συναρτήσεις μπορούν να χρησιμοποιηθούν στη λίστα πεδίων της SELECT και στη HAVING. 25

Συναρτήσεις (3) Το παρακάτω δεν επιτρέπεται διότι η COUNT έχει όρισμα, χωρίς να υπάρχει Group By SELECT sno, COUNT(salary) FROM staff; Πόσοι φοιτητές πέρασαν το μάθημα με κωδικό 1001; SELECT COUNT(*) AS count FROM Undertake WHERE performance >=5 and ModuleCode=1001; 26

Χρήση της COUNT(DISTINCT) Πόσους πελάτες είχαμε τον Μάρτιο του 2013 SELECT COUNT(DISTINCT CAFM) AS count FROM Orders WHERE Orderdate BETWEEN #01/01/2013# AND #31/03/2013#; 27

Χρήση της COUNT και της SUM Υπολογισμός του αριθμού πωλήσεων προϊόντων και του αθροίσματος των εσόδων. SELECT COUNT(pcode) AS productcount, SUM(Quantity) AS SumQuantity, SUM(total) AS SumTotals FROM sales; 28

Χρήση της MIN, MAX, AVG Υπολογισμός του ελάχιστου, μέγιστου, και της μέσης τιμής των τιμών των προϊόντων. SELECT MIN(price) AS pricemin, MAX(price) AS pricemax, AVG(price) AS priceavg FROM products; 29

Ομαδοποίηση Χρησιμοποιούμε το GROUP BY για να υπολογίζουμε μερικά αθροίσματα. Οι εντολές SELECT και GROUP BY χρησιμοποιούνται για να παράγουμε στατιστικά δεδομένα σε ομάδες των δεδομένων. Όλα τα πεδία που μετέχουν στη SELECT πρέπει να εμφανίζονται στην GROUP BY εκτός αν περιλαμβάνεται συνάρτηση (πχ sum). Αν χρησιμοποιείται WHERE μαζί με την GROUP BY, τότε εκτελείται πρώτα η WHERE και μετά δημιουργούνται τα groups με τις εγγραφές που έχουν απομείνει. 30

Χρήση της GROUP BY Ο αριθμός του Καθηγητών για κάθε τμήμα και το σύνολο των μισθών των καθηγητών του κάθε τμήματος. SELECT DeptName, COUNT(Staffno) AS Staffcount, SUM(salary) AS SumSalary FROM staff GROUP BY DeptName ORDER BY DeptName; 31

Περιορισμοί στην Ομαδοποίηση Η HAVING έχει σχεδιασθεί για να λειτουργεί με GROUP BY για το περιορισμό των ομάδων που εμφανίζονται στον τελικό πίνακα. Λειτουργεί παρόμοια με το WHERE, το WHERE φιλτράρει εγγραφές ενώ το HAVING φιλτράρει ομάδες. Τα πεδία που εμφανίζονται στο HAVING πρέπει να εμφανίζονται και στο GROUP BY ή να περιλαμβάνονται σε συνάρτηση στη SELECT. 32

Χρήση του HAVING Για κάθε Τμήμα με περισσότερα από ένα μέλη στο προσωπικό, βρείτε τον αριθμό του προσωπικού και το άθροισμα των μισθών. SELECT DeptName, COUNT(Staffno) AS StaffCount, SUM(salary) AS SalarySum FROM staff GROUP BY DeptName HAVING COUNT(Staffno) >1 ORDER BY DeptName; 33

Συνδυασμός (φωλιασμένες) SELECT Μπορούμε να έχουμε εντολή SELECT μέσα σε εντολή SELECT. Το υπο-ερώτημα μπορεί να χρησιμοποιηθεί σε WHERE και HAVING μιας εντολής SELECT, και καλείται υπο-ερώτημα ή φωλιασμένο ερώτημα. Υπο-ερωτήματα μπορούν να χρησιμοποιηθούν σε εντολές INSERT, UPDATE, και DELETE. 34

Παράδειγμα υπο-ερωτήματος Τα μαθήματα που διευθύνει ο Καθηγητής που έχει το Γραφείο 101. SELECT mcode, title, cordstaffno FROM Course WHERE CordStaffNo = (SELECT StaffNo FROM Staff WHERE OfficeNo= 101 ); 35

Υπο-ερώτημα με Συνάρτηση Κατάλογος του προσωπικού που ο μισθός του είναι μεγαλύτερος του μέσου μισθού και της διαφοράς του μισθού από το μέσο Μισθό. SELECT staffno, fname, lname, salary - (SELECT avg(salary) FROM Staff) AS saldiff FROM staff WHERE salary > (SELECT avg(salary) FROM staff); <<Όταν ένα υπο-ερώτημα συυμμετέχει σε έναν έλεγχο θα πρέπει να βρίσκεται στη δεξιά πλευρά.>> 36

Φωλιασμένα Ερωτήματα: Χρήση της IN Οι Φοιτητές (Κωδικοί) που παρακολουθούν μαθήματα που διευθύνει ο Καθηγητής που έχει το Γραφείο 101. SELECT matericno, FROM UnderTake WHERE ModuleCode IN (SELECT mcode FROM Module WHERE CordStaffNo = (SELECT StaffNo FROM Staff WHERE OfficeNo= 101 )); 37

ANY και ALL Οι ANY και ALLμπορούν να χρησιμοποιηθούν σε υπο-ερωτήματα που παράγουν πίνακες μιας στήλης. Αν σε ένα υπο-ερώτημα χρησιμοποιείται το ALL, τότε η συνθήκη ικανοποιείται αν ικανοποιείται από όλες τις τιμές που παράγονται από το υπο-ερώτημα. Αν σε υπο-ερώτημα χρησιμοποιείται το ANY, αν η συνθήκη ικανοποιείται από μια τουλάχιστον τιμή που προέρχεται από το υπο-ερώτημα. Αν το υπο-ερώτημα είναι κενό τότε το, ALL επιστρέφει true, ενώ το ANY επιστρέφει false. Το ISO standard επιτρέπει τη χρήση του SOME στη θέση του ANY. 38

Χρήση του ANY/SOME Να βρεθεί το προσωπικό που ο μισθός του είναι μεγαλύτερος από τουλάχιστον ενός που εργάζεται στη Σχολή ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ. SELECT sno, fname, lname, salary FROM staff WHERE salary > SOME (SELECT salary FROM staff WHERE DeptName = ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ); 39

Χρήση του ALL Να βρεθεί το προσωπικό του οποίου ο μισθός είναι μεγαλύτερος από τους μισθούς κάθε εργαζόμενου στη Σχολή Διοίκησης και Οικονομίας. SELECT sno, fname, lname, salary FROM staff WHERE salary >ALL (SELECT salary FROM staff WHERE DeptName= ΔΙΟΙΚΗΣΗ ΚΑΙ ΟΙΚΟΝΟΜΙΑ ); 40

Ασκήσεις Εξάσκησης (Α Ενότητας) Δίδεται το παρακάτω τμήμα Βάσης Δεδομένων που αφορά όμιλο Ξενοδοχείων: Hotel Room (hotelno, name, address, mgrstaffno) (roomno, hotelno, type, price) Booking (hotelno, guestno, datefrom, dateto, roomno) Guest Staff (guestno, name, address, sex) (staffno, fname, lname, sex, dob, salary, telno, hotelno) (Υπογραμμισμένα τα πρωτεύοντα κλειδιά και τα ξένα κλειδιά έχουν το ίδιο όνομα με τα πρωτεύοντα κλειδιά) Γράψτε τις εντολές SQL για τα παρακάτω ερωτήματα: a. Εμφανίστε λίστα με τα ονόματα και τις διευθύνσεις όλων των επισκεπτών που ζουν στην Αθήνα. Βάλτε τα ονόματα σε αλφαβητική σειρά. b. Εμφανίστε τα στοιχεία όλων των δίκλινων ή τετράκλινων δωματίων με τιμή κάτω από 50,00 τη βραδιά. Βάλτε τις τιμές κατά αύξουσα σειρά. c. Εμφανίστε τη λίστα του προσωπικού (Κωδικός, όνομα, επώνυμο) που εργάζεταο στο Ξενοδοχείο ΦΙΛΟΞΕΝΕΙΑ. d. Εμφανίστε τη λίστα των επισκεπτών που είναι γυναίκες και διαμένουν στην Ελλάδα. e. Εμφανίστε τον αριθμό των δωματίων κατά τύπο (Μονόκλινα, Δίκλινα, σουϊτες). 41

Ασκήσεις Εξάσκησης (Α Ενότητας) (2) Δίδεται το παρακάτω τμήμα Βάσης Δεδομένων που αφορά όμιλο Ξενοδοχείων: Hotel Room (hotelno, name, address, mgrstaffno) (roomno, hotelno, type, price) Booking (hotelno, guestno, datefrom, dateto, roomno) Guest Staff (guestno, name, address, sex) (staffno, fname, lname, sex, dob, salary, telno, hotelno) (Υπογραμμισμένα τα πρωτεύοντα κλειδιά και τα ξένα κλειδιά έχουν το ίδιο όνομα με τα πρωτεύοντα κλειδιά) Γράψτε τις εντολές SQL για τα παρακάτω ερωτήματα: f) Εμφανίστε λίστα με τα δωμάτια (RoomNo) του Ξενοδοχείου ΧΕΝΙΑ που η τιμή τους είναι μεγαλύτερη από τη μέση τιμή των δωματίων όλων των Ξενοδοχείων. g) ζ) Εμφανίστε τα στοιχεία όλων των κρατήσεων δωματίων για την ημερομηνία 1/1/2014. h) η) Εμφανίστε τη λίστα των Ξενοδοχείων (Κωδικό) που έχει διαμείνει ο Επισκέπτης με όνομα Γεωργίου Γεώργιος. i) θ) Ποιά είναι η μέση, η μεγαλύτερη και η μικρότερη τιμή των δωματίων Ξενοδοχείων της Αθήνας j) Ι) Εμφανίστε λίστα με μονόκλινα δωμάτια του Ξενοδοχείου με κωδικό 101 που είναι φθινότερα από όλα τα μονίκλινα δωμάτια του Ξενοδοχείου με κωδικό 103. 42

Ασκήσεις Επίλυση a, b a) Εμφανίστε λίστα με τα ονόματα και τις διευθύνσεις όλων των επισκεπτών που ζουν στην Αθήνα. Βάλτε τα ονόματα σε αλφαβητική σειρά. SELECT name, address FROM Guest WHERE address LIKE '%Αθήνα%' ORDER BY name; b) Εμφανίστε τα στοιχεία όλων των δίκλινων ή τετράκλινων δωματίων με τιμή κάτω από 50,00 τη βραδιά. Βάλτε τις τιμές κατά αύξουσα σειρά. SELECT * FROM Room WHERE ORDER BY price < 50 AND type IN ( Δίκλινο', Τετράκλινο') price; Hotel (hotelno, name, address, mgrstaffno) Room (roomno, hotelno, type, price) Booking (hotelno, guestno, datefrom, dateto, roomno) Guest (guestno, name, address, sex) Staff (staffno, fname, lname, sex, dob, salary, telno, hotelno) 43

Ασκήσεις Επίλυση c,d c) Εμφανίστε τη λίστα του προσωπικού (Κωδικός, όνομα, επώνυμο) που εργάζεται στο Ξενοδοχείο ΦΙΛΟΞΕΝΕΙΑ SELECT staffno, Fname, LName FROM Staff Hotel (hotelno, name, address, mgrstaffno) Room (roomno, hotelno, type, price) Booking (hotelno, guestno, datefrom, dateto, roomno) Guest (guestno, name, address, sex) Staff (staffno, fname, lname, sex, dob, salary, telno, hotelno) WHERE HotelNo = (SELECT HotelNo FROM hotel WHERE name = ΦΙΛΟΧΕΝΙΑ ); d) Εμφανίστε τη λίστα των επισκεπτών που είναι γυναίκες και διαμένουν στην Ελλάδα. SELECT guestno, name FROM Guest WHERE sex = Female AND address Like %Ελλάδα% 44

Ασκήσεις Επίλυση e, f e) Εμφανίστε τον αριθμό των δωματίων κατά τύπο (Μονόκλινα, Δίκλινα, σουϊτες ). SELECT type, count(type), FROM Room GROUP BY type; Hotel (hotelno, name, address, mgrstaffno) Room (roomno, hotelno, type, price) Booking (hotelno, guestno, datefrom, dateto, roomno) Guest (guestno, name, address, sex) Staff (staffno, fname, lname, sex, dob, salary, telno, hotelno) f) Εμφανίστε λίστα με τα δωμάτια (RoomNo) του Ξενοδοχείου ΧΕΝΙΑ που η τιμή τους είναι μεγαλύτερη από τη μέση τιμή των δωματίων όλων των Ξενοδοχείων SELECT RoomNo, price FROM Room WHERE price > (SELECT AVERAGE(price) FROM Room ); 45

Ασκήσεις Επίλυση g, h g) Εμφανίστε τα στοιχεία όλων των κρατήσεων δωματίων για την ημερομηνία 1/1/2014. SELECT HotelNo, GuestNo, RoomNo FROM Booking WHERE datafrom <= #1/1/2014# AND datato > #1/1/2014#; h) Εμφανίστε τη λίστα των Ξενοδοχείων (Κωδικό) που έχει διαμείνει ο Επισκέπτης με όνομα Γεωργίου Γεώργιος. SELECT HotelNo, FROM Booking WHERE guestno = (SELECT guestno FROM Guest WHERE fname= Γεώργιος AND lname= Γεωργίου ); Hotel (hotelno, name, address, mgrstaffno) Room (roomno, hotelno, type, price) Booking (hotelno, guestno, datefrom, dateto, roomno) Guest (guestno, name, address, sex) Staff (staffno, fname, lname, sex, dob, salary, telno, hotelno) 46

Ασκήσεις Επίλυση i, j i) Ποιά είναι η μέση, η μεγαλύτερη και η μικρότερη τιμή των δωματίων Ξενοδοχείων της Αθήνας SELECT AVERAGE(price), MIN(price), MAX(price) FROM Room WHERE Address LIKE %Αθήνα% ; j) Εμφανίστε λίστα με μονόκλινα δωμάτια του Ξενοδοχείου με κωδικό 101 που είναι φθινότερα από όλα τα μονόκλινα δωμάτια του Ξενοδοχείου με κωδικό 103. SELECT roomno FROM Room WHERE type= Μονόκλινο AND hotelno= 101 AND price > ALL (SELECT price FROM room WHERE hotelno= 103 ); Hotel (hotelno, name, address, mgrstaffno) Room (roomno, hotelno, type, price) Booking (hotelno, guestno, datefrom, dateto, roomno) Guest (guestno, name, address, sex) Staff (staffno, fname, lname, sex, dob, salary, telno, hotelno) 47

Τέλος Ενότητας