ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ
Πίνακας Πεδίο Τύπος Κύριο κλειδί Αναφορική ακεραιότητα οντοτήτων Ξένο κλειδί Αναφορική ακεραιότητα δεδομένων Δρ. Κεραμόπουλος Ευκλείδης 2
ΚΥΡΙΟ ΚΛΕΙΔΙ ΦΟΙΤΗΤΗΣ ΑΜ CHAR(5) ΟΝΟΜΑ VARCHAR(20) ΕΠΩΝΥΜΟ CHAR(30) ΗΜ. ΓΕΝΝΗΣΗΣ DATE ΤΥΠΟΙ ΠΕΔΙΑ Δρ. Κεραμόπουλος Ευκλείδης 3
Δρ. Κεραμόπουλος Ευκλείδης 4
Δρ. Κεραμόπουλος Ευκλείδης 5
Δημιουργία πίνακα (create) Τροποποίηση πίνακα (alter) Εισαγωγή δεδομένων (insert) Ενημέρωση δεδομένων (update) Διαγραφή δεδομένων (delete) Διαγραφή πίνακα (drop) Δρ. Κεραμόπουλος Ευκλείδης 6
Δημιουργία (create) Create table table_name ( Field_name type [not null] [PRIMARY KEY], Field_name type [not null], [Primary key(field_name 1, field_name 2, field_name n )], [constraint constraint_name foreign key(field_name) references table_name ON DELETE CASCADE RESTRICT NO ACTION ON UPDATE CASCADE RESTRICT NO ACTION], [constraint constraint_name check (field_name condition)] ) Δρ. Κεραμόπουλος Ευκλείδης 7
create table Sailors ( sid integer not null primary key, sname varchar(20), rating integer); Δρ. Κεραμόπουλος Ευκλείδης 8
create table boats (bid integer not null, bname varchar(20), color varchar(20), primary key(bid), constraint b_color check (color in ( 'red', 'green', 'blue', 'yellow')) ) εναλλακτικά constraint b_color check (color = 'red or color = 'green' or color = 'blue' or color = 'yellow')) ) Δρ. Κεραμόπουλος Ευκλείδης 9
create table Reserves (sid integer not null, bid integer not null, day1 date not null, primary key (sid, bid, day1), constraint r_sid foreign key(sid) references Sailors, constraint r_bid foreign key(bid) references boats); Δρ. Κεραμόπουλος Ευκλείδης 10
Τροποποίηση (alter) alter table sailors add column age real; Δρ. Κεραμόπουλος Ευκλείδης 11
Εισαγωγή (insert) INSERT INTO table_name (field_name 1,, field_name n ) values (value 1,, value n ), (value 11,, value 1n ) insert into sailors(sid, sname, rating, age) values (22, Dustin, 7, 45.0); Δρ. Κεραμόπουλος Ευκλείδης 12
Ενημέρωση (update) update Sailors S set s.age = s.age + 1, s.rating = s.rating 1 where s.sid = 22; Δρ. Κεραμόπουλος Ευκλείδης 13
Διαγραφή (delete) delete from sailors s where s.sname = Dustin ; Δρ. Κεραμόπουλος Ευκλείδης 14
Διαγραφή Πίνακα (drop) drop table sailors; Δρ. Κεραμόπουλος Ευκλείδης 15
Βήματα δημιουργία απλού SQL αιτήματος SELECT FROM WHERE Δρ. Κεραμόπουλος Ευκλείδης 16
Βήμα 1o: Ορισμός Πεδίου Ορισμού BHMA 1 SELECT FROM Sailors S, Reserves R WHERE Δρ. Κεραμόπουλος Ευκλείδης 17
Βήμα 2o: Σύζευξη BHMA 1 BHMA 2 SELECT FROM Sailors S, Reserves R WHERE S.sid = R.sid Δρ. Κεραμόπουλος Ευκλείδης 18
Βήμα 3o: Επιλογή SELECT BHMA 1 FROM Sailors S, Reserves R BHMA 2 WHERE S.sid = R.sid ΒΗΜΑ 3 and S.age < 20 Δρ. Κεραμόπουλος Ευκλείδης 19
Βήμα 4o: Προβολή ΒΗΜΑ 4 SELECT S.name, S.surname BHMA 1 FROM Sailors S, Reserves R BHMA 2 WHERE S.sid = R.sid ΒΗΜΑ 3 and S.age < 20 Δρ. Κεραμόπουλος Ευκλείδης 20
Ταξινόμηση: όποτε χρειάζεται ορίζεται μετά την προβολή Ομαδοποίηση: όποτε χρειάζεται ορίζεται πριν την προβολή Δρ. Κεραμόπουλος Ευκλείδης 21
Κατηγορίες ερωτημάτων Απλό select Where Order Group by Having Nested In Exists Forall (double not exists) Δρ. Κεραμόπουλος Ευκλείδης 22
Παράδειγμα 1: Να βρεθούν τα ονοματεπώνυμα των ναυτικών SELECT S.name, S.surname FROM Sailors S Δρ. Κεραμόπουλος Ευκλείδης 23
Παράδειγμα 2: Να βρεθούν οι κωδικοί των ναυτικών οι οποίοι έχουν κάνει κράτηση σε κόκκινη βάρκα SELECT R.sid FROM Boats B, Reserves R WHERE B.bid = R.bid and B.color = red Δρ. Κεραμόπουλος Ευκλείδης 24
Παράδειγμα 3: Να βρεθούν οι ηλικίες των ναυτικών των οποίων τα ονόματα αρχίζουν και τελειώνουν με το χαρακτήρα Β και επιπλέον έχουν μήκος τουλάχιστον τριών χαρακτήρων SELECT S.age FROM Sailors S WHERE S.sname like B_%Β Στον τελεστή like το σύμβολο _ αντικαθιστά ένα χαρακτήρα ενώ το σύμβολο % από 0 έως άπειρο. Δρ. Κεραμόπουλος Ευκλείδης 25
Παράδειγμα 4: Να βρεθούν οι ναυτικοί οι οποίοι έχουν το μεγαλύτερο rating SELECT S.sid FROM Sailors S WHERE S.rating >= ALL (SELECT S2.rating FROM Sailors S2) Δρ. Κεραμόπουλος Ευκλείδης 26
Παράδειγμα 5: Να βρεθούν οι ναυτικοί οι οποίοι έχουν μεγαλύτερο rating από το ναυτικό Bob SELECT S.sid FROM Sailors S WHERE S.rating > (SELECT max(s2.rating) FROM Sailors S2 WHERE S.name = Bob ) Δρ. Κεραμόπουλος Ευκλείδης 27
Παράδειγμα 6: Να βρεθούν τα ονόματα των ναυτικών οι οποίοι δεν έχουν κάνει κράτηση σε κόκκινη βάρκα (nested αίτημα) SELECT S.sname FROM Sailors S WHERE S.sid NOT IN (SELECT R.sid FROM Reserves R WHERE R.bid IN (SELECT B.bid FROM Boats B WHERE B.color = red )) Δρ. Κεραμόπουλος Ευκλείδης 28
Παράδειγμα 7: Να βρεθούν οι τιμές sid όλων των ναυτικών οι οποίοι έχουν κάνει κράτηση σε κόκκινη(-ες) βάρκα(-ες) αλλά όχι σε πράσινη βάρκα. SELECT S.sid FROM Sailors S, Reserves R, Boats B WHERE S.sid = R.sid and R.bid = B.bid and B.color = red EXCEPT SELECT S.sid FROM Sailors S, Reserves R, Boats B WHERE S.sid = R.sid and R.bid = B.bid and B.color = green Δρ. Κεραμόπουλος Ευκλείδης 29
Παράδειγμα 8: Να βρεθούν οι τιμές sid όλων των ναυτικών οι οποίοι έχουν κάνει κράτηση σε κόκκινη(-ες) βάρκα(-ες) και σε πράσινη βάρκα. SELECT S.sid FROM Sailors S, Reserves R, Boats B WHERE S.sid = R.sid and R.bid = B.bid and B.color = red and B.color = green ΛΑΘΟΣ: Η ΒΑΡΚΑ ΕΙΝΑΙ ΚΟΚΚΙΚΟΠΡΑΣΙΝΗ Δρ. Κεραμόπουλος Ευκλείδης 30
Παράδειγμα 8β: Να βρεθούν οι τιμές sid όλων των ναυτικών οι οποίοι έχουν κάνει κράτηση σε κόκκινη(-ες) βάρκα(-ες) και σε πράσινη βάρκα. SELECT S.sid FROM Sailors S, Reserves R1, Boats B1, Reserves R2, Boats B2 WHERE S.sid = R1.sid and R1.bid = B1.bid and B1.color = red and S.sid = R2.sid and R2.bid = B2.bid and B2.color = green SAILORS RESERVES R1 RESERVES R2 BOATS B1 BOATS B2 Δρ. Κεραμόπουλος Ευκλείδης 31
Παράδειγμα 8γ: Να βρεθούν οι τιμές sid όλων των ναυτικών οι οποίοι έχουν κάνει κράτηση σε κόκκινη(-ες) βάρκα(-ες) και σε πράσινη βάρκα. SELECT S.sid FROM Sailors S, Reserves R, Boats B WHERE S.sid = R.sid and R.bid = B.bid and B.color = red INTERSECT SELECT S.sid FROM Sailors S, Reserves R, Boats B WHERE S.sid = R.sid and R.bid = B.bid and B.color = green Δρ. Κεραμόπουλος Ευκλείδης 32
Παράδειγμα 9: Να βρεθούν τα ονόματα των ναυτικών οι οποίοι έχουν κάνει κρατήσεις σε όλες τις βάρκες. SELECT S.sname FROM Sailors S WHERE NOT EXISTS ( SELECT * FROM Boats B WHERE NOT EXISTS ( SELECT * FROM Reserves R WHERE S.sid = R.sid and R.bid = B.bid )) Δρ. Κεραμόπουλος Ευκλείδης 33
Παράδειγμα 10: Εμφανίστε το μέσο όρο ηλικίας όλων των ναυτικών ανά κλιμάκιο (rating). SELECT S.rating, AVG(S.age) AS AVGage FROM Sailors S GROUP BY S.rating Δρ. Κεραμόπουλος Ευκλείδης 34
Παράδειγμα 11: Εμφανίστε το πλήθος των κρατήσεων ανά μέρα (εμφανίστε μέρα, πλήθος) για εκείνη τη μέρα που έχουν γίνει περισσότερες από 10 κρατήσεις. SELECT R.day, COUNT(*) AS plithos FROM Reserves R GROUP BY R.day HAVING COUNT(*) > 10 Δρ. Κεραμόπουλος Ευκλείδης 35
Παράδειγμα 12: Να βρεθεί η ηλικία του νεότερου ενήλικα ναυτικού (>18 χρονών) για εκείνα τα rating όπου ανήκουν τουλάχιστον δύο ενήλικοι ναυτικοί. SELECT S.rating, MIN(S.age) AS minage FROM Sailors S WHERE S.age >= 18 GROUP BY S.rating HAVING COUNT(*) > 1 Δρ. Κεραμόπουλος Ευκλείδης 36
επόμενη ενότητα