Φροντιστήριο 8 o Χειµερινό Εξάµηνο 2009-10 Τµήµα Μηχανικών Η/Υ και Πληροφορικής Πολυτεχνική Σχολή, Πανεπιστήµιο Πατρών Πέµπτη, 3 εκεµβρίου 2009
Τι είναι η QBE; Γλώσσα επερωτήσεων σε σχεσιακές ϐάσεις δεδοµένων Οπως και στην SQL, υπάρχει η δυνατότητα δηµιουργίας και τροποποίησης σχεσιακών δεδοµένων ιαθέτει ένα "GUI" που επιτρέπει στο χρήστη να γράφει queries, δηµιουργώντας πίνακες παραδειγµάτων (ή πίνακες σκελετούς) ιαφορά από την SQL Ο χρήστης χρειάζεται ελάχιστη πληροφορία για να χρησιµοποιήσει την QBE Η γλώσσα είναι αρκετά µικρή Η QBE είναι κατάλληλη για σχετικά απλά ερωτήµατα
Ιστορικά Στοιχεία Η QBE, όπως και η SQL, αναπτύχθηκε από την IBM στα µέσα της δεκαετίας του 70 Moshé M. Zloof Ηταν η πρώτη graphical query language που χρησιµοποιούσε «οπτικούς πίνακες» (visual tables) Οι χρήστες µπορούσαν να εισάγουν εντολές, στοιχεία παραδειγµάτων και συνθήκες Πολλά Σ Β, όπως το Microsoft Access, παρέχουν µερική υποστήριξη στη δηµιουργία επερωτήσεων µε τρόπο παρόµοιο της QBE Συνήθως, ένα QBE-like interface παρέχεται επιπρόσθετα µε την SQL Η QBE παρέχει ένα πιο διαισθητικό interface για απλά ερωτήµατα Η SQL χρησιµοποιείται για πιο σύνθετα ερωτήµατα
Σχήµα Β για Παραδείγµατα Sailors id: integer sname: string rating: integer age: real Boats bid: integer bname: string color: string Reserves sid: integer bid: integer day: dates
Βασικά Ερωτήµατα µε QBE (1/5) Τύπωσε τα ονόµατα και τις ηλικίες όλων των ναυτών Example Table: Ο χρήστης γράφει ερωτήµατα δηµιουργώντας example tables Χρησιµοποιούνται µεταβλητές, οι οποίες καθορίζονται από τη στήλη στην οποία εµφανίζονται Τα σύµβολα των µεταβλητών ξεκινούν µε underscore ( _ ), π.χ. _N, _A Τα πεδία που επιθυµούµε να εµφανισθούν στην έξοδο καθορίζονται χρησιµοποιώντας την εντολή P. (Print)
Βασικά Ερωτήµατα µε QBE (2/5) Τύπωσε τα στοιχεία όλων των ναυτών 1 oς τρόπος Αν ϑέλουµε να τυπώσουµε όλα τα πεδία µιας σχέσης, µπορούµε να χρησιµοποιήσουµε την εντολή P. στο πεδίο του ονόµατος της σχέσης 2 oς τρόπος (Ισοδύναµος αλλά συντοµευµένος)
Βασικά Ερωτήµατα µε QBE (3/5) Τύπωσε όλους τους ναύτες µε rating = 10 Οι επιλογές εκφράζονται τοποθετώντας µια σταθερά σε κάποιο πεδίο Μπορούν να χρησιµοποιηθούν όλοι οι γνωστοί τελεστές σύγκρισης (>, <, <=, >=, ) Τύπωσε όλα τα στοιχεία των ναυτών που δεν είναι 30 χρονών
Βασικά Ερωτήµατα µε QBE (4/5) Τύπωσε τα ονόµατα των σκαφών που δεν έχουν µπλε χρώµα Τύπωσε τα ονόµατα των ναυτών που έχουν το ίδιο rating µε τον Nikolaou
Βασικά Ερωτήµατα µε QBE (5/5) AND/OR Ερωτήµατα Τύπωσε τα ονόµατα των ναυτών που είναι µικρότεροι από 30 χρονών ή µεγαλύτεροι από 20 Τύπωσε τα ονόµατα των ναυτών που είναι µικρότεροι από 30 χρονών και µεγαλύτεροι από 20 Τύπωσε τα ονόµατα των ναυτών που είναι µικρότεροι από 35 χρονών και έχουν rating µεγαλύτερο από 8
Χειρισµός ιπλοτύπων Μπορούµε να δηλώσουµε ϱητά αν επιθυµούµε διπλότυπες πλειάδες στα αποτελέσµατα Default επιλογή : Απαλοιφή διπλοτύπων (ή χρήση της UNQ.) ALL. Εµφάνιση διπλοτύπων Τύπωσε τα ονόµατα των ναυτών µε ηλικία 25 Χωρίς εµφάνιση διπλοτύπων Με εµφάνιση διπλοτύπων ή
ιάταξη Απαντήσεων Μπορούµε να διατάξουµε τη παρουσίαση των αποτελεσµάτων χρησιµοποιώντας την εντολή P. σε συδυασµό µε : AO. Αύξουσα διάταξη (Ascending Order) DO. Φθίνουσα διάταξη (Descending Order) Τύπωσε σε αύξουσα αλφαβητική σειρά τα ονόµατα των ναυτών υνατότητα ταξινόµησης και εµφάνισης δεδοµένων σε πολλαπλές στήλες Τύπωσε τα ονόµατα, τις ηλικίες και τα ratings όλων των ναυτών, σε ϕθίνουσα διάταξη ως προς την ηλικία και για καθε ηλικία, σε αύξουσα σειρά ως προς το rating
Ερωτήσεις σε Πολλαπλές Σχέσεις (1/4) Η QBE επιτρέπει ερωτήµατα που επεκτείνονται σε διάφορες σχέσεις Παρόµοια µε το καρτεσιανό γινόµενο, ή τις συνενώσεις (joins) της σχεσιακής άλγεβρας Τα ερωτήµατα συνένωσης µεταξύ διαφόρων σχέσεων επιτυγχάνονται µέσω µεταβλητών που κάνουν κάποιες εγγραφές ώστε να έχουν την ίδια τιµή σε κάποιες ιδιότητες
Ερωτήσεις σε Πολλαπλές Σχέσεις (2/4) Βρες τα ονόµατα των ναυτών που έχουν κάνει κάποια κράτηση ϐάρκας Πρέπει να συνδυάσουµε πληροφορία από τις σχέσεις Sailors και Reserves Σχήµα Β Example Table:
Ερωτήσεις σε Πολλαπλές Σχέσεις (3/4) Βρες τα ονόµατα των ναυτών που έχουν κάνει κράτηση µιας ϐάρκας στις 8/24/96 και είναι πάνω από 25 ετών Βρες τα χρώµατα των ϐαρκών µε όνοµα Interlake που έχουν κρατηθεί από ναύτες στις 8/24/96 και οι οποίοι είναι πάνω από 25 ετών
Ερωτήσεις σε Πολλαπλές Σχέσεις (4/4) Τύπωσε τα ονόµατα και τις ηλικίες των ναυτών που έχουν κάνει κράτηση για µια ϐάρκα, για τη οποία έχει επιπλέον γίνει κράτηση από τον ναύτη µε id 22
Άρνηση στη Στήλη του Ονόµατος της Σχέσης Τύπωσε τα ονόµατα των ναυτών που δεν έχουν κάνει κράτηση «Τύπωσε το πεδίο sname των πλειάδων της σχέσης Sailors για τις οποίες δεν υπάρχει πλειάδα στη σχέση Reserves µε την ίδια τιµή στο πεδίο sid» Οι µεταβλητές που εµφανίζονται σε µια γραµµή άρνησης (π.χ. µια γραµµή που ακολουθεί το ), πρέπει να εµφανίζονται και σε µια «ϑετική» γραµµή Βρες τα ονόµατα των ναυτών που δεν είναι µικρότεροι από 30 χρονών και δεν έχουν rating µεγαλύτερο του 4
Συναθροιστικές Πράξεις (1/2) Οµοια µε την SQL, η QBE παρέχει τις συναθροιστικές πράξεις AVG., COUNT., MAX., MIN., SUM. By default οι τελεστές αυτοί δεν απαλοίφουν διπλότυπα εκτός από τον COUNT. Κατά κανόνα, εάν επιθυµούµε να διατηρήσουµε διπλότυπα, προσθέτουµε τον τελεση ALL., π.χ. SUM.ALL. Για απαλοιφή διπλοτύπων πρέπει να χρησιµοποιηθεί ο τελεστής UNQ., π.χ. AVG.UNQ., SUM.UNQ.
Συναθροιστικές Πράξεις (2/2) Τύπωσε τη µέση ηλικία των ναυτών από το παρακάτω στιγµιότυπο της σχέσης Sailors Στιγµιότυπο της Sailors Αποτέλεσµα = 38.3 ( εν απαλείφονται διπλότυπα) Οµως P.AVG.UNQ._A 40.0 (Το 35.0 συµµετέχει µόνο µια ϕορά) Η QBE υποστηρίζει οµαδοποίηση, χρησιµοποιώντας την εντολή G. Παρόµοιο του group by της SQL Τύπωσε τις µέσες ηλικίες µε ϐάση το rating
Το Πλαίσιο Συνθήκης (1/3) Απλές συνθήκες µπορούν να εκφραστούν απευθείας στις στήλες ενός πίνακα σκελετού Ωστόσο, µπορεί να µην είναι δυνατό να εκφραστούν όλοι οι περιορισµοί µε τον τρόπο αυτό Η QBE παρέχει ένα πλαίσιο συνθήκης (condition box) Επιτρέπει να εκφράζονται γενικοί περιορισµοί στις µεταβλητές πεδίου τιµών Επιτρέπεται η εµφάνιση λογικών παραστάσεων σε ένα πλαίσιο συνθήκης
Το Πλαίσιο Συνθήκης (2/3) Τύπωσε το sid των ναυτών µε όνοµα Giwrgos" ή Kwstas" Τύπωσε εκείνα τα ratings για τα οποία η µέση ηλικία είναι µεγαλύτερη των 30 χρονών
Το Πλαίσιο Συνθήκης (3/3) Τύπωσε το sid των ναυτών µε ηλικία µεταξύ 20 ετών και 40 ετών αλλά όχι ακριβώς 35 ετών
Αποτέλεσµα Σχέσης (1/2) Πολλές ϕορές το αποτέλεσµα ενός ερωτήµατος περιλαµβάνει ιδιότητες από διάφορα σχήµατα Π.χ. συνένωση δύο πινάκων και προβολή ορισµένων µόνο στηλών Χρειαζόµαστε ένα µηχανισµό για την εµφάνιση του επιθυµητού αποτελέσµατος σε ένα µόνο πίνακα Μπορούµε να δηλώσουµε ένα προσωρινό αποτέλεσµα σχέσης που περιλαµβάνει όλες τις ιδιότητες του αποτελέσµατος του ερωτήµατος
Αποτέλεσµα Σχέσης (2/2) Τύπωσε τα ονόµατα των ναυτών, το id τους, τις ηλικίες τους και τις ηµέρες που έχουν κάνει κάποια κράτηση Για την απάντηση του ερώτηµατος Συνένωση των σχέσεων Sailors και Reserves Προβολή ονόµατος ναύτη, id, ηλικίας και ηµέρας
Τροποποίηση της Βάσης εδοµένων (1/3) Εισαγωγή Να εισαχθεί ένας νέος ναύτης στον πίνακα Sailors µε στοιχεία : id 74, όνοµα Janice, rating 7 και ηλικία 41 Να εισαχθούν το id, το όνοµα και η ηλικία των ϕοιτητών που είναι άνω των 18 ετών ή το όνοµά τους αρχίζει από C του πίνακα Students, στον πίνακα Sailors
Τροποποίηση της Βάσης εδοµένων (2/3) ιαγραφή Να διαγραφούν όλες οι πλειάδες µε rating > 5 από τον πίνακα Sailors Να διαγραφούν όλες οι κρατήσεις των ναυτών µε rating < 4
Τροποποίηση της Βάσης εδοµένων (3/3) Ενηµέρωση Να ανανεωθεί η ηλικία του ναύτη µε id 74, σε 42 Να ανανεωθεί το rating όλων των ναυτών αυξάνοντάς το κατά 1 (από την προηγούµενη τιµή)
Μια Ματιά στη MS Access (1/7) ηµιουργία των πινάκων Sailors, Boats και Reserves
Μια Ματιά στη MS Access (2/7) Εγγραφές του πίνακα Sailors
Μια Ματιά στη MS Access (3/7) Query Design Επιλογή πίνακα Sailors
Μια Ματιά στη MS Access (4/7) Επιλογή πεδίων από τον πίνακα Sailors
Μια Ματιά στη MS Access (5α/7) Ερώτηµα : Τύπωσε όλα τα στοιχεία των ναυτών που το όνοµά τους αρχίζει από a
Μια Ματιά στη MS Access (5β/7) Αποτέλεσµα : Τύπωσε όλα τα στοιχεία των ναυτών που το όνοµά τους αρχίζει από a
Μια Ματιά στη MS Access (6α/7) Ερώτηµα : Τύπωσε όλα τα στοιχεία των ναυτών που το όνοµά τους αρχίζει από j και rating > 4
Μια Ματιά στη MS Access (6β/7) Αποτέλεσµα : Τύπωσε όλα τα στοιχεία των ναυτών που το όνοµά τους αρχίζει από j και rating > 4
Μια Ματιά στη MS Access (7α/7) Εισαγωγή µιας νέας εγγραφής στον πίνακα Sailors
Μια Ματιά στη MS Access (7β/7) Ερώτηµα : Τύπωσε όλα τα στοιχεία των ναυτών κατά ϕθίνουσα σειρά ως προς το όνοµα και αύξουσα ως προς το rating
Μια Ματιά στη MS Access (7γ/7) Αποτέλεσµα : Τύπωσε όλα τα στοιχεία των ναυτών κατά ϕθίνουσα σειρά ως προς το όνοµα και αύξουσα ως προς το rating
Αναφορές Raghu Ramakrishnan and Johannes Gehrke. Database Management Systems. The McGraw-Hill Companies Inc., 2003 Avi Silberschatz, Henry F. Korth, and S. Sudarshan. Συστήµατα Βάσεων εδοµένων. Η Πλήρης Θεωρία των Βάσεων εδοµένων. Εκδόσεις Μ. Γκιούρδας, (The McGraw-Hill Companies Inc.), 2008.
Ευχαριστώ!