ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis SQL: Ερωτήματα, προγραμματισμός και εναύσματα ΕΣΔ232 – Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Περιεχόμενα Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα Περιεχόμενα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Βιβλιογραφία [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 Βιβλιογραφία Ενότητας Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Η βασική δομή σύνταξης ενός 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 είναι μια προαιρετική επιλογή η οποία υποδεικνύει ότι η απάντηση του ερωτήματος πρέπει να περιέχει μόνο διαφορετικές γραμμές. Το βασικό SQL ερώτημα Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Στα επόμενα παραδείγματα θα χρησιμοποιήσουμε τα πιο κάτω στιγμιότυπα των πινάκων Sailors (2 διαφορετικά στιγμιότυπα S1 και S2) και Reserves (στιγμιότυπο R1). Οι πίνακες (στιγμιότυπα) των παραδειγμάτων Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Το αποτέλεσμα ενός SQL ερωτήματος προκύπτει με την εκτέλεση των πιο κάτω βημάτων: 1.Υπολογισμός του καρτεσιανού γινομένου των πινάκων στο relation-list. 2.Απόρριψη των εγγραφών που δεν πληρούν τα κριτήρια επιλογής που περιλαμβάνονται στα qualifications 3.Απόκρυψη των πεδίων που δεν περιλαμβάνονται στο target-list. 4.Αν υπάρχει η επιλογή DISTINCT οι γραμμές με όμοιο περιεχόμενο διαγράφονται. Στην πράξη η πιο πάνω στρατηγική υπολογισμού των ερωτημάτων SQL δεν είναι καθόλου αποδοτική. Τα συστήματα DBMS χρησιμοποιούν εναλλακτικές μεθόδους υπολογισμού των αποτελεσμάτων σε SQL ερωτήματα. Η μελέτη των μεθόδων αυτών δεν εμπίπτει στο αντικείμενο του μαθήματος Η στρατηγική υπολογισμού των ερωτημάτων Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis SELECT S.sname FROM Sailors S, Reserves R WHERE S.sid=R.sid AND R.bid=103 1.Υπολογισμός καρτεσιανού γινομένου SxR πινάκων S και R. 2.Έλεγχος κριτηρίων S.sid=R.sid και R.bid= Απόκρυψη όλων των πεδίων πλην του S.sname 4.DISTINCT δεν έχει οριστεί (έτσι και αλλιώς δεν υπάρχουν όμοιες γραμμές στο αποτέλεσμα). Παράδειγμα υπολογισμού Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Οι μεταβλητές διαστήματος είναι απαραίτητες αν ο ίδιος πίνακας εμφανίζεται δύο φορές στη συνιστώσα 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 Σε κάθε περίπτωση η χρήση μεταβλητών διαστήματος είναι καλή πρακτική! Μεταβλητές διαστήματος Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis 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 ή περισσότερους τυχαίους χαρακτήρες. Εκφράσεις και συμβολοσειρές (strings) Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Έστω ότι ζητούμε τα 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 των ναυτικών που έχουν κάνει κράτηση σε κόκκινη αλλά όχι σε πράσινη βάρκα) Οι τελεστές UNION, EXCEPT και INTERSECT Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Έστω ότι ζητούμε τα 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 Οι τελεστές UNION, EXCEPT και INTERSECT (2) Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Στη 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'); Οι τελεστές UNION, EXCEPT και INTERSECT (3) Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Φωλιασμένα ερωτήματα Φωλιασμένα ερωτήματα ονομάζουμε 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 Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Φωλιασμένα ερωτήματα με συσχέτιση Το βασικό 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).
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Τελεστές σύγκρισης συνόλων Το βασικό 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’);
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Παράδειγμα Ι Το βασικό 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.
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Τελεστές συνάθροισης Οι τελεστές συνάθροισης χρησιμοποιούνται για ομαδική επεξεργασία των αποτελεσμάτων: COUNT (*) (πλήθος εγγραφών) COUNT ( [DISTINCT] A) (διακριτές τιμές ως προς το πεδίο Α) SUM ( [DISTINCT] A) (άθροισμα διακεκριμένων τιμών στο πεδίο Α) AVG ( [DISTINCT] A) (Μ.Ο. διακεκριμένων τιμών στο πεδίο Α) MAX (A) MIN (A) Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα 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)
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Να βρεθεί το όνομα και η ηλικία του γηραιότερου ναυτικού: 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 δεν υποστηρίζεται. Παράδειγμα ΙΙ Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Μέχρι τώρα εξετάσαμε τους τελεστές συνάθροισης όπως αυτοί εφαρμόζονται για όλες τις εγγραφές που πληρούν ένα συγκεκριμένο κριτήριο (π.χ. Μ.Ο ηλικίας, μέγιστη ηλικία κλπ). Σε μερικές περιπτώσεις επιθυμούμε να εφαρμόσουμε τους τελεστές αυτούς σε ομάδες εγγραφών. Έστω το ερώτημα: Βρες την ηλικία του νεαρότερου ναυτικού για κάθε διαφορετική τιμή του πεδίου rating. Γενικά δεν γνωρίζουμε πόσες διαφορετικές τιμές υπάρχουν για το rating. Αν ξέραμε ότι υπάρχουν 10 διαφορετικές τιμές θα μπορούσαμε να γράψουμε 10 (!) ερωτήματα ως ακολούθως: For i = 1, 2,..., 10: SELECT MIN (S.age) FROM Sailors S WHERE S.rating = i Οι τελεστές GROUP BY και HAVING Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Οι τελεστές 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.) Οι τελεστές GROUP BY και HAVING (2) Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis 1.Το καρτεσιανό γινόμενο των πινάκων στο relation-list υπολογίζεται 2.Εγγραφές οι οποίες δεν πληρούν τα κριτήρια επιλογής διαγράφονται 3.Τα πεδία τα οποία δεν δηλώνονται στο target_list αποκρύπτονται 4.Οι υπόλοιπες εγγραφές ομαδοποιούνται με βάση τα πεδία του grouping-list. 5.Τα κριτήρια επιλογής όπως περιγράφονται στο HAVING (group- qualification) εφαρμόζονται και κάποιες ομάδες (που δεν τα πληρούν) απαλείφονται. Οι εκφράσεις στο group-qualification πρέπει να παράγουν μια και μοναδική τιμή ανά group! Μια μόνο εγγραφή ανά group δημιουργείται Υπολογισμός ερωτημάτων που περιέχουν GROUB BY Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Να βρεθεί η ηλικία του νεαρότερου ναυτικού, μεγαλύτερου από 18 χρονών, για κάθε διαφορετική τιμή rating και για ratings με τουλάχιστον 2 ναυτικούς SELECT S.rating, MIN(S.age) FROM Sailors S WHERE S.age > 18 GROUP BY S.rating HAVING COUNT(*) > 1 Μόνο τα S.rating και S.age αναφέρονται στις περιοχές των SELECT, GROUP BY ή HAVING, επομένως τα άλλα πεδία δεν χρησιμοποιούνται στο αποτέλεσμα. Η 2 η στήλη στα αποτελέσματα δεν έχει όνομα. Μπορούμε να χρησιμοποιήσουμε τον τελεστή AS για να της δώσουμε όνομα Παράδειγμα ΙΙΙ Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Να βρεθεί η ηλικία του νεαρότερου ναυτικού, μεγαλύτερου από 18 χρονών, για κάθε διαφορετική τιμή rating και για ratings με τουλάχιστον 2 ναυτικούς (κάθε ηλικίας) SELECT S.rating, MIN(S.age) FROM Sailors S WHERE S.age > 18 GROUP BY S.rating HAVING 1 < (SELECT COUNT(*) FROM Sailors S2 WHERE S.rating=S2.rating) Στο πιο πάνω παράδειγμα η περιοχή HAVING προκύπτει από ένα φωλιασμένο ερώτημα. Συγκρίνεται τα αποτελέσματα με το προηγούμενο ερώτημα Παράδειγμα ΙV Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Για κάθε κόκκινη βάρκα βρείτε τον αριθμό των κρατήσεων που έχουν γίνει για αυτήν 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 με τη συνθήκη αυτή? Παράδειγμα V Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Εναύσματα Έναυσμα: διαδικασία η οποία ξεκινά αυτόματα εφόσον κάποιες αλλαγές λάβουν χώρα στο σύστημα 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 Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Παραδείγματα
ΕΣΔ 232: Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Παραδείγματα Να λύσετε τις ασκήσεις: από το βιβλίο σας [Ramakrishnan 2002a] Το βασικό SQL ερώτημα Φωλιασμένα ερωτήματα Τελεστές συνάθροισης Ενσωματωμένη SQL Εναύσματα Σύνοψη / Παραδείγματα