Transcript S.sid
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας ΕΣΔ232 – Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας SQL: Ερωτήματα, προγραμματισμός και εναύσματα © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Περιεχόμενα Περιεχόμενα Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Βιβλιογραφία Ενότητας Βιβλιογραφία [Ramakrishnan 2002a]: Chapter 5 [Ullman 2007]: Chapter 5 [Seyed 2007]: Chapter 5 [Forta 2005]: Chapters 2-3 [Oppel 2004]: Chapter 4 [Petersen 2002]: Chapter 8 [Taylor 2000]: Chapter 12 Αθ. Μάργαρης, Πανεπιστήμιο Μακεδονίας: SQL © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Το βασικό SQL ερώτημα Η βασική δομή σύνταξης ενός SQL ερωτήματος έχει την πιο κάτω μορφή: SELECT [DISTINCT] target-list FROM relation-list WHERE qualification relation-list Κατάλογος με τα ονόματα πινάκων οι οποίοι θα χρησιμοποιηθούν για τον υπολογισμό του ερωτήματος (είναι πιθανό τα ονόματα αυτά να ακολουθούνται από μεταβλητές διαστήματος -range-variables). target-list Κατάλογος πεδίων από τους πίνακες τα οποία θέλουμε να εμφανιστούν στα αποτελέσματα qualification Κριτήρια επιλογής μέσω συγκριτικών τελεστών (Attr op const or Attr1 op Attr2, όπου op είναι ένας από τους πιο κάτω τελεστές <, >, =, ≥, ≤, ≠) οι οποίοι συνδυάζονται μέσω των λογικών τελεστών AND, OR και NOT. DISTINCT είναι μια προαιρετική επιλογή η οποία υποδεικνύει ότι η απάντηση του ερωτήματος πρέπει να περιέχει μόνο διαφορετικές γραμμές. © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Οι πίνακες (στιγμιότυπα) των παραδειγμάτων Στα επόμενα παραδείγματα θα χρησιμοποιήσουμε τα πιο κάτω στιγμιότυπα των πινάκων Sailors (2 διαφορετικά στιγμιότυπα S1 και S2) και Reserves (στιγμιότυπο R1). S1 R1 sid snam e rating age 22 dustin 7 45 31 lubber 8 55 58 rusty 10 35 sid bid date 22 101 15/10/2009 58 103 11/12/2009 S2 sid sname rating age 28 yuppy 9 35 31 lubber 8 55 44 guppy 5 35 58 rusty 10 35 © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Η στρατηγική υπολογισμού των ερωτημάτων Το αποτέλεσμα ενός SQL ερωτήματος προκύπτει με την εκτέλεση των πιο κάτω βημάτων: 1. Υπολογισμός του καρτεσιανού γινομένου των πινάκων στο relation-list. 2. Απόρριψη των εγγραφών που δεν πληρούν τα κριτήρια επιλογής που περιλαμβάνονται στα qualifications 3. Απόκρυψη των πεδίων που δεν περιλαμβάνονται στο target-list. 4. Αν υπάρχει η επιλογή DISTINCT οι γραμμές με όμοιο περιεχόμενο διαγράφονται. Στην πράξη η πιο πάνω στρατηγική υπολογισμού των ερωτημάτων SQL δεν είναι καθόλου αποδοτική. Τα συστήματα DBMS χρησιμοποιούν εναλλακτικές μεθόδους υπολογισμού των αποτελεσμάτων σε SQL ερωτήματα. Η μελέτη των μεθόδων αυτών δεν εμπίπτει στο αντικείμενο του μαθήματος © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Παράδειγμα υπολογισμού SELECT S.sname S1 FROM Sailors S, Reserves R WHERE S.sid=R.sid AND R.bid=103 R1 sid sn am e ratin g age 2 2 d u stin 7 4 5 sid bid date 3 1 lu b b e r 8 5 5 22 101 15/10/2009 5 8 ru sty 1 0 3 5 58 103 11/12/2009 S1xR1 1. Υπολογισμός καρτεσιανού γινομένου SxR πινάκων S και R. 2. Έλεγχος κριτηρίων S.sid=R.sid και R.bid=103. 3. Απόκρυψη όλων των πεδίων πλην του S.sname 4. DISTINCT δεν έχει οριστεί (έτσι και αλλιώς δεν υπάρχουν όμοιες γραμμές στο αποτέλεσμα). sid sname rating age sid bid date 22 dustin 7 45 22 101 15/10/2009 22 dustin 7 45 58 103 11/12/2009 31 lubber 8 55 22 101 15/10/2009 31 lubber 8 55 58 103 11/12/2009 58 rusty 10 35 22 101 15/10/2009 58 rusty 10 35 58 103 11/12/2009 © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Μεταβλητές διαστήματος Οι μεταβλητές διαστήματος είναι απαραίτητες αν ο ίδιος πίνακας εμφανίζεται δύο φορές στη συνιστώσα FROM (δηλαδή στο relation_list). Το προηγούμενο ερώτημα μπορεί να γραφεί και ως: SELECT S.sname FROM Sailors S, Reserves R WHERE S.sid=R.sid AND bid=103 ή SELECT sname FROM Sailors, Reserves WHERE Sailors.sid=Reserves.sid AND bid=103 Σε κάθε περίπτωση η χρήση μεταβλητών διαστήματος είναι καλή πρακτική! © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Εκφράσεις και συμβολοσειρές (strings) SELECT S.age, age1=S.age-5, 2*S.age AS age2 FROM Sailors S WHERE S.sname LIKE ‘B_%B’ Το πιο πάνω παράδειγμα δείχνει τη χρήση αριθμητικών εκφράσεων στην εμφάνιση των αποτελεσμάτων αλλά και της χρήσης ταύτισης συμβολοσειρών στα κριτήριο επιλογής: Βρες τις τριάδες (ηλικία ναυτικών και δύο πεδίων τα οποία ορίζονται βάση αριθμητικών εκφράσεων) για τους ναυτικούς των οποίων το όνομα αρχίζει και τελειώνει σε B και περιέχει το πολύ τρεις χαρακτήρες Οι τελεστές AS και = είναι οι δύο τρόποι μέσω των οποίων δίνουμε όνομα στις αριθμητικές εκφράσεις (2*S.age AS age2, age1=S.age-5). Ο τελεστής LIKE χρησιμοποιείται για σύγκριση συμβολοσειρών. ‘_’ χρησιμοποιείται για οποιοδήποτε (μη κενό) χαρακτήρα και το `%’ υποδηλώνει 0 ή περισσότερους τυχαίους χαρακτήρες. © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Οι τελεστές UNION, EXCEPT και INTERSECT Έστω ότι ζητούμε τα sid των ναυτικών που έχει κάνει κράτηση για μια κόκκινη ή πράσινη βάρκα: SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND (B.color=‘red’ OR B.color=‘green’) Ο τελεστής UNION χρησιμοποιείται για τον υπολογισμό της ένωσης δύο συμβατών (ως προς τα πεδία) συνόλων από εγγραφές (οι οποίες προκύπτουν ως αποτέλεσμα SQL ερωτημάτων). SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘red’ UNION SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘green’ Αν αντικαθιστούσαμε το OR με AND στο πρώτο ερώτημα τι αποτέλεσμα θα παίρναμε; Ο τελεστής EXCEPT εξαιρεί τα αποτελέσματα του δευτέρου ερωτήματος από αυτά του πρώτου (Δηλαδή: βρες τα sid των ναυτικών που έχουν κάνει © 2013 Nicolas Tsapatsoulis κράτηση σε κόκκινη αλλά όχι σε πράσινη βάρκα) ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Οι τελεστές UNION, EXCEPT και INTERSECT(2) Έστω ότι ζητούμε τα sid των ναυτικών που έχει κάνει κράτηση για μια κόκκινη ή πράσινη βάρκα: SELECT S.sid FROM Sailors S, Boats B1, Reserves R1, Boats B2, Reserves R2 WHERE S.sid=R1.sid AND R1.bid=B1.bid AND S.sid=R2.sid AND R2.bid=B2.bid AND (B1.color=‘red’ AND B2.color=‘green’) Ο τελεστής INTERSECT χρησιμοποιείται για τον υπολογισμό της τομής δύο συμβατών (ως προς τα πεδία) συνόλων από εγγραφές (οι οποίες προκύπτουν ως αποτέλεσμα SQL ερωτημάτων) SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘red’ INTERSECT SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Οι τελεστές UNION, EXCEPT και INTERSECT(3) Στη MySQL οι τελεστές EXCEPT και INTERSECT δεν υποστηρίζονται. Υλοποιούνται συνήθως με χρήση των τελεστών NOT IN και IN: EXCEPT: SELECT DISTINCT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color='red' AND S.sid NOT IN (SELECT DISTINCT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color='green'); INTERSECT: SELECT DISTINCT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color='red' AND S.sid IN (SELECT DISTINCT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color='green'); © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Φωλιασμένα ερωτήματα Φωλιασμένα ερωτήματα ονομάζουμε SQL ερωτήματα τα οποία βρίσκονται στην περιοχή των κριτηρίων WHERE ενός άλλου SQL ερωτήματος: Να βρεθούν τα ονόματα των ναυτικών που έχουν κάνει κράτηση για τη βάρκα με αριθμό 103: SELECT S.sname FROM Sailors S WHERE S.sid IN (SELECT R.sid FROM Reserves R WHERE R.bid=103) Τα φωλιασμένα ερωτήματα μπορεί να υπάρχουν και στην περιοχή του FROM αλλά και του HAVING Για να βρούμε τα ονόματα των ναυτικών που δεν έχουν κάνει κράτηση για τη βάρκα με αριθμό 103 χρησιμοποιούμε στη θέση του IN το NOT IN © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Φωλιασμένα ερωτήματα με συσχέτιση Να βρεθούν τα ονόματα των ναυτικών που έχουν κάνει κράτηση για τη βάρκα με αριθμό 103: SELECT S.sname FROM Sailors S WHERE EXISTS ( SELECT * FROM Reserves R WHERE R.bid=103 AND S.sid=R.sid) Ο τελεστής EXISTS είναι ένας ακόμη τελεστής σύγκρισης συνόλων (όπως ο τελεστής IN). © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Τελεστές σύγκρισης συνόλων Αντίστοιχα των τελεστών IN και EXISTS υπάρχουν και τελεστές NOT IN, NOT EXISTS με προφανή ερμηνεία. Επιπλέον των ανωτέρω υπάρχει και η δυνατότητα της ακόλουθη σύνταξης: op ANY, op ALL, Όπου ο τελεστής op είναι κάποιος από τους τελεστές σύγκρισης >,<,=,≥,≤, ≠ Βρες τους ναυτικούς με rating μεγαλύτερο από αυτό του ναυτικού με όνομα Horatio: SELECT * FROM Sailors S WHERE S.rating > ANY ( SELECT S2.rating FROM Sailors S2 WHERE S2.sname=‘Horatio’); © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Παράδειγμα Ι Υλοποίηση τελεστή INTERSECT με χρήση του τελεστή IN: Να βρεθούν τα sid’s των ναυτικών που έχουν κάνει κράτηση σε κόκκινη αλλά και πράσινη βάρκα: SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘red’ AND S.sid IN (SELECT S2.sid FROM Sailors S2, Boats B2, Reserves R2 WHERE S2.sid=R2.sid AND R2.bid=B2.bid AND B2.color=‘green’) Ομοίως ο τελεστής EXCEPT υλοποιείται με χρήση του NOT IN. Για να βρούμε τα ονόματα αντί τα sid’s των ναυτικών στα πιο πάνω ερωτήματα αντικαθιστούμε το S.sid με S.sname στο SELECT. © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Τελεστές συνάθροισης Οι τελεστές συνάθροισης χρησιμοποιούνται για ομαδική επεξεργασία των αποτελεσμάτων: COUNT (*) (πλήθος εγγραφών) COUNT ( [DISTINCT] A) (διακριτές τιμές ως προς το πεδίο Α) SUM ( [DISTINCT] A) (άθροισμα διακεκριμένων τιμών στο πεδίο Α) AVG ( [DISTINCT] A) (Μ.Ο. διακεκριμένων τιμών στο πεδίο Α) MAX (A) MIN (A) SELECT COUNT (*) FROM Sailors S SELECT AVG (S.age) FROM Sailors S WHERE S.rating=10 SELECT COUNT (DISTINCT S.rating) FROM Sailors S WHERE S.sname=‘Bob’ SELECT AVG ( DISTINCT S.age) FROM Sailors S WHERE S.rating=10 SELECT S.sname FROM Sailors S WHERE S.rating = (SELECT MAX(S2.rating) FROM Sailors S2) © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Παράδειγμα ΙΙ Να βρεθεί το όνομα και η ηλικία του γηραιότερου ναυτικού: SELECT S.sname, S.age FROM Sailors S WHERE S.age =(SELECT MAX(S2.age) FROM Sailors S2); SELECT S.sname, S.age FROM Sailors S WHERE (SELECT MAX(S2.age) FROM Sailors S2) = S.age Το δεύτερο ερώτημα είναι ισοδύναμο με το πρώτο και υποστηρίζεται από το πράτυπο SQL/92. Σε ορισμένα όμως DBMS δεν υποστηρίζεται. © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Οι τελεστές GROUP BY και HAVING Μέχρι τώρα εξετάσαμε τους τελεστές συνάθροισης όπως αυτοί εφαρμόζονται για όλες τις εγγραφές που πληρούν ένα συγκεκριμένο κριτήριο (π.χ. Μ.Ο ηλικίας, μέγιστη ηλικία κλπ). Σε μερικές περιπτώσεις επιθυμούμε να εφαρμόσουμε τους τελεστές αυτούς σε ομάδες εγγραφών. Έστω το ερώτημα: Βρες την ηλικία του νεαρότερου ναυτικού για κάθε διαφορετική τιμή του πεδίου rating. Γενικά δεν γνωρίζουμε πόσες διαφορετικές τιμές υπάρχουν για το rating. Αν ξέραμε ότι υπάρχουν 10 διαφορετικές τιμές θα μπορούσαμε να γράψουμε 10 (!) ερωτήματα ως ακολούθως: For i = 1, 2, ... , 10: SELECT MIN (S.age) FROM Sailors S WHERE S.rating = i © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Οι τελεστές GROUP BY και HAVING(2) Οι τελεστές GROUB BY και HAVING μας βοηθούν να αποφύγουμε το προηγούμενο πρόβλημα Σύνταξη: SELECT [DISTINCT] target-list FROM relation-list WHERE qualification GROUP BY grouping-list HAVING group-qualification Το target-list περιέχει 1. Τα ονόματα πεδίων 2. Όρους με τελεστές συνάθροισης (π.χ., MIN(S.age)). Ο κατάλογος πεδίων πρέπει να είναι ένα υποσύνολο του grouping-list. Κάθε εγγραφή στην απάντηση αντιστοιχεί σε μια ομάδα (group) και επομένως τα πεδία αυτά πρέπει να έχουν μια και μοναδική τιμή για το group (Group είναι ένα σύνολο εγγραφών οι οποίες έχουν τις ίδιες τιμές για όλες τις τιμές των πεδίων του grouping-list.) © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Υπολογισμός ερωτημάτων που περιέχουν GROUB BY 1. Το καρτεσιανό γινόμενο των πινάκων στο relation-list υπολογίζεται 2. Εγγραφές οι οποίες δεν πληρούν τα κριτήρια επιλογής διαγράφονται 3. Τα πεδία τα οποία δεν δηλώνονται στο target_list αποκρύπτονται 4. Οι υπόλοιπες εγγραφές ομαδοποιούνται με βάση τα πεδία του grouping-list. 5. Τα κριτήρια επιλογής όπως περιγράφονται στο HAVING (groupqualification) εφαρμόζονται και κάποιες ομάδες (που δεν τα πληρούν) απαλείφονται. Οι εκφράσεις στο group-qualification πρέπει να παράγουν μια και μοναδική τιμή ανά group! Μια μόνο εγγραφή ανά group δημιουργείται © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Παράδειγμα ΙΙΙ Να βρεθεί η ηλικία του νεαρότερου ναυτικού, μεγαλύτερου από 18 χρονών, για κάθε διαφορετική τιμή rating και για ratings με τουλάχιστον 2 ναυτικούς sid sname rating age 22 dustin 7 45 29 brutus 1 33 GROUP BY S.rating 31 lubber 8 55 HAVING COUNT(*) > 1 58 rusty 10 35 64 horatio 7 35 71 zorba 10 16 SELECT S.rating, MIN(S.age) FROM Sailors S WHERE S.age > 18 S3 Μόνο τα S.rating και S.age αναφέρονται στις περιοχές των SELECT, GROUP BY ή HAVING, επομένως τα άλλα πεδία δεν χρησιμοποιούνται στο αποτέλεσμα. Η 2η στήλη στα αποτελέσματα δεν έχει όνομα. Μπορούμε να χρησιμοποιήσουμε τον τελεστή AS για να της δώσουμε όνομα © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Παράδειγμα ΙV Να βρεθεί η ηλικία του νεαρότερου ναυτικού, μεγαλύτερου από 18 χρονών, για κάθε διαφορετική τιμή rating και για ratings με τουλάχιστον 2 ναυτικούς (κάθε ηλικίας) sid sname rating age S3 22 dustin 7 45 FROM Sailors S 29 brutus 1 33 WHERE S.age > 18 31 lubber 8 55 GROUP BY S.rating 58 rusty 10 35 HAVING 1 < (SELECT COUNT(*) 64 horatio 7 35 71 zorba 10 16 SELECT S.rating, MIN(S.age) FROM Sailors S2 WHERE S.rating=S2.rating) Στο πιο πάνω παράδειγμα η περιοχή HAVING προκύπτει από ένα φωλιασμένο ερώτημα. Συγκρίνεται τα αποτελέσματα με το προηγούμενο ερώτημα © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Παράδειγμα V Για κάθε κόκκινη βάρκα βρείτε τον αριθμό των κρατήσεων που έχουν γίνει για αυτήν SELECT B.bid, COUNT(*) AS scount FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘red’ GROUP BY B.bid Ομαδοποίηση τριών πινάκων Τι θα παίρναμε ως αποτέλεσμα αν αφαιρούσαμε B.color=‘red’ από το WHERE και προσθέταμε ένα HAVING με τη συνθήκη αυτή? © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Εναύσματα Έναυσμα: διαδικασία η οποία ξεκινά αυτόματα εφόσον κάποιες αλλαγές λάβουν χώρα στο σύστημα DBMS Τρία τμήματα: Event (ενεργοποίηση εναύσματος) Condition (συνθήκη εκτέλεσης του εναύσματος) Action (αποτέλεσμα εκτέλεσης εναύσματος) Παράδειγμα: CREATE TRIGGER youngSailorUpdate AFTER INSERT ON SAILORS REFERENCING NEW TABLE NewSailors FOR EACH STATEMENT INSERT INTO YoungSailors(sid, name, age, rating) SELECT sid, name, age, rating FROM NewSailors N WHERE N.age <= 18 © 2013 Nicolas Tsapatsoulis ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Σύνοψη / Παραδείγματα Παραδείγματα Να λύσετε τις ασκήσεις: 1. 5.7 2. 5.9 3. 5.11 από το βιβλίο σας [Ramakrishnan 2002a] © 2013 Nicolas Tsapatsoulis