Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... ·...

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

Transcript of Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... ·...

Page 1: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Βάσεις Δεδομένων Ενότητα 7.2: Structured Query Language - 2ο Μέρος

Αθανάσιος Σπυριδάκος

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

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

Page 2: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Άδειες Χρήσης

• Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

• Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

2

Page 3: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Χρηματοδότηση • Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια

του εκπαιδευτικού έργου του διδάσκοντα.

• Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού.

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

3

Page 4: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Σκοποί Ενότητας

Ο φοιτητής που θα παρακολουθήσει με επιτυχία την ενότητα αυτή θα διαθέτει τις απαιτούμενες θεωρητικές και πρακτικές γνώσεις ώστε:

• Να προστατεύει τις Βάσεις Δεδομένων ώστε τα δεδομένα να είναι ασφαλή τόσο από εξωτερικούς παράγοντες όσο και από αστοχίες του εξοπλισμού.

4

Page 5: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Περιεχόμενα ενότητας

• Οι συνδέσεις πινάκων στην SQL

• Διαχείριση Views με την SQL

• Οι εντολές UPDATE, DELETE

• Οι εντολές GRANT και REVOKE

• Παραδείγματα

5

Page 6: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Παράδειγμα 1

6

Page 7: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Παράδειγμα 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

Page 8: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Παράδειγμα 2 – Πανεπιστήμιο (2) Next-Of-Kin {matericNo, name, phone, relationship}

Primary key: matericNo, name

Foreign key: matericNo references Student (matericNo)

Undertake {stdMatericNo, moduleCode, performance}

Primary key: stdMatericNo, moduleCode

Foreign key: stdMatericNo references Student (matericNo)

Foreign key: moduleCode references Module (mCode)

Teaches {teachStaffNo, moduleCode, hours}

Primary key: teachStaffNo, moduleCode

Foreign key: teachStaffNo references Staff (staffNo)

Foreign key: moduleCode references Module (mCode)

Texts {moduleCode, text}

Primary key: moduleCode, text

Foreign key: moduleCode references Module (mCode)

Qualifications {qualStaffNo, qualification}

Primary key: qualStaffNo, qualification

Foreign Key: qualStaffNo references Staff (staffNo)

8

Page 9: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Παράδειγμα 2

9

Page 10: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ερωτήματα με Πολλούς Πίνακες • Υλοποιούν αυτό που είναι γνωστό ως join – Πράξη στη Σχεσιακή Άλγεβρα

• Συνδυασμός δεδομένων από πολλούς πίνακες. Οι Πίνακες συνδέονται με

τη λογική του master-detail (Πρωτεύον και Ξένο Κλειδί)

• Πριν προχωρήσουμε στη συγγραφή της εντολής θα πρέπει να διερευνησουμε : – Τους πίνακες που επριλαμβανουν τα δεδομένα και τις συνθήκες

– Τη διασύνδεση μεταξύ των Πινάκων

– Να έχουμε σχηματίσει το μονοπάτι σε διάγραμμα Συσχέτισης Οντοτήτων

10

Page 11: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Απλή Σύνδεση (join) • Κατάλογος όλων των τμημάτων και των μαθημάτων (Εφαρμογή Πανεπιστημίου)

SELECT c.cCode, c.Title, m.mCode, m.title

FROM course c, module m

WHERE c.cCode = m.CourceCode;

Course {cCode, title, duration, leaderStaffNo, deptName}

Module {mCode, title, startDate, endDate, coursework, exam, courseCode, cordStaffNo}

• Η SQL παρέχει και αυτόν τον τρόπο δήλωσης της σύνδεσης:

FROM course c JOIN module m ON c.cCode = m.curseCode

11

Page 12: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Εναλλακτικός Τρόπος για JOIN • Κατάλογος όλων των πελατών και των παραγγελιών τους (Εφαρμογή

Παραγγελίες)

SELECT c.CAFM, c.CNAME, O.OrderNo,

o.OrderDate m.title

FROM Customer c, Orders o

WHERE c.CAFM = o.CAFM;

• Η SQL παρέχει και αυτούς τους τρόπους δήλωσης της σύνδεσης:

FROM Customer c JOIN Orders o ON c.CAFM = o.CAFM

FROM Customer c JOIN Orders o ON CAFM

FROM Customer NATURALJOIN Orders

12

Page 13: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ταξινόμηση και Σύνδεση (ordered join)

• Κατάλογος όλων των πελατών και των παραγγελιών τους ταξινομημένες με βάση το Όνομα Πελάτη και την ημερομηνία της παραγγελίας (Εφαρμογή Παραγγελίες)

SELECT c.CAFM, c.CNAME, O.OrderNo, o.OrderDate FROM Customer c, Orders o WHERE c.CAFM = o.CAFM ORDER BY o.cName, o.OrderDate;

13

Page 14: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Σύνδεση (Join) με Τρεις Πίνακες • Για κάθε πελάτη, κατάλογο των παραγγελιών του και των

πωλήσεων προϊόντων ανά παραγγελία ομαδοποιημένες και ταξινομημένες κατά πελάτη.

SELECT c.CAFM, C.Cname, o.OrderNo, o.Orderdate, Pcode FROM Customers c, Orders o, Sales s

WHERE c.CAFM= o.CAFM AND o.OrdersNo = s.OrdersNo

GROUP BY c.Cname

ORDER BY c.Cname;

14

Page 15: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Σύνδεση (Join) με Τέσσερις Πίνακες • Για κάθε πελάτη, κατάλογο των παραγγελιών του και των πωλήσεων προϊόντων

(με αναλυτικά στοιχεία) ανά παραγγελία ομαδοποιημένες και ταξινομημένες κατά πελάτη.

SELECT c.CAFM, C.Cname, o.OrderNo, o.Orderdate, Pcode FROM Customers c, Orders o, Sales s, Products p

WHERE c.CAFM= o.CAFM AND o.OrdersNo = s.OrdersNo AND p.Pcode = s.Pcode

GROUP BY c.Cname

ORDER BY c.Cname;

15

Page 16: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Παράδειγμα με Ομαδοποίηση • Ο αριθμός των μαθημάτων που συντονίζει κάθε μέλος του προσωπικού κάθε

σχολής.

SELECT s.DeptName, s.staffNo, COUNT(*) AS

countmodule

FROM staff s, module m

WHERE s.sno = m.cordstaffNo

GROUP BY s.DeptName, s.staffNo

ORDER BY s.DeptName, s.staffNo;

16

Page 17: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Πως λειτουργεί η Διασύνδεση (Join)

• Η διαδικασία που ακολουθείται για τον υπολογισμό της Διασύνδεσης (join) είναι:

1. Βρίσκεται το καρτεσιανό γινόμενο των πινάκων που εμφανίζονται στο FROM.

2. Αν υπάρχει WHERE τότε εφαρμόζονται οι περιορισμοί και περιορίζονται οι εγγραφές του καρτεσιανού γινομένου

3. Για κάθε έγγραφή προσδιορίζονται οι τιμές κάθε στοιχείου που περιλαμβάνονται στη Select και παράγονται οι γραμμές του τελικού πίνακα.

• Αν υπάρχει SELECT DISTINCT τότε εξαφανίζονται οι διπλο-εγγραφές.

• Αν υπάρχει ORDER BY τότε ταξινομείται ο πίνακας.

17

Page 18: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Εσωτερικό (INNER) Joins • Σε ένα join, αν σε μια εγγραφή του ενός πίνακα δεν υπάρχουν συνδέσεις με εγγραφές του άλλου

πίνακα τότε παραλείπεται η εγγραφή από τον τελικό πίνακα.

• Το Εσωτερικό join κρύβει τις εγγραφές που δεν ικανοποιούν τις συνθήκες.

• Παράδειμα

Εμφάνιση των Πελατών και των Παραγγελιών τους

SELECT c.CAFM, c.CNAME, ο.OrderNo, o.OrderDate

FROM Customer c, Orders o

WHERE c.CAFM = o.CAFM

ORDER BY o.cName, o.OrderDate;

Αν ένας Πελάτης δεν έχει θέσει παραγγελίες

τότε δεν εμφανίζεται στον τελικό πίνακα

18

Page 19: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Αριστερή Εξωτερική Σύνδεση (Left Outer Join)

• Εμφάνιση των όλων των Πελατών και των Παραγγελιών τους

SELECT c.CAFM, c.CNAME, ο.OrderNo, o.OrderDate FROM Customer c LEFT JOIN Orders o ON c.CAFM = o.CAFM;

• Πελάτες που δεν έχουν θέσει παραγγελίες (ο

αριστερός πίνακας) θα εμφανίζονται με κενά (NULL) τα κελιά (πεδία) που αφορούν τις παραγγελίες. 19

Page 20: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Δεξιά (Right) Εξωτερική Σύνδεση (OuterJoin)

• Εμφάνιση όλων των Παραγγελιών και των Πελατών που έχουν θέσει τις Παραγγελίες

SELECT c.CAFM, c.CNAME, ο.OrderNo, o.OrderDate FROM Customer c RIGHT JOIN Orders o ON c.CAFM = o.CAFM;

• Παραγγελίες (Δεξιός Πίνακας) που δεν έχουν τεθεί από

Πελάτες (ο αριστερός πίνακας) θα εμφανίζονται με κενά (NULL) τα κελιά (πεδία) που αφορούν τους Πελάτες

20

Page 21: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ολοκληρωμένη Εξωτερική Σύνδεση (Full Outer Join)

• Εμφάνιση όλων των Παραγγελιών και όλων των Πελατών που έχουν θέσει τις Παραγγελίες

SELECT c.CAFM, c.CNAME, ο.OrderNo, o.OrderDate FROM Customer c FULL JOIN Orders o ON c.CAFM = o.CAFM;

• Οι Πελάτες (ο αριστερός πίνακας) και οι Παραγγελίες (ο

δεξιός Πίνακας) θα εμφανίζονται με κενά (NULL) όταν δεν υπάροχυν Πελάτες και Παραγγελίες αντίστοιχα.

21

Page 22: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

EXISTS και NOT EXISTS • EXISTS και NOT EXISTS χρησιμοποιούνται σε υπο-ερωτήματα

(ερωτήματα μέσα σε ερωτήματα) • Το αποτέλεσμα είναι μια λογική τιμή (True/False) • Με το EXISTS η τιμή είναι:

– True μόνο και μόνο όταν υπάρχει μια τουλάχιστον γραμμή στο αποτέλεσμα (πίνακα) του υποερωτήματος και

– False όταν από το ερώτημα προκύπτει κενός πίνακας

• Η NOT EXISTS είναι το αντίθετο του EXISTS. • Τα EXISTS και NOT EXISTS ελέγχουν μόνο την ύπαρξη ή όχι

εγγραφών και για το λόγο αυτό μπορούμε να έχουμε πολλές στήλες στο υποερώτημα. Σύνηθες η μορφή του υπο-ερωτήματος (SELECT *…)

22

Page 23: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Query using EXISTS • Να βρεθούν οι πελάτες που έχουν παραγγείλει προϊόντα την ημερομηνία

1/3/2013

SELECT sno, fname, lname, position

FROM Customer c

WHERE EXISTS

(SELECT * FROM Orders o

WHERE c.CAFM = o.CAFM AND OrderDate= #1/3/2013);

• Είναι το ίδιο με το παρακάτω ερώτημα

SELECT sno, fname, lname, position

FROM Customer c, Orders o

WHERE c.CAFM = o.CAFM AND OrderDate= #1/3/2013;

23

Page 24: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ένωση, Τομή και Διαφορά • Η Ένωση, η Τομή και η Διαφορά (πράξεις της Σχεσιακής Άλγεβρας)

υποστηρίζονται από την SQL. • Με την ένωση δημιουργείτάι ένας νέος πίνακας από τους Α και Β

που περιλαμβάνει τις εγγραφές και των δυο πινάκων (όχι διπλεγγραφές)

• Με την τομή δημιουργείται ένας νέος πίνακας από τους πίνακες Α και Β που περιλαμβάνει τις κοινές εγγραφές δυο Πινάκων

• Η Διαφορά του πίνακα Β από τον Α περιλαμβάνει ολες τις εργγραφές του Α που δεν περιλαμβάνονταιι στον Πίνακα Β.

• Οι Πίνακες Α και Β πρέπει να είναι συμβατοί (union compatible).

24

Page 25: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ένωση UNION

• Οι Επωνυμίες και οι διευθύνσεις όλων των πελατών και προμηθευτών.

(SELECT Cname as epon, Address FROM Customers) UNION (SELECT Sname as epon, Address FROM Suppliers);

25

Page 26: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Τομή INTERSECT • Να βρεθούν οι προμηθευτές που προμηθεύουν και τα δύο

προϊόντα με κωδικούς 10001 και 10002.

(SELECT s.SAFM, s.Sname FROM Suppliers s, Provisions p WHERE s.SAFM=p.SAFM and p.Pcode=10001 ) INTERSECT (SELECT s.SAFM, s.Sname FROM Suppliers s, Provisions p WHERE s.SAFM=p.SAFM and p.Pcode=10002 );

• Μπορείτε να γράψετε αλλιώς το ερώτημα

χρησιμοποιόντας DISTINCT και EXIST;

26

Page 27: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Χρήση του EXCEPT • Κατάλογος όλων των προμηθευτών που μας προμηθεύουν το

προϊον με κωδικό 10001 αλλά όχι το προϊόν με κωδικό 10002. (SELECT s.SAFM, s.Sname FROM Suppliers s, Provisions p WHERE s.SAFM=p.SAFM and p.Pcode=10001 ) EXCEPT (SELECT s.SAFM, s.Sname FROM Suppliers s, Provisions p WHERE s.SAFM=p.SAFM and p.Pcode=10002 • Μπορείτε να γράψετε αλλιώς το ερώτημα χρησιμοποιόντας

DISTINCT και NOT IN;

27

Page 28: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ασκήσεις Εξάσκησης (B’ Ενότητας) • Δίδεται το παρακάτω τμήμα Βάσης Δεδομένων που αφορά όμιλο Ξενοδοχείων:

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)

• (Υπογραμμισμένα τα πρωτεύοντα κλειδιά και τα ξένα κλειδιά έχουν το ίδιο όνομα με τα πρωτεύοντα κλειδιά)

• Γράψτε τις εντολές SQL για τα παρακάτω ερωτήματα:

a) Εμφανίστε την τιμή και το είδος όλων των δωματίων στο Ξενοδοχείο ΦΙΛΟΞΕΝΕΙΑ.

b) Εμφανίστε όλους τους επισκέπτες που διαμένουν σήμερα στο Ξενοδοχείο ΦΙΛΟΞΕΝΕΙΑ.

c) Για κάθε ξενοδοχείο εμφανίστε το όνομα του ξενοδοχείου και τον αριθμό του προσωπικού (υπό την κατάλληλη κεφαλίδα) που εργάζονται εκεί.

d) Για κάθε ξενοδοχείο εμφανίστε το όνομα του ξενοδοχείου και το όνομα και το φύλο του υπαλλήλου που διευθύνει το ξενοδοχείο.

28

Page 29: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ασκήσεις Εξάσκησης (Β’ ΕΝότητας) (2)

• Δίδεται το παρακάτω τμήμα Βάσης Δεδομένων που αφορά όμιλο Ξενοδοχείων:

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)

• (Υπογραμμισμένα τα πρωτεύοντα κλειδιά και τα ξένα κλειδιά έχουν το ίδιο όνομα με τα πρωτεύοντα κλειδιά)

• Γράψτε τις εντολές SQL για τα παρακάτω ερωτήματα:

e) Εμφανίστε λίστα με όσους είχαν διαμονή στο δωμάτιο 101 του Ξενοδοχείου ΧΕΝΙΑ απο την 1/2/2013 ‘εως 31/5/2013. Στη λίστα θα συμπεριλαμβάνεται το όνομα και ο ημερομηνίες διαμονής (από .. έως)

f) Εμφανίστε τα στοιχεία όλων των κρατήσεων δωματίων για την ημερομηνία 1/1/2014. θα συμπεριλαμβάνετια το όνομα του Ξενοδοχείου, ο αριθμός του δωματίου και το όνομα του ενοίκου.

g) Εμφανίστε τη λίστα των Ξενοδοχείων (όνομα, Διεύθυνση) που έχει διαμείνει ο Επισκέπτης με όνομα ‘Γεωργίου Γεώργιος”.

h) Ποιά είναι η πληρότητα (αριθμος δωματίων που έχουν κρατηθεί, σύνολο αριθμού δωματίων) στο ξενοδοχείο XENIA την 1/1/2013.

29

Page 30: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ασκήσεις Εξάσκησης (B’ Ενότητας) – Επίλυση

a) α) Εμφανίστε την τιμή και το είδος όλων των δωματίων στο Ξενοδοχείο ΦΙΛΟΞΕΝΕΙΑ.

Select r.roomNo, r.Price, r.type From Room r, Hotel h Where h.HotelNo=r.HotelNo and h.name=‘ΦΙΛΟΞΕΝΕΙΑ’; b) Εμφανίστε όλους τους επισκέπτες (όλα τα στοιχεία) που

διαμένουν σήμερα στο Ξενοδοχείο ΦΙΛΟΞΕΝΕΙΑ. Select g.name, g.Address, g.sex From quest g, booking b, hotel h Where g.HotelNo=b.HotelNo AND g.guestno=b.guestNo AND h.Name=‘ΦΙΛΕΧΕΝΕΙΑ’ AND ToDay BETWEEN b.DateFrom AND DateTo;

30

Page 31: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ασκήσεις Εξάσκησης (B’ Ενότητας) – Επίλυση (2)

c) Για κάθε ξενοδοχείο εμφανίστε το όνομα του ξενοδοχείου και τον αριθμό του προσωπικού (υπό την κατάλληλη κεφαλίδα) που εργάζονται εκεί.

Select h.Name, Count(StaffNo) From Staff s, Hotel h Where h.HotelNo=s.HotelNo Group by HotelNo; d) Για κάθε ξενοδοχείο εμφανίστε το όνομα του ξενοδοχείου και το όνομα

και το φύλο του υπαλλήλου που διευθύνει το ξενοδοχείο Select h.Name, s.Fname, s.lname, s.sex From Hotel h, Staff s Where h.mgrstaffNo=s.StaffNo;

31

Page 32: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ασκήσεις Εξάσκησης (B’ Ενότητας) – Επίλυση (3)

e) Εμφανίστε λίστα με όσους είχαν διαμονή στο δωμάτιο 101 του Ξενοδοχείου ΧΕΝΙΑ απο την 1/2/2013 ‘εως 31/5/2013. Στη λίστα θα συμπεριλαμβάνεται το όνομα και ο ημερομηνίες διαμονής (από .. έως)

Select g.name From Guest g, Booking b, Hotel h

Where h.HotelNo=b.HotelNo AND g.guestno=b.guestno and (datefrom BETWEEN {1/2/2013 } AND {31/5/2013} OR DateTo between {1/2/2013 } AND {31/5/2013} ) AND h.Name=‘XENIA’ AND roomNo=101;

f) Εμφανίστε τα στοιχεία όλων των κρατήσεων δωματίων για την ημερομηνία 1/1/2014. Θα συμπεριλαμβάνετια το όνομα του Ξενοδοχείου, ο αριθμός του δωματίου και το όνομα του ενοίκου.

Select h.HotelNo, h.Name, g.Name, b. roomNo

From Guest g, Hotel h, Booking b

Where h.HotelNo=b.HotelNo AND b.GuestNo=B.GuestNo and {1/1/2014} Between DataFrom AND DateTo;

32

Page 33: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Εισαγωγή Δεδομένων (ΙNSERT) • Για την εισαγωγή δεδομένων εκτελούμε την εντολή Insert

• Γενικός τρόπος σύνταξης

INSERT INTO όνομα πίνακα [ (κατάλογος χαρακτηριστικών)]

VALUES (τιμές των χαρακτηριστικών);

• Η λίστα των χαρακτηριστικών μπορεί να παραλείπεται. Στην περίπτωση αυτή θεωρείται ότι η σειρά των κχαρακτηριστικών συμπίπτει με την σειρά που έχουν δημιουργηθεί με την εντολή CREATE TABLE.

• Εαν σε κάποιο χαρακτηριστικό δεν έχουμε τιμή τότε θα πρεπει να το δηλώσουμε κενό (NULL) εκτός αν έχει εξ ορισμού τιμές (DEFAULT) που έχουν ορισθεί στη δημιουργία του χαρακτηριστικού.

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

• Ο τύπος των δεδομένων των χαρακτηριστικών στην VALUES θα πρεπει να είναι του ίδιου τύπου με βάση τη δημιουργία των πινάκων (αριθμητικά, αλφαριθμητικά, ημερομηνία…)

33

Page 34: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Παράδειγμα - INSERT…VALUES • Εισαγωγή μιας νέας εγγραφής πελάτη

INSERT INTO Customers VALUES (‘1234’, ‘Φιλίππος Πέτρου’, ‘Π. Ράλλη 220, Αιγάλεω’,’210222222’, ‘Πέτρου Στάθης’, NULL);

• Αλλιώς

INSERT INTO Customers (CAFM, Cname, Address, zip, Telephone, Contact_Person, e_mail) VALUES (‘1234’, ‘Φιλίππος Πέτρου’, ‘Π. Ράλλη 220, Αιγάλεω’,’210222222’, ‘Πέτρου Στάθης’, NULL);

34

Page 35: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

INSERT…SELECT

• Μπορούμε να εισάγουμε δεδομένα σε πίνακα από άλλον πίνακα με το συνδυασμό της εντολής INSERT με την εντολή SELECT:

INSERT INTO όνομα πίνακα [ (κατάλογος χαρακτηριστικών) ] SELECT…

35

Page 36: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

INSERT…SELECT (2) • Θέλουμε σε έναν πίνακα να διατηρούμε τα στατιστικά στοιχεία για τις

βαθμολογίες των φοιτητών ανά τμήμα. Ο πίνακας θα ονομάζεται stat_students και θα τον έχουμε δημιουργήσει εκ των προτέρων.

INSERT INTO stat_students

(SELECT ModuleCode, COUNT(*), AVERAGE(Performance)

FROM Student s, UnderTake u

WHERE s.matericno = u.stdmatericno

GROUP BY s.coursecode, u.modulecode);

36

Page 37: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Η εντολή UPDATE • Χρησιμοποιείται για την μεταβολή των δεδομένων σε πίνακες.

UPDATE όνομα πίνακα (βασικού πίνακα ή όψης) SET χαρακτηριστικό1 = τιμή 1 [, χαρακτηριστικό2 = τιμή 2 …] [WHERE συνθήκη];

• SET – Δίνουμε τιμές στα χαρακτηριστικά

• WHERE – Δίνουμε τη συνθήκη με την ίδια λογική όπως και στις

εντολές SELECT.

37

Page 38: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

UPDATE

• Αύξηση του Μισθού του προσωπικού κατά 4% UPDATE staff SET salary = salary*1.04;

• Αύξηση του Μισθού του Γεωργίου Γεώργιου κατά 10%

UPDATE staff SET salary = salary*1.1

WHERE fname=‘Γεώργιος’ AND lName =‘Γεωργίου’;

38

Page 39: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

UPDATE (2)

• Αύξηση του Μισθού του Γεωργίου Γεώργιου κατά 10% και μεταβολή της Διεύθυνσής του

UPDATE staff

SET salary = salary*1.1, Address =‘Νέα Διεύθυνση’

WHERE fname=‘Γεώργιος” AND lName =‘Γεωργίου’;

39

Page 40: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Διαγραφή Εγγραφών DELETE • DELETE FROM όνομα πίνακα • [WHERE συνθήκη αναζήτησης]

Όνομα Πίνακα: Βασικός Πίνακας ή όψη που επιδέχεται μεταβολές. Συνθήκη Αναζήτησης. Αν παραλείπται τότε διαγράφονται όλες οι εγγραφές. Αλλιώς, διαγράφονται οι εγγραφές που προκύπτον από την συνθήκη αναζήτησης (συντάσσεται όπως και στην εντολή SELECT)

40

Page 41: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

DELETE Συγκεκριμένες Εγγραφές • Διαγραφή της παραγγελίας 1001

DELETE FROM Sales WHERE OrderNo=1001’; DELETE FROM Orders WHERE OrderNo=1001’;

• Χρειάζεται προσοχή δίοτι γίνεται ελεγχος της ακεραιότητας

αναφοράς από το ΣΔΣΒΔ.

41

Page 42: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

DELETE All Rows

• Διαγραφή όλων των φοιτητών

DELETE FROM Students;

42

Page 43: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ασκήσεις Εξάσκησης (Γ Ενότητας) • Δίδεται το παρακάτω τμήμα Βάσης Δεδομένων που αφορά όμιλο Ξενοδοχείων:

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)

• (Υπογραμμισμένα τα πρωτεύοντα κλειδιά και τα ξένα κλειδιά έχουν το ίδιο όνομα με τα πρωτεύοντα κλειδιά)

• Γράψτε τις εντολές SQL για τα παρακάτω ερωτήματα:

a) α) Να εισαχθούν τα στοιχεία ενός ακόμη μέλους του προσωπικού στο ξενοδοχείο ΧΕΝΙΑ (2001, ‘Παναγιώτου’, ‘Νικόλαος’, ‘Αρρεν’, ‘22/4/1992’, 1500, ‘2103334422’, 201)

b) β) Να αυξηθούν οι τιμές των δωματίων του Ξενοδοχείου ΧΕΝΙΑ κατά 5%.

c) γ) Να μεταβληθεί η Διεύθυνση του Πελάτη Γεωργίου Γεώργιου. (Νέα Διεύθυνση ‘Ανθέων 23, Πάτρα, 10101’)

d) δ) Να διαγραφεί κράτηση του Γεωργίου Γεώργιου στο Ξενοδοχείου ΧΕΝΙΑ με ημερομηνία άφιξης 1/3/2013.

43

Page 44: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ασκήσεις Εξάσκησης (Γ Ενότητας) - Επίλυση

a) Να εισαχθούν τα στοιχεία ενός ακόμη μέλους του προσωπικού στο ξενοδοχείο ΧΕΝΙΑ (2001, ‘Παναγιώτου’, ‘Νικόλαος’, ‘Αρρεν’, ‘22/4/1992’, 1500, ‘2103334422’, 201)

INSERT INTO Staff VALUES (‘1111’, ‘Νικόλαος’, ‘Παναγιώτου’, ‘Αρρεν’, {22/4/1992}, 1500, ‘2103334422’, 201) b) Να αυξηθούν οι τιμές των δωματίων του Ξενοδοχείου ΧΕΝΙΑ κατά 5%. UPDATE Room SET price= price*0.01 WHERE HotelNo = (SELECT Hotelno FROM Hotel WHERE name=‘XENIA’);

44

Page 45: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Ασκήσεις Εξάσκησης (Γ Ενότητας) – Επίλυση (2)

c) Να μεταβληθεί η Διεύθυνση του Πελάτη Γεωργίου Γεώργιου. (Νέα Διεύθυνση‘Ανθέων 23, Πάτρα, 10101’)

UPDATE Guest SET Address= ‘Ανθέων 23, Πάτρα, 10101’ WHERE name = ‘Γεωργίου Γεώργιος’; d) Να διαγραφεί κράτηση του Γεωργίου Γεώργιου στο Ξενοδοχείου ΧΕΝΙΑ

με ημερομηνία άφιξης 1/3/2013. DELETE FROM Booking WHERE DateFrom= {1/3/2013} AND Guestno = (Select Guestno from Guest WHERE name = ‘Γεωργίου Γεώργιος’);

45

Page 46: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Δημιουργία Βάσης Δεδομένων • CREATE SCHEMA [όνομα Β.Δ.|

AUTHORIZATION Όνομα Διαχειριστή Β.Δ.]

• Δημιουργείται μια νέα Β.Δ.

• DROP SCHEMA Όνομα Β.Δ.[RESTRICT | CASCADE ] – RESTRICT (default), Θα πρέπει η Β.Δ. να είναι κενή. Σε αντίθετη

περίπτωση δεν γίνεται η διαγραφή. – CASCADE, Διαγράφονται όλα τα αντικείμενα που είναι

συσχετισμένα στη Β.Δ. Σε οποιοδήποτε σφάλμα σταματά η διαγραφή.

46

Page 47: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Δημιουργία Πίνακα Βάσης CREATE TABLE Όνομα Πίνακα

(Όνομα Χαρακτηριστικού τύπος Δεδομένων [NULL | NOT NULL] [,…]

[CONSTRAINT constraint_name]

{ [NOT NULL] | NULL]

| UNIQUE

| PRIMARY KEY

| CHECK (condition)

| REFERENCE clause

}

)

• Δημιουργούμε έναν νέο πίνακα στη Βάση Δεδομένων. Ορίζουμε τα χαρακτηριστικά και τον τύπο δεδομένων τους.

• NULL (default) Καθορίζουμε αν επιτρέπονται κενά στο χαρακτηριστικό. Με NOT NULL, απορρίπτεται κάθε διαδικασία εισαγωγής κενού στο χαρακτηριστικό (Πρωτευοντα κλειδιά και σε ορισμένες περιπτωσεις τα Ξένα Κλειδιά).

• Με τις Συνθήκες (που τίθενται σε επίπεδο γραμμής ορίζουμε κλειδιά, Ξένα Κλειδιά, …)

47

Page 48: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Δημιουργία Πίνακα Βάσης (2) CREATE TABLE Staff

(sno CHAR(6),

fName VARCHAR(25) NOT NULL,

lName VARCHAR(30) NOT NULL,

address VARCHAR(50) NOT NULL,

teleNo VARCHAR(20) CONSTRAINT phoneNumber UNIQUE,

sex CHAR CONSTRAINT staffSex check (sex IN ('M', 'F')),

dob DATE,

salary NUMBER(7,2) CONSTRAINT staffSalary CHECK (salary between 20000 and 60000),

nin VARCHAR(12),

bno CHAR(4),

CONSTRAINT staff_pk PRIMARY KEY(sno),

CONSTRAINT staff_NIN UNIQUE (nin),

CONSTRAINT staff_branchNo FOREIGN KEY (bno) REFERENCES Branch (bno) ON DELETE SET NULL

ON UPDATE CASCADE

48

Page 49: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Διαγραφή Πίνακα Drop Table • Drop Table Όνομα Πίνακα [RESTRICT

|CASCADE]

Παρ. DROP TABLE undertake;

• Διαγραφή του Πίνακα και των εγγραφών του. • RESTRICT, Αν υπάρχουν πίνακες που είναι συνδεδεμένοι με

τις εγγραφές του πίνακα (ακεραιότητα αναφοράς) τότε σεν πραγματοποιείται η διαγραφή.

• CASCADE, Διαγράφονται και οι εξαρτημένες εγγραφές των εγγραφών του πίνακα που διαγράφεται.

49

Page 50: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Μεταβολή Δομής Πίνακα ALTER TABLE Όνομα Πίνακα [ADD [COLUMN] Όνομα Χαρακτηριστικού Τύπος Δεδομένων [DEFAULT Έκφραση] [Περιορισμοί] [DROP [COLUMN] Χαρακτηριστικό [RESTRICT | CASCADE]] [ADD [CONTSRAINT Όνομα Συνθήκης] Ορισμός της Συνθήκης] [DROP [CONSTRAINT Όνομα Συνθήκης [RESTRICT | CASCADE]] [ALTER [COLUMN] SET DEFAULT Έκφραση] [ALTER [COLUMN] DROP DEFAULT]

50

Page 51: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

Μεταβολή Δομής Πινάκων

• Παραδείγματα

• ALTER TABLE Staff ADD position VARCHAR(30);

• ALTER TABLE Staff ALTER position SET DEFAULT 'Assistant';

• ALTER TABLE Staff DROP CONSTRAINT staffSex;

• ALTER TABLE Staff ALTER sex SET DEFAULT 'F'

51

Page 52: Παρουσίαση του PowerPointeclass.teipir.gr/openeclass/modules/document/file.php... · 2015-07-04 · From Room r, Hotel h. Where h.HotelNo=r.HotelNo and h.name=‘ ΦΙΛΟΞΕΝΕΙΑ’;

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