Κεφάλαιο 3. Ερωτήματα SQL

3.1. Βασικά Ερωτήματα
3.1.1 Διαχείριση του Results Pane
3.1.2 Ερωτήματα επιλογής εγγραφών από ένα πίνακα.
3.1.3 Ταξινόμηση αποτελεσμάτων
3.2. Ερωτήματα επιλογής εγγραφών από πολλούς πίνακες
3.2.1 Εσωτερική και εξωτερική σύνδεση πινάκων
3.2.2 Μετονομασία και αυτό-σύνδεση
3.3. Ερωτήματα συνάθροισης και ομαδοποίησης
3.3.1 Ερωτήματα με συναρτήσεις συνάθροισης
3.3.2 Ομαδοποίηση των δεδομένων - O όρος Group by
3.3.3 Ο όρος Having
3.4. Ερωτήματα με πράξεις συνόλων και εμφωλευμένα ερωτήματα
3.4.1 Βασικές πράξεις
3.4.2 Εμφωλευμένα ερωτήματα
3.4.3 Σύγκριση μεταξύ συνόλων
3.4.4 Έλεγχος κενότητας
3.5. Ερωτήματα SQL για όψεις
3.6. Το εργαλείο Query Designer για δημιουργία ερωτημάτων Query by Example
3.7. Ασκήσεις με ερωτήματα SQL
3.7.1 Ασκήσεις με ερωτήματα επιλογής γραμμών από ένα πίνακα.
3.7.2 Ασκήσεις με ερωτήματα επιλογής γραμμών από πολλούς πίνακες.
3.7.3 Ασκήσεις με Ερωτήματα ομαδοποίησης/συνάθροισης δεδομένων.
3.7.4 Ασκήσεις με ερωτήματα με φωλιασμένες εντολές SQL.
3.8. Λύσεις Ασκήσεων με ερωτήματα SQL
3.8.1 Λύσεις ασκήσεων με ερωτήματα επιλογής γραμμών από ένα πίνακα.
3.8.2 Λύσεις ασκήσεων με ερωτήματα επιλογής γραμμών από πολλούς πίνακες.
3.8.3 Λύσεις ασκήσεων με ερωτήματα ομαδοποίησης/συνάθροισης δεδομένων.
3.8.4 Λύσεις ασκήσεων με ερωτήματα με φωλιασμένες εντολές SQL
3.9. Βιβλιογραφία/Αναφορές

 

Κεφάλαιο 3. Ερωτήματα SQL

Σύνοψη

Σ’ αυτό το κεφάλαιο θα παρουσιάσουμε βασικά και σύνθετα ερωτήματα της SQL. Τα ερωτήματα θα υποβληθούν στην βάση δεδομένων DVDclub που δημιουργήθηκε στο προηγούμενο κεφάλαιο. Πιο συγκεκριμένα, θα μελετηθούν εντολές της SQL που αφορούν τη διαχείριση δεδομένων (Data Manipulation Language). Ενδεικτικά αναφέρεται ότι θα παρουσιαστούν ερωτήματα σύνδεσης πινάκων, ομαδοποίησης, πράξεων συνόλων. Επίσης, θα παρουσιαστεί η δημιουργία ερωτημάτων με γραφικό τρόπο (Query by Example) μέσα από τo περιβάλλον του Query Designer. Οι πίνακες της παραπάνω βάσης δεδομένων βρίσκονται και σε ιστοσελίδα στο διαδίκτυο, στη διεύθυνση http://www.donotwait.gr/formslib/runsql.aspx. Αν, λοιπόν, γράψουμε τα ερωτήματα SQL στο text editor που υπάρχει στη σελίδα, τότε τα αποτελέσματα του κάθε ερωτήματος θα είναι διαθέσιμα απευθείας στην ίδια σελίδα.

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.1. Βασικά Ερωτήματα

3.1.1 Διαχείριση του Results Pane.

Όταν εκτελείται ένα ερώτημα SQL,τα αποτελέσματα του ερωτήματος εμφανίζονται στο Results Pane. Στην καρτέλα Result μπορεί να εμφανιστεί το σύνολο των αποτελεσμάτων, είτε σε μορφή κειμένου/text είτε σε μορφή πλέγματος/grid, όπως αυτό που φαίνεται στην Εικόνα 3.1. Το πλέγμα μάς επιτρέπει να επιλέγουμε ξεχωριστά κελιά, στήλες ή γραμμές από το σύνολο των αποτελεσμάτων.

 

Εικόνα 3.1

 

Με δεξί κλικ πάνω στο πλέγμα/grid μπορούμε είτε να αντιγράψουμε τα αποτελέσματα, είτε να τα αποθηκεύσουμε σε κάποια μορφή εξωτερικού αρχείου, είτε να τα εκτυπώσουμε, όπως φαίνεται στο αναδυόμενο παράθυρο της Εικόνας 3.1.

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.1.2 Ερωτήματα επιλογής γραμμών από ένα πίνακα.

Η βασική λειτουργία της αναζήτησης πληροφοριών στη βάση δεδομένων γίνεται με ερωτήματα της ακόλουθης βορφής:

Select A1, A2, …, An
From R1, R2, …, Rm
Where συνθήκη;

Η σύνταξη της εντολής περιλαμβάνει τρεις όρους:

Έστω ότι αναφερόμαστε στον πίνακα ΠΕΛΑΤΗΣ, o οποίος περιέχει πληροφορίες για τους πελάτες του DVDclub. Ένα παράδειγμα ερωτήματος είναι:

“Να δοθούν τα ονόματα όλων των πελατών ”.

 

SQL - Editor

Ο όρος select περιέχει το πεδίο Όνομα, το οποίο θα περιέχεται στο αποτέλεσμα. Τα υπόλοιπα πεδία της σχέσης ΠΕΛΑΤΗΣ, όπως για παράδειγμα το πεδίο Τηλέφωνο, δεν θα συμπεριληφθούν στο αποτέλεσμα. Ο όρος from περιέχει τη σχέση ΠΕΛΑΤΗΣ από την οποία θα γίνει η επιλογή των πλειάδων του αποτελέσματος. Στην συγκεκριμένη εντολή, γίνεται επιλογή από μία μόνο σχέση. Η εντολή του παραδείγματος δεν έχει τον όρο where, με αποτέλεσμα να επιλεχθούν όλοι οι πελάτες ανεξαρτήτως συνθήκης, όπως απαιτούσε η ερώτηση.

Τα αποτελέσματα που προκύπτουν από μια εντολή της SQL μπορεί να περιέχουν δύο ίδιες πλειάδες. Για παράδειγμα, έστω το ερώτημα:

Πλαίσιο κειμένου: Q2

“Να δοθούν τα τηλέφωνα όλων των πελατών ”.

 

SQL - Editor

Αν δύο πελάτες έχουν το ίδιο τηλέφωνο (π.χ., είναι συγκάτοικοι), τότε αυτό εμφανίζεται δύο φορές στο αποτέλεσμα. Αν θέλουμε να πάρουμε έναν κατάλογο με όλα τα τηλέφωνα των πελατών μας, όπου επιθυμούμε κάθε τηλέφωνο να εμφανίζεται μόνο μία φορά, τότε απαιτείται η χρήση ενός επιπλέον όρου που ονομάζεται distinct. Το αποτέλεσμα δίνεται μετά από διαγραφή όλων των όμοιων πλειάδων, όπως δηλαδή συμβαίνει με την εφαρμογή της πράξης της προβολής στη σχεσιακή άλγεβρα. Για παράδειγμα έστω το ερώτημα:

Πλαίσιο κειμένου: Q3“Να δοθούν τα τηλέφωνα όλων των πελατών, όπου το κάθε τηλέφωνο να εμφανίζεται μία φορά μόνο”:

 

SQL - Editor

Συχνά είναι χρήσιμη η επιλογή όλων των πεδίων μίας σχέσης. Αυτό μπορεί να γίνει με την παράθεση όλων των πεδίων μετά τον όρο select, ή πιο απλά με τη χρήση του συμβόλου συντόμευσης * (αστερίσκος). Για παράδειγμα, για την ερώτηση:

Πλαίσιο κειμένου: Q4“Να δοθούν όλα τα στοιχεία των πελατών”. Η αντίστοιχη εντολή σε SQL είναι:

 

SQL - Editor

Με τον όρο Select μπορεί να χρησιμοποιηθεί οποιαδήποτε από τις πράξεις της πρόσθεσης (+), αφαίρεσης (-) ή άλλων συναρτήσεων, στις τιμές των πεδίων που εμφανίζονται στο αποτέλεσμα.

Πλαίσιο κειμένου: Q5Έστω για παράδειγμα ότι στο πεδίο Τηλέφωνο θέλουμε να εμφανίζεται το πρόθεμα 2310. Θα χρησιμοποιήσουμε τη συνένωση συμβολοσειρών.

 

SQL - Editor

Ο όρος where περιέχει μία συνθήκη που πρέπει να ικανοποιούν οι πλειάδες του αποτελέσματος.
Έστω για παράδειγμα η ερώτηση:

Πλαίσιο κειμένου: Q6“Να βρεθούν οι κωδικοί των δίσκων που είναι τύπου BLU-RAY”. Η αντίστοιχη εντολή της SQL είναι:


SQL - Editor

Ως συνθήκη μπορεί να ληφθεί οποιαδήποτε λογική έκφραση που αποτελείται από μία ή περισσότερες προτάσεις συνδυασμένες με λογικό και (and) ή λογικό ή (or) και παρενθέσεις. Χρειάζεται προσοχή στην προτεραιότητα μεταξύ των τελεστών, η οποία επιτυγχάνεται με τη χρήση παρενθέσεων. Για παράδειγμα, για την ερώτηση:

Πλαίσιο κειμένου: Q7“Να βρεθούν οι κωδικοί από τους δίσκους που είναι τύπου BLU-RAY ή αλλιώς η τιμή τους είναι μεγαλύτερη του 2”. Η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Για αλφαριθμητικά δεδομένα, είναι χρήσιμος ο τελεστής like, για την ταύτιση μιας συμβολοσειράς εντός μιας άλλης συμβολοσειράς. Με τον τελεστή like χρησιμοποιούνται δύο ειδικοί χαρακτήρες (μπαλαντέρ):

Πλαίσιο κειμένου: Q8Για παράδειγμα, για την ερώτηση: “Να βρεθούν ποια ονόματα πελατών αρχίζουν από Κ”, η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Για την εύρεση πεδίων που έχουν ή όχι τιμή NULL ορίζονται οι τελεστές IS NULL και IS NOT NULL. Για παράδειγμα, για την ερώτηση:

 Πλαίσιο κειμένου: Q9“Να βρεθούν τα στοιχεία των ενοικιάσεων που δεν έχει ορισθεί ημερομηνία επιστροφής”, η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.1.3 Ταξινόμηση αποτελεσμάτων

Στην γλώσσα SQL, η διάταξη των εγγραφών δεν έχει σημασία αφού τα στοιχεία ενός συνόλου δεν είναι διατεταγμένα. Πολλές φορές όμως προκύπτει η ανάγκη ταξινόμησης των αποτελεσμάτων με βάση την τιμή ενός πεδίου. Η SQL επιτρέπει την ταξινόμηση με την χρήση του όρου Οrder by. Έστω για παράδειγμα η ερώτηση:

Πλαίσιο κειμένου: Q10“Να δοθούν οι κωδικοί και η τιμή των δίσκων ταξινομημένοι ως προς τη τιμή τους, κατά αύξοντα τρόπο”:

 

SQL - Editor

Εξ ορισμού η ταξινόμηση γίνεται κατά αύξουσα σειρά. Ο προσδιορισμός αύξουσας ή φθίνουσας ταξινόμησης γίνεται με τους όρους asc και desc αντίστοιχα. Επίσης, μπορεί να γίνει ταξινόμηση με βάση περισσότερα πεδία. Έστω για παράδειγμα η ερώτηση:

Πλαίσιο κειμένου: Q11“Να δοθούν οι κωδικοί των δίσκων ταξινομημένοι κατά φθίνοντα τρόπο ως προς την τιμή ενοικίασης. Στην περίπτωση ίσων τιμών ενοικίασης, η ταξινόμηση να γίνει κατά αύξουσα ταξινόμηση ως προς το ID τους”:

 

SQL - Editor

Εκτός των πεδίων με αριθμητικές τιμές, η ταξινόμηση μπορεί να γίνει και σε διαφορετικούς τύπους δεδομένων. Επίσης, ας σημειωθεί ότι η τιμή NULL θεωρείται μικρότερη από κάθε άλλη. Έστω για παράδειγμα η ερώτηση:

 Πλαίσιο κειμένου: Q12“Να δοθούν οι κωδικοί των δίσκων που έχουν ενοικιαστεί, καθώς και οι ημερομηνίες επιστροφής τους, ταξινομημένες ως προς τις ημερομηνίες επιστροφής”:

 

SQL - Editor

Τονίζεται ότι οι συναρτήσεις DAY, MONTH, YEAR επιστρέφουν την ημερομηνία, τον μήνα και τον χρόνο, αντιστοίχως, ενός τύπου δεδομένων date. Όταν στα αποτελέσματά μας θέλουμε μόνο τις πρώτες k πρώτες εγγραφές, τότε χρησιμοποιούμε τον τελεστή top k. Έστω, για παράδειγμα, η ερώτηση:

 

Πλαίσιο κειμένου: Q13“Να δοθούν οι κωδικοί των 2 δίσκων με τη μεγαλύτερη τιμή”.

 

SQL - Editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.2. Ερωτήματα επιλογής πλειάδων από πολλούς πίνακες

3.2.1 Εσωτερική και εξωτερική σύνδεση πινάκων

Με τον όρο from δηλώνεται μια λίστα ονομάτων πινάκων, από την οποία μπορούν να αντληθούν τα δεδομένα. Στα προηγούμενα παραδείγματα οι αναζητήσεις δεδομένων αφορούσαν έναν μόνο πίνακα. Η αναζήτηση δεδομένων σε περισσότερους πίνακες γίνεται με τη βοήθεια της πράξης της σύνδεσης (join). Η πράξη της σύνδεσης, είναι ουσιαστικά μια επιλογή πάνω στο καρτεσιανό γινόμενο, (Hoffer, Venkatarama, & Topi, 2013· Μανωλόπουλος, & Παπαδόπουλος, 2006)που μπορεί να οριστεί τόσο στο πεδίο where όσο και στο πεδίο from. Για παράδειγμα, έστω η ερώτηση:

Πλαίσιο κειμένου: Q14“Να δοθεί για κάθε συντελεστή το όνομά του και οι ρόλοι με τους οποίους αυτός έχει συμμετάσχει σε ταινίες”. Η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Στο προηγούμενο παράδειγμα σύνδεσης ο όρος where περιείχε τις συνθήκες που ήταν απαραίτητες για τη δημιουργία των κατάλληλων συνδέσεων μεταξύ των πινάκων. Η βασική λογική συνίσταται στο γεγονός ότι η τιμή του ξένου κλειδιού ενός πίνακα πρέπει να ισούται με την τιμή του κύριου κλειδιού του άλλου πίνακα, στον οποίο αναφέρεται το ξένο κλειδί. Εκτός αυτής της συνθήκης είναι δυνατό να περιέχονται και άλλες, οι οποίες πρέπει να πληρούνται από τις εγγραφές του αποτελέσματος. Για παράδειγμα, έστω το ερώτημα:

 


Πλαίσιο κειμένου: Q15“Να δοθούν οι κωδικοί των ταινιών στις οποίες έχει συμμετάσχει ο Alfred Hitchcock”. Η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Στο παραπάνω παράδειγμα, εκτός από την συνθήκη σύνδεσης υπάρχει και ο απαιτούμενος περιορισμός για το όνομα του συντελεστή. Η πράξη της σύνδεσης μπορεί να δηλωθεί και εκτός του where. Αυτό γίνεται με τη χρήση του inner join στο from. Έστω ξανά το ερώτημα του προηγούμενου παραδείγματος:

Πλαίσιο κειμένου: Q16“Να δοθούν οι κωδικοί των ταινιών στις οποίες έχει συμμετάσχει ο Alfred Hitchcock”. Η αντίστοιχη εντολή SQL με την χρήση του όρου inner join είναι:

 

SQL - Editor

ΠΡΟΣΟΧΗ! Στο ερώτημα ποιον από τους δύο τρόπους πρέπει να χρησιμοποιούμε, θα μπορούσαμε να πούμε ότι στην περίπτωση όπου η αναζήτηση αφορά λίγους πίνακες, η σύνδεση με τη βοήθεια του όρου where είναι εξίσου βολική με αυτή που ορίζεται στο πεδίο from. Όμως, στην περίπτωση που η αναζήτηση αφορά πολλούς πίνακες, τότε η χρήση του inner join είναι προτιμότερη. Αυτό συμβαίνει γιατί μπορούμε να δούμε με ποια πεδία συνδέονται οι υπό σύνδεση πίνακες. Συνεπώς, γίνεται ευκολότερα η ανάγνωση ενός πολύπλοκου ερωτήματος σύνδεσης πινάκων και επίσης, η σύνδεση μπορεί να γίνει και σε περισσότερους από 2 πίνακες. Για παράδειγμα, έστω το ερώτημα:

Πλαίσιο κειμένου: Q17“Να βρεθούν για κάθε πελάτη το όνομα του, ο κωδικός και η τιμή των δίσκων που έχει ενοικιάσει”. Η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Στο αποτέλεσμα του inner join συμμετέχουν μόνο οι εγγραφές των σχέσεων, για τις οποίες υπάρχει μία τουλάχιστον ταύτιση. Όπως φαίνεται, στο αποτέλεσμα δεν συμμετέχουν τα υπόλοιπα ονόματα των πελατών, επειδή για αυτά δεν βρέθηκε ταύτιση.

Υπάρχει και μια ειδικότερη πράξη σύνδεσης (join) μεταξύ δυο πινάκων, που ονομάζεται left outer join. Με την πράξη του left outer join το αποτέλεσμα περιέχει όλες τις εγγραφές για τις οποίες υπάρχει ταύτιση, και επιπλέον όλες τις εγγραφές του αριστερού πίνακα για τις οποίες δεν έγινε ταύτιση με καμία από τις εγγραφές του δεξιού πίνακα. Για τις εγγραφές  αυτού του είδους, οι στήλες που αντιστοιχούν στο δεύτερο πίνακα έχουν τιμή ίση με null. Τελικά, κάθε εγγραφή του αριστερού πίνακα συμμετέχει στο αποτέλεσμα. Για παράδειγμα, έστω το ερώτημα:

Πλαίσιο κειμένου: Q18“Να βρεθούν για κάθε πελάτη το όνομά του, ο κωδικός και η τιμή των δίσκων που έχει ενοικιάσει. Να εμφανίζονται και οι πελάτες που δεν έχουν ενοικιάσει κάποιο δίσκο”. Η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Όπως φαίνεται στα αποτελέσματα του παραδείγματος μας, για τον πελάτη με όνομα Παλαιολόγος, δεν έχει γίνει καμία ταύτιση, οπότε οι αντίστοιχες στήλες ID και Τιμή είναι ίσες με NULL.

Αντίστοιχα, με την πράξη right outer join το αποτέλεσμα περιέχει όλες αυτές τις εγγραφές για τις οποίες υπάρχει ταύτιση, και επιπλέον όλες τις εγγραφές του δεξιού πίνακα για τις οποίες δεν έγινε ταύτιση με καμία εγγραφή του αριστερού πίνακα. Γι΄ αυτές τις εγγραφές (για τις οποίες δεν υπήρξε ταύτιση), οι στήλες που αντιστοιχούν στο δεύτερο πίνακα έχουν τιμή ίση με null. Συνεπώς, κάθε εγγραφή του δεξιού πίνακα συμμετέχει στο αποτέλεσμα. Για παράδειγμα, έστω το ερώτημα:

 

Πλαίσιο κειμένου: Q19

“Να βρεθούν για κάθε πελάτη το όνομά του, ο κωδικός και η τιμή των δίσκων που έχει ενοικιάσει. Επίσης, να εμφανίζονται οι κωδικοί και οι τιμές των δίσκων που δεν έχουν ενοικιαστεί από κάποιον πελάτη”. Η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Τέλος, υπάρχει και η full outer join, το αποτέλεσμα της οποίας περιέχει επιπλέον όλες τις πλειάδες της δεξιάς σχέσης και της αριστερής σχέσης για τις οποίες δεν έγινε ταύτιση. Στις εγγραφές  αυτού του είδους, οι στήλες που αντιστοιχούν στη δεύτερη σχέση έχουν τιμή ίση με null. Συνεπώς, κάθε εγγραφή είτε της αριστερής είτε της δεξιάς σχέσης συμμετέχει στο αποτέλεσμα. Για παράδειγμα, έστω το ερώτημα:

Πλαίσιο κειμένου: Q20“Να βρεθούν για κάθε πελάτη το όνομά του, ο κωδικός και η τιμή των δίσκων που έχει ενοικιάσει. Να εμφανίζονται και οι πελάτες που δεν έχουν ενοικιάσει κάποιο δίσκο, αλλά και οι κωδικοί και τιμές των δίσκων που δεν έχουν ενοικιαστεί από κάποιον πελάτη ”. Η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

 

3.2.2 Μετονομασία και αυτό-σύνδεση

Σε ορισμένα ερωτήματα προκύπτει η ανάγκη μετονομασίας πεδίων ή πινάκων. Αυτό γίνεται με την χρήση ενός επιπλέον όρου που ονομάζεται as. Έστω το παράδειγμα του ερωτήματος Q5 στην Ενότητα 3.1.2, στην οποία έγινε προσθήκη του προθέματος “2310” στα τηλέφωνα των πελατών. Το αποτέλεσμα είναι μια σχέση με δύο πεδία. Το δεύτερο πεδίο, είναι αποτέλεσμα πράξης μεταξύ συμβολοσειρών, οπότε δεν έχει όνομα. Σε αυτή την περίπτωση χρησιμοποιείται ο όρος as ως εξής:

Πλαίσιο κειμένου: Q21Θέλουμε στο πεδίο Τηλέφωνο να εμφανίζεται το πρόθεμα 2310 και στο αποτέλεσμα η στήλη να έχει όνομα Τηλέφωνο.

 

SQL - Editor

Σημειώνουμε ότι ο όρος as χρησιμοποιείται και με τον όρο from για τη μετονομασία πινάκων. Έστω για παράδειγμα η ερώτηση:

Πλαίσιο κειμένου: Q22 “Να βρεθούν τα ονόματα των πελατών που έχουν το ίδιο τηλέφωνο με αυτό του κ. Perkins (εκτός του ίδιου του Perkins)”. Η αντίστοιχη εντολή της SQL με χρήση του όρου as είναι:

SQL - Editor

Επισημαίνουμε ότι χωρίς μετονομασία δεν θα μπορούσε να γραφεί στη συνθήκη ότι, για παράδειγμα, ΠΕΛΑΤΗΣ.Τηλέφωνο = ΠΕΛΑΤΗΣ.Τηλέφωνο, γιατί έτσι δεν θα γινόταν η διάκριση. Η πράξη αυτή ονομάζεται και self join. Η πράξη self join χρησιμοποιείται όταν πρέπει, εννοιολογικά, να ελεγχθεί κάθε γραμμή ενός πίνακα με όλες τις υπόλοιπες. Έστω, για παράδειγμα, η ερώτηση:

 

Πλαίσιο κειμένου: Q23“Να βρεθεί ο κωδικός κάθε ταινίας για την οποία o δίσκος τύπου BLU-RAY είναι σε μικρότερη τιμή από τον αντίστοιχο δίσκο τύπου DVD”. Η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.3. Ερωτήματα συνάθροισης και ομαδοποίησης

3.3.1 Ερωτήματα με συναρτήσεις συνάθροισης

Όπως φαίνεται στον Πίνακα 3.14, η SQL περιέχει τις εξής κυριότερες συναρτήσεις συνάθροισης (aggregate functions),:

Συνάρτηση

Όρος SQL

Μέσος όρος - Average

Avg

Ελάχιστο - Minimum

Min

Μέγιστο - Maximum

Max

Άθροισμα – Summarize

Sum

Απαρίθμηση – Count

Count

Πίνακας 3.1


Οι συναρτήσεις αθροίσματος και μέσου όρου δέχονται σαν είσοδο μόνο αριθμητικές τιμές, ενώ οι υπόλοιπες μπορούν να δεχθούν τιμές και άλλων τύπων, όπως αλφαριθμητικά. Για παράδειγμα, έστω το παρακάτω ερώτημα:

Πλαίσιο κειμένου: Q24“Να βρεθεί η μεγαλύτερη τιμή ενοικίασης ενός δίσκου”. Η εντολή της SQL είναι:

 

SQL - Editor

Ένα δεύτερο παράδειγμα ερωτήματος είναι τοπαρακάτω :

Πλαίσιο κειμένου: Q25“Να βρεθεί ο συνολικός αριθμός των δίσκων”. Η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Μπορούν να εφαρμοσθούν και αλγεβρικές πράξεις μεταξύ των συναρτήσεων. Για παράδειγμα, έστω το παρακάτω ερώτημα:

Πλαίσιο κειμένου: Q26“Να βρεθεί ο η διαφορά μεταξύ της ακριβότερης και της φθηνότερης τιμής ενοικίασης ενός δίσκου”.

 

SQL - Editor

ΗΗ ύπαρξη ορισμάτων εντός μιας συνάρτησης ομαδοποίησης δηλώνει ότι αυτή εφαρμόζεται στο αποτέλεσμα προβολής ως προς αυτά τα ορίσματα. Απαιτείται προσοχή στη χρήση του όρου distinct εντός της συνάρτησης count. Για παράδειγμα, έστω το παρακάτω ερώτημα:

Πλαίσιο κειμένου: Q27“Να βρεθεί ο αριθμός των πελατών που έχουν κάνει τουλάχιστον μία ενοικίαση ενός δίσκου”. Η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Σε περίπτωση που στο παραπάνω ερώτημα δεν χρησιμοποιούσαμε τον όρο distinct, τότε το ερώτημα θα επέστρεφε ως αποτέλεσμα τον αριθμό 3, που είναι ο συνολικός αριθμός ενοικιάσεων που έχουν γίνει από το DVDclub μας. Συνεπώς, μπορούμε εύκολα να συμπεράνουμε ότι δύο από τις τρεις συνολικά ενοικιάσεις δίσκων DVD έχουν γίνει από τον ίδιο πελάτη.

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.3.2. Ομαδοποίηση των δεδομένων - O όρος Group by

Σε αρκετές περιπτώσεις είναι αναγκαίες ενέργειες ο διαμερισμός των εγγραφών μιας σχέσης σε τμήματα και η εφαρμογή μιας συνάρτησης ομαδοποίησης σε κάθε τμήμα. Για τον διαμερισμό χρησιμοποιείται ο όρος group by. Ένα παράδειγμα ερώτησης είναι:

Πλαίσιο κειμένου: Q28“Να βρεθεί μέσος όρος τιμής ενοικίασης ανά τύπο δίσκου (BLU-RAY ή DVD)”. Η εντολή της SQL είναι:

 

SQL - Editor

Μπορούμε να ορίζουμε περισσότερες από μία στήλες στον όρο group by. Η τοποθέτηση περισσοτέρων από μία στήλες σημαίνει ότι το σύνολο αποτελέσματος θα ομαδοποιηθεί σύμφωνα με τις στήλες ομαδοποίησης με την σειρά στην οποία εμφανίζονται οι στήλες. Τονίζεται ότι οι στήλες που έχουν χρησιμοποιηθεί ως ορίσματα στο group by, θα πρέπει να χρησιμοποιούνται και στον όρο Select αντίστοιχα. Για παράδειγμα, έστω το ερώτημα:

Πλαίσιο κειμένου: Q29“Για κάθε πελάτη (κωδικός) να βρεθεί ο αριθμός των φορών που ενοικίασε κάθε δίσκο (κωδικός)”. Η εντολή SQL είναι:

 

SQL - Editor

Παρατηρούμε ότι ο κωδικός πελάτη με τιμή 1, εμφανίζεται περισσότερες από μία φορές, επειδή ομαδοποιείται κάτω από διαφορετικό IDΔίσκου. Για παράδειγμα, έστω το ερώτημα:

Πλαίσιο κειμένου: Q30“Να βρεθεί η μέση τιμή ενοικίασης ανά τύπο δίσκου και τα αποτελέσματα να είναι ταξινομημένα κατά αύξουσα μέση τιμή”. Η εντολή SQL είναι:

 

SQL-editor

Αν θέλουμε να έχουμε ομαδοποίηση με τον τελεστή count και να εμφανίζονται (με count ίσο με 0) οι εγγραφές που δεν συμμετέχουν, τότε χρησιμοποιούμε μια περίπλοκη σύνταξη, με χρήση του left outer join. Για παράδειγμα, έστω το ερώτημα:

Πλαίσιο κειμένου: Q31“Να βρεθεί ο αριθμός ενοικιάσεων ανά πελάτη (κωδικός). Στα αποτελέσματα να εμφανίζονται και οι πελάτες που δεν έχουν κάνει κάποια ενοικίαση. Ο αριθμός ενοικιάσεων για αυτούς τους πελάτες να είναι ίσος με 0”. Η εντολή SQL είναι:

 

SQL - Editor

Η χρήση της προβολής ως προς IDΔίσκου στη συνάρτηση count, είναι απαραίτητη, επειδή ο τελεστής count(*) προσμετρά και τις NULL τιμές.

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.3.3. Ο όρος Having

Είναι δυνατό ο διαχωρισμός ενός πίνακα σε τμήματα με τον όρο group by να συνδυαστεί και με κάποια συνθήκη που πρέπει να ικανοποιεί το κάθε ξεχωριστό τμήμα εφόσον ομαδοποιηθεί και μετά. Σε αυτήν την περίπτωση χρησιμοποιείται ο όρος having μετά από τον όρο group by, ώστε μια συνθήκη να εξεταστεί αν πληρείται αφότου ομαδοποιηθούν τα αποτελέσματα. Συγκεκριμένα, ο όρος having χρησιμοποείται για να ορίσει περιορισμούς που σχετίζονται με την ομαδοποίηση που έχει πραγματοποιηθεί. Έστω για παράδειγμα η ερώτηση:

Πλαίσιο κειμένου: Q32“Να βρεθεί ο τύπος δίσκου για τον οποίο ο μέσος όρος τιμής ενοικίασης είναι μεγαλύτερος από 2”. Η εντολή SQL είναι:

 

SQL - Editor

Τέλος, ένα παράδειγμα ερωτήματος, στο οποίο εμφανίζεται τόσο ο όρος where όσο και ο όρος having εμφανίζεται στο παρακάτω ερώτημα:

Πλαίσιο κειμένου: Q33“Να βρεθούν οι κωδικοί των συντελεστών που είναι σκηνοθέτες και που έχουν σκηνοθετήσει περισσότερες από μία ταινίες”. Η εντολή SQL είναι:

 

SQL - Editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.4. Ερωτήματα με πράξεις συνόλων και εμφωλευμένα ερωτήματα

3.4.1. Βασικές πράξεις

O όρος Union πραγματοποιεί την πράξη της ένωσης σχέσεων. Για την εφαρμογή αυτού του όρου μεταξύ δύο σχέσεων πρέπει αυτές να έχουν τον ίδιο αριθμό χαρακτηριστικών και τα πεδία ορισμού των αντίστοιχων χαρακτηριστικών τους να είναι ίδιου τύπου δεδομένων. Για παράδειγμα, έστω η ερώτηση:

Πλαίσιο κειμένου: Q34 “Να βρεθούν οι τίτλοι των ταινιών που γυρίστηκαν το 1959 ή των ταινιών με ο τύπο δίσκου ‘BLU-RAY’”. Η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Ο όρος Intersect πραγματοποιεί την πράξη της τομής σχέσεων. Έστω, για παράδειγμα, η ερώτηση:

Πλαίσιο κειμένου: Q35Να βρεθούν οι τίτλοι των ταινιών που το δεύτερο γράμμα είναι το “e” και που γυρίστηκαν το 1954.


SQL - Editor

Ο όρος Except πραγματοποιεί την πράξη της διαφοράς σχέσεων. Έστω, για παράδειγμα, η ερώτηση:

Πλαίσιο κειμένου: Q36Να βρεθούν οι τίτλοι των ταινιών που το δεύτερο γράμμα τους είναι το “e”, εκτός από αυτές που γυρίστηκαν το 1954.


SQL - Editor

Να σημειώσουμε ότι οι πράξεις union, intersect και except απαλείφουν αυτόματα τα διπλότυπα. Επίσης, να τονίσουμε ότι θα πρέπει να υπάρχει συμβατότητα μεταξύ των δύο μελών των παραπάνω πράξεων. Επομένως, πρέπει αφενός να έχουμε ίδιο αριθμό χαρακτηριστικών και αφετέρου τα πεδία ορισμού των αντίστοιχων χαρακτηριστικών να είναι ίδιου τύπου δεδομένων, προκειμένου να είναι συντακτικά σωστό ένα ερώτημα SQL.

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.4.2. Εμφωλευμένα ερωτήματα

Οι εντολές της SQL έχουν την ιδιότητα της κλειστότητας, δηλαδή το αποτέλεσμα οποιαδήποτε πράξης μεταξύ δυο ή περισσοτέρων πινάκων οδηγεί σε έναν νέο πίνακα. Μ’ αυτόν τον τρόπο είναι δυνατό να εμφωλιαστούν εντολές, ώστε το αποτέλεσμα μιας πράξης να είναι είσοδος σε μια άλλη πράξη. Η πιο συχνή χρήση αυτής της ιδιότητας γίνεται για έλεγχο συνθηκών μεταξύ συνόλων. Η SQL περιέχει τον όρο in, ο οποίος ελέγχει αν μια γραμμή ανήκει σε έναν πίνακα που είναι αποτέλεσμα μιας φωλιασμένης εντολής. Αντιστοιχεί στον μαθηματικό τελεστή συνόλων «ανήκει» (σύμβολο Ε). Έστω, για παράδειγμα, η ερώτηση:

 

Πλαίσιο κειμένου: Q37“Να βρεθούν οι πελάτες που έχουν κάνει ενοικίαση τουλάχιστον ενός δίσκου”. Αυτή η ερώτηση μπορεί να απαντηθεί με την πράξη της σύνδεσης (join), όπως έχει ήδη αναφερθεί. Παρόλα αυτά θέλουμε να εξεταστεί η απάντηση με χρήση του όρου in.

 

SQL - Editor

Εκτός από τον όρο in, μπορεί να χρησιμοποιηθεί και ο όρος not in οποίος ελέγχει αν μια εγγραφή δεν ανήκει σε μια σχέση. Ο όρος in μπορεί να χρησιμοποιηθεί και για σύνολα απαρίθμησης (enumerated sets).Έστω, για παράδειγμα, η ερώτηση:

Πλαίσιο κειμένου: Q38“Να βρεθούν όλοι οι συντελεστές που δεν ονομάζονται Alfred Hitchcock ή Grace Kelly”. Η εντολή SQL είναι :

 

SQL - Editor

Η χρήση του όρου in βοηθά στον επιμερισμό της σύνταξης μίας SQL επερώτησης σε τμήματα, επομένως στην απλούστευσή της. Έστω, για παράδειγμα, η ερώτηση:

Πλαίσιο κειμένου: Q39“Να βρεθούν οι κωδικοί των ταινιών στις οποίες έχει συμμετάσχει ο Alfred Hitchcock και έχουν ενοικιασθεί περισσότερες από δύο φορές”. Η εντολή SQL είναι

:

SQL - Editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.4.3. Σύγκριση μεταξύ συνόλων

Σε κάποιες περιπτώσεις προκύπτουν ερωτήματα στα οποία ένα πεδίο πρέπει να συγκριθεί με την τιμή του ίδιου πεδίου σε τουλάχιστον μία άλλη εγγραφή ενός πίνακα. Σ’ αυτήν την περίπτωση χρησιμοποιείται ο όρος some (ισοδύναμος είναι ο όρος any). Αν πρέπει να συγκριθεί με την τιμή του πεδίου όλων των γραμμών της σχέσης, τότε χρησιμοποιείται ο όρος all. Έστω, για παράδειγμα, το παρακάτω ερώτημα:

 

Πλαίσιο κειμένου: Q40“Να βρεθούν οι πελάτες (Όνομα) για τους οποίους υπάρχει κάποιος ενοικιασμένος δίσκος χωρίς ορισμένη ημερομηνία επιστροφής”. Η εντολή SQL είναι :

 

SQL - Editor

Οι όροι all και some some μπορούν να χρησιμοποιηθούν και με συναρτήσεις ομαδοποίησης. Ειδικότερα, επειδή οι όροι count και max δεν μπορούν να χρησιμοποιηθούν με φωλιασμένο τρόπο, δηλαδή max( count(*) ), είναι δυνατό να χρησιμοποιηθεί ο όρος all για να δηλώσει ότι μέγιστη τιμή είναι αυτή που είναι μεγαλύτερη από όλες. Έστω, για παράδειγμα, το παρακάτω ερώτημα:

Πλαίσιο κειμένου: Q41“Να βρεθεί ο κωδικός πελάτη με το μεγαλύτερο αριθμό ενοικιάσεων”. Η εντολή SQL είναι :

 

SQL - Editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.4.4. Έλεγχος κενότητας

Η SQL περιέχει τους όρους exists και not exists, οι οποίοι ελέγχουν, αντίστοιχα, αν μια άλλη εντολή SQL παράγει σαν αποτέλεσμα μία σχέση που έχει εγγραφές ή αν είναι άδεια,. Έστω, για παράδειγμα, το παρακάτω ερώτημα:

Πλαίσιο κειμένου: Q42“Να βρεθούν τα ονόματα των πελατών που έχουν κάνει μία τουλάχιστον ενοικίαση”. Η εντολή SQL με τον όρο exists είναι: (Προσοχή: Εναλλακτικά θα μπορούσε να γίνει και με inner join.)

 

SQL - Editor

Προσοχή: Εναλλακτικά το παραπάνω ερώτημα θα μπορούσε να γίνει και με την χρήση του όρου inner join.

Ο όρος not exists μπορεί να χρησιμοποιηθεί για να ελεγχθεί αν μία σχέση Υ περιέχει μία άλλη σχέση Χ, δηλαδή είναι υπερσύνολό της. Βασισμένοι στη συνολοθεωρίας , γνωρίζουμε ότι: X Y X – Y = Ø. Σε αυτή την περίπτωση, δεν υπάρχει εγγραφή που να ανήκει στην Χ που να μην ανήκει στην Υ.  Έστω, για παράδειγμα, το παρακάτω ερώτημα:

Πλαίσιο κειμένου: Q43“Να δοθούν οι κωδικοί των πελατών που έχουν ενοικιάσει τουλάχιστον όλες τις ταινίες που έχει ενοικιάσει ο πελάτης με κωδικό 2 (αυτός να μην εμφανίζεται στο αποτέλεσμα)”. Η εντολή SQL είναι :

 

SQL-editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.5. Ερωτήματα SQL για όψεις

Η όψη (view) είναι ένα αφηρημένο υποσύνολο (ερώτημα) που αντιστοιχεί σε ένα τμήμα ενός πίνακα της βάσης δεδομένων ή σε αποτέλεσμα ενός ερωτήματος που αφορά πολλούς πίνακες. Ο ορισμός όψης στην SQL γίνεται με τη δήλωση create view. Για παράδειγμα, έστω το ερώτημα:

Πλαίσιο κειμένου: Q44“Να ορισθεί όψη με όνομα MyView, που περιέχει όλους τους κωδικούς των ταινιών που συμμετείχε ο Alfred Hitchcock”. Η εντολή SQL είναι

 

SQL - Editor

Η διαγραφή μιας όψης γίνεται με τη δήλωση drop view. Έστω η παρακάτω εντολή:

Πλαίσιο κειμένου: Q45“Διαγράψτε την όψη MyView”. Η αντίστοιχη εντολή SQL είναι:


SQL - Editor

Χάρη στις όψεις έχουμε αποθηκευμένο ένα ερώτημα που μπορούμε να το χρησιμοποιήσουμε παραπέρα σαν τμήμα/ κομμάτι, για να χτίσουμε πιο σύνθετα ερωτήματα. Για παράδειγμα, μέσω της χρήσης της όψης MyView, μπορούμε να απλοποιήσουμε το παρακάτω ερώτημα που έχει ήδη εμφανιστεί ως ερώτημα Q4 στην Eνότητα 3.4.2:

 

Πλαίσιο κειμένου: Q46 “Να βρεθούν οι κωδικοί των ταινιών στις οποίες έχει συμμετάσχει ο Alfred Hitchcock και έχουν ενοικιασθεί περισσότερες από δύο φορές ”. Η αντίστοιχη εντολή SQL είναι:

 

SQL - Editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.6. Query Designer και Query by Example

Η σύνταξη όλων των ερωτημάτων μέχρι τώρα έγινε στον Query Editor. Όμως, αυτός ο τρόπος σύνταξης SQL ερωτημάτων θεωρείται αργός και δύσκολος, διότι πρέπει να πληκτρολογούμε όλο το ερώτημα και, ταυτόχρονα, να θυμόμαστε και τα ονόματα των πεδίων/ πινάκων που θα συμμετάσχουν σ’ αυτό.

Προκειμένου να αντιμετωπιστούν τα παραπάνω προβλήματα, υπάρχει η δυνατότητα να συντάξουμε τα ερωτήματά μας με οπτικό (visual) τρόπο. Συγκεκριμένα, από την γραμμή εργαλείων επιλέγουμε την βάση δεδομένων DVDclub ως την ενεργή βάση δεδομένων μας και κάνουμε κλικ στο New Query. Στη συνέχεια, με δεξί κλικ μέσα στον χώρο σύνταξης του ερωτήματος εμφανίζεται το μενού της Εικόνας 3.2, στο οποίο επιλέγουμε Design Query in Editor.

 

Εικόνα 3.2

Στη συνέχεια,εμφανίζεται το αναδυόμενο παράθυρο επιλογής των πινάκων που σχετίζονται με την σύνταξη του ερωτήματος μας, όπως φαίνεται στην Εικόνα 3.3.

 

Εικόνα 3.3.

Στο παράδειγμά μας θα υλοποιήσουμε το παρακάτω ερώτημα:

Πλαίσιο κειμένου: Q47«Να εμφανίσετε τα στοιχεία των ταινιών στα οποία συμμετείχε ως συντελεστής ο Alfred Hitchcock».

 

Για την απάντηση του παραπάνω ερωτήματος πρέπει να αντλήσουμε δεδομένα από τρεις συσχετιζόμενους πίνακες. Συνεπώς, από τους διαθέσιμους πίνακες της Εικόνας 3.3 επιλέγουμε τους τρεις πίνακες που θα συμμετάσχουν στο ερώτημα μας (ΤΑΙΝΙΑ, Τ_Σ_Ρ, ΣΥΝΤΕΛΕΣΤΗΣ). Όπως φαίνεται στην Εικόνα 3.4, οι συσχετίσεις τους εμφανίζονται αυτόματα. Με Drag & Drop μπορούμε να προσαρμόζουμε την θέση των πινάκων όπως επιθυμούμε. Ο Query Designer ενσωματώνει ένα grid τύπου excel, το οποίο έχει μια σειρά από στήλες (Column, Alias, Table, Output, Sort Type, Sort Order, Filter, Or, κτλ.). Σ’ αυτό το grid θα δημιουργήσουμε το ερώτημά μας,  τσεκάροντας τα αντίστοιχα πεδία από τους συσχετιζόμενους πίνακες. Επιλέγοντας, λοιπόν, τα πεδία (ID, Τίτλος, Έτος) από τον πίνακα ΤΑΙΝΙΑ, αυτά εμφανίζονται αυτόματα στις στήλες column και output του grid. Στη συνέχεια, αφού επιλέξουμε το πεδίο Όνομα από τον πίνακα ΣΥΝΤΕΛΕΣΤΗΣ, πληκτρολογούμε το όνομα του συντελεστή στην στήλη Filter, όπως φαίνεται στην Εικόνα 3.4. Το ερώτημα έχει πλέον δημιουργηθεί και εμφανίζεται σε εντολές SQL στο κάτω μέρος της Εικόνας 3.4.

 

Εικόνα 3.4

Παρακάτω περιγράφουμε τις βασικές στήλες του grid:

Για να εκτελέσουμε, λοιπόν, το προαναφερθέν ερώτημά μας, πατάμε OK και, στη συνέχεια, επιλέγουμε F5. Παρακάτω εμφανίζονται τα αποτελέσματα, σύμφωνα με τα οποία ο Alfred Hitchcock έχει συμμετάσχει ως συντελεστής σε δύο ταινίες.

 

Επισημαίνουμε ότι για να διορθώσουμε κάτι που μας διέφυγε στο ερώτημά μας, πρέπει να επιλέξουμε με το ποντίκι όλες τις εντολές (ή τμήμα των εντολών) του ερωτήματος SQL και, με δεξί κλικ πάνω από όλη την επιλεγμένη περιοχή, να επιλέξουμε ξανά Design Query in Editor… Μ΄αυτόν τον τρόπο, ο Editor του Management Studio επανασχεδιάζει οπτικά το ερώτημά μας, ώστε να συνεχίσουμε εκ νέου.

Συμπερασματικά, με τον οπτικό (visual) τρόπο μπορούμε να κερδίσουμε πολύ χρόνο στην σύνταξη ερωτημάτων, αποφεύγοντας την πληκτρολόγηση και διατηρώντας την μόνο εκεί που είναι απαραίτητη. Δεν πρέπει, όμως, να πιστέψουμε ότι, επειδή υπάρχει ένα εύκολο οπτικό εργαλείο, δεν χρειάζεται να γνωρίζουμε τους κανόνες σύνταξης ερωτημάτων SQL.

Τέλος, παρακάτω παρουσιάζουμε ένα παράδειγμα δημιουργίας ερωτήματος ομαδοποίησης με QBE:

«Για κάθε ταινία (τίτλος) και τύπο δίσκου (είτε BLU-RAY είτε DVD) να βρεθεί ο αριθμός αντιτύπων που περιέχουν την ταινία.».

Για να πάρουμε το παραπάνω αποτέλεσμα, κάνουμε δεξί κλικ μέσα στον επεξεργαστή ερωτημάτων. Εκεί, αφού επιλέξουμε Design Query in Editor, εμφανίζεται ένα αναδυόμενο παράθυρο επιλογής των πινάκων (ΔΙΣΚΟΣ και ΤΑΙΝΙΑ) που σχετίζονται με την σύνταξη του ερωτήματός μας, όπως φαίνεται στην Εικόνα 3.5.

 



Εικόνα 3.5

Στη συνέχεια, όπως φαίνεται στην Εικόνα 3.6, εμφανίζεται το παράθυρο με την συσχέτιση των δύο πινάκων. Εκεί, αφού κάνουμε δεξί κλικ, επιλέγουμε Add Group by, επειδή θέλουμε να ομαδοποιήσουμε τα αποτελέσματα μας βάσει τίτλου ταινίας και τύπου δίσκου.

 


Εικόνα 3.6

Τέλος, αφού ομαδοποιήσουμε τα αποτελέσματά μας βάσει των πεδίων Τίτλος και Τύπος (όπως φαίνεται στην Εικόνα 3.7), εφαρμόζουμε Count στο πεδίο Id του πίνακα ΔΙΣΚΟΣ.

 

Εικόνα 3.7

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.7. Ασκήσεις με ερωτήματα SQL

3.7.1. Ασκήσεις με ερωτήματα επιλογής γραμμών από ένα πίνακα.       

  1. Για κάθε δίσκο, να προβληθεί ο κωδικός και η τιμή. Η τιμή να εμφανίζεται χωρίς το ΦΠΑ, δηλαδή μειωμένη κατά 0.23*Τιμή.

  2. Να προβληθούν οι κωδικοί των συντελεστών που έχουν συμμετάσχει σε τουλάχιστον μία ταινία. Κάθε κωδικός να εμφανίζεται μία φορά (όχι διπλοεγγραφές).

  3. Να προβληθούν οι ταινίες (όλα τα στοιχεία) που ο τίτλος τους περιέχει το χαρακτήρα "-" ή έχουν γυριστεί πριν το 1955.

  4. Να βρεθούν όλα τα στοιχεία των ενοικιάσεων που έχουν γίνει (πεδίο Από) μεταξύ 15 Σεπ 2006 και 30 Σεπ 2006.

  5. Να βρεθούν οι κωδικοί των δίσκων που έχουν ενοικιασθεί και έχουν επιστραφεί, θεωρώντας ότι το πεδίο Έως του πίνακα ΕΝΟΙΚΙΑΣΗ ενημερώνεται με την επιστροφή του δίσκου.

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.7.2. Ασκήσεις με ερωτήματα επιλογής γραμμών από πολλούς πίνακες.

  1. Να βρεθούν τα ονόματα των πελατών που έχουν ενοικιάσει τουλάχιστον έναν δίσκο.

  2. Να βρεθούν τα ονόματα των πελατών που δεν έχουν ενοικιάσει ούτε ένα ψηφιακό δίσκο (Σημείωση: να μην χρησιμοποιηθεί ο τελεστής NOT IN).

  3. Να βρεθούν οι κωδικοί των συντελεστών που έχουν συμμετάσχει σε τουλάχιστον 2 ταινίες (Σημείωση : να μην χρησιμοποιηθεί ο τελεστής COUNT).

  4. Να βρεθούν οι τίτλοι των ταινιών για τις οποίες είτε δεν υπάρχει δίσκος, είτε υπάρχει σχετικός δίσκος που δεν έχει ενοικιαστεί ποτέ (Σημείωση: να μην χρησιμοποιηθεί ο τελεστής NOT IN).

  5. Να βρεθούν οι πελάτες με επίθετο ίδιο με αυτό κάποιου συντελεστή ταινίας.

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.7.3. Ασκήσεις με Ερωτήματα ομαδοποίησης/συνάθροισης δεδομένων.

  1. Να βρεθεί ο αριθμός των ταινιών που έχει συμμετάσχει ο Alfred Hitchcock. Σημείωση: Οι ταινίες στις οποίες έχει συμμετάσχει με περισσότερους από ένα ρόλους, να προσμετρούνται μία μόνο φορά.

  2. Για κάθε ταινία (τίτλος), να βρεθεί ο συνολικός αριθμός δίσκων (BLU-RAY και DVD) που περιέχουν την ταινία. Στο αποτέλεσμα να εμφανίζονται και οι ταινίες για τις οποίες δεν υπάρχει κανένας δίσκος.

  3. Να βρεθούν οι κωδικοί των δίσκων που είναι τύπου BLU-RAY και έχουν ενοικιασθεί περισσότερες από μία φορές.

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.7.4. Ασκήσεις με ερωτήματα με φωλιασμένες εντολές SQL.

  1. Να βρεθούν οι τίτλοι των ταινιών που δεν έχουν ενοικιασθεί ποτέ. (Σγημείωση: να μην χρησιμοποιηθεί outer join)

  2. Να βρεθεί το όνομα του Συντελεστή που έχει συμμετάσχει στις περισσότερες ταινίες.

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου


3.8. Λύσεις ασκήσεων με ερωτήματα SQL

3.8.1. Λύσεις ασκήσεων με ερωτήματα επιλογής γραμμών από ένα πίνακα.     

1. Για κάθε δίσκο, να προβληθεί ο κωδικός και η τιμή. Η τιμή να εμφανίζεται χωρίς το ΦΠΑ, δηλαδή μειωμένη κατά 0.23*Τιμή.

SQL - Editor

 

2. Να προβληθούν οι κωδικοί των συντελεστών που έχουν συμμετάσχει σε τουλάχιστον μία ταινία. Κάθε κωδικός να εμφανίζεται μία φορά (όχι διπλοεγγραφές).

SQL - Editor

 

3. Να προβληθούν οι ταινίες (όλα τα στοιχεία) που ο τίτλος τους περιέχει το χαρακτήρα ‘-‘ ή έχουν γυριστεί πριν το 1955.

SQL - Editor

 

4. Να βρεθούν όλα τα στοιχεία των ενοικιάσεων που έχουν γίνει (πεδίο Από) μεταξύ 15 Σεπ 2006 και 30 Σεπ 2006.

SQL - Editor

5. Να βρεθούν οι κωδικοί των δίσκων που έχουν ενοικιασθεί και έχουν επιστραφεί, θεωρώντας ότι το πεδίο Έως του πίνακα ΕΝΟΙΚΙΑΣΗ ενημερώνεται με την επιστροφή του δίσκου.

SQL - Editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.8.2. Λύσεις ασκήσεων με ερωτήματα επιλογής γραμμών από πολλούς πίνακες.

6. Να βρεθούν τα ονόματα των πελατών που έχουν ενοικιάσει τουλάχιστον ένα δίσκο.

SQL - Editor

7. Να βρεθούν τα ονόματα των πελατών που δεν έχουν ενοικιάσει ούτε ένα δίσκο (Σημείωση: να μην χρησιμοποιηθεί ο τελεστής NOT IN).

SQL - Editor

 

 8. Να βρεθούν οι κωδικοί των συντελεστών που έχουν συμμετάσχει σε τουλάχιστον 2 ταινίες (Σημείωση: να μην χρησιμοποιηθεί ο τελεστής COUNT).

SQL - Editor

9. Να βρεθούν οι τίτλοι των ταινιών για τις οποίες είτε δεν έχουν αποθηκευθεί σε δίσκο, είτε υπάρχει δίσκος που δεν έχει ενοικιαστεί ποτέ (Σημείωση: να μην χρησιμοποιηθεί ο τελεστής NOT IN).

SQL - Editor

 

10. Να βρεθούν οι πελάτες με επίθετο ίδιο με αυτό κάποιου συντελεστή ταινίας.

SQL - Editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.8.3. Λύσεις ασκήσεων με ερωτήματα ομαδοποίησης/συνάθροισης δεδομένων.

11. Να βρεθεί ο αριθμός των ταινιών που έχει συμμετάσχει ο Alfred Hitchcock. (Σημείωση: Οι ταινίες στις οποίες έχει συμμετάσχει με περισσότερους από έναν ρόλους να προσμετρούνται μία μόνο φορά).

SQL - Editor

 

12. Για κάθε ταινία (τίτλος), να βρεθεί ο συνολικός αριθμός δίσκων (BLU-RAY και DVD) που περιέχει την ταινία. Στο αποτέλεσμα να εμφανίζονται και οι ταινίες για τις οποίες δεν δίσκος.

SQL-editor

 

13. Να βρεθούν οι κωδικοί των δίσκων που είναι τύπου BLU-RAY και έχουν ενοικιασθεί περισσότερες από μία φορές:

SQL - Editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

3.8.4. Λύσεις ασκήσεων με ερωτήματα με φωλιασμένες εντολές SQL.

14. Να βρεθούν οι τίτλοι των ταινιών που δεν έχουν ενοικιασθεί ποτέ. (Σημείωση: να μην χρησιμοποιηθεί outer join):

SQL - Editor

 

15. Να βρεθεί το όνομα του Συντελεστή που έχει συμμετάσχει στις περισσότερες ταινίες.

SQL - Editor

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

 

3.9. Βιβλιογραφία/Αναφορές

Hoffer, J. A., Venkatarama, R., & Topi, H. (2013). Modern Database Management, Prentice Hall.

Μανωλόπουλος, Ι., & Παπαδόπουλος, Α. Ν. (2006). Συστήματα Βάσεων Δεδομένων: Θεωρία & Πρακτική Εφαρμογή, Αθήνα, Εκδόσεις Νέων Τεχνολογιών.

Πίνακας Περιεχομένων / Περιεχόμενα Κεφαλαίου

 

 

Data Definition Language - DDL

Η γλώσσα ορισμού περιεχομένου χρησιμοποιείται για τον ορισμό των πινάκων και των μεταξύ τους σχέσεων. Με τη γλώσσα αυτή δηλώνουμε τα χαρακτηριστικά που έχει κάθε πίνακας και τους αντίστοιχους τύπους δεδομένων του κάθε χαρακτηριστικού.

Data Manipulation Language - DML

Η γλώσσα χειρισμού δεδομένων χρησιμοποιείται για την επεξεργασία, την ενημέρωση, την εισαγωγή και την διαγραφή δεδομένων.

Διάγραμμα οντοτήτων-συσχετίσεων (διάγραμμα E-R)

Τα Διάγραμματα οντοτήτων-συσχετίσεων παρέχουν ένα απλό και κατανοητό τρόπο περιγραφής της δομής των δεδομένων της Βάσης Δεδομένων

Ερώτημα SQL

Αποτελεί ένα δομημένο τρόπο σύνταξης ερωτοαποκρίσεων για την αναζήτηση περιεχομένου στη βάση δεδομένων μας.

create database

Ένας νέος πίνακας δημιουργείται με τη χρήση της εντολής CREATE TABLE ή σύνταξη της οποίας έχει ως εξής :

CREATE TABLE  ( 
<όνομα πεδίου 1> <τύπος πεδίου 1>,
<όνομα πεδίου 2> <τύπος πεδίου 2>,

<όνομα πεδίου Ν> <τύπος πεδίου Ν>);

Drop Database

Μπορούμε να διαγράψουμε ολόκληρο πίνακα, μαζί με τα δεδομένα που τυχόν έχει χρησιμοποιώντας την εντολή DROP σύμφωνα με το ακόλουθο πρότυπο :
DROP TABLE <όνομα πίνακα>

ON UPDATE

H πρόταση ON UPDATE προσδιορίζει την ενέργεια που θα εκτελεστεί αν θέλουμε να αλλάξουμε την τιμή ενός πεδίου:
UPDATE <όνομα πίνακα> SET <όνομα πεδίου> <νέα τιμή πεδίου> WHERE <κριτήρια επιλογής εγγραφών>

ON DELETE

Ο σκοπός είναι πολύ απλός, διαγράφει εγγραφές από ένα πίνακα. Και πάλι έχομε την δυνατότητα να ορίσουμε ποιές εγγραφές θέλουμε να διαγραφούν (ή και όλες) π.χ.:
DELETE FROM product WHERE id=1

Καρτεσιανού γινομένου

To Καρτεσιανό γινόμενο αποτελεί την πράξη μεταξύ δύο πινάκων όπου η κάθε εγγραφή του ενός πίνακα συνδυάζεται με όλες τις εγγραφές του άλλου πίνακα

πράξη της επιλογής/selection

Η SQL εντολή μέσω της οποίας ανακτούμε πληροφορίες και συντάσσουμε ερωτήματα είναι η SELECT. Η γενική σύνταξη της SELECΤ είναι αρκετά σύνθετη, ωστόσο ένα απλό πρότυπο είναι το ακόλουθο:
SELECT <πεδίο που θέλουμε να φαίνονται>
FROM <πίνακες από τους οποίους θα αντληθούν τα δεδομένα>
WHERE <κριτήρια επιλογής των εγγραφών>

πράξης της σύνδεσης (join)

Η εντολή JOIN σημαίνει σύνδεση, δηλαδή συνδυασμός δεδομένων από δύο ή περισσότερους πίνακες.

left outer join

Περιλαμβάνει επιπρόσθετα και όλες τις εγγραφές του πίνακα που βρίσκεται στα αριστερά της πράξης της σύνδεσης (join) και δεν εμπεριέχονται στο αποτέλεσμα της πράξης της σύνδεσης.

πράξη του full outer join

Περιλαμβάνει επιπρόσθετα και όλες τις εγγραφές των πινάκων που βρίσκονται στα αριστερά και δεξιά της πράξης της σύνδεσης (join) και δεν εμπεριέχονται στο αποτέλεσμα της πράξης της σύνδεσης.

όρος distinct

Η λέξη DISTINCT αμέσως μετά την SELECT δηλώνει ότι κάθε εγγραφή του πίνακα του αποτελέσματος θα συμπεριληφθεί μία μόνο φορά. Επομένως χρησιμοποιείται όταν θέλουμε να εγγυηθούμε ότι στο αποτέλεσμα του ερωτήματος δεν θα υπάρχουν διπλοεγγραφές πρέπει να χρησιμοποιήσουμε το DISTINCT

όρος GROUP BY

H λέξη GROUP BY προσδιορίζει τις στήλες με τις οποίες θα πραγματοποιηθεί ομαδοποίηση (grouping) των δεδομένων.

όρος HAVING

Ο όρος HAVING χρησιμοποιείται για να ορίσει περιοσρισμούς που σχετίζονται με τα ήδη ομαδοποιημένα αποτελέσματα που έχουν δημιουργηθεί με την GROUP BY.

πράξη της ένωσης πινάκων/σχέσεων

H SQL παρέχει ειδικές εντολές για την υποστήριξη των πράξεων της σχεσιακής άλγεβρας που αναφέρονται στην ένωση, διαφορά και τομή πινάκων. Οι πράξη της ένωσης (UNION) συνενώνει τις εγγραφές δύο ή περισσότερων πινάκων.
Ένα παράδειγμα ένωσης δίνεται παρακάτω:
SELECT συνέδριο
FROM πρακτικά_συνεδρίου
UNION
SELECT τιτλος
FROM περιοδικό;

πράξη της τομής σχέσεων

H SQL παρέχει ειδικές εντολές για την υποστήριξη των πράξεων της σχεσιακής άλγεβρας που αναφέρονται στην ένωση, διαφορά και τομή πινάκων. Οι πράξεις αυτές υλοποιούνται στην SQL με τις εντολές UNION, EXCEPT και INTERSECΤ αντιστοίχως.
παράδειγμα τομής :
SELECT ονομα
FROM συνδρομητης
INTERSECT
SELECT ονομα
FROM συγγραφεας;

πράξη της διαφοράς σχέσεων

H SQL παρέχει ειδικές εντολές για την υποστήριξη των πράξεων της σχεσιακής άλγεβρας που αναφέρονται στην ένωση, διαφορά και τομή πινάκων. Οι πράξεις αυτές υλοποιούνται στην SQL με τις εντολές UNION, EXCEPT και INTERSECΤ αντιστοίχως.
παράδειγμα διαφοράς :
SELECT κωδικός,τίτλος
FROM άρθρο
EXCEPT
SELECT κωδικός,τίτλος
FROM άρθρο
WHERE κωδικός_περιοδικού IS NOT NULL;

Ο όρος ΙΝ

Σε περίπτωση που θέλουμε ένα πεδίο να λαμβάνει τιμές από ένα προκαθορισμένο σύνολο τιμών, τότε μπορούμε εναλλακτικά να χρησιμοποιήσουμε τον τελεστή ΙΝ.

Ο ορος Νot Ιn

Σε περίπτωση που θέλουμε ένα πεδίο να λαμβάνει τιμές από ένα προκαθορισμένο σύνολο τιμών, εξαιρώντας κάποιες τιμές τότε μπορούμε εναλλακτικά να χρησιμοποιήσουμε τον τελεστή ΝΟΤ ΙΝ.

Οι όροι all και some

H SQL προσφέρει τα κατηγορήματα SOME(ή ΑΝΥ) και ALL τα οποία αντιστοιχούν στον υπαρξιακό και καθολικό ποσοδείκτη που χρησιμοποιούμε στα μαθηματικά. Με τη χρήση των κατηγορημάτων αυτών μπορούμε να συντάξουμε πολύ χρήσιμα ερωτήματα με τη χρήση υποερωτημάτων. Πριν απο τα κατηγορήματα SOME και ALL, μπορεί να προηγείται οποιοσδήποτε τελεστής σύγκρισης (=, >, <, >=, <=, <>)

Οι όροι exists και not exists

Η τιμή που επιστρέφει το κατηγόρημα EXISTS είναι αληθής, αν το σύνολο που ακολουθεί δεν είναι κενό. Σε διαφορετική περίπτωση η τιμή που επιστρέφεται είναι ψευδής.

CREATE VIEW

Για τον ορισμό μιας όψης, η SQL παρέχει την εντολή CREATE VIEW που συντάσσεται ως εξής:
CREATE VIEW όνομα-όψης
AS
(υποερώτημα SQL);

DELETE FROM

Παρόμοια με την εντολή UPDATE λειτουργεί και η εντολή DELETE. Ο σκοπός της είναι πολύ απλός, διαγράφει εγγραφές από ένα πίνακα.

DROP TABLE

Η πλήρης διαγραφή ενός πίνακα γίνεται χρησιμοποιώντας την εντολή DROP σύμφωνα με τον ακόλουθο πρότυπο :
DROP TABLE <ονομα πίνακα>

Οι αποθηκευμένες διαδικασίες/stored procedures

O SQL Server δίνει την δυνατότητα υλοποίησης τμημάτων κώδικα τα οποία παραμένουν αποθηκευμένα μέσα στη Βάση Δεδομένων και καλούνται αποθηκευμένες διαδικασίες (stored procedures). Αυτά ενεργοποιούνται ανά τακτά χρονικά διαστήματα για την εκτέλεση μιας σημαντικής λειτουργίας.

Το εύναυσμα/trigger

Ένας σκανδαλισμός ή εύναυσμα (trigger) είναι ένα τμήμα κώδικα που εκτελείται όταν συμβεί ένα γεγονός. Τα γεγονότα που ενεργοποιούν σκανδαλισμούς είναι εισαγωγές, διαγραφές, και ενημερώσεις στα δεδομένα ενός πίνακα.

Ευρετήριο

Ένας κατάλογος (ευρετήριο) ορίζεται σε μία ή περισσότερες στήλες ενός πίνακα και στοχεύει στην αποδοτικότερη εκτέλεση των ερωτημάτων που χρησιμοποιούν τις στήλες αυτές στη συνθήκη WHERE. Η κατασκευή και κατάργηση καταλόγων πραγματοποιείται με τις εντολές CREATE INDEX και DROP INDEX αντίστοιχα.

ALTER TABLE

O ορισμός ενός πίνακα μπορεί να μεταβληθεί στην πορεία, αναλόγως με τις απαιτήσεις. H SQL προσφέρει την εντολή ALTER TABLE, με την οποία επιτρέπονται να γίνουν συγκεκριμένες αλλαγές στον πίνακα: (προσθήκη νέας στήλης, διαγραφή υπάρχουσας στήλης, αλλαγή πεδίου ορισμού μίας στήλης, εισαγωγή νέου περιορισμού, κατάργηση περιορισμού, αλλαγή της εξ ορισμού τιμής στήλης, κατάργηση αρχικής τιμής στήλης).

εντολή grant.

Με την εντολή GRANT δίνουμε δικαιώματα χρήσης της βάσης δεδομένων σε χρήστες.

εντολή revoke.

Με την εντολή REVOKE αφαιρούμε από τους χρήστες τα δικαιώματα χρήσης ενός στοιχείου (π.χ. πίνακα, όψη) μιας βάσης δεδομένων.

H παράμετρος Split method:

Αυτή η παράμετρος καθορίζει τη μέθοδο με την οποία διαχωρίζονται οι κόμβοι του δένδρου. Μπορεί να πάρει τις τιμές [1,3] όπου 1 είναι η τιμή για Binary δένδρο, 2 η τιμή για Complete (multi-way) δένδρο και 3 η τιμή και για τα δύο μαζί.

Κατηγοριοποίηση (classification)

Η κατηγοριοποίηση αποτελεί μια σημαντική λειτουργία εξόρυξης δεδομένων, όπου επιθυμούμε να προβλέψουμε σε πια κατηγορία εντάσσονται και ανήκουν κάθε φορά τα δεδομένα μας.

H παράμετρος Split method:

Αυτή η παράμετρος καθορίζει τη μέθοδο με την οποία διαχωρίζονται οι κόμβοι του δένδρου. Μπορεί να πάρει τις τιμές [1,3] όπου 1 είναι η τιμή για Binary δένδρο, 2 η τιμή για Complete (multi-way) δένδρο και 3 η τιμή και για τα δύο μαζί.

H παράμετρος Stopping Tolerance

Αυτή η παράμετρος καθορίζει τον αριθμό των περιπτώσεων που μετακινούνται μεταξύ των clusters σε κάθε πέρασμα του αλγορίθμου. Ο αλγόριθμος εφαρμόζεται επαναληπτικά στα δεδομένα και σχηματίζει τα cluster με την μορφή που εμείς τα βλέπουμε, ύστερα από ένα σύνολο επαναλήψεων. Επειδή σε κάθε επανάληψη προστίθενται διαρκώς και νέες περιπτώσεις, η τιμή της παραμέτρου μπορεί να θεωρηθεί ως ποσοστό και όχι ένας συγκεκριμένος αριθμός. Η προεπιλεγμένη τιμή της παραμέτρου είναι 10.

Η τάση (trend)

Η τάση μας δείχνει την γενική κατεύθυνση των δεδομένων μας. Για παράδειγμα, η τάση είναι αυξανόμενη στις πωλήσεις προϊόντων τις ημέρες των Χριστουγέννων.

Η περιοδικότητα (periodicity)

Η περιοδικότητα αφορά την επανεμφάνιση κάποιων τάσεων στα δεδομένα μας. Για παράδειγμα, οι πωλήσεις παγωτών αυξάνονται κάθε καλοκαίρι.

Οι ακραίες τιμές (outliers)

Κάποια δεδομένα ενδέχεται να μην είναι δυνατόν να συμπεριλφθούν σε κάποια ομάδα. Τα δεδομένα αυτά καλούνται απομακρυσμένα ή απομονωμένα (outliers) και συνήθως δημιουργούν πρόβλημα στις μεθόδους ομαδοποίησης.

ολοκληρωμένη (integrated)

Μια αποθήκη δεδομένων είναι ολοκληρωμένη διότι μπορεί και συνενώνει μέσα τις πολλές ανομοιογενείς βάσεις δεδομένων.

Μη ευμετάβλητη (non volatile)

Μια αποθήκη δεδομένων συνήθως δεν μεταβάλλεται ως προς το περιεχόμενο της. Αυτό που συμβαίνει είναι να προστίθεται μόνο καινούργιο περιεχόμενο.

Αφορά ιστορικά δεδομένα (time-variant)

Μια αποθήκη δεδομένων αφορά δεδομένα που μπορεί να έχουν βάθος δεκαετιών.

Ένα μέτρο ή αλλιώς μετρική (measure)

Είναι το μέγεθος ή τα μεγέθη που μας ενδιαφέρουν να συναθροίσουμε ή να αναλύσουμε κατά τις λειτουργίες OLAP.

διαστάσεις (dimensions)

Οι πληροφορίες που περιγράφουν τα γεγονότα, ονομάζονται διαστάσεις. Για ένα γεγονός πώλησης, διαστάσεις είναι, π.χ., το προϊόν που πωλήθηκε, το υποκατάστημα όπου έγινε η πώληση, η ημερομηνία πώλησης, κ.λπ.

Η ιεραρχία (hierarchy)

Η ιεραρχία (hierarchy) μιας διάστασης

Μια διάσταση μπορεί να αποτελείται από διαφορετικά επίπεδα ανάλυσης και να ενσωματώνει μια ιεραρχία. Για παράδειγμα, η διάσταση του χρόνου μπορεί να αναλυθεί σε μέρες, εβδομάδες, κτλ.

Το σχήμα Αστέρα (star schema)

Σύμφωνα με το μοντέλο αυτό η αποθήκη δεδομένων περιέχει ένα μεγάλο κεντρικό πίνακα που καλείται πίνακας γεγονότων (fact table) και ένα σύνολο μικρότερων πινάκων που καλούνται πίνακες διαστάσεων (fimension tables) και συνδέονται απευθείας στον fact table.

To σχήμα χιονονιφάδας (snowflake schema)

Το μοντέλο χιονιφάδας αποτελεί παραλλαγή του μοντέλου αστέρα. Διαφέρει κατά το ότι κάποιοι πίνακες διαστάσεων μπορούν να αναλυθούν περισσότερο χρησιμοποιώντας βοηθητικούς πίνακες. Η λειτουργία αυτή μοιάζει με τη διαδικασία της κανονικοποίησης στις σχεσιακές βάσεις δεδομένων.

Το σχήμα γαλαξία (galaxy schema),

Στο σχήμα γαλαξία έχουμε περισσότερους τους ενός fact tables, τους οποίους μπορούν να διαμοιράζονται περισσότερες διαστάσεις.

Η πράξη Roll-up

Η λειτουργία αυτή ομαδοποιεί τα δεδομένα του κύβου σε υψηλότερο επίπεδο ανάλυσης και μας οδηγεί σε ανώτερο επίπεδο της θεματικής ιεραρχίας, αθροίζοντας τα μετρικά στοιχεία.

Η πράξη Drill-down

Επιφέρει ακριβώς τα αντίθετα αποτελέσματα από τη λειτουργία ROLL-UP. Με τη λειτουργία DRILL-DOWN αυξάνουμε το επίπεδο λεπτομέρειας των δεδομένων μας.

Η πράξη Slice

Η λειτουργία SLICE επιλέγει τα δεδομένα του κύβου μας ως προς μία διάσταση.

Η πράξη Dice

H λειτουργία DICE επιλέγει τα δεδομένα ως προς πολλές διαστάσεις του κύβου μας, δημιουργώντας έναν μικρότερο κύβο.

Η πράξη Pivot

Η λειτουργία PIVOT πραγματοποιεί περιστροφή στις διαστάσεις του κύβου, με αποτέλεσμα τα δεδομένα να απεικονίζονται με διαφορετικό τρόπο κάθε φορά.

Συναθροιστικές συνάρτήσεις (aggregation function)

Οι συναρτήσεις συνάθροισης χρησιμοποιούνται για την εξαγωγή συγκεντρωτικών τιμών από τις τιμές μίας στήλης.

Προκειμένου να εξάγουμε έναν κανόνα συσχέτισης, πρέπει να ικανοποιούνται κάποια κατώτατα όρια τόσο για το support όσο και για τo confidence/probability. Ο κανόνας πρέπει να έχει support μεγαλύτερo από το όριο, που ονομάζεται ελάχιστη υποστήριξη (minimum_support), και η εμπιστοσύνη πρέπει να είναι μεγαλύτερη από το όριο, που ονομάζεται ελάχιστη εμπιστοσύνη (minimum_probability).

Προκειμένου να εξάγουμε έναν κανόνα συσχέτισης, πρέπει να ικανοποιούνται κάποια κατώτατα όρια τόσο για το support όσο και για τo confidence/probability. Ο κανόνας πρέπει να έχει support μεγαλύτερo από το όριο, που ονομάζεται ελάχιστη υποστήριξη (minimum_support), και η εμπιστοσύνη πρέπει να είναι μεγαλύτερη από το όριο, που ονομάζεται ελάχιστη εμπιστοσύνη (minimum_probability).

Slice

H λειτουργία Slice επιλέγει τα δεδομένα ως προς μία διάσταση του κύβου μας, δημιουργώντας μια φέτα ενός κύβου

Pivot

Η λειτουργία Pivot αλλάζει μόνο το τρόπο απεικόνισης των διαστάσεων του κύβου μα