Επιμέλεια: ΘΟΔΩΡΗΣ ΜΑΝΑΒΗΣ tmanavis@ist.edu.gr SQL 1 από 3 Επιμέλεια: ΘΟΔΩΡΗΣ ΜΑΝΑΒΗΣ tmanavis@ist.edu.gr T Manavis
Εισαγωγή Τα εμπορικά συστήματα Βάσεων Δεδομένων απαιτούν την ύπαρξη γλωσσών «φιλικών προς το χρήστη» για το χειρισμό δεδομένων από αυτές. Υπάρχουν διάφορες τέτοιες γλώσσες όπως η SQL, QBE, Quel που μας επιτρέπουν να θέτουμε εντολές στη Βάση Δεδομένων για την ανάκτηση και χειρισμό δεδομένων. Αυτές οι γλώσσες αναφέρονται ως «query languages» δηλαδή γλώσσες ερωτημάτων. Ωστόσο περιέχουν πολύ περισσότερες δυνατότητες εκτός από το να ερωτούν μια Βάση Δεδομένων. Μπορούν π.χ. να καθορίσουν τη δομή των δεδομένων, να κάνουν τροποποίηση στοιχείων ή να θέσουν περιορισμούς ασφαλείας. Στα πλαίσια αυτών των σημειώσεων θα μελετηθεί μόνο η γλώσσα SQL (Structured Query Language) η οποία υποστηρίζεται γενικά από όλες τις εμπορικές Βάσεις Δεδομένων και είναι η καθιερωμένη γλώσσα χειρισμού τους.
Πρότυπα και στοιχεία της SQL Υπάρχουν αρκετές εκδόσεις της SQL (Structured Query Language) και πολλά προϊόντα που την υποστηρίζουν. Παρόλο που οι εκδόσεις αυτές μπορεί να διαφοροποιούνται στις λεπτομέρειες της γλώσσας, οι διαφορές αυτές δεν είναι ουσιαστικές. Το 1986 η Αμερικάνικη Εταιρεία Καθιέρωσης Προτύπων (American National Standards Institute – ANSI) δημοσίευσε ένα πρότυπο (standard) της SQL. Επίσης η εταιρεία IBM έχει δημοσιεύσει το δικό της πρότυπο. Η αρχική έκδοση της γλώσσας ονομάστηκε SEQUEL (Structured English Query Language) και σχεδιάσθηκε από ερευνητική ομάδα της IBM στα πλαίσια του System R (1974). Η εταιρεία Oracle χρησιμοποίησε για πρώτη φορά τη γλώσσα σε εμπορικό ΣΔΒΔ (DBMS) το 1979.
Πρότυπα και στοιχεία της SQL υποστηρίζεται από κάθε σχεσιακό σύστημα, οπότε η διατύπωση των ερωτημάτων είναι ανεξάρτητη του ΣΔΒΔ, πολλές γλώσσες προγραμματισμού έχουν επεκταθεί ώστε να υποστηρίζουν διατύπωση ερωτημάτων σε SQL, και έχει απλή σύνταξη και αποδεσμεύει το χρήστη από λεπτομέρειες υλοποίησης.
Πρότυπα και στοιχεία της SQL Υποδιαιρείται σε 2 ξεχωριστές υπογλώσσες: τη γλώσσα ορισμού δεδομένων (DDL, Data Definition Language), και τη γλώσσα χειρισμού δεδομένων (DML, Data Manipulation Language). Είναι δηλωτική γλώσσα υψηλού επιπέδου, δηλαδή ορίζουμε τί θέλουμε να γίνει όχι το πώς. H SQL χρησιμοποιεί όρους όπως: πίνακας, γραμμή, στήλη, οι οποίοι αντιστοιχούν στις έννοιες: σχέση, πλειάδα και χαρακτηριστικό.
Πρότυπα και στοιχεία της SQL Πρότυπα: SQL/86: ANSI & ISO standard, SQL/89: ANSI & ISO standard, SQL/92 ή SQL2: ANSI & ISO standard, SQL3 ή SQL:1999. Tutorial-demo: http://w3schools.com/sql/default.asp
Πρότυπα και στοιχεία της SQL Γλώσσα Ορισμού Δεδομένων (Data Definition Language – DDL). Εντολές για τον ορισμό της δομής – σχήματος (scheme) της Βάσης Δεδομένων, σβήσιμο σχέσεων, δημιουργία δεικτών (indices) και τροποποίηση της δομής-σχήματος της ΒΔ. Διαδραστική Γλώσσα Χειρισμού Δεδομένων (Interactive Data Manipulation Language – DML). Εντολές (ερωτήματα) για πρόσκτηση δεδομένων και επιπλέον για εισαγωγή, τροποποίηση και διαγραφή εγγραφών στη Βάση Δεδομένων. Ενσωματωμένη Γλώσσα Χειρισμού Δεδομένων (Embedded Data Manipulation Language). Για ενσωμάτωση μέσα σε γενικού σκοπού γλώσσές προγραμματισμού όπως η C, η Pascal, η Fortran κ.α.
Πρότυπα και στοιχεία της SQL Ορισμός Όψεων (View Definition). Για να βλέπουν οι χρήστες συγκεκριμένα τμήματα της Βάσης Δεδομένων. Εξουσιοδότηση (Authorization). Για εκχώρηση δικαιωμάτων πρόσβασης σε όψεις και σχέσεις. Ακεραιότητα (Integrity). Έλεγχος Συναλλαγών (Transaction Control). Εντολές που ελέγχουν την αρχή και το τέλος της διεκπεραίωσης ενός ερωτήματος.
Σχεσιακή Άλγεβρα (επανάληψη) Σχεσιακή άλγεβρα: Ένα σύνολο από πράξεις που όταν εφαρμοστούν σε σχέσεις μας δίνουν νέες σχέσεις Πλήρες σύνολο πράξεων Επίσης τομή () συνένωση συνένωση ισότητας φυσική συνένωση (*) διαίρεση επιλογή (σ) προβολή (π) ένωση () διαφορά (-) καρτεσιανό γινόμενο (x)
Πράξεις της Σχεσιακής Άλγεβρας (επανάληψη)
Η Γλώσσα Βάσεων Δεδομένων SQL Μέρος 1 (Βασική Δομή, Πράξεις Συνόλου)
Η γλώσσα SQL Προσοχή: H SQL που χρησιμοποιούμε στην Microsoft ACCESS σε κάποιες περιπτώσεις δεν ακολουθεί ακριβώς τα standards – μερικές εντολές στις διαφάνειες μπορεί να μη «τρέχουν» όπως είναι και να χρειάζονται μικρές τροποποιήσεις
Βασική Δομή select Α1, Α2, .., Αn from R1, R2, … Rm where P Μια χαρακτηριστική ερώτηση σε SQL έχει την εξής μορφή: ονόματα γνωρισμάτων select Α1, Α2, .., Αn from R1, R2, … Rm where P ονόματα σχέσεων συνθήκη Ισοδύναμο του: π A1, A2, .., An (σ P (R1 x R2 x … Rm))
Πλήρης Σύνταξη της SELECT SELECT [DISTINCT] <λίστα στηλών> FROM <λίστα πινάκων> [WHERE συνθήκη] [GROUP BY <λίστα στηλών>] [HAVING συνθήκη] [ORDER BY <λίστα στηλών> [ASCENDING | DESCENDING]];
Βασική Δομή (select) select Α1, Α2, .., Αn from R1, R2, … Rm where P π A1, A2, .., An (σ P (R1 x R2 x … Rm)) select αντιστοιχεί στην πράξη της προβολής (π) της σχεσιακής άλγεβρας Αναφέρεται στο «Ποια γνωρίσματα θέλουμε να υπάρχουν στο αποτέλεσμα της ερώτησης».
Βασική Δομή (from) select Α1, Α2, .., Αn from R1, R2, … Rm where P π A1, A2, .., An (σ P (R1 x R2 x … Rm)) select Α1, Α2, .., Αn from R1, R2, … Rm where P from αντιστοιχεί στην πράξη του καρτεσιανού γινομένου της σχεσιακής άλγεβρας. Ποιες σχέσεις θα χρησιμοποιηθούν για τον υπολογισμό του αποτελέσματος.
Βασική Δομή (where) select Α1, Α2, .., Αn from R1, R2, … Rm where P π A1, A2, .., An (σ P (R1 x R2 x … Rm)) select Α1, Α2, .., Αn from R1, R2, … Rm where P where αντιστοιχεί στη συνθήκη της πράξης της επιλογής στη σχεσιακή άλγεβρα. Το κατηγόρημα P έχει γνωρίσματα των σχέσεων που εμφανίζονται στο from.
Βασική Δομή Παράδειγμα: Ταινία (Τίτλος, Έτος, Διάρκεια, Είδος) Παίζει(Όνομα, Τίτλος, Έτος) Ηθοποιός(Όνομα, Διεύθυνση, Έτος-Γέννησης, Σύζυγος-Ηθοποιού) Παράδειγμα: Ονόματα ηθοποιών που παίζουν στην ταινία Gone by the Wind select Όνομα from Παίζει where Τίτλος = ''Gone by the Wind'' Όταν δεν υπάρχει το where, το P θεωρείται ότι ισχύει (είναι αληθές). ΠΡΟΣΟΧΗ: Δε γίνεται απαλοιφή των διπλών εμφανίσεων.
Select Απαλοιφή διπλών εμφανίσεων Ταινία (Τίτλος, Έτος, Διάρκεια, Είδος) Παίζει(Όνομα, Τίτλος, Έτος) Ηθοποιός(Όνομα, Διεύθυνση, Έτος-Γέννησης, Σύζυγος-Ηθοποιού) Παράδειγμα: Ονόματα όλων των ηθοποιών που έχουν παίξει σε ταινίες select Όνομα from Παίζει Η SQL επιτρέπει πολλαπλές εμφανίσεις της ίδιας πλειάδας σε μια σχέση. Μια σχέση στην SQL είναι ένα πολυσύνολο (multiset) ή θύλακας (bag). Απαλοιφή διπλών εμφανίσεων select distinct Όνομα from Παίζει
Select Επιλογή όλων των γνωρισμάτων select * from Παίζει Αριθμητικές πράξεις (+, -, *, /) ανάμεσα σε σταθερές ή γνωρίσματα πλειάδων select Τίτλος, Έτος, Διάρκεια / 60, Είδος from Ταινία Επιστρέφει μια σχέση ίδια με τη σχέση Ταινία μόνο που το γνώρισμα διάρκεια μας δίνει τις ώρες (έχει διαιρεθεί με το 60)
Where Where συνθήκη του where Λογικοί τελεστές: and, or, not Παράδειγμα: Τον τίτλο όλων των ταινιών που γυρίστηκαν μετά το 1995 και είναι ασπρόμαυρες select Τίτλος from Ταινία where Έτος > 1995 and Είδος = ''Ασπρόμαυρη'' συνθήκη του where Λογικοί τελεστές: and, or, not Τελεστές σύγκρισης: <, <=, >, >=, =, <>, between, not between ανάμεσα σε αριθμητικές εκφράσεις,συμβολοσειρές (strings), και ειδικούς τύπους.
Where Παράδειγμα χρήσης του between : select Τίτλος from Ταινία where Έτος between 1990 and 1995 αντί του select Τίτλος from Ταινία where Έτος >= 1990 and Έτος <= 1995 Όταν το ίδιο γνώρισμα εμφανίζεται στο σχήμα περισσότερων από μια σχέσεων, τότε κάνουμε διάκριση βάση του συμβολισμού: <όνομα-σχέσης>.<όνομα-γνωρίσματος>
Συνένωση - Join Παράδειγμα φυσικής συνένωσης: Ταινία (Τίτλος, Έτος, Διάρκεια, Είδος) Παίζει(Όνομα, Τίτλος, Έτος) Ηθοποιός(Όνομα, Διεύθυνση, Έτος-Γέννησης, Σύζυγος-Ηθοποιού) Παράδειγμα φυσικής συνένωσης: Τους ηθοποιούς που παίζουν σε ασπρόμαυρες ταινίες select distinct Όνομα from Παίζει, Ταινία where Παίζει.Τίτλος = Ταινία.Τίτλος and Παίζει.Έτος = Ταινία.Έτος and Είδος = “Ασπρόμαυρη”
Η γλώσσα SQL Περισσότερα για τη γλώσσα ερωτήσεων - Πράξεις με Συμβολοσειρές - Διάταξη Πλειάδων - Αλλαγή Ονόματος - Μεταβλητές Πλειάδων - Η τιμή null
Πράξεις με Συμβολοσειρές Η πιο συνηθισμένη πράξη είναι ταίριασμα προτύπων: * ταιριάζει οποιαδήποτε συμβολοσειρά % ταιριάζει οποιοδήποτε χαρακτήρα Γίνεται διάκριση ανάμεσα σε κεφαλαία και μικρά Σύγκριση χρησιμοποιώντας το like, not like Παράδειγμα: Οι τίτλοι όλων των ταινιών που περιέχουν τη λέξη Θάλασσα select distinct Τίτλος from Ταινία where Τίτλος like “*Θάλασσα*” Υπάρχουν πολλές ακόμα διαθέσιμες πράξεις . Δείτε και το pdf στο server της σχολής: [Κριτήρια Δημιουργίας Ερωτημάτων σε Microsoft Access.pdf]
Διάταξη των Πλειάδων Χρήση του order by ώστε οι πλειάδες στο αποτέλεσμα να είναι ταξινομημένες με βάση τo αντίστοιχο γνώρισμα select distinct Ταινία, Έτος from Παίζει where Όνομα = “Robert De Niro” order by Έτος Default: αύξουσα διάταξη, αλλά και άμεσα χρησιμοποιώντας το asc (αύξουσα) ή το desc (φθήνουσα). Επίσης, ταξινόμηση με βάση πολλά γνωρίσματα. Παράδειγμα: select * from Ταινία order by Έτος desc, Τίτλος asc Η ταξινόμηση είναι δαπανηρή λειτουργία (σε πόρους του συστήματος).
Αλλαγή Ονόματος Τα ονόματα των γνωρισμάτων στο αποτέλεσμα είναι αυτά των σχέσεων στην ερώτηση. Δυνατότητα αλλαγής του ονόματος τόσο μιας σχέσης όσο και ενός γνωρίσματος: <παλιό-όνομα> as <νέο-όνομα> To as μπορεί να εμφανίζεται στο select ή στο from Για παράδειγμα: select Τίτλος, Έτος, Διάρκεια / 60 as Ώρες-Διάρκεια, Είδος from Ταινία
Αλλαγή Ονόματος Χρήσιμο όταν (α) όταν έχουμε αριθμητικές εκφράσεις στο select και δεν έχουν όνομα (β) όταν θέλουμε να αλλάξουμε το όνομα του γνωρίσματος στο αποτέλεσμα (γ) δυο σχέσεις του from έχουν γνωρίσματα με το ίδιο όνομα (δ) Θέλουμε να κάνουμε συνένωση ενός πίνακα με τον εαυτό του
Μεταβλητές Πλειάδων Μια μεταβλητή πλειάδας μπορεί να οριστεί στο from χρησιμοποιώντας το as: Ταινία (Τίτλος, Έτος, Διάρκεια, Είδος) Παίζει(Όνομα, Τίτλος, Έτος) Ηθοποιός(Όνομα, Διεύθυνση, Έτος-Γέννησης, Σύζυγος-Ηθοποιού) select distinct Όνομα from Παίζει as Π, Ταινία as Τ where Π.Τίτλος = Τ.Τίτλος and Π.Έτος = Τ.Έτος and Είδος = “Ασπρόμαυρη”
Μεταβλητές Πλειάδων Οι μεταβλητές πλειάδων είναι ιδιαίτερα χρήσιμες όταν θέλουμε να συγκρίνουμε δυο πλειάδες της ίδιας σχέσης. Ταινία (Τίτλος, Έτος, Διάρκεια, Είδος) Παίζει(Όνομα, Τίτλος, Έτος) Ηθοποιός(Όνομα, Διεύθυνση, Έτος-Γέννησης, Σύζυγος-Ηθοποιού) Παράδειγμα: Τα ονόματα όλων των ταινιών που έχουν διάρκεια μεγαλύτερη τουλάχιστον από μία ταινία που γυρίστηκε το 1995 select distinct Τ.Τίτλος from Ταινία as S, Ταινία as T where T.Διάρκεια > S. Διάρκεια and S.Έτος = 1995
Η τιμή null Παράδειγμα (NOT) TRUE FALSE FALSE TRUE ΑΓΝΩΣΤΟ ΑΓΝΩΣΤΟ Η SQL λογική τριών τιμών με τιμές TRUE, FALSE, και ΑΓΝΩΣΤΟ (null) Στο αποτέλεσμα του select-from-where μόνο οι πλειάδες που ικανοποιούν τη συνθήκη του where (η έκφραση έχει την τιμή TRUE) Παράδειγμα (NOT) TRUE FALSE FALSE TRUE ΑΓΝΩΣΤΟ ΑΓΝΩΣΤΟ Χρήση της λέξης κλειδί is null (is not null) σε μια συνθήκη για να ελέγξουμε αν μια τιμή είναι null. select Αριθμός-Δανείου from Δάνειο where Ποσό is null
Η τιμή null Εμφάνιση null Σε συναθροιστικές συναρτήσεις: αγνοείται, εκτός από το count(*) Παράδειγμα: select sum(Ποσό) from Δάνειο
Η Γλώσσα Βάσεων Δεδομένων SQL Μέρος 1 (Βασική Δομή, Πράξεις Συνόλου)
Πράξεις Συνόλων Πράξεις: union intersection except εφαρμόζονται σε συμβατές σχέσεις. Γενική Σύνταξη: (select from where ) union/intersection/except
Παράδειγμα Λογαριασμός Όνομα-Υποκαταστήματος Αριθμός-Λογαριασμού Ποσό Όνομα-Υποκαταστήματος Αριθμός-Λογαριασμού Ποσό Υποκατάστημα Όνομα-Υποκαταστήματος Πόλη Σύνολο Δάνειο Όνομα-Υποκαταστήματος Αριθμός-Δανείου Ποσό Δανειζόμενος Όνομα-Πελάτη Αριθμός-Δανείου Πελάτης Όνομα-Πελάτη Οδός Πόλη Όνομα-Πελάτη Αριθμός-Λογαριασμού Καταθέτης
Πράξεις Συνόλων Παράδειγμα union: Τα ονόματα όλων των πελατών που έχουν καταθέσεις ή/και έχουν πάρει δάνειο (select Όνομα-Πελάτη from Καταθέτης) union from Δανειζόμενος) Απαλοιφή διπλών εμφανίσεων, εκτός αν χρησιμοποιηθεί το union all Μέγιστος αριθμός πολλαπλών εμφανίσεων;
Πράξεις Συνόλων Παράδειγμα intersect: Τα ονόματα όλων των πελατών που έχουν καταθέσεις και έχουν πάρει δάνειο (select Όνομα-Πελάτη from Καταθέτης ) intersect from Δανειζόμενος ) Αντίστοιχα με το union all, υπάρχει το intersect all
Πράξεις Συνόλων Παράδειγμα except: Τα ονόματα όλων των πελατών που έχουν καταθέσεις και δεν έχουν πάρει δάνειο (όλοι οι πελάτες που έχουν καταθέσεις ΕΚΤΟΣ ΑΠΟ εκείνους που έχουν πάρει δάνειο) (select Όνομα-Πελάτη from Καταθέτης) except from Δανειζόμενος) Αντίστοιχα υπάρχει το except all
Πράξεις Συνόλων Παραδείγματα Ταινία (Τίτλος, Έτος, Διάρκεια, Είδος) Παίζει(Όνομα, Τίτλος, Έτος) Ηθοποιός(Όνομα, Διεύθυνση, Έτος-Γέννησης, Σύζυγος-Ηθοποιού) Παραδείγματα Ηθοποιούς που δεν έπαιξαν σε έγχρωμη ταινία Τις ταινίες (τίτλο) με τον ίδιο τίτλο που γυρίστηκαν το 2005 και το 2006
Πηγές Πανεπιστήμιο Ιωαννίνων: Σημειώσεις του μαθήματος Βάσεις Δεδομένων Ι Εθνικό Μετσόβιο Πολυτεχνείο : Σημειώσεις του μαθήματος Βάσεις Δεδομένων Ι Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστημίου Πατρών : Σημειώσεις του μαθήματος Βάσεις Δεδομένων Ι