+ All Categories
Home > Documents > Παρουσίαση του...

Παρουσίαση του...

Date post: 01-Mar-2020
Category:
Upload: others
View: 7 times
Download: 0 times
Share this document with a friend
48
Βάσεις Δεδομένων Ενότητα 7.1: Structured Query Language - 1 ο Μέρος Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα
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 - Πανεπιστήμιο

7

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)

Παράδειγμα 2 – Πανεπιστήμιο (2)

8

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)

Η Εντολή 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)

• Συνθήκη 1 OR Συνθήκη 2: Η συνθετη συνθήκη ικανοποιείται όταν ικανοποιείται τουλάχιστον μια από τις δυο συνθήκες. (Σ1 OR Σ2)

16

Σ1 Σ2

Σ2 Σ1

Συνθήκη με Διάστημα Τιμών

• Κατάλογος των προϊόντων με τιμή μεταξύ 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 (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. Εμφανίστε τα στοιχεία όλων των δίκλινων ή τετράκλινων δωματίων με τιμή κάτω από 50,00 €τη βραδιά. Βάλτε τις τιμές κατά αύξουσα σειρά.

c. Εμφανίστε τη λίστα του προσωπικού (Κωδικός, όνομα, επώνυμο) που εργάζεταο στο Ξενοδοχείο ΦΙΛΟΞΕΝΕΙΑ.

d. Εμφανίστε τη λίστα των επισκεπτών που είναι γυναίκες και διαμένουν στην Ελλάδα.

e. Εμφανίστε τον αριθμό των δωματίων κατά τύπο (Μονόκλινα, Δίκλινα, σουϊτες).

41

Ασκήσεις Εξάσκησης (Α’ Ενότητας) (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 για τα παρακάτω ερωτήματα:

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 price < 50 AND type IN (‘Δίκλινο', ‘Τετράκλινο')

ORDER BY price;

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)

Ασκήσεις – Επίλυση c,d c) Εμφανίστε τη λίστα του προσωπικού (Κωδικός, όνομα, επώνυμο) που εργάζεται

στο Ξενοδοχείο ΦΙΛΟΞΕΝΕΙΑ

SELECT staffno, Fname, LName

FROM Staff

WHERE HotelNo = (SELECT HotelNo FROM hotel WHERE name = ‘ΦΙΛΟΧΕΝΙΑ’);

d) Εμφανίστε τη λίστα των επισκεπτών που είναι γυναίκες και διαμένουν στην Ελλάδα.

SELECT guestno, name

FROM Guest

WHERE sex = ‘Female’ AND address Like ‘%Ελλάδα%’

44

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)

Ασκήσεις – Επίλυση e, f e) Εμφανίστε τον αριθμό των δωματίων κατά τύπο (Μονόκλινα, Δίκλινα, σουϊτες…).

SELECT type, count(type),

FROM Room

GROUP BY type;

f) Εμφανίστε λίστα με τα δωμάτια (RoomNo) του Ξενοδοχείου ΧΕΝΙΑ που η τιμή τους είναι μεγαλύτερη από τη μέση τιμή των δωματίων όλων των Ξενοδοχείων

SELECT RoomNo, price

FROM Room

WHERE price > (SELECT AVERAGE(price)

FROM Room );

45

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)

Ασκήσεις – Επίλυση 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=‘Γεωργίου’);

46

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)

Ασκήσεις – Επίλυση 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’);

47

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)

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


Recommended