Η γλώσσα SQL Εισαγωγή στις βάσεις δεδομένων Β. Ταμπακάς ρ. Μηχανικός Η/Υ & Πληροφορικής
Εισαγωγή H SQL (Structured Query Language) χρησιμοποιείται για την ανάκτηση και διαχείριση δεδομένων στις σχεσιακές βάσεις Πλεονεκτήματα της SQL απλότητα σε σχέση με τις κλασσικές γλώσσες προγραμματισμού τυποποίηση της γλώσσας και συμβατότητα μεταξύ των διαφορετικών Σ Β Η SQL αποτελείται από Γλώσσα Χειρισμού εδομένων (ΓΧ ) Γλώσσα Ορισμού εδομένων (ΓΟ ) B.T. Ταμπακάς, H Γλώσσα SQL 2
Εισαγωγή Η ιστορία της τυποποίησης της SQL 1986, αναγνώριση από τον οργανισμό ANSI (American National Standards Institute). ημιουργία του προτύπου SQL-86 ή SQL 1987, αναγνώριση από τον οργανισμό ISO (International Standards Organization) 1992, δημιουργία του προτύπου SQL-92 ή SQL2 1999, δημιουργία του προτύπου SQL3 2003, 2006 δημιουργία των προτύπων SQL2003 και SQL2006 αντίστοιχα 2008, δημιουργία του προτύπου SQL2008 με παραθυρικές λειτουργίες B.T. Ταμπακάς, H Γλώσσα SQL 3
Το σχήμα της Β "Εκπαιδευτικό Ίδρυμα" Σπουδαστής ΑΜ Όνομα Επώνυμο Πατρώνυμο ΕξΦοίτησης ΟνομΤμήματος Τμήμα Ονομασία ΈτοςΊδρυσης Προιστάμενος Μάθημα ΚωδικόςΜ Τίτλος ιδμονάδες ιδάσκων Καθηγητής ΚωδικόςΚ Όνομα Επώνυμο Βαθμίδα ιεύθυνση Τηλέφωνο Σύγγραμμα Τίτλος ΚωδικόςΣ ΑρΣελίδων Κηδεμόνας Όνομα Επώνυμο ιεύθυνση ΑΜ Σπουδαστή Παρακολουθεί ΑΜ Σπουδαστή ΚωδΜαθήματος ΕξΠαρακολ Συγγράφει ΚωδΚαθηγητή ΚωδΣυγγράμματος B.T. Ταμπακάς, H Γλώσσα SQL 4
Το σχήμα της Β «Εταιρία ΒΕΤΑ" Υπάλληλος Επώνυμο Όνομα ιεύθυνση ΑΦΜ Τηλέφωνο ΥπάλΕξειδικ ΑΦΜ Εξειδίκευση Πελάτης ΚΠελά τη Επωνυ μία ΝομικΜορ φή ιευθεδρ ας Αρμοδ ΟΥ ΑΦΜΥπ αλ Παραστατικό ΑρΠαραστατικου ΗμερομΕκδοσης ΚΠελάτη ΚΕιδουςΠαρ ΕίδΠαραστατ ΚΕιδους ΟνομασΕιδους Προιον ΚΠροιοντος ΟνομΠροιοντος ΤιμΠρΤεμαχ Στοιχ ιαφημ Επωνυμία ΧρονΕναρ ιαφ ΚΠροιοντος Περιλαμβάνει ΑρΠαραστατικου ΚΠροιοντος ΑρΤεμαχιων B.T. Ταμπακάς, H Γλώσσα SQL 5
Αναζήτηση/Ανάκτηση εδομένων στην SQL SELECT [λίστα πεδίων] FROM [λίστα πινάκων] WHERE [συνθήκη]; Όπου [λίστα πεδίων] είναι τα ονόματα των πεδίων που θέλουμε να ανακτηθούν, [λίστα πινάκων] είναι το όνομα του πίνακα (ή των πινάκων) από τον οποίο θα γίνει η ανάκτηση της πληροφορίας και [συνθήκη] είναι μία λογική έκφραση (κριτήριο) που μπορεί να χρησιμοποιεί τους τελεστές >, <, >=, <=, <>, =, AND, OR, NOT και προσδιορίζει τις εγγραφές που θα επιλεγούν B.T. Ταμπακάς, H Γλώσσα SQL 6
Αναζήτηση/Ανάκτηση εδομένων στην SQL Να βρεθούν τα επώνυμα όλων των σπουδαστών που φοιτούν στο ΣΤ εξάμηνο SELECT Επώνυμο FROM Σπουδαστής WHERE ΕξΦοίτησης='ΣΤ'; B.T. Ταμπακάς, H Γλώσσα SQL 7
Αναζήτηση/Ανάκτηση εδομένων στην SQL Να βρεθούν τα ονόματα και επώνυμα των σπουδαστών που φοιτούν στο ΣΤ εξάμηνο και ανήκουν στο τμήμα Πληροφορικής SELECT Όνομα, Επώνυμο FROM Σπουδαστής WHERE ΕξΦοίτησης='ΣΤ' AND ΟνομΤμήματος= Πληροφορικής'; B.T. Ταμπακάς, H Γλώσσα SQL 8
Αναζήτηση/Ανάκτηση εδομένων στην SQL Να βρεθούν όλα τα προσφερόμενα μαθήματα (τίτλοι) και οι αντίστοιχες διδακτικές μονάδες SELECT "Τίτλος", " ιδμονάδες" FROM "Μάθημα"; B.T. Ταμπακάς, H Γλώσσα SQL 9
Αναζήτηση/Ανάκτηση εδομένων στην SQL Να βρεθούν οι αριθμοί παραστατικών που έχουν εκδοθεί εντός του έτους 2007 select "ΑρΠαραστατικου" from "Παραστατικό" where "ΗμερομΕκδοσης">TO_DATE('01/01/2007','D D/MM/YYYY') and "ΗμερομΕκδοσης"<TO_DATE('31/12/2007','D D/MM/YYYY') ; B.T. Ταμπακάς, H Γλώσσα SQL 10
Αναζήτηση/Ανάκτηση εδομένων στην SQL Ναεκτυπωθείτοκαρτεσιανόγινόμενο των πινάκων Σπουδαστής και Μάθημα SELECT * FROM Σπουδαστής, Μάθημα; B.T. Ταμπακάς, H Γλώσσα SQL 11
ιάταξη (Ταξινόμηση) Αποτελεσμάτων SELECT FROM WHERE ORDER BY [λίστα πεδίων] [λίστα πινάκων] [συνθήκη] πεδίο1 ASC ή DESC, πεδίο2 ASC ή DESC, Η διάταξη μπορεί να είναι ως προς ένα ή περισσότερα πεδία του ίδιου ή διαφορετικών πινάκων Όταν δεν προσδιορίζεται ο τρόπος ταξινόμησης (ASC ή DESC), τότε εννοείται αύξουσα ταξινόμηση B.T. Ταμπακάς, H Γλώσσα SQL 12
ιάταξη (Ταξινόμηση) Αποτελεσμάτων Να βρεθούν τα επώνυμα και τα ονόματα των σπουδαστών που φοιτούν στο τμήμα Πληροφορικής. Οι εγγραφές να δοθούν κατά φθίνουσα σειρά των επωνύμων SELECT FROM WHERE ORDER BY Επώνυμο, Όνομα Σπουδαστής ΟνομΤμήματος= 'Πληροφορική' Επώνυμο DESC; B.T. Ταμπακάς, H Γλώσσα SQL 13
Σύγκριση Συμβολοσειρών Ο ειδικός χαρακτήρας % (ή * ), σημαίνει οποιαδήποτε συμβολοσειρά, οποιουδήποτε μήκους Ο ειδικός χαρακτήρας - (ή? ), σημαίνει ένας οποιοδήποτε χαρακτήρας Για παράδειγμα ηέκφρασηlike %κος σημαίνει οποιαδήποτε σειρά χαρακτήρων που τελειώνει σε κος ηέκφρασηlike -ίκος σημαίνει οποιαδήποτε σειρά τεσσάρων χαρακτήρων που αρχίζει από έναν οποιοδήποτε χαρακτήρα και τελειώνει σε ίκος B.T. Ταμπακάς, H Γλώσσα SQL 14
Σύγκριση Συμβολοσειρών Βρείτε τους σπουδαστές (Όνομα και Επίθετο) που δεν φοιτούν στο ΣΤ εξάμηνο σπουδών SELECT FROM WHERE ORDER BY "Επώνυμο", "Όνομα" "Σπουδαστής" "ΕξΦοίτησης" NOT LIKE 'ΣΤ' "Επώνυμο"; B.T. Ταμπακάς, H Γλώσσα SQL 15
ΗΤιμήNULL στην SQL Να βρεθούν οι τίτλοι των συγγραμμάτων, για τα οποία είναι καταγραμμένος ο αριθμός σελίδων SELECT FROM WHERE Τίτλος Σύγγραμμα ΑρΣελίδων IS NOT NULL; B.T. Ταμπακάς, H Γλώσσα SQL 16
Μετονομασία Πινάκων Να βρεθεί το καρτεσιανό γινόμενο των πινάκων Σπουδαστής και Τμήμα. Να εκτυπωθούν τα πεδία Όνομα, Επώνυμο, ΕξΦοίτησης του πίνακα Σπουδαστής και τα πεδία Ονομασία και ΈτοςΊδρυσης του πίνακα Τμήμα. Να εκτυπωθούν μόνο οι εγγραφές με τιμή Τμήματος την Πληροφορική SELECT Σ.Όνομα, Σ.Επώνυμο, Σ.ΕξΦοίτησης, Τ.Ονομασία, Τ.ΈτοςΊδρυσης FROM Σπουδαστής Σ,Τμήμα Τ WHERE Τ.Ονομασία= ' Πληροφορική'; B.T. Ταμπακάς, H Γλώσσα SQL 17
Μετονομασία Πεδίων SELECT ΚΕιδους AS Κωδικός Είδους, ΟνομασΕιδους AS Ονομασία Είδους FROM ΕιδΠαραστατ; Κωδικός Είδους Ονομασία Είδους 1 Τιμολόγιο 2 ελτίο Αποστολής 3 ελτίο Παροχής Υπηρεσιών B.T. Ταμπακάς, H Γλώσσα SQL 18
Υπολογιζόμενα Πεδία Ένα υπολογιζόμενο πεδίο συνδυάζεται συνήθως με την εντολή AS τo όνομά του και η τιμή του προσδιορίζονται στην εντολή SELECT οι τιμές του υπολογίζονται κατά την εκτέλεση του ερωτήματος και δεν αποθηκεύονται στη δευτερεύουσα μνήμη, μαζί με τον υπόλοιπο πίνακα B.T. Ταμπακάς, H Γλώσσα SQL 19
Υπολογιζόμενα Πεδία Να βρεθεί το συνολικό κόστος 600 τεμαχίων του προϊόντος με κωδικό 500 και να εκτυπωθεί η ονομασία του και η συνολική τιμή SELECT "ΟνομΠροιοντος", "ΤιμΠρΤεμαχ"*600 AS ΣυνΤιμη600Τεμαχ FROM "Προιόν" WHERE "ΚΠροιοντος" = 500; B.T. Ταμπακάς, H Γλώσσα SQL 20
Υπολογιζόμενα Πεδία Λόγω μιας αύξησης στο κόστος μεταφοράς, οι τιμές των προϊόντων έχουν αυξηθεί κατά 1 ευρώ. Να εκτυπωθούν οι ονομασίες και οι νέες τιμές των προϊόντων SELECT ΟνομΠροιοντος, ΤιμΠρΤεμαχ+1 AS ΝέαΤιμηΠροιοντ FROM Προιόν; B.T. Ταμπακάς, H Γλώσσα SQL 21
Υπολογιζόμενα Πεδία Το αποτέλεσμα του ερωτήματος είναι: ΟνομΠροιοντος ΝέαΤιμηΠροιοντ intustr - Σκόνη καθαρισμού 4 ΤΡΦ1 - τροφή για σκύλους 4 ΝΙΤΡΟ - βερνίκι καθαρισμού 3 ΑΖ - καθαριστικό 2 ΞΕΒ - Θειικό οξύ 2 ΤΡΦ2 - Τροφή για γάτες 4 ΤΡΦ3 - Τροφή για ψάρια 5 DOGPLA - Παιχνίδι για σκύλους 6 B.T. Ταμπακάς, H Γλώσσα SQL 22
Υπολογιζόμενα Πεδία Βρείτε τον Φόρτο Εργασίας του κάθε μαθήματος (τίτλος, ΦΕ) αν γνωρίζετε πως ο ΦΕ προκύπτει από τις Μ του μαθήματος αν πολ/στούν επί 30,5 και διαιρεθούν με το άθροισμα των Μ όλων των μαθημάτων. Ο ΦΕ να στρογγυλοποιηθεί σε 2 δεκαδικά ψηφία. B.T. Ταμπακάς, H Γλώσσα SQL 23
Υπολογιζόμενα Πεδία select "Τίτλος", round((" ιδμονάδες"*30.5)/(select sum(" ιδμονάδες") from "Μάθημα"), 2) as ΘΕ from "Μάθημα" B.T. Ταμπακάς, H Γλώσσα SQL 24
Υπολογιζόμενα Πεδία Τίτλος ΘΕ Σχέδιο 5,3 Ο ικ ονομική 6,6 3 Βάσεις εδομένων 3,9 8 ίκτυα 4,6 4 Λογιστική 4,6 4 Κοστολόγηση 5,3 B.T. Ταμπακάς, H Γλώσσα SQL 25
Εσωτερική Σύνδεση Η πράξη της εσωτερικής σύνδεσης υλοποιείται με την εντολή INNER JOIN (ή απλώςjoin) Στο αποτέλεσμα της εσωτερικής σύνδεσης λαμβάνονται οι εγγραφές των συνδεόμενων πινάκων, που ικανοποιούν το κριτήριο της δοσμένης συνθήκης ως προς το πεδίο σύνδεσης B.T. Ταμπακάς, H Γλώσσα SQL 26
Εσωτερική Σύνδεση Να βρεθεί η ονομασία και το έτος ίδρυσης των τμημάτων και το επώνυμο των καθηγητών που είναι οι αντίστοιχοι προϊστάμενοι τμημάτων B.T. Ταμπακάς, H Γλώσσα SQL 27
Εσωτερική Σύνδεση Να βρεθεί η ονομασία και το έτος ίδρυσης των τμημάτων και το επώνυμο των καθηγητών που είναι οι αντίστοιχοι προϊστάμενοι τμημάτων SELECT FROM Ονομασία, ΈτοςΊδρυσης, Επώνυμο Τμήμα INNER JOIN Καθηγητής ON Τμήμα.Προιστάμενος= Καθηγητής.ΚωδικόςΚ; B.T. Ταμπακάς, H Γλώσσα SQL 28
Εσωτερική Σύνδεση Να βρεθούν οι τίτλοι των μαθημάτων και τα επώνυμα και ονόματα των καθηγητών που τα διδάσκουν B.T. Ταμπακάς, H Γλώσσα SQL 29
Εσωτερική Σύνδεση Να βρεθούν οι τίτλοι των μαθημάτων και τα επώνυμα και ονόματα των καθηγητών που τα διδάσκουν SELECT Τίτλος AS Τίτλος Μαθημ, Επώνυμο AS Επώνυμο Καθηγ, Όνομα AS Όνομα Καθηγ FROM Μάθημα INNER JOIN Καθηγητής ON ιδάσκων =ΚωδικόςΚ; B.T. Ταμπακάς, H Γλώσσα SQL 30
Εσωτερική Σύνδεση Να βρεθούν τα επώνυμα και ονόματα των σπουδαστών του Γ εξαμήνου και οι τίτλοι των μαθημάτων που έχει παρακολουθήσει ο καθένας B.T. Ταμπακάς, H Γλώσσα SQL 31
Εσωτερική Σύνδεση Να βρεθούν τα επώνυμα και ονόματα των σπουδαστών του Γ εξαμήνου και οι τίτλοι των μαθημάτων που έχει παρακολουθήσει ο καθένας SELECT FROM WHERE Επώνυμο, Όνομα,Τίτλος (Μάθημα INNER JOIN Παρακολουθεί ON ΚωδικόςΜ=ΚωδΜαθήματος) INNER JOIN Σπουδαστής ON ΑΜΣπουδαστή=ΑΜ ΕξΦοίτησης='Γ'; B.T. Ταμπακάς, H Γλώσσα SQL 32
Η Εσωτερική Σύνδεση Πινάκων και το Καρτεσιανό Γινόμενο Η εσωτερική σύνδεση μπορεί να υλοποιηθεί εναλλακτικά με τη χρήση του καρτεσιανού γινομένου Στην περίπτωση αυτή η συνθήκη μεταξύ των πεδίων σύνδεσης τοποθετείται στην εντολή WHERE B.T. Ταμπακάς, H Γλώσσα SQL 33
Η Εσωτερική Σύνδεση Πινάκων και το Καρτεσιανό Γινόμενο Να εκτυπωθούν τα ονόματα και επώνυμα των υπαλλήλων της εταιρίας και οι αντίστοιχες εξειδικεύσεις τους SELECT Όνομα, Επώνυμο, Εξειδίκευση FROM Υπάλληλος,ΥπαλΕξειδικ WHERE Υπάλληλος.ΑΦΜ= ΥπαλΕξειδικ.ΑΦΜ; Το ίδιο το ερώτημα με INNER JOIN: SELECT Όνομα, Επώνυμο, Εξειδίκευση FROM Υπάλληλος INNER JOIN ΥπαλΕξειδικ ON Υπάλληλος.ΑΦΜ=ΥπαλΕξειδικ.ΑΦΜ; B.T. Ταμπακάς, H Γλώσσα SQL 34
Εσωτερική Σύνδεση Να εκτυπωθούν τα είδη παραστατικών (ονομασία) και οι αντίστοιχες επωνυμίες των πελατών, στους οποίους αυτά απευθύνονται. Μας ενδιαφέρουν τα παραστατικά που εκδόθηκαν κατά τα έτη 2007-2008 B.T. Ταμπακάς, H Γλώσσα SQL 35
Η Εσωτερική Σύνδεση Πινάκων και το Καρτεσιανό Γινόμενο Να εκτυπωθούν τα είδη παραστατικών και οι αντίστοιχες επωνυμίες των πελατών, στους οποίους αυτά απευθύνονται. Μας ενδιαφέρουν τα παραστατικά που εκδόθηκαν κατά τα έτη 2007-2008 SELECT "Επωνυμία", "ΟνομασΕιδους" FROM "Παραστατικό", "Πελάτης", "ΕιδΠαραστατ" WHERE "Παραστατικό"."ΚΠελάτη"="Πελάτης"."ΚΠελάτη" AND "Παραστατικό"."ΚΕιδουςΠαρ"="ΕιδΠαραστατ"."ΚΕιδου ς" AND "ΗμερομΕκδοσης">= TO_DATE('01/01/2007','DD/MM/YYYY') AND "ΗμερομΕκδοσης"<=TO_DATE('31/12/2008','DD/MM/ YYYY') ; B.T. Ταμπακάς, H Γλώσσα SQL 36
Η Αριστερή Εξωτερική Σύνδεση Η αριστερή εξωτερική σύνδεση υλοποιείται με την εντολή LEFT OUTER JOIN Περιλαμβάνει όλες τις εγγραφές του πρώτου πίνακα και τις εγγραφές του δεύτερου πίνακα (και μόνο αυτές) που ικανοποιούν το κριτήριο σύνδεσης Τυχόν κενά που προκύπτουν συμπληρώνονται αυτόματα με την τιμή NULL B.T. Ταμπακάς, H Γλώσσα SQL 37
Η Αριστερή Εξωτερική Σύνδεση Να βρεθούν τα επώνυμα όλων των καθηγητών και ο κωδικός συγγράμματος πουέχειγράψειοκαθένας, για όσους από τους καθηγητές έχουν γράψει συγγράμματα B.T. Ταμπακάς, H Γλώσσα SQL 38
Η Αριστερή Εξωτερική Σύνδεση Να βρεθούν τα επώνυμα όλων των καθηγητών και ο κωδικός συγγράμματος που έχει γράψει ο καθένας, για όσους από τους καθηγητές έχουν γράψει συγγράμματα SELECT FROM Επώνυμο, ΚωδΣυγγράμματος Καθηγητής LEFT OUTER JOIN Συγγράφει ON ΚωδικόςΚ= ΚωδΚαθηγητή; B.T. Ταμπακάς, H Γλώσσα SQL 39
Η Αριστερή Εξωτερική Σύνδεση Το αποτέλεσμα του ερωτήματος είναι Επώνυμο Όνομα ΚωδΣυγγράμματος Νικολάου Γιώργος - Αντύπας Γιώργος 773 Τριάντης Νίκος 52 Μόσχος Γιάννης 112 Μόσχος Γιάννης 205 Μόσχος Γιάννης 773 Ανδρέου Θεμιστοκλής - Αντύπας Νίκος 112 B.T. Ταμπακάς, H Γλώσσα SQL 40
Να βρεθούν τα ονοματεπώνυμα των καθηγητών (αν υπάρχουν) που δεν έχουνγράψεικάποιοβιβλίο. SELECT "Επώνυμο", "Όνομα" FROM "Καθηγητής" LEFT OUTER JOIN "Συγγράφει" ON "ΚωδικόςΚ" = "ΚωδΚαθηγητή" Where "ΚωδΣυγγράμματος" is null; B.T. Ταμπακάς, H Γλώσσα SQL 41
Η εξιά Εξωτερική Σύνδεση Η δεξιά εξωτερική σύνδεση υλοποιείται με την εντολή RIGHT OUTER JOIN Περιλαμβάνει όλες τις εγγραφές του δεύτερου πίνακα και από τις εγγραφές του πρώτου πίνακα μόνο αυτές που ικανοποιούν το κριτήριο σύνδεσης Τυχόν κενά που προκύπτουν συμπληρώνονται αυτόματα με την τιμή NULL B.T. Ταμπακάς, H Γλώσσα SQL 42
ΗΠλήρηςΕξωτερικήΣύνδεση Η πλήρης εξωτερική σύνδεση υλοποιείται με την εντολή FULL OUTER JOIN και συμπεριλαμβάνει όλες τις εγγραφές και των δυο πινάκων Οι εγγραφές του ενός πίνακα (του πρώτου ή του δεύτερου), που δεν συνδέονται με βάση το κριτήριο σύνδεσης με κάποια εγγραφή του άλλου πίνακα (του δεύτερου ή του πρώτου αντίστοιχα) συμπληρώνονται αυτόματα με την τιμή NULL B.T. Ταμπακάς, H Γλώσσα SQL 43
ΗΠλήρηςΕξωτερικήΣύνδεση Να εκτυπωθούν σε ένα πίνακα όλοι οι καθηγητές (όνομα, επώνυμο) και όλα τα συγγράμματα (τίτλος) αντιστοιχίζοντας τα συγγράμματα, που γράφει ένας καθηγητής με το ονοματεπώνυμο του καθηγητή-συγγραφέα B.T. Ταμπακάς, H Γλώσσα SQL 44
ΗΠλήρηςΕξωτερικήΣύνδεση Να εκτυπωθούν σε ένα πίνακα όλοι οι καθηγητές (όνομα, επώνυμο) και όλα τα συγγράμματα (τίτλος) αντιστοιχίζοντας τα συγγράμματα, που γράφει ένας καθηγητής με το ονοματεπώνυμο του καθηγητή-συγγραφέα SELECT FROM Επώνυμο, Όνομα, Τίτλος (Καθηγητής FULL OUTER JOIN Συγγράφει ON ΚωδικόςΚ=ΚωδΚαθηγητή) FULL OUTER JOIN Σύγγραμμα ON ΚωδΣυγγράμματος=ΚωδικόςΣ; B.T. Ταμπακάς, H Γλώσσα SQL 45
ΗΠλήρηςΕξωτερικήΣύνδεση Το αποτέλεσμα του ερωτήματος είναι: Επώνυμο Όνομα Τίτλος Νικολάου Γιώργος - Αντύπας Γιώργος Εισαγωγή στις Β Τριάντης Νίκος Νέες Τεχνολογίες Μόσχος Γιάννης Μάρκετινγκ Μόσχος Γιάννης Λογιστικό Σχέδιο Μόσχος Γιάννης Εισαγωγή στις Β Ανδρέου Θεμιστοκλής - Αντύπας Νίκος Μάρκετινγκ - - Μηχανές Ι B.T. Ταμπακάς, H Γλώσσα SQL 46
Εντολές Συνόλων και Ερωτήματα Πολλών Επιπέδων Οι εντολές συνόλων αντιμετωπίζουν τις υπάρχουσες τιμές σε ένα πίνακα ως ένα σύνολο και εφαρμόζουν τις γνωστές πράξεις από τη θεωρία των συνόλων (π.χ. ένωση, τομή, διαφορά κ.λ.π.) Γενικότερα η SQL αντιμετωπίζει τους πίνακες ως πολυσύνολα, αφού σε ένα πίνακα επιτρέπεται να υπάρχουν διπλότυπες εγγραφές Με τη χρήση του κλειδιού και των σχετικών περιορισμών, που το χαρακτηρίζουν, ένας πίνακας μετατρέπεται τελικά σε σύνολο B.T. Ταμπακάς, H Γλώσσα SQL 47
Εντολές Συνόλων και Ερωτήματα Πολλών Επιπέδων Τα ένθετα ή φωλιασμένα ερωτήματα μπορεί να είναι πλήρη ερωτήματα SELECT FROM WHERE μέσα σε άλλα παρόμοια ερωτήματα Τα ένθετα ονομάζονται και εσωτερικά ερωτήματα σε αντίθεση με τα εξωτερικά ερωτήματα Το εσωτερικό ερώτημα εκτελείται πρώτο, επιστρέφει ένα σύνολο από δεδομένα, τα οποία στη συνέχεια χρησιμοποιούνται από το εξωτερικό ερώτημα B.T. Ταμπακάς, H Γλώσσα SQL 48
Εντολή DISTINCT H εντολή DISTINCT εξασφαλίζει πως μετά την εκτέλεση ενός ερωτήματος, κάθε τιμή θα εμφανιστεί μόνο μια φορά στον πίνακα αποτελέσματος η εντολή DISTINCT μετατρέπει ένα πολυσύνολο σε σύνολο Συντάσσεται στην εντολή SELECT και προσδιορίζει κάθε φορά το πεδίο εκτύπωσης B.T. Ταμπακάς, H Γλώσσα SQL 49
Εντολή DISTINCT Να βρεθούν οι υπάρχουσες εξειδικεύσεις των υπαλλήλων της εταιρίας. Στην εκτύπωση, δενθαπρέπειναυπάρχουν διπλότυπα SELECT DISTINCT Εξειδίκευση FROM ΥπαλΕξειδικ; B.T. Ταμπακάς, H Γλώσσα SQL 50
Οι Εντολές IN και ANY Η εντολή IN διερευνά αν υπάρχουν μια ή περισσότερες τιμές μέσα σε ένα σύνολο και επιστρέφει TRUE, αν η συγκεκριμένη τιμή ή τιμές βρεθούν μέσα στο σύνολο Η εντολή =ANY επιστρέφει TRUE, αν μέσα στο σύνολο βρεθεί μια συγκεκριμένη τιμή και επομένως είναι ισοδύναμη με την IN H ANY μπορεί να χρησιμοποιηθεί και με τους τελεστές σύγκρισης >, <, >=, <=, <> Για παράδειγμα η χρήση της εντολής >=ANY επιστρέφει TRUE, ανμέσαστοσύνολοτιμώνβρεθεί μια τουλάχιστον τιμή που είναι μικρότερη ή ίση της δοσμένης τιμής B.T. Ταμπακάς, H Γλώσσα SQL 51
Οι Εντολές IN και ANY Να βρεθούν οι κωδικοί των καθηγητών, που έχουν συμμετάσχει στη συγγραφή ίδιων βιβλίων (δηλ. σε κάποια εκ των βιβλίων) με τον καθηγητή με κωδικό 99 B.T. Ταμπακάς, H Γλώσσα SQL 52
Οι Εντολές IN και ANY Να βρεθούν οι κωδικοί των καθηγητών, που έχουνσυμμετάσχειστησυγγραφήίδιων βιβλίων (δηλ. σε κάποια εκ των βιβλίων) με τον καθηγητή με κωδικό 99 SELECT DISTINCT ΚωδΚαθηγητή FROM Συγγράφει WHERE ΙΝ ΚωδΣυγγράμματος (SELECT ΚωδΣυγγράμματος FROM Συγγράφει WHERE ΚωδΚαθηγητή=99); B.T. Ταμπακάς, H Γλώσσα SQL 53
Οι Εντολές IN και ANY Να βρεθεί η ονομασία των προϊόντων που δεν έχουν διαφημιστεί έως τώρα. B.T. Ταμπακάς, H Γλώσσα SQL 54
Οι Εντολές IN και ANY Να βρεθεί η ονομασία των προϊόντων που δεν έχουν διαφημιστεί έως τώρα SELECT ΟνομΠροιοντος FROM Προιόν WHERE ΚΠροιοντος ΝΟΤ IN (SELECT Κπροιοντος FROM Στοιχ ιαφημ) B.T. Ταμπακάς, H Γλώσσα SQL 55
Οι Εντολές IN και ANY Να βρεθούν οι ονομασίες των προϊόντων που έχουν τιμή ανά τεμάχιο μεγαλύτερη της τιμής του προϊόντος ΤΡΦ1 τροφή για σκύλους B.T. Ταμπακάς, H Γλώσσα SQL 56
Οι Εντολές IN και ANY Να βρεθούν οι ονομασίες των προϊόντων που έχουν τιμή ανά τεμάχιο μεγαλύτερη της τιμής του προϊόντος ΤΡΦ1 τροφή για σκύλους SELECT ΟνομΠροιοντος FROM Προιόν WHERE ΤιμΠρΤεμαχ >ANY (SELECT ΤιμΠρΤεμαχ FROM Προιόν WHERE ΟνομΠροιοντος= 'ΤΡΦ1 - τροφή για σκύλους'); Σημείωση: Είναι απαραίτητο το ANY; B.T. Ταμπακάς, H Γλώσσα SQL 57
Οι Εντολές IN και ANY Να βρεθούν τα ονόματα και επώνυμα τωνσπουδαστώνπουέχουνκηδεμόνα με το ίδιο επώνυμο με το δικό τους. B.T. Ταμπακάς, H Γλώσσα SQL 58
Οι Εντολές IN και ANY Να βρεθούν τα ονόματα και επώνυμα των σπουδαστών που έχουν κηδεμόνα με το ίδιο επώνυμο με το δικό τους. SELECT "Όνομα", "Επώνυμο" FROM "Σπουδαστής" WHERE "Επώνυμο" IN (SELECT "Επώνυμο" FROM "Κηδεμόνας") (εξετάστε την ορθότητα του ερωτήματος) B.T. Ταμπακάς, H Γλώσσα SQL 59
Οι Εντολές IN και ANY SELECT "Όνομα", "Επώνυμο" FROM "Σπουδαστής" WHERE "ΑΜ" IN (SELECT "ΑΜΣπουδαστή" FROM "Κηδεμόνας" where "Σπουδαστής"."Επώνυμο"= "Κηδεμόνας"."Επώνυμο") B.T. Ταμπακάς, H Γλώσσα SQL 60
Οι Εντολές IN και ANY Εναλλακτικά το ερώτημα μπορεί να υλοποιηθεί με σύνδεση πινάκων ως εξής : SELECT "Σπουδαστής"."Όνομα", "Σπουδαστής"."Επώνυμο" FROM "Σπουδαστής", "Κηδεμόνας" WHERE "Σπουδαστής"."Επώνυμο"= "Κηδεμόνας"."Επώνυμο" AND "ΑΜ"="ΑΜΣπουδαστή" B.T. Ταμπακάς, H Γλώσσα SQL 61
Οι Εντολές IN και ANY Να εκτυπωθούν τα ονοματεπώνυμα των καθηγητών που διδάσκουν ένα τουλάχιστον μάθημα. Κάθε ονοματεπώνυμο να εμφανιστεί μόνο μια φορά. B.T. Ταμπακάς, H Γλώσσα SQL 62
Οι Εντολές IN και ANY select "Όνομα", "Επώνυμο" from "Μάθημα", "Καθηγητής" where " ιδάσκων"="κωδικόςκ" B.T. Ταμπακάς, H Γλώσσα SQL 63
Οι Εντολές IN και ANY Όνομα Νίκος Θεμιστοκλής Νίκος Νίκος Γιώργος Γιάννης Επ ώνυμο Τριάντης Ανδρέου Αντύπας Αντύπας Αντύπας Μόσχος B.T. Ταμπακάς, H Γλώσσα SQL 64
Οι Εντολές IN και ANY Να εκτυπωθούν τα ονοματεπώνυμα των καθηγητών που διδάσκουν ένα τουλάχιστον μάθημα. Κάθε ονοματεπώνυμο να εμφανιστεί μόνο μια φορά. select "Όνομα", "Επώνυμο" from "Καθηγητής" where "ΚωδικόςΚ" in (select "ΚωδικόςΚ" from "Μάθημα", "Καθηγητής" where " ιδάσκων"="κωδικόςκ") B.T. Ταμπακάς, H Γλώσσα SQL 65
Οι Εντολές IN και ANY Όνομα Νίκος Θεμιστοκλής Νίκος Γιώργος Γιάννης Επώνυμο Τριάντης Ανδρέου Αντύπας Αντύπας Μόσχος B.T. Ταμπακάς, H Γλώσσα SQL 66
Οι Εντολές ALL και EXISTS H εντολή ALL συντάσσεται με τον ίδιο τρόπο με την εντολή ANY. Επιστρέφει TRUE, αν η συνθήκη σύγκρισης ισχύει για όλα τα στοιχεία του συνόλου τιμών που δημιουργούνται από το εσωτερικό ερώτημα ΗεντολήEXISTS(εντολή) επιστρέφει TRUE, αν η εκτέλεση της εντολής μέσα στην παρένθεση επιστρέψει τουλάχιστον μια τιμή Κατά αντίστοιχο τρόπο χρησιμοποιείται και η εντολή NOT EXISTS(εντολή) B.T. Ταμπακάς, H Γλώσσα SQL 67
Οι Εντολές ALL και EXISTS Να βρεθεί η ονομασία του προϊόντος με τη μεγαλύτερη τιμή ανά τεμάχιο B.T. Ταμπακάς, H Γλώσσα SQL 68
Οι Εντολές ALL και EXISTS Να βρεθεί η ονομασία του προϊόντος με τη μεγαλύτερη τιμή ανά τεμάχιο SELECT ΟνομΠροιοντος FROM Προιόν WHERE ΤιμΠρΤεμαχ >=ALL (SELECT ΤιμΠρΤεμαχ FROM Προιόν); B.T. Ταμπακάς, H Γλώσσα SQL 69
Οι Εντολές ALL και EXISTS ή SELECT "ΟνομΠροιοντος" FROM "Προιόν" WHERE "ΤιμΠρΤεμαχ" = (SELECT max("τιμπρτεμαχ") FROM "Προιόν"); B.T. Ταμπακάς, H Γλώσσα SQL 70
Οι Εντολές ALL και EXISTS Να βρεθούν Όνομα και Επώνυμο των καθηγητών, που συγγράφουν ένα τουλάχιστον σύγγραμμα B.T. Ταμπακάς, H Γλώσσα SQL 71
Οι Εντολές ALL και EXISTS Να βρεθούν Όνομα και Επώνυμο των καθηγητών, που συγγράφουν ένα τουλάχιστον σύγγραμμα SELECT Όνομα, Επώνυμο FROM Καθηγητής WHERE EXISTS (SELECT * FROM Συγγράφει WHERE ΚωδικόςΚ=ΚωδΚαθηγητή); B.T. Ταμπακάς, H Γλώσσα SQL 72
Οι Εντολές ALL και EXISTS Βέβαια υπάρχουν εναλλακτικοί τρόποι υλοποίησης του ερωτήματος όπως: SELECT Όνομα, Επώνυμο FROM Καθηγητής WHERE ΚωδικόςΚ ΙΝ (SELECT ΚωδΚαθηγητή FROM Συγγράφει) B.T. Ταμπακάς, H Γλώσσα SQL 73
Οι Εντολές ALL και EXISTS Ή SELECT DISTINCT Όνομα, Επώνυμο FROM Καθηγητής, Συγγράφει WHERE ΚωδικόςΚ =ΚωδΚαθηγητή B.T. Ταμπακάς, H Γλώσσα SQL 74
ΗΈνωση, η Τομήκαιη ιαφορά Συνόλων στην SQL Βρείτε τη λίστα, που περιέχει τα επώνυμα των καθηγητών και των σπουδαστών SELECT Επώνυμο FROM Σπουδαστής UNION SELECT Επώνυμο FROM Καθηγητής; B.T. Ταμπακάς, H Γλώσσα SQL 75
ΗΈνωση, η Τομήκαιη ιαφορά Συνόλων στην SQL Βρείτε τα κοινά επώνυμα των σπουδαστών με τους κηδεμόνες τους SELECT "Επώνυμο" FROM "Σπουδαστής" INTERSECT SELECT "Επώνυμο" FROM "Καθηγητής" B.T. Ταμπακάς, H Γλώσσα SQL 76
ΗΈνωση, η Τομήκαιη ιαφορά Συνόλων στην SQL Να βρεθούν τα ονοματεπώνυμα των σπουδαστών που παρακολουθούν τα μαθήματα Βάσεις εδομένων και Τεχνολογία Λογισμικού B.T. Ταμπακάς, H Γλώσσα SQL 77
ΗΈνωση, η Τομήκαιη ιαφορά Συνόλων στην SQL Να βρεθούν τα ονοματεπώνυμα των σπουδαστών που παρακολουθούν το μάθημα Βάσεις εδομένων και Τεχνολογία Λογισμικού select "Επώνυμο", "Όνομα" from "Σπουδαστής", "Παρακολουθεί", "Μάθημα" where "Σπουδαστής"."ΑΜ"="Παρακολουθεί"."ΑΜΣπουδαστή" and "Παρακολουθεί"."ΚωδΜαθήματος"="Μάθημα"."ΚωδικόςΜ" and "Τίτλος"= 'Βάσεις εδομένων' intersect select "Επώνυμο", "Όνομα" from "Σπουδαστής", "Παρακολουθεί", "Μάθημα" where "Σπουδαστής"."ΑΜ"="Παρακολουθεί"."ΑΜΣπουδαστή" and "Παρακολουθεί"."ΚωδΜαθήματος"="Μάθημα"."ΚωδικόςΜ" and "Τίτλος"= 'Τεχνολογία Λογισμικού' B.T. Ταμπακάς, H Γλώσσα SQL 78
ΗΈνωση, η Τομήκαιη ιαφορά Συνόλων στην SQL Ποια μαθήματα (τίτλος) έχει παρακολουθήσει ο σπουδαστής Βασίλειος Νίνος και δεν έχει παρακολουθήσει ο σπουδαστής Βαγγέλης Σαρρής B.T. Ταμπακάς, H Γλώσσα SQL 79
ΗΈνωση, η Τομήκαιη ιαφορά Συνόλων στην SQL Ποια μαθήματα (τίτλος) έχει παρακολουθήσει ο σπουδαστής Βασίλειος Νίνος και δεν έχει παρακολουθήσει ο σπουδαστής Βαγγέλης Σαρρής select "Τίτλος" from "Σπουδαστής", "Παρακολουθεί", "Μάθημα" where "Σπουδαστής"."ΑΜ"="Παρακολουθεί"."ΑΜΣπουδαστή" and "Παρακολουθεί"."ΚωδΜαθήματος"="Μάθημα"."ΚωδικόςΜ" and "Επώνυμο"='Νίνος' and "Όνομα"='Βασίλειος' minus select "Τίτλος" from "Σπουδαστής", "Παρακολουθεί", "Μάθημα" where "Σπουδαστής"."ΑΜ"="Παρακολουθεί"."ΑΜΣπουδαστή" and "Παρακολουθεί"."ΚωδΜαθήματος"="Μάθημα"."ΚωδικόςΜ" and "Επώνυμο"='Σαρρής' and "Όνομα"='Βαγγέλης' B.T. Ταμπακάς, H Γλώσσα SQL 80
ΗΈνωση, η Τομήκαιη ιαφορά Συνόλων στην SQL ή select "Τίτλος" from "Σπουδαστής", "Παρακολουθεί", "Μάθημα" where "Σπουδαστής"."ΑΜ"="Παρακολουθεί"."ΑΜΣπουδαστή" and "Παρακολουθεί"."ΚωδΜαθήματος"="Μάθημα"."ΚωδικόςΜ" and "Επώνυμο"='Νίνος' and "Όνομα"='Βασίλειος' and "ΚωδικόςΜ" not in ( select "ΚωδικόςΜ" from "Σπουδαστής", "Παρακολουθεί", "Μάθημα" where "Σπουδαστής"."ΑΜ"="Παρακολουθεί"."ΑΜΣπουδαστή" and "Παρακολουθεί"."ΚωδΜαθήματος"="Μάθημα"."ΚωδικόςΜ" and "Επώνυμο"='Σαρρής' and "Όνομα"='Βαγγέλης') B.T. Ταμπακάς, H Γλώσσα SQL 81
ΗΈνωση, η Τομήκαιη ιαφορά Συνόλων στην SQL Να βρεθούν τα ονόματα και τα επώνυμα των υπαλλήλων που δεν έχουν κάποια εξειδίκευση B.T. Ταμπακάς, H Γλώσσα SQL 82
ΗΈνωση, η Τομήκαιη ιαφορά Συνόλων στην SQL Να βρεθούν τα ονόματα και τα επώνυμα των υπαλλήλων που δεν έχουν κάποια εξειδίκευση SELECT FROM ΜΙΝUS SELECT FROM WHERE Όνομα, Επώνυμο Υπάλληλος Όνομα, Επώνυμο Υπάλληλος, ΥπαλΕξειδικ Υπάλληλος.ΑΦΜ=ΥπαλΕξειδικ.ΑΦΜ; B.T. Ταμπακάς, H Γλώσσα SQL 83
Συναθροιστικές Πράξεις Οι συναθροιστικές πράξεις εκφράζουν τις μαθηματικές συναθροιστικές συναρτήσεις, που εφαρμόζονται σε συλλογές τιμών της βάσης δεδομένων Η SQL χρησιμοποιεί τις παρακάτω συναρτήσεις: MIN: εύρεση της μικρότερης τιμής MAX: εύρεση της μεγαλύτερης τιμής SUM: εύρεση της αθροίσματος AVG: εύρεση της μέσης τιμής COUNT: εύρεση του πλήθους των τιμών B.T. Ταμπακάς, H Γλώσσα SQL 84
Συναθροιστικές Πράξεις Να βρείτε το πλήθος των σπουδαστών που είναι καταχωρημένοι στη βάση δεδομένων «Εκπαιδευτικό Ίδρυμα» SELECT FROM COUNT(ΑΜ) AS ΠλήθοςΣπουδαστ Σπουδαστής; B.T. Ταμπακάς, H Γλώσσα SQL 85
Συναθροιστικές Πράξεις Να βρεθεί το πλήθος των διαφορετικών πελατών, που έχουν εκδώσει ένα τουλάχιστον παραστατικό SELECT COUNT(DISTINCT ΚΠελάτη) AS ΑρΠελατμεΠαραστ FROM Παραστατικό; B.T. Ταμπακάς, H Γλώσσα SQL 86
Εντολή Ομαδοποίησης Πολλές φορές χρειάζεται να εφαρμοστεί μια συναθροιστική συνάρτηση σε ένα υποσύνολο (ομάδα) των εγγραφών ενός πίνακα, που σχηματίζεται με βάση τις τιμές ενός γνωρίσματος (πεδίου) του πίνακα Στην περίπτωση αυτή πρέπει πρώτα να γίνει η ομαδοποίηση των εγγραφών και μετά να εφαρμοστεί μια συναθροιστική συνάρτηση Η εντολή για την ομαδοποίηση είναι η GROUP BY, η οποία συντάσσεται μετά την πρόταση WHERE Η εντολή GROUP BY προσδιορίζει τα γνωρίσματα ως προς τα οποία θα γίνει η ομαδοποίηση και τα οποία ονομάζονται γνωρίσματα ή πεδία ομαδοποίησης B.T. Ταμπακάς, H Γλώσσα SQL 87
Εντολή Ομαδοποίησης Να βρεθεί το πλήθος των σπουδαστών ανά Τμήμα φοίτησης B.T. Ταμπακάς, H Γλώσσα SQL 88
Εντολή Ομαδοποίησης Να βρεθεί το πλήθος των σπουδαστών ανά Τμήμα φοίτησης SELECT FROM GROUP BY ΟνομΤμήματος, COUNT(*) AS ΑρΣπουδΤμήμα Σπουδαστής ΟνομΤμήματος; B.T. Ταμπακάς, H Γλώσσα SQL 89
Εντολή Ομαδοποίησης Να βρεθεί πόσα παραστατικά έχει εκδώσει κάθε πελάτης της εταιρίας. Να εκτυπωθεί η επωνυμία του πελάτη και ο αριθμός παραστατικών B.T. Ταμπακάς, H Γλώσσα SQL 90
Εντολή Ομαδοποίησης Να βρεθεί πόσα παραστατικά έχει εκδώσει κάθε πελάτης της εταιρίας. Να εκτυπωθεί η επωνυμία του πελάτη και ο αριθμός παραστατικών SELECT Επωνυμία, COUNT(*) AS ΑρΠαραστΠελατ FROM Πελάτης, Παραστατικό WHERE Πελάτης.ΚΠελάτη= Παραστατικό.ΚΠελάτη GROUP BY Επωνυμία, ΚΠελάτη; B.T. Ταμπακάς, H Γλώσσα SQL 91
Εντολή Ομαδοποίησης Ταξινομείστε τα Τμήματα (ονομασία) σε φθίνουσα διάταξη ως προς τον αριθμό των σπουδαστών που φοιτούν σε αυτά B.T. Ταμπακάς, H Γλώσσα SQL 92
Εντολή Ομαδοποίησης Ταξινομείστε τα Τμήματα (ονομασία) σε φθίνουσα διάταξη ως προς τον αριθμό των σπουδαστών που φοιτούν σε αυτά select "ΟνομΤμήματος", count(*) as "ΑρΣπουδΤμήμα" from "Σπουδαστής" group by "ΟνομΤμήματος" order by "ΑρΣπουδΤμήμα" desc B.T. Ταμπακάς, H Γλώσσα SQL 93
Εντολή Ομαδοποίησης Να βρεθεί το ποσοστό (στρογγυλεμένο σε 2 δεκαδικά) των Μ που διδάσκει ο κάθε καθηγητής (κωδικός) ως προς το σύνολο των Μ όλων των μαθημάτων. Να εκτυπωθεί ο κωδικός του διδάσκοντα και το ποσοστό. B.T. Ταμπακάς, H Γλώσσα SQL 94
Εντολή Ομαδοποίησης Να βρεθεί το ποσοστό (στρογγυλεμένο σε 2 δεκαδικά) των Μ που διδάσκει ο κάθε καθηγητής (κωδικός) ως προς το σύνολο των Μ όλων των μαθημάτων. Να εκτυπωθεί ο κωδικός του διδάσκοντα και το ποσοστό. select " ιδάσκων", round(100*sum(" ιδμονάδες")/(select sum(" ιδμονάδες") from "Μάθημα"), 2) As "Ποσοστο Μ" from "Μάθημα" group by " ιδάσκων"; B.T. Ταμπακάς, H Γλώσσα SQL 95
Ομαδοποίηση υπό Συνθήκη Εντολή HAVING Μερικές φορές θέλουμε να εφαρμόσουμε τις συναθροιστικές συναρτήσεις, όχι για όλες τις ομάδες των εγγραφών αλλά μόνο για τις ομάδες που ικανοποιούν κάποια συγκεκριμένη συνθήκη Σε τέτοιες περιπτώσεις πρέπει να χρησιμοποιήσουμε την εντολή HAVING η οποία εξετάζει συγκεκριμένα κριτήρια πάνω στις ομάδες εγγραφών, που έχουν σχηματισθεί με την εντολή GROUP BY H εντολή HAVING συντάσσεται μετά την εντολή GROUP BY και υλοποιεί την επιλογή των τελικών ομάδων Η συναθροιστικές συναρτήσεις μπορούν να χρησιμοποιηθούν και στην εντολή HAVING B.T. Ταμπακάς, H Γλώσσα SQL 96
Ομαδοποίηση υπό Συνθήκη Εντολή HAVING Να βρεθούν οι σπουδαστές για τους οποίους το σύνολο των διδακτικών μονάδων των μαθημάτων που παρακολουθούν είναι μεγαλύτερο ή ίσο από 15. Να εκτυπωθούν τα ονόματα και επώνυμα των σπουδαστών και το σύνολο των διδακτικών μονάδων των μαθημάτων που παρακολουθούν. B.T. Ταμπακάς, H Γλώσσα SQL 97
Ομαδοποίηση υπό Συνθήκη Εντολή HAVING SELECT FROM WHERE GROUP BY HAVING SUM Όνομα, Επώνυμο, SUM( ιδμονάδες) AS Σύνολο Μ Σπουδαστής, Παρακολουθεί, Μάθημα ΑΜ=ΑΜΣπουδαστή AND ΚωδΜαθήματος= ΚωδικόςΜ Όνομα, Επώνυμο, ΑΜ ( ιδμονάδες)>=15 B.T. Ταμπακάς, H Γλώσσα SQL 98
Ομαδοποίηση υπό Συνθήκη Εντολή HAVING Να βρεθεί ο καθηγητής (ονοματεπώνυμο) που διδάσκει τα περισσότερα μαθήματα B.T. Ταμπακάς, H Γλώσσα SQL 99
Εντολή Ομαδοποίησης Να βρεθεί ο καθηγητής (ονοματεπώνυμο) που διδάσκει τα περισσότερα μαθήματα select "Επώνυμο", "Όνομα" from "Μάθημα", "Καθηγητής" where " ιδάσκων" = "ΚωδικόςΚ" group by " ιδάσκων", "Επώνυμο", "Όνομα" having count (*) >=all (select count(*) from "Μάθημα" group by " ιδάσκων"); B.T. Ταμπακάς, H Γλώσσα SQL 100
Εντολή Ομαδοποίησης ή select "Επώνυμο", "Όνομα" from "Μάθημα", "Καθηγητής" where " ιδάσκων" = "ΚωδικόςΚ" group by " ιδάσκων", "Επώνυμο", "Όνομα" having count (*) = (select max(count(*)) from "Μάθημα" group by " ιδάσκων"); B.T. Ταμπακάς, H Γλώσσα SQL 101
Εντολή Ομαδοποίησης Να βρεθεί ο κωδικός του καλύτερου πελάτη (με βάση το συνολικό κόστος των αγορασθέντων προϊόντων ανά πελάτη), για τις πωλήσεις που έχουν γίνει εντός του 2006, καθώς και το συνολικό κόστος των προϊόντων που έχουν αγοραστεί από τον συγκεκριμένο πελάτη. B.T. Ταμπακάς, H Γλώσσα SQL 102
Εντολή Ομαδοποίησης SELECT "ΚΠελάτη", "tziros" from (SELECT "ΚΠελάτη", sum("αρτεμαχιων"*"τιμπρτεμαχ") as "tziros" FROM "Παραστατικό", "Περιλαμβάνει", "Προιόν" WHERE "Παραστατικό"."ΑρΠαραστατικου"= "Περιλαμβάνει"."ΑρΠαραστατικου" AND "Περιλαμβάνει"."ΚΠροιοντος"= "Προιόν"."ΚΠροιοντος" AND "ΗμερομΕκδοσης" BETWEEN TO_DATE('01/01/2006','DD/MM/YYYY') AND TO_DATE('30/12/2006','DD/MM/YYYY') group by "ΚΠελάτη") where "tziros" >= all (SELECT sum("αρτεμαχιων"*"τιμπρτεμαχ") as "tziros" FROM "Παραστατικό", "Περιλαμβάνει", "Προιόν" WHERE "Παραστατικό"."ΑρΠαραστατικου"= "Περιλαμβάνει"."ΑρΠαραστατικου" AND "Περιλαμβάνει"."ΚΠροιοντος"= "Προιόν"."ΚΠροιοντος" AND "ΗμερομΕκδοσης" BETWEEN TO_DATE('01/01/2006','DD/MM/YYYY') AND TO_DATE('30/12/2006','DD/MM/YYYY') group by "ΚΠελάτη"); B.T. Ταμπακάς, H Γλώσσα SQL 103
Ομαδοποίηση υπό Συνθήκη Εντολή HAVING Να βρεθεί ο καθηγητής (ονοματεπώνυμο) που διδάσκει τα περισσότερα μαθήματα, να εκτυπωθούν και οι τίτλοι των μαθημάτων που διδάσκει B.T. Ταμπακάς, H Γλώσσα SQL 104
Ομαδοποίηση υπό Συνθήκη Εντολή HAVING Να βρεθεί ο καθηγητής (ονοματεπώνυμο) που διδάσκει τα περισσότερα μαθήματα, να εκτυπωθούν και οι τίτλοι των μαθημάτων που διδάσκει select "Επώνυμο", "Όνομα", "Τίτλος" from "Μάθημα", "Καθηγητής" where " ιδάσκων" = "ΚωδικόςΚ" and " ιδάσκων"= (select " ιδάσκων" from "Μάθημα" group by " ιδάσκων" having count (*) >=all (select count(*) from "Μάθημα" group by " ιδάσκων")); B.T. Ταμπακάς, H Γλώσσα SQL 105
Ομαδοποίηση υπό Συνθήκη Εντολή HAVING Επώνυμο Όνομα Τίτλος Αντύπας Νίκο ς Βάσεις εδομένων Αντύπας Νίκο ς ίκτυα B.T. Ταμπακάς, H Γλώσσα SQL 106
Ομαδοποίηση υπό Συνθήκη Εντολή HAVING Να βρεθεί ποια προϊόντα έχουν πουληθεί σε πάνω από ένα πελάτη. Να εκτυπωθεί η ονομασία του προϊόντος και οαριθμόςτων(διαφορετικών) πελατών που το αγόρασε B.T. Ταμπακάς, H Γλώσσα SQL 107
Ομαδοποίηση υπό Συνθήκη Εντολή HAVING Να βρεθεί ποια προϊόντα έχουν πουληθεί σε πάνω από ένα πελάτη. Να εκτυπωθεί η ονομασία του προϊόντος και ο αριθμός των (διαφορετικών) πελατών που το αγόρασε SELECT ΟνομΠροιοντος, COUNT( DISTINCT ΚΠελάτη) AS ΑριθμΑγοραστών FROM WHERE Παραστατικό, Περιλαμβάνει, Προιόν Παραστατικό.ΑρΠαραστατικου= Περιλαμβάνει.ΑρΠαραστατικου AND Περιλαμβάνει.ΚΠροιοντος= Προιόν.ΚΠροιοντος GROUP BY ΟνομΠροιοντος, Προιόν. ΚΠροιοντος HAVING COUNT(DISTINCT ΚΠελάτη)>1; B.T. Ταμπακάς, H Γλώσσα SQL 108