Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

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

Παρόμοιες παρουσιάσεις


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

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

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

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

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

5 Περιεχόμενα ενότητας Οι συνδέσεις πινάκων στην SQL Διαχείριση Views με την SQL Οι εντολές UPDATE, DELETE Οι εντολές GRANT και REVOKE Παραδείγματα 5

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

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

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

9 Παράδειγμα 2 9

10 Ερωτήματα με Πολλούς Πίνακες Υλοποιούν αυτό που είναι γνωστό ως join – Πράξη στη Σχεσιακή Άλγεβρα Συνδυασμός δεδομένων από πολλούς πίνακες. Οι Πίνακες συνδέονται με τη λογική του master-detail (Πρωτεύον και Ξένο Κλειδί) Πριν προχωρήσουμε στη συγγραφή της εντολής θα πρέπει να διερευνησουμε : – Τους πίνακες που επριλαμβανουν τα δεδομένα και τις συνθήκες – Τη διασύνδεση μεταξύ των Πινάκων – Να έχουμε σχηματίσει το μονοπάτι σε διάγραμμα Συσχέτισης Οντοτήτων 10

11 Απλή Σύνδεση (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

12 Εναλλακτικός Τρόπος για 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

13 Ταξινόμηση και Σύνδεση (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

14 Σύνδεση (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

15 Σύνδεση (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

16 Παράδειγμα με Ομαδοποίηση Ο αριθμός των μαθημάτων που συντονίζει κάθε μέλος του προσωπικού κάθε σχολής. 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

17 Πως λειτουργεί η Διασύνδεση (Join) Η διαδικασία που ακολουθείται για τον υπολογισμό της Διασύνδεσης (join) είναι: 1.Βρίσκεται το καρτεσιανό γινόμενο των πινάκων που εμφανίζονται στο FROM. 2.Αν υπάρχει WHERE τότε εφαρμόζονται οι περιορισμοί και περιορίζονται οι εγγραφές του καρτεσιανού γινομένου 3.Για κάθε έγγραφή προσδιορίζονται οι τιμές κάθε στοιχείου που περιλαμβάνονται στη Select και παράγονται οι γραμμές του τελικού πίνακα. Αν υπάρχει SELECT DISTINCT τότε εξαφανίζονται οι διπλο- εγγραφές. Αν υπάρχει ORDER BY τότε ταξινομείται ο πίνακας. 17

18 Εσωτερικό (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

19 Αριστερή Εξωτερική Σύνδεση (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

20 Δεξιά (Right) Εξωτερική Σύνδεση (OuterJoin) Εμφάνιση όλων των Παραγγελιών και των Πελατών που έχουν θέσει τις Παραγγελίες SELECT c.CAFM, c.CNAME, ο.OrderNo, o.OrderDate FROM Customer c RIGHT JOIN Orders o ON c.CAFM = o.CAFM; Παραγγελίες (Δεξιός Πίνακας) που δεν έχουν τεθεί από Πελάτες (ο αριστερός πίνακας) θα εμφανίζονται με κενά (NULL) τα κελιά (πεδία) που αφορούν τους Πελάτες 20

21 Ολοκληρωμένη Εξωτερική Σύνδεση (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

22 EXISTS και NOT EXISTS EXISTS και NOT EXISTS χρησιμοποιούνται σε υπο-ερωτήματα (ερωτήματα μέσα σε ερωτήματα) Το αποτέλεσμα είναι μια λογική τιμή (True/False) Με το EXISTS η τιμή είναι: – True μόνο και μόνο όταν υπάρχει μια τουλάχιστον γραμμή στο αποτέλεσμα (πίνακα) του υποερωτήματος και – False όταν από το ερώτημα προκύπτει κενός πίνακας Η NOT EXISTS είναι το αντίθετο του EXISTS. Τα EXISTS και NOT EXISTS ελέγχουν μόνο την ύπαρξη ή όχι εγγραφών και για το λόγο αυτό μπορούμε να έχουμε πολλές στήλες στο υποερώτημα. Σύνηθες η μορφή του υπο-ερωτήματος (SELECT *…) 22

23 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

24 Ένωση, Τομή και Διαφορά Η Ένωση, η Τομή και η Διαφορά (πράξεις της Σχεσιακής Άλγεβρας) υποστηρίζονται από την SQL. Με την ένωση δημιουργείτάι ένας νέος πίνακας από τους Α και Β που περιλαμβάνει τις εγγραφές και των δυο πινάκων (όχι διπλεγγραφές) Με την τομή δημιουργείται ένας νέος πίνακας από τους πίνακες Α και Β που περιλαμβάνει τις κοινές εγγραφές δυο Πινάκων Η Διαφορά του πίνακα Β από τον Α περιλαμβάνει ολες τις εργγραφές του Α που δεν περιλαμβάνονταιι στον Πίνακα Β. Οι Πίνακες Α και Β πρέπει να είναι συμβατοί (union compatible). 24

25 Ένωση UNION Οι Επωνυμίες και οι διευθύνσεις όλων των πελατών και προμηθευτών. (SELECT Cname as epon, Address FROM Customers) UNION (SELECT Sname as epon, Address FROM Suppliers); 25

26 Τομή 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

27 Χρήση του 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

28 Ασκήσεις Εξάσκησης (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

29 Ασκήσεις Εξάσκησης (Β’ ΕΝότητας) (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

30 Ασκήσεις Εξάσκησης (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

31 Ασκήσεις Εξάσκησης (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

32 Ασκήσεις Εξάσκησης (B’ Ενότητας) – Επίλυση (3) e)Εμφανίστε λίστα με όσους είχαν διαμονή στο δωμάτιο 101 του Ξενοδοχείου ΧΕΝΙΑ απο την 1/2/2013 ‘εως 31/5/2013. Στη λίστα θα συμπεριλαμβάνεται το όνομα και ο ημερομηνίες διαμονής (από.. έως) Select g.nameFrom 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

33 Εισαγωγή Δεδομένων (ΙNSERT) Για την εισαγωγή δεδομένων εκτελούμε την εντολή Insert Γενικός τρόπος σύνταξης INSERT INTO όνομα πίνακα [ (κατάλογος χαρακτηριστικών)] VALUES (τιμές των χαρακτηριστικών); Η λίστα των χαρακτηριστικών μπορεί να παραλείπεται. Στην περίπτωση αυτή θεωρείται ότι η σειρά των κχαρακτηριστικών συμπίπτει με την σειρά που έχουν δημιουργηθεί με την εντολή CREATE TABLE. Εαν σε κάποιο χαρακτηριστικό δεν έχουμε τιμή τότε θα πρεπει να το δηλώσουμε κενό (NULL) εκτός αν έχει εξ ορισμού τιμές (DEFAULT) που έχουν ορισθεί στη δημιουργία του χαρακτηριστικού. Τα δεδομένα που περιλαμβάνονται στη VALUES θα πρεπει να δίδονται με την ίδια σειρά που έχουν δοθεί στον κατάλογο των χαρακτηριστικών ή εφόσον δεν έχει δοθεί κατάλογος χαρακτηριστικών με τη σειρά που εχουν δοθεί στη δημιουργία του πίνακα. Ο τύπος των δεδομένων των χαρακτηριστικών στην VALUES θα πρεπει να είναι του ίδιου τύπου με βάση τη δημιουργία των πινάκων (αριθμητικά, αλφαριθμητικά, ημερομηνία…) 33

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

35 INSERT…SELECT Μπορούμε να εισάγουμε δεδομένα σε πίνακα από άλλον πίνακα με το συνδυασμό της εντολής INSERT με την εντολή SELECT: INSERT INTO όνομα πίνακα [ (κατάλογος χαρακτηριστικών) ] SELECT… 35

36 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

37 Η εντολή UPDATE Χρησιμοποιείται για την μεταβολή των δεδομένων σε πίνακες. UPDATE όνομα πίνακα (βασικού πίνακα ή όψης) SET χαρακτηριστικό1 = τιμή 1 [, χαρακτηριστικό2 = τιμή 2 …] [WHERE συνθήκη]; SET – Δίνουμε τιμές στα χαρακτηριστικά WHERE – Δίνουμε τη συνθήκη με την ίδια λογική όπως και στις εντολές SELECT. 37

38 UPDATE Αύξηση του Μισθού του προσωπικού κατά 4% UPDATE staff SET salary = salary*1.04; Αύξηση του Μισθού του Γεωργίου Γεώργιου κατά 10% UPDATE staff SET salary = salary*1.1 WHERE fname=‘Γεώργιος’ AND lName =‘Γεωργίου’; 38

39 UPDATE (2) Αύξηση του Μισθού του Γεωργίου Γεώργιου κατά 10% και μεταβολή της Διεύθυνσής του UPDATE staff SET salary = salary*1.1, Address =‘Νέα Διεύθυνση’ WHERE fname=‘Γεώργιος” AND lName =‘Γεωργίου’; 39

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

41 DELETE Συγκεκριμένες Εγγραφές Διαγραφή της παραγγελίας 1001 DELETE FROM Sales WHERE OrderNo=1001’; DELETE FROM Orders WHERE OrderNo=1001’; Χρειάζεται προσοχή δίοτι γίνεται ελεγχος της ακεραιότητας αναφοράς από το ΣΔΣΒΔ. 41

42 DELETE All Rows Διαγραφή όλων των φοιτητών DELETE FROM Students; 42

43 Ασκήσεις Εξάσκησης (Γ Ενότητας) Δίδεται το παρακάτω τμήμα Βάσης Δεδομένων που αφορά όμιλο Ξενοδοχείων: 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

44 Ασκήσεις Εξάσκησης (Γ Ενότητας) - Επίλυση 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

45 Ασκήσεις Εξάσκησης (Γ Ενότητας) – Επίλυση (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

46 Δημιουργία Βάσης Δεδομένων CREATE SCHEMA [όνομα Β.Δ.| AUTHORIZATION Όνομα Διαχειριστή Β.Δ.] Δημιουργείται μια νέα Β.Δ. DROP SCHEMA Όνομα Β.Δ.[RESTRICT | CASCADE ] – RESTRICT (default), Θα πρέπει η Β.Δ. να είναι κενή. Σε αντίθετη περίπτωση δεν γίνεται η διαγραφή. – CASCADE, Διαγράφονται όλα τα αντικείμενα που είναι συσχετισμένα στη Β.Δ. Σε οποιοδήποτε σφάλμα σταματά η διαγραφή. 46

47 Δημιουργία Πίνακα Βάσης CREATE TABLE Όνομα Πίνακα (Όνομα Χαρακτηριστικού τύπος Δεδομένων [NULL | NOT NULL] [,…] [CONSTRAINT constraint_name] { [NOT NULL] | NULL] | UNIQUE | PRIMARY KEY | CHECK (condition) | REFERENCE clause } ) Δημιουργούμε έναν νέο πίνακα στη Βάση Δεδομένων. Ορίζουμε τα χαρακτηριστικά και τον τύπο δεδομένων τους. NULL (default) Καθορίζουμε αν επιτρέπονται κενά στο χαρακτηριστικό. Με NOT NULL, απορρίπτεται κάθε διαδικασία εισαγωγής κενού στο χαρακτηριστικό (Πρωτευοντα κλειδιά και σε ορισμένες περιπτωσεις τα Ξένα Κλειδιά). Με τις Συνθήκες (που τίθενται σε επίπεδο γραμμής ορίζουμε κλειδιά, Ξένα Κλειδιά, …) 47

48 Δημιουργία Πίνακα Βάσης (2) CREATE TABLE Staff (snoCHAR(6), fNameVARCHAR(25) NOT NULL, lNameVARCHAR(30) NOT NULL, addressVARCHAR(50) NOT NULL, teleNoVARCHAR(20) CONSTRAINT phoneNumber UNIQUE, sexCHAR CONSTRAINT staffSex check (sex IN ('M', 'F')), dobDATE, salary NUMBER(7,2) CONSTRAINT staffSalary CHECK (salary between 20000 and 60000), ninVARCHAR(12), bnoCHAR(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

49 Διαγραφή Πίνακα Drop Table Drop Table Όνομα Πίνακα [RESTRICT |CASCADE] Παρ. DROP TABLE undertake; Διαγραφή του Πίνακα και των εγγραφών του. RESTRICT, Αν υπάρχουν πίνακες που είναι συνδεδεμένοι με τις εγγραφές του πίνακα (ακεραιότητα αναφοράς) τότε σεν πραγματοποιείται η διαγραφή. CASCADE, Διαγράφονται και οι εξαρτημένες εγγραφές των εγγραφών του πίνακα που διαγράφεται. 49

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

51 Μεταβολή Δομής Πινάκων Παραδείγματα 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

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


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

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google