Εισαγωγή στην sql με εύκολα και απλά παραδείγματα. Μάθετε την SQL και αξιοποιήστε τη δύναμη των βάσεων δεδομένων. Η βάση δεδομένων MySQL αποτελεί το πρώτο βήμα για τη δημιουργία διαδικτυακών εφαρμογών
Η γλώσσα SQL
Η SQL αποτελείται από δύο βασικά μέρη: τη
γλώσσα SQL Ορισμού Δεδομένων (SQL DDL) και τη
γλώσσα SQL χειρισμού δεδομένων (SQL DML).
Με την γλώσσα ορισμού δεδομένων ορίζεται το
σχήμα των δεδομένων, δηλαδή η μορφή τους, ενώ
με τη γλώσσα χειρισμού δεδομένων ορίζονται οι
λειτουργίες αποθήκευσης και ανάκτησης των
δεδομένων.
3.
Η γλώσσα SQL
Επομένως η γλώσσα SQL περιέχει εντολές για τη
δημιουργία και την επεξεργασία της μορφής των
πινάκων (ορισμός δεδομένων), αλλά και εντολές
για την εισαγωγή, ενημέρωση, διαγραφή και
ανάκτηση των δεδομένων που είναι αποθηκευμένα
σε πίνακες (χειρισμός δεδομένων).
4.
Η γλώσσα SQL
Αν για παράδειγμα θέλουμε να αποθηκεύσουμε τα
στοιχεία των μαθητών ενός σχολείου σε σχεσιακή
βάση δεδομένων, θα χρησιμοποιήσουμε τη γλώσσα
SQL DDL για να δημιουργήσουμε τους σχεσιακούς
πίνακες και κατόπιν θα χρησιμοποιήσουμε τη
γλώσσα SQL DML για να εισάγουμε τα στοιχεία
των μαθητών και για να κάνουμε ερωτήσεις που θα
ανακτούν δεδομένα από τη βάση.
5.
Σε ένα ΣχεσιακόΣύστημα Διαχείρισης
Βάσεων Δεδομένων:
Δημιουργώ πίνακες με τη Γλώσσα Ορισμού
Δεδομένων (DDL)
Εισάγω δεδομένα στους σχεσιακούς πίνακες με τη
Γλώσσα Χειρισμού Δεδομένων (DML)
Ενημερώνω/διαγράφω τα δεδομένα των πινάκων
με τη Γλώσσα Χειρισμού Δεδομένων (DML)
Εκτελώ ερωτήματα ανάκτησης για τα δεδομένα
των πινάκων με τη Γλώσσα Χειρισμού Δεδομένων
(DML)
6.
Η γλώσσα SQL
Φυσικά η δημιουργία πινάκων και η
εισαγωγή/ενημέρωση/διαγραφή δεδομένων σε
αυτούς μπορεί να γίνει και με γραφικά εργαλεία
στα περισσότερα ΣΔΒΔ, όμως η χρήση της γλώσσας
SQL εξασφαλίζει ανεξαρτησία από τον
κατασκευαστή του συστήματος και εύκολη
μεταφορά των προγραμμάτων ανάμεσα σε
συστήματα κατασκευαστών.
7.
DDL
SQL ΣχεσιακήΓλώσσα Ορισμού Δεδομένων (DDL)
Μία Γλώσσα Ορισμού Δεδομένων (Data Definition
Language DDL) χρησιμοποιείται από τους
σχεδιαστές προγραμματιστές και από τους
διαχειριστές Βάσεων Δεδομένων για τον ορισμό
του σχήματος των δεδομένων, δηλαδή για να
καθοριστεί η μορφή με την οποία θα «βλέπουν» οι
χρήστες και τα προγράμματα τα αποθηκευμένα
δεδομένα.
8.
DDL
Τα ΣΔΒΔδιαθέτουν μεταφραστή της γλώσσας DDL
που υποστηρίζουν, ώστε να μετατρέπεται η
περιγραφή από DDL σε μορφή που μπορεί να
αποθηκευτεί.
Τα σχεσιακά ΣΔΒΔ χρησιμοποιούν κατά κανόνα τη
γλώσσα SQL για τον ορισμό του σχεσιακού
σχήματος των δεδομένων.
9.
DDL
Η γλώσσαSQL DDL περιγράφει τους πίνακες, τα
πεδία (ή χαρακτηριστικά ή στήλες) από τα οποία
αποτελούνται οι πίνακες, το είδος ή τύπο
δεδομένων κάθε πεδίου και τους περιορισμούς για
τα πεδία των πινάκων.
10.
Tύποι Δεδομένων τηςSQL
Οι περισσότερες γλώσσες προγραμματισμού έχουν
τύπους δεδομένων, δηλαδή συγκεκριμένους
τρόπους αναπαράστασης των δεδομένων.
Αυτό σημαίνει ότι δίνουν στον προγραμματιστή
συγκεκριμένες επιλογές για το είδος των στοιχείων
που θα επεξεργαστούν τα προγράμματά του.
11.
Tύποι Δεδομένων τηςSQL
Για παράδειγμα, σε ένα πρόγραμμα που
επεξεργάζεται βαθμούς μαθητών, ο
προγραμματιστής θα ορίσει τους προφορικούς
βαθμούς των τετραμήνων ως ακέραιους αριθμούς.
Με άλλα λόγια, ο τύπος δεδομένων των
προφορικών βαθμών θα είναι ακέραιος αριθμός.
12.
Tύποι Δεδομένων τηςSQL
Η SQL που είναι γλώσσα προγραμματισμού
Βάσεων Δεδομένων, έχει τους δικούς της τύπους
δεδομένων, οι οποίοι χρησιμοποιούνται για να
καθοριστεί το είδος των στοιχείων που θα
αποθηκεύονται στους σχεσιακούς πίνακες.
13.
Tύποι Δεδομένων τηςSQL
Για να δημιουργηθεί ένας πίνακας με SQL, πρέπει
πρώτα να καθοριστούν τα πεδία από τα οποία θα
αποτελείται ο πίνακας. Τα πεδία καθορίζονται από
το όνομά τους και τον τύπο τους.
Το όνομα κάθε πεδίου το επιλέγει ο σχεδιαστής και
είναι μία λέξη, π.χ. Τίτλος, Ονοματεπώνυμο,
Ημερομηνία_γέννησης, Έτος_δημιουργίας, Βαθμός,
κλπ.
14.
Tύποι Δεδομένων τηςSQL
Ο τύπος ενός πεδίου καθορίζει το είδος των
δεδομένων που μπορούν να αποθηκευτούν σε αυτό
το πεδίο.
Ο τύπος αυτός είναι ένας από τους τύπους
δεδομένων που υποστηρίζει η γλώσσα SQL.
Πριν μάθουμε επομένως πώς δημιουργούμε έναν
πίνακα σε SQL, πρέπει να μάθουμε ποιοι είναι οι
τύποι δεδομένων της SQL.
15.
Tύποι Δεδομένων τηςSQL
Η SQL υποστηρίζει διάφορους τύπους δεδομένων:
αριθμητικούς, αλφαριθμητικούς, ημερομηνίας,
ώρας, κλπ οι οποίοι επιλέγονται από το σχεδιαστή
της βάσης ανάλογα με τις ανάγκες.
Για παράδειγμα, σε μια βάση δεδομένων που
αποθηκεύει στοιχεία για ταινίες κινηματογράφου,
ο τίτλος της ταινίας είναι μια φράση που
αποτελείται από αλφαριθμητικά στοιχεία, δηλαδή
γράμματα και σύμβολα.
16.
Tύποι Δεδομένων τηςSQL
Ο τύπος του πεδίου «Τίτλος» θα είναι επομένως
αλφαριθμητικός. Το κόστος δημιουργίας μιας
ταινίας όμως, είναι αριθμητικού τύπου. Στην
Εικόνα 4 1 βλέπουμε τον πίνακα «Ταινία» που
αποτελείται από τις στήλες «Τίτλος»,
«Έτος_δημιουργίας», «Σκηνοθέτης» και «Κόστος»
καθώς και τιμές για την ταινία «Το κύμα (Die
Welle)».
17.
Tύποι Δεδομένων τηςSQL
Σε ένα διαφορετικό παράδειγμα, αν θέλουμε να
αποθηκεύσουμε σε έναν πίνακα τιμές προϊόντων, η
τιμή κάθε προϊόντος σε ευρώ πρέπει να
αποθηκευτεί ως αριθμός με υποδιαστολή, π.χ. 4,25 .
18.
Tύποι Δεδομένων τηςSQL
Στα σχολεία, για να διευκολυνθεί η λειτουργία
τους, υπάρχει η ανάγκη αποθήκευσης δεδομένων
για τους καθηγητές, τους μαθητές, τα τμήματα, τα
μαθήματα, τις απουσίες, τους βαθμούς των
μαθητών, κλπ. Τα στοιχεία των μαθητών
περιλαμβάνουν το ονοματεπώνυμο και το
πατρώνυμό τους.
19.
Αριθμητικοί τύποι δεδομένωντης SQL
Δύο βασικοί αριθμητικοί τύποι δεδομένων που
υποστηρίζονται από την SQL είναι οι ακέραιοι και
οι πραγματικοί αριθμοί.
Οι ακέραιοι αριθμοί δεν έχουν υποδιαστολή, ενώ οι
πραγματικοί έχουν. Η λέξη που χρησιμοποιεί η SQL
για τον ορισμό πεδίων ακέραιου τύπου είναι
INTEGER, ενώ για τον ορισμό πεδίων πραγματικού
τύπου είναι FLOAT.
20.
Αριθμητικοί τύποι δεδομένωντης SQL
Στο παράδειγμα των ταινιών κινηματογράφου
επομένως που αναφέρθηκε παραπάνω, το πεδίο
«Κόστος» είναι ακέραιου τύπου, δηλαδή τύπου
INTEGER.
Στο παράδειγμα με τα προϊόντα, το πεδίο
«Τιμή_προϊόντος» είναι πραγματικού τύπου,
δηλαδή τύπου FLOAT γιατί οι τιμές έχουν και
δεκαδικό μέρος.
21.
Αριθμητικοί τύποι δεδομένωντης SQL
Σε μια βάση δεδομένων Μαθητολογίου για την
αποθήκευση και διαχείριση των δεδομένων του
σχολείου, καταγράφεται η πληροφορία για τα
μαθήματα του προγράμματος σπουδών. Έτσι
δημιουργείται ο πίνακας «Μάθημα» που
αποτελείται από τις στήλες «Όνομα» και «Ώρες».
22.
Αριθμητικοί τύποι δεδομένωντης SQL
Στον πίνακα Μάθημα αποθηκεύονται οι
πληροφορίες για όλα τα μαθήματα που
παρακολουθούν οι μαθητές του σχολείου. Οι
εβδομαδιαίες ώρες διδασκαλίας των μαθημάτων
που αποθηκεύονται στη στήλη «Ώρες», είναι
ακέραιος αριθμός.
23.
Αλφαριθμητικοί τύποι δεδομένωντης
SQL
Οι αλφαριθμητικοί τύποι δεδομένων υποστηρίζουν
την αποθήκευση κειμένου, δηλαδή συμβολοσειρών
ή σειρών από χαρακτήρες, γι’ αυτό και συχνά
ονομάζονται τύποι ‘χαρακτήρων’.
Η λέξη που χρησιμοποιεί η SQL για τον ορισμό
πεδίων τύπου χαρακτήρα (αλφαριθμητικού) είναι
CHARACTER.
24.
Αλφαριθμητικοί τύποι δεδομένωντης
SQL
Η SQL δίνει τη δυνατότητα ορισμού του μεγέθους
μιας σειράς χαρακτήρων με την έκφραση
CHARACTER(N), όπου στη θέση του N
τοποθετείται ένας ακέραιος αριθμός που δηλώνει
το μέγεθος του πεδίου, δηλαδή περιορίζει τις τιμές
σε μέγεθος Ν.
Ο τύπος CHARACTER VARYING(N) ή VARCHAR(N)
χρησιμοποιείται για τη δημιουργία πεδίων τύπου
χαρακτήρων μεταβλητού μεγέθους N.
25.
Αλφαριθμητικοί τύποι δεδομένωντης
SQL
Στο παράδειγμα των μαθημάτων της
προηγούμενης παραγράφου, το πεδίο
«Όνομα_μαθήματος» είναι αλφαριθμητικού τύπου
και επειδή κάθε όνομα έχει διαφορετικό πλήθος
χαρακτήρων, το συγκεκριμένο πεδίο θα μπορούσε
να οριστεί ως τύπου VARCHAR(100) ώστε να
μπορέσει να αποθηκεύσει ονόματα μεταβλητού
μεγέθους και αρκετά μεγάλα ονόματα, μέχρι 100
χαρακτήρων.
26.
Αλφαριθμητικοί τύποι δεδομένωντης
SQL
Στο Μαθητολόγιο του σχολείου, ένα άλλο πεδίο
που αποθηκεύεται για τους μαθητές είναι το φύλο
τους. Το φύλο μπορεί να πάρει τις τιμές ‘Άρρεν’ και
‘Θήλυ’ ή σε συντομία ‘Α’ ή ‘Θ’. Σε αυτή την
περίπτωση το φύλο μπορεί να οριστεί ως τύπου
CHARACTER(1).
27.
Τύποι δεδομένων γιατην ημερομηνία
και την ώρα
Πεδία που αποθηκεύουν ημερομηνία ή ώρα
μπορούν να οριστούν ως τύπου DATE, TIME ή
TIMESTAMP.
Ο τύπος DATE μπορεί να αποθηκεύσει δεδομένα
που αποτελούνται από το έτος (YEAR) με τιμές από
0001 ως 9999, το μήνα (MONTH) και την ημέρα
(DAY)
28.
Τύποι δεδομένων γιατην ημερομηνία
και την ώρα
Ο τύπος TIME μπορεί να αποθηκεύσει τιμές που
αποτελούνται από την ώρα (HOUR), τα λεπτά
(MINUTE) και τα δευτερόλεπτα (SECOND).
Ο τύπος TIMESTAMP μπορεί να αποθηκεύσει τιμές
που αποτελούνται από το έτος, το μήνα, την ημέρα,
την ώρα, τα λεπτά και τα δευτερόλεπτα.
29.
Τύποι δεδομένων γιατην ημερομηνία
και την ώρα
Επομένως, τιμές όπως ‘24 06 2015’ μπορούν να
αποθηκευτούν σε πεδία τύπου DATE, τιμές όπως
‘15:02:34’ μπορούν να αποθηκευτούν σε πεδία
τύπου TIME, ενώ τιμές όπως ‘24 06 2015 15:02:34’.
Στο παράδειγμα του Μαθητολογίου, η ημερομηνία
γέννησης ενός μαθητή μπορεί να αποθηκευτεί σε
πεδίο τύπου DATE.
30.
CREATE TABLE
Μετάτην παρουσίαση βασικών τύπων δεδομένων
μπορούμε να δημιουργήσουμε πίνακες
χρησιμοποιώντας τη γλώσσα SQL.
Η εντολή της SQL που μας δίνει αυτή τη
δυνατότητα είναι η CREATE TABLE, η οποία
χρησιμοποιείται ως εξής:
31.
CREATE TABLE
Δηλαδή,ξεκινάμε δηλαδή με τη φράση CREATE
TABLE, ακολουθούμενη από έναν ή περισσότερους
κενούς χαρακτήρες και κατόπιν γράφουμε το
όνομα του πίνακα που θέλουμε να
δημιουργήσουμε.
Κατόπιν ανοίγουμε παρένθεση ‘(‘ και γράφουμε τα
ονόματα και τους τύπους δεδομένων των στηλών
του πίνακα.
32.
CREATE TABLE
Γιακάθε στήλη (πεδίο) του πίνακα καθορίζουμε το
όνομά της και μετά από ένα ή περισσότερα κενά
τον τύπο δεδομένων της στήλης.
Οι τύποι δεδομένων είναι αυτοί που
παρουσιάστηκαν στην προηγούμενη ενότητα.
Οι ορισμοί των στηλών μεταξύ τους διαχωρίζονται
με κόμμα ‘,’.
33.
CREATE TABLE
Ότανολοκληρωθεί ο ορισμός των στηλών
κλείνουμε την παρένθεση ‘)’.
Κενός χαρακτήρας πρέπει να υπάρχει ανάμεσα στο
όνομα και τον τύπο κάθε στήλης.
34.
CREATE TABLE
Ανεπιστρέψουμε στα παραδείγματά μας, για να
δημιουργήσουμε τον πίνακα Μάθημα, θα γράψουμε
την εξής εντολή:
CREATE TABLE Μάθημα ( Όνομα
VARCHAR(100), Ώρες INTEGER )
35.
CREATE TABLE
Οπίνακας Μάθημα αποτελείται από δύο πεδία:
Όνομα και Ώρες.
Ο τύπος του πεδίου "Όνομα" είναι συμβολοσειρά
μέχρι 100 χαρακτήρων (VARCHAR(100)), ενώ ο
τύπος του πεδίου "Ώρες" είναι ακέραιος αριθμός
(INTEGER).
Για να δημιουργήσουμε τον πίνακα Μαθητής
προσθέτοντας το πεδίο «Φύλο», θα γράψουμε την
εξής εντολή:
CREATE TABLE
Ταπεδία αλφαριθμητικού τύπου «Επώνυμο»,
«Όνομα» και «Πατρώνυμο» είναι τύπου χαρακτήρα
μεταβλητού μεγέθους με μήκος έως 50, δηλαδή
VARCHAR(50).
Το πεδίο «Ημερομηνία_Γέννησης» είναι τύπου
ημερομηνίας, δηλαδή DATE, ενώ το πεδίο «Φύλο»
είναι ένας χαρακτήρας (‘Α’ ή ‘Θ’).
38.
Προκαθορισμένες τιμές
Κατάτη δημιουργία πινάκων με την εντολή
CREATE TABLE μπορούν να καθοριστούν
προκαθορισμένες τιμές και περιορισμοί για τα
πεδία των πινάκων.
39.
Προκαθορισμένη τιμή πεδίων
Κατά την εισαγωγή δεδομένων σε έναν πίνακα,
είναι πιθανό κάποιες τιμές πεδίων να μην είναι
γνωστές, οπότε να μην εισάγονται. Σε αυτή την
περίπτωση, το πεδίο θα έχει την τιμή NULL, που
σημαίνει ότι δεν έχει εισαχθεί τιμή.
40.
CREATE TABLE
Γιαπαράδειγμα όταν γίνονται εγγραφές μαθητών
στο Μαθητολόγιο του σχολείου, μπορεί να μην
εισάγεται η ημερομηνία γέννησης του μαθητή μέχρι
εκείνος να προσκομίσει το πιστοποιητικό
γέννησης.
Σε αυτή την περίπτωση η ημερομηνία γέννησης
έχει την τιμή NULL μέχρι να γίνει εισαγωγή μιας
έγκυρης ημερομηνίας.
41.
Προκαθορισμένη τιμή (defaultvalue)
Προκαθορισμένη τιμή (default value) σε ένα πεδίο
σημαίνει ότι αν δεν καθοριστεί άλλη τιμή κατά την
εισαγωγή δεδομένων, χρησιμοποιείται μία τιμή που
έχει καθορίσει ο σχεδιαστής της Βάσης Δεδομένων.
42.
CREATE TABLE
Γιαπαράδειγμα, αν στο Μαθητολόγιο
καταχωρείται η πόλη καταγωγής των μαθητών
ενός σχολείου, το πεδίο αυτό θα μπορούσε να έχει
προκαθορισμένη τιμή συγκεκριμένη πόλη π.χ.
«Αθήνα» αν πρόκειται για σχολείο της Αθήνας και
αναμένεται οι περισσότεροι μαθητές να έχουν
καταγωγή από την Αθήνα.
43.
CREATE TABLE
Σεαυτή την περίπτωση η προκαθορισμένη τιμή
διευκολύνει την εισαγωγή δεδομένων εφόσον δεν
είναι απαραίτητο να εισάγεται με κάθε νέο μαθητή,
αλλά δημιουργείται αυτόματα από το σύστημα.
Στην γλώσσα SQL, οι προκαθορισμένες τιμές
περιγράφονται στην εντολή CREATE TABLE με την
σύνταξη DEFAULT <τιμή> δίπλα από την
περιγραφή της αντίστοιχης στήλης. Το παράδειγμα
δημιουργίας του πίνακα Μαθητής θα γινόταν
επομένως :
Περιορισμοί
Συχνά είναιαναγκαίο να επιβληθούν περιορισμοί
στα δεδομένα για να εξασφαλιστεί η ορθότητα και
η ακεραιότητά τους.
Οι περιορισμοί με τους οποίους θα ασχοληθούμε σε
αυτήν την υποενότητα είναι: περιορισμοί
υπαρξιακής ακεραιότητας, περιορισμοί κύριου
κλειδιού και περιορισμοί αναφορικής
ακεραιότητας.
46.
Περιορισμοί υπαρξιακής ακεραιότητας
Οι περιορισμοί αυτοί μπορεί να αφορούν στην
ύπαρξη ή μη τιμών σε κάποιο πεδίο πίνακα και
εκφράζονται σε γλώσσα SQL με τις φράσεις NULL
και NOT NULL.
Η λέξη «NULL» σημαίνει καμία τιμή και
χρησιμοποιείται για πεδία που είναι αποδεκτό να
μην έχουν τιμή, ενώ η φράση «NOT NULL»
χρησιμοποιείται για πεδία που δεν επιτρέπεται να
μην έχουν τιμή.
47.
CREATE TABLE
Στοπαράδειγμα του Μαθητολογίου, η καταχώρηση
μαθημάτων χωρίς τίτλους δεν είναι αποδεκτή,
οπότε η δημιουργία του πίνακα Μάθημα θα έπρεπε
να γραφτεί προσθέτοντας δίπλα στο πεδίο
«Όνομα» τη φράση NOT NULL, ως εξής:
CREATE TABLE
Παρόμοια,στον πίνακα Μαθητής, η καταχώρηση
μαθητών χωρίς το ονοματεπώνυμό τους δεν είναι
αποδεκτή, οπότε και στα δύο πεδία καθορίζεται ο
περιορισμός NOT NULL ώστε να αποφευχθεί η
εισαγωγή μαθητών χωρίς ονοματεπώνυμο.
50.
CREATE TABLE
CREATETABLE Μάθημα( Επώνυμο
VARCHAR(50) NOT NULL, Όνομα VARCHAR
(50) NOT NULL, Πατρώνυμο VARCHAR (50),
Ημερομηνία_Γέννησης DATE, Φύλο CHAR(1),
Πόλη VARCHAR(50) DEFAULT ‘Αθήνα’ )
51.
Περιορισμοί κύριου κλειδιού
Το κύριο κλειδί ενός σχεσιακού πίνακα είναι ένα
πεδίο ή συνδυασμός πεδίων που για κάθε γραμμή
του πίνακα έχει μοναδική τιμή. Ο περιορισμός του
κύριου κλειδιού μπορεί να καθοριστεί στην εντολή
CREATE TABLE με τη σύνταξη PRIMARY KEY
(<πεδίο ή πεδία>). Η φράση PRIMARY KEY (<πεδίο
ή πεδία>) προστίθεται μετά τον ορισμό των
στηλών του πίνακα στην εντολή CREATE TABLE.
52.
CREATE TABLE
Αςεπανέλθουμε στο παράδειγμα του
Μαθητολογίου και στον πίνακα Μάθημα που
δημιουργήθηκε προηγουμένως. Ένας ορθός
σχεδιασμός της βάσης δεδομένων επιβάλλει τον
καθορισμό κύριου κλειδιού σε όλους τους πίνακες
που θα δημιουργηθούν.
53.
CREATE TABLE
Άραστον πίνακα Μάθημα πρέπει να προστεθεί
κύριο κλειδί. Σε αυτή την περίπτωση επιλέγουμε
ως κύριο κλειδί το όνομα του μαθήματος, το οποίο
θεωρούμε ότι είναι μοναδικό, π.χ. «Φυσική Α’
Τάξης», «Μαθηματικά Γ’ Τάξης», κ.ο.κ.
54.
CREATE TABLE
Άραη δημιουργία του πίνακα Μάθημα θα
συμπληρωθεί ως εξής:
CREATE TABLE Μάθημα ( Όνομα
VARCHAR(100) NOT NULL, Ώρες INTEGER,
PRIMARY KEY (Όνομα) )
55.
CREATE TABLE
Στοπαράδειγμα του Μαθητολογίου, θέλουμε οι
μαθητές επίσης να διακρίνονται μεταξύ τους με
μοναδικό τρόπο. Αυτό εφαρμόζεται και στην πράξη
στο μητρώο μαθητών του σχολείου.
56.
CREATE TABLE
Κατάτην εγγραφή του στο βιβλίο του μητρώου
μαθητών, κάθε μαθητής αποκτά έναν μοναδικό
Αριθμό Μητρώου.
Στην Βάση Δεδομένων Μαθητολόγιο αυτό
υλοποιείται με την προσθήκη του πεδίου ΑΜ στον
πίνακα Μαθητής και τον καθορισμό του πεδίου ως
κύριου κλειδιού ως εξής:
57.
CREATE TABLE
CREATETABLE Μαθητής ( ΑΜ INT, Επώνυμο
VARCHAR(50) NOT NULL, Όνομα VARCHAR
(50) NOT NULL, Πατρώνυμο VARCHAR (50),
Ημερομηνία_Γέννησης DATE, Φύλο CHAR(1),
Πόλη VARCHAR(50) DEFAULT ‘Αθήνα’, PRIMARY
KEY (ΑΜ) )
58.
CREATE TABLE
Αυτόσημαίνει ότι στον πίνακα δε μπορούν να
εισαχθούν δύο μαθητές με τον ίδιο Αριθμό
Μητρώου.
Περιορισμοί αναφορικής ακεραιότητας
Οι περιορισμοί αναφορικής ακεραιότητας
καθορίζουν συσχετίσεις μεταξύ των πεδίων
διαφορετικών πινάκων, δηλαδή τα ξένα κλειδιά.
59.
CREATE TABLE
Οπεριορισμός ξένου κλειδιού στην γλώσσα SQL
καθορίζει ότι το πεδίο ενός πίνακα Β αναφέρεται
σε ένα πεδίο ενός άλλου πίνακα Α, επομένως οι
τιμές του πεδίου στον πίνακα Β πρέπει να
υπάρχουν στο αντίστοιχο πεδίο στον πίνακα Α.
Οι περιορισμοί αναφορικής ακεραιότητας
περιγράφονται στη γλώσσα SQL με την έκφραση
FOREIGN KEY (<πεδίο>) REFERENCES <πίνακας
αναφοράς> ( <πεδίο πίνακα αναφοράς>) .
60.
CREATE TABLE
Στοπαράδειγμά μας του Μαθητολογίου, οι μαθητές
του σχολείου εγγράφονται κάθε χρόνο που
φοιτούν σε συγκεκριμένη τάξη (Α, Β, ή Γ). Κάθε
μαθητής που θα φοιτήσει παραπάνω από ένα έτος
στο ίδιο σχολείο θα εγγραφεί τουλάχιστον μία
φορά σε κάθε τάξη που θα φοιτήσει.
Για να καταγραφεί αυτή η πληροφορία στη
σχεσιακή Βάση Δεδομένων, θα πρέπει να
δημιουργηθεί ένας νέος πίνακας ο οποίος να
επιτρέπει την εγγραφή μαθητών σε σχολικά έτη
και τάξεις.
61.
CREATE TABLE
Σεαυτόν τον πίνακα που μπορούμε να τον
ονομάσουμε ΕγγραφήΜαθητή, αυτό που πρέπει να
δημιουργηθεί είναι ένα πεδίο που να ταυτοποιεί
κάθε μαθητή.
Το πεδίο αυτό είναι ο αριθμός μητρώου (ΑΜ) του
μαθητή.
Ο ΑΜ μαθητή πρέπει να συνοδεύεται και από το
σχολικό έτος και την τάξη στην οποία εγγράφεται ο
μαθητής.
62.
CREATE TABLE
Τοπεδίο ΑΜ_Μαθητή αναφέρεται σε μαθητές που
είναι ήδη καταχωρημένοι στον πίνακα Μαθητής.
Για να εξασφαλιστεί αυτή η αναφορική
ακεραιότητα, το πεδίο ΑΜ_Μαθητή πρέπει να είναι
ξένο κλειδί που αναφέρεται στο πεδίο ΑΜ του
πίνακα Μαθητής.
63.
CREATE TABLE
Έναεπιπλέον σημείο που πρέπει να διευκρινιστεί
για τον συγκεκριμένο πίνακα, είναι το κύριο κλειδί
του, δηλαδή το πεδίο ή τα πεδία που πρέπει να
είναι μοναδικά για κάθε εγγραφή. Ας κάνουμε
μερικές παρατηρήσεις:
64.
CREATE TABLE
-Το πεδίο Σχολ_έτος δε μπορεί να είναι μοναδικό
γιατί σε κάθε σχολικό έτος εγγράφονται πολλοί
μαθητές στο σχολείο.
- Ο ΑΜ_Μαθητή δε μπορεί να είναι μοναδικός γιατί
κάθε μαθητή μπορεί να γίνουν πολλές εγγραφές
(στην Α’, τη Β’ και τη Γ’ τάξη)
65.
CREATE TABLE
Επομένωςτο κύριο κλειδί θα είναι συνδυασμός
κάποιων πεδίων. Συγκεκριμένα, θα είναι ο
συνδυασμός των πεδίων (ΑΜ_Μαθητή, Σχολ_έτος)
ώστε να εξασφαλίζεται ότι κάθε μαθητής θα
εγγράφεται μόνο μία φορά ανά σχολικό έτος σε
κάποια τάξη.
Άρα η δημιουργία του πίνακα μπορεί να γίνει με
την εξής εντολή SQL:
CREATE TABLE
Παρατηρούμεότι ο τύπος του πεδίο ΑΜ_Μαθητή
είναι ΙΝΤ, ίδιος με τον τύπο του πεδίου ΑΜ στον
πίνακα Μαθητής. Αυτή είναι απαραίτητη
προϋπόθεση για την δημιουργία του περιορισμού
ξένου κλειδιού (FOREIGN KEY) στον πίνακα
ΕγγραφήΜαθητή.
68.
CREATE TABLE
Στοίδιο παράδειγμα, ένας μαθητής παίρνει γραπτό
βαθμό στα μαθήματα της τάξης που ένας μαθητής
παίρνει έναν γραπτό βαθμό στα μαθήματα της
τάξης που παρακολουθεί για κάθε σχολικό έτος
που φοιτά στο σχολείο.
Άρα υπάρχει συσχέτιση ανάμεσα στον μαθητή και
τα μαθήματα για την καταχώρηση της γραπτής
βαθμολογίας.
69.
CREATE TABLE
Ησυσχέτιση αυτή πρέπει να υλοποιηθεί στη
σχεσιακή Βάση Δεδομένων με ένα νέο πίνακα ο
οποίος θα συσχετίζει τον Αριθμό Μητρώου του
μαθητή με το μάθημα στο οποίο καταχωρείται η
βαθμολογία του, συμπληρωμένο με το σχολικό
έτος.
70.
CREATE TABLE
Σεαυτόν τον πίνακα, το κύριο κλειδί, δηλαδή το
πεδίο που πρέπει να είναι μοναδικό για κάθε
εγγραφή στον πίνακα είναι ο συνδυασμός των
πεδίων Αριθμός Μητρώου Μαθητή, Σχολικό Έτος
και Όνομα Μαθήματος, έτσι ώστε:
71.
CREATE TABLE
-να είναι δυνατό να εισαχθούν βαθμοί για όλα τα
(διαφορετικά) μαθήματα κάποιου μαθητή, να μην
είναι δυνατόν να εισαχθεί παραπάνω από ένας
βαθμός ανά μαθητή, μάθημα και σχολικό έτος,
72.
CREATE TABLE
-να είναι δυνατόν να εισαχθούν οι βαθμοί όλων
των μαθητών σε κάθε μάθημα που
παρακολουθούν,
- να είναι δυνατόν να εισαχθούν βαθμοί κάποιου
μαθητή στο ίδιο μάθημα για διαφορετικά σχολικά
έτη σε περίπτωση επανάληψης της ίδιας τάξης
(κάτι που δεν είναι επιθυμητό φυσικά αλλά πρέπει
να προβλεφθεί στο ΣΔΒΔ).
CREATE TABLE
Παρατηρούμεότι ο τύπος του πεδίο ΑΜ_Μαθητή
είναι ΙΝΤ, ίδιος με τον τύπο του πεδίου ΑΜ στον
πίνακα Μαθητής και ο τύπος του πεδίου
Όνομα_Μαθήματος είναι VARCHAR(100), ίδιος με
τον τύπο του πεδίου Όνομα στον πίνακα Μάθημα.
76.
SQL DML
SQLΣχεσιακή Γλώσσα Χειρισμού Δεδομένων
(DML)
Μία Γλώσσα Χειρισμού Δεδομένων (Data
Manipulation Language DML) χρησιμοποιείται
από τους σχεδιαστές προγραμματιστές και από
τους διαχειριστές Βάσεων Δεδομένων για τον
χειρισμό των δεδομένων, δηλαδή για να εισαχθούν,
να ενημερωθούν, να διαγραφούν και να
ανακτηθούν τα δεδομένα της βάσης.
77.
SQL DML
Τασχεσιακά ΣΔΒΔ χρησιμοποιούν κατά κανόνα τη
γλώσσα SQL για τον χειρισμό των δεδομένων. Η
γλώσσα SQL DML επιτρέπει την περιγραφή
εντολών εισαγωγής, ενημέρωσης, διαγραφής και
ανάκτησης των δεδομένων των πινάκων.
78.
Εισαγωγή Δεδομένων μεSQL
Η εισαγωγή δεδομένων σε πίνακα σχεσιακής
Βάσης Δεδομένων πραγματοποιείται με την εντολή
INSERT INTO της SQL. Η σύνταξη της εντολής
INSERT INTO στη γενική της μορφή είναι:
INSERT INTO <όνομα πίνακα> VALUES (τιμή_1,
τιμή_2, τιμή_3, ...)
79.
Εισαγωγή Δεδομένων μεSQL
Με την παραπάνω εντολή εισάγεται μια νέα
γραμμή στον πίνακα που καθορίζεται στην εντολή.
Οι τιμές που εισάγονται στα πεδία του πίνακα
καθορίζονται μέσα στην παρένθεση χωριζόμενες με
κόμμα. Οι τιμές αυτές αντιστοιχίζονται σε όλα τα
πεδία του πίνακα και με τη σειρά που αυτά έχουν
καθοριστεί κατά την δημιουργία του πίνακα.
80.
Εισαγωγή Δεδομένων μεSQL
Εισαγωγή εγγραφών καθορίζοντας τιμές για όλα
τα πεδία του πίνακα
Για την εισαγωγή των στοιχείων του μαθητή
Πηλείδη Αχιλλέα στον πίνακα Μαθητής, γράφουμε
σε SQL την παρακάτω εντολή:
INSERT INTO Μαθητής VALUES (863, ‘Πηλείδης’,
‘Αχιλλέας’, ‘Πηλέας’, ‘1999 06 24’, ‘Α’, ‘Αθήνα’)
81.
Εισαγωγή Δεδομένων μεSQL
Στο παράδειγμα αυτό θυμίζουμε ότι στην εντολή
CREATE TABLE του πίνακα Μαθητής
καθορίστηκαν τα πεδία με τη σειρά: ΑΜ, Επώνυμο,
Όνομα, Πατρώνυμο, Ημερομηνία_γέννησης, Φύλο,
Πόλη.
Παρατηρούμε ότι η τιμή της ημερομηνίας εισάγεται
με τη μορφή 'έτος μήνας ημέρα'.
Απλά παραδείγματα SQL
SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα=’Γιώργος’
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή είναι ‘Γιώργος’
84.
Απλά παραδείγματα SQL
SELECT Όνομα, Ώρες FROM Μάθημα WHERE
Ώρες >=4
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα και Ώρες από τον πίνακα Μάθημα, όταν οι
ώρες του μαθήματος είναι μεγαλύτερες ή ίσες με 4
85.
Απλά παραδείγματα SQL
SELECT Όνομα, Ώρες FROM Μάθημα WHERE
Ώρες <>4
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα και Ώρες από τον πίνακα Μάθημα, όταν οι
ώρες του μαθήματος είναι διαφορετικές από 4
86.
Απλά παραδείγματα SQL
SELECT Όνομα, Ώρες FROM Μάθημα WHERE
Ώρες BETWEEN 4 AND 5
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα και Ώρες από τον πίνακα Μάθημα, όταν οι
ώρες του μαθήματος είναι μεταξύ 4 και 5 ωρών,
δηλαδή μεγαλύτερες ή ίσες με 4 και μικρότερες ή
ίσες με
87.
Απλά παραδείγματα SQL
SELECT Όνομα, Ώρες FROM Μάθημα WHERE
Ώρες IN (4, 5)
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα και Ώρες από τον πίνακα Μάθημα, όταν οι
ώρες του μαθήματος είναι 4 ή 5, δηλαδή
ικανοποιούν τις τιμές που περιλαμβάνονται στην
παρένθεση
88.
Απλά παραδείγματα SQL
SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα LIKE “Μ%”
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή αρχίζει από “M”
89.
Απλά παραδείγματα SQL
SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα LIKE “Μ “
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή αρχίζει από “M” και
περιλαμβάνει 5 χαρακτήρες
90.
Απλά παραδείγματα SQL
SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Ημερομηνία_Γέννησης IS NULL
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
η Ημερομηνία_Γέννησης δεν είναι συμπληρωμένη
91.
Απλά παραδείγματα SQL
SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα NOT LIKE “Μ%”
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή δεν αρχίζει από “M”
92.
Απλά παραδείγματα SQL
SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Ημερομηνία_Γέννησης IS NOT NULL
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
η Ημερομηνία_Γέννησης είναι συμπληρωμένη
Σημείωση: Ποτέ δεν γίνετε σύγκριση με Null. Πάντα
χρησιμοποιούμε τις φράσεις is Null ή is not Null.
93.
Απλά παραδείγματα SQL
SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα LIKE “Μ%” AND Πόλη=’Χανιά’
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή αρχίζει από “M” και είναι από
τα Χανιά.
94.
Απλά παραδείγματα SQL
SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα LIKE “Μ%” AND Πόλη=’Χανιά’ OR
Πόλη=’Ρέθυμνο’
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή αρχίζει από “M” και είναι από
τα Χανιά ή το Ρέθυμνο ανεξαρτήτως Ονόματος
μαθητή
95.
Απλά παραδείγματα SQL
SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα LIKE “Μ%” AND (Πόλη=’Χανιά’
OR Πόλη=’Ρέθυμνο’)
Ή
SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα LIKE “Μ%” OR Πόλη=’Χανιά’ AND
Πόλη=’Ρέθυμνο’
96.
Απλά παραδείγματα SQL
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή αρχίζει από “M” και είναι από
τα Χανιά ή το Ρέθυμνο
Σημείωση: Ισχύει και στις λογικές πράξεις η
προτεραιότητα των πράξεων (Not, And, Or)
97.
Δεδομένα από περισσότερουςαπό ένα
πίνακα
Η φράση FROM
Οι εγγραφές ενός πίνακα μπορούν να συνδυαστούν
με τις εγγραφές ενός άλλου πίνακα, εφόσον
υπάρχουν κοινά πεδία στους δύο πίνακες.
Ο συνδυασμός γίνεται βάσει των τιμών του κοινού
πεδίου. Στη φράση from ορίζονται οι πίνακες.
98.
Δεδομένα από περισσότερουςαπό ένα
πίνακα
Για να μπορέσουμε να εμφανίζουμε τις
πληροφορίες των πινάκων, στη φράση where θα
πρέπει να συνδέσουμε τα κοινά πεδία.
Η αναφορά μας σε ένα πεδίο ενός πίνακα γίνεται με
το συμβολισμό: <όνομα-πίνακα>.<όνομα- πεδίου>
99.
Δεδομένα από περισσότερουςαπό ένα
πίνακα
Η πρόταση from αντιστοιχεί στην πράξη του
καρτεσιανού γινομένου της σχεσιακής άλγεβρας.
Δίνει τη λίστα των σχέσεων που πρέπει να
σαρωθούν κατά την αξιολόγηση της έκφρασης.
100.
Δεδομένα από περισσότερουςαπό ένα
πίνακα
Όταν το ίδιο γνώρισμα εμφανίζεται στο σχήμα
περισσότερων από μια σχέσεων, τότε γίνεται
διάκριση βάση του συμβολισμού: <όνομα -
σχέσης>.<όνομα -γνωρίσματος>
101.
ΠΑΡΑΔΕΙΓΜΑΤΑ
SELECT Επώνυμο,Όνομα, Τάξη FROM Μαθητής,
ΕγγραφήΜαθητή WHERE Μαθητής.ΑΜ=
ΕγγραφήΜαθητή.ΑΜ_Μαθητή
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα και την Τάξη από τους πίνακες
Μαθητής και ΕγγραφήΜαθητή, για όλους τους
μαθητές. Στο αποτέλεσμα, εμφανίζονται όλοι οι
δυνατοί συνδυασμοί των δύο πινάκων που έχουν
κοινό πεδίο τον ΑΜ
102.
ΠΑΡΑΔΕΙΓΜΑΤΑ
SELECT Επώνυμο,Όνομα, Τάξη FROM Μαθητής,
ΕγγραφήΜαθητή WHERE Μαθητής.ΑΜ=
ΕγγραφήΜαθητή.ΑΜ_Μαθητή AND
Σχολ_έτος=’2013 2014’
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα και την Τάξη από τους πίνακες
Μαθητής και ΕγγραφήΜαθητή, για τους μαθητές
στο σχολικό έτος 2013 2014. Στο αποτέλεσμα,
περιορίζονται οι συνδυασμοί των δύο πινάκων στο
σχολικό έτος 2013 -2014
103.
Υποερωτήματα
Τα υποερωτήματαείναι ερωτήματα που
περιέχονται στη φράση WHERE άλλων
ερωτημάτων. Τα αποτελέσματα των
υποερωτημάτων δεν εμφανίζονται αλλά απλά
δρουν βοηθητικά, ώστε να συνδεθούν τα στοιχεία
των πινάκων.
104.
Υποερωτήματα
SELECT Επώνυμο,Όνομα FROM Μαθητής,
ΕγγραφήΜαθητή WHERE Μαθητής.ΑΜ=
ΕγγραφήΜαθητή.ΑΜ_Μαθητή AND ΑΜ IN
(SELECT ΑΜ FROM ΕγγραφήΜαθητή
WHERE Σχολ_έτος=’2013 -2014’)
105.
Υποερωτήματα
Παρατηρούμε ότιέχουμε το ίδιο αποτέλεσμα με το
προηγούμενο ερώτημα, δηλαδή επέλεξε και
εμφάνισε τις πληροφορίες για το Επώνυμο, Όνομα
και την Τάξη από τους πίνακες Μαθητής και
ΕγγραφήΜαθητή, για τους μαθητές στο σχολικό
έτος 2013 -2014. Στο αποτέλεσμα, περιορίζονται οι
συνδυασμοί των δύο πινάκων στο σχολικό έτος
2013- 2014)
106.
Ταξινόμηση Αποτελεσμάτων
Διάταξητων εγγραφών – ORDER BY
Στην SQL χρησιμοποιείται η φράση order by ώστε
οι εγγραφές στο αποτέλεσμα να είναι
ταξινομημένες (π.χ. με αλφαβητική σειρά) με βάση
το αντίστοιχο πεδίο.
107.
Ταξινόμηση Αποτελεσμάτων
SELECTΕπώνυμο, Όνομα FROM Μαθητής ORDER
BY Επώνυμο
Δηλαδή επέλεξε και εμφάνισε ταξινομημένες σε
αύξουσα σειρά, βάση του Επωνύμου τις πληροφορίες
για το Επώνυμο, Όνομα από τον πίνακα Μαθητής
Η προεπιλογή είναι η αύξουσα διάταξη, αλλά μπορούμε
να επιλέξουμε διάταξη χρησιμοποιώντας το asc
(αύξουσα) ή το desc (φθίνουσα).
Επίσης, μπορούμε να κάνουμε ταξινόμηση
χρησιμοποιώντας πολλά πεδία.
108.
Ταξινόμηση Αποτελεσμάτων
SELECTΕπώνυμο, Όνομα FROM Μαθητής
ORDER BY Επώνυμο DESC, Όνομα ASC
Δηλαδή επέλεξε και εμφάνισε ταξινομημένες σε
φθίνουσα σειρά, βάση του Επωνύμου και στη
συνέχεια στις εγγραφές με κοινό Επώνυμο σε
αύξουσα βάση του Ονόματος, τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής.
Ταξινόμηση Αποτελεσμάτων
SELECTΕπώνυμο, Όνομα, Τάξη FROM Μαθητής,
ΕγγραφήΜαθητή WHERE Μαθητής.ΑΜ=
ΕγγραφήΜαθητή.ΑΜ_Μαθητή ORDER BY Τάξη
Δηλαδή επέλεξε και εμφάνισε ταξινομημένες σε
αύξουσα σειρά τις πληροφορίες για το Επώνυμο,
Όνομα και την Τάξη από τους πίνακες Μαθητής και
ΕγγραφήΜαθητή, για όλους τους μαθητές. Στο
αποτέλεσμα, εμφανίζονται όλοι οι δυνατοί
συνδυασμοί των δύο πινάκων που έχουν κοινό
πεδίο τον ΑΜ, ταξινομημένοι ανά τάξη.
111.
Ταξινόμηση Αποτελεσμάτων
Σημείωση:
Η ταξινόμηση μπορεί να γίνει και με πεδία που δεν
εμφανίζονται στο Select, ενώ δεν επιτρέπεται η
ταξινόμηση με βάση τις πράξεις μεταξύ πεδίων.
112.
Συναρτήσεις Συνάθροισης και
Ομαδοποίησης
Η SQL έχει 5 ενσωματωμένες συναθροιστικές
συναρτήσεις.
Οι ακόλουθες συναρτήσεις εφαρμόζονται στο
σύνολο των τιμών μιας στήλης ενός πίνακα, και
επιστρέφουν μία τιμή:
Αυτές επιδρούν σε ομάδα εγγραφών (γραμμών)
του πίνακα και είναι:
ΠΑΡΑΔΕΙΓΜΑΤΑ:
SELECT Όνομα_Μαθήματος,AVG(Βαθμός) FROM
ΓραπτόςΒαθμόςΜαθητή WHERE
Όνομα_Μαθήματος=’Συστήματα Διαχείρισης
Βάσεων Δεδομένων (ΣΔΒΔ) και Εφαρμογές στο
Διαδίκτυο’
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα_Μαθήματος και το Μέσο Όρο του βαθμού
από τον πίνακα ΓραπτόςΒαθμόςΜαθητή, για το
μάθημα Συστήματα Διαχείρισης Βάσεων
Δεδομένων (ΣΔΒΔ) και Εφαρμογές στο Διαδίκτυο
120.
ΠΑΡΑΔΕΙΓΜΑΤΑ:
SELECT Όνομα_Μαθήματος,MIN(Βαθμός) FROM
ΓραπτόςΒαθμόςΜαθητή WHERE
Όνομα_Μαθήματος=’Συστήματα Διαχείρισης
Βάσεων Δεδομένων (ΣΔΒΔ) και Εφαρμογές στο
Διαδίκτυο
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα_Μαθήματος και το Μικρότερο βαθμό από
τον πίνακα Γραπτός Βαθμός Μαθητή, για την για το
μάθημα Συστήματα Διαχείρισης Βάσεων
Δεδομένων (ΣΔΒΔ) και Εφαρμογές στο Διαδίκτυο
121.
ΠΑΡΑΔΕΙΓΜΑΤΑ:
SELECT Όνομα_Μαθήματος,COUNT(*) FROM
ΓραπτόςΒαθμόςΜαθητή WHERE
Όνομα_Μαθήματος=’Συστήματα Διαχείρισης
Βάσεων Δεδομένων (ΣΔΒΔ) και Εφαρμογές στο
Διαδίκτυο’ AND Βαθμός<10
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα_Μαθήματος και το Πλήθος των μαθητών
από τον πίνακα ΓραπτόςΒαθμόςΜαθητή, για το
μάθημα Συστήματα Διαχείρισης Βάσεων
Δεδομένων (ΣΔΒΔ) και Εφαρμογές στο Διαδίκτυο
που ο βαθμός τους είναι μικρότερος από 10
122.
Η φράση GROUPBY
Μπορούμε να εφαρμόσουμε τις συναρτήσεις όχι
μόνο σε ένα σύνολο από εγγραφές, αλλά σε ομάδες
από σύνολα εγγραφών.
Οι ομάδες προσδιορίζονται χρησιμοποιώντας το
group by και οι εγγραφές μιας ομάδας περιέχουν
την ίδια τιμή σε κάποιο δεδομένο πεδίο.
Η φράση αυτή μπαίνει ΠΑΝΤΑ στο τέλος του
ερωτήματος.
123.
Η φράση GROUPBY
SELECT Τάξη, COUNT(*) FROM
ΕγγραφήΜαθητή GROUP BY Τάξη
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Τάξη και το Πλήθος των μαθητών, ανά τάξη από
τον πίνακα ΕγγραφήΜαθητή
124.
Η φράση GROUPBY
SELECT Τάξη, COUNT(*) FROM
ΕγγραφήΜαθητή WHERE Σχολ_έτος=’2014 -2015’
GROUP BY Τάξη
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Τάξη και το Πλήθος των μαθητών, ανά τάξη από
τον πίνακα ΕγγραφήΜαθητή, για το Σχολικό έτος
είναι 2014 -2015
125.
Η φράση GROUPBY
SELECT Τάξη, COUNT(*) FROM
ΕγγραφήΜαθητή WHERE Τάξη<>’Α’ AND
Σχολ_έτος=’2014-2015’ GROUP BY Τάξη
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Τάξη και το Πλήθος των μαθητών, ανά τάξη, εκτός
της Α, για το Σχολικό έτος είναι 2014 -2015, από
τον πίνακα ΕγγραφήΜαθητή. Η φράση where,
αποκλείει ομάδες.
126.
Η Φράση HAVING
Μπορούμε να εφαρμόσουμε μια συνθήκη σε μια
συγκεκριμένη ομάδα από εγγραφές
χρησιμοποιώντας το having. Η συνθήκη στην
φράση having εφαρμόζεται αφού σχηματιστούν οι
ομάδες (group by) και υπολογιστούν οι
συναθροιστικές συναρτήσεις.
127.
Η Φράση HAVING
SELECT Όνομα_Μαθήματος, AVG(Βαθμός) FROM
ΓραπτόςΒαθμόςΜαθητή GROUP BY
Όνομα_Μαθήματος HAVING AVG(Βαθμός)>15
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα_Μαθήματος και το μέσο όρο του βαθμού,
ανά μάθημα από τον πίνακα
ΓραπτόςΒαθμόςΜαθητή για τα μαθήματα που ο
βαθμός τους είναι μεγαλύτερος από 15
128.
Η Φράση HAVING
SELECT Τάξη, Σχολ_έτος, AVG(Βαθμός) FROM
ΓραπτόςΒαθμόςΜαθητή, ΕγγραφήΜαθητή
WHERE
ΓραπτόςΒαθμόςΜαθητή.ΑΜ=ΕγγραφήΜαθητή.ΑΜ
GROUP BY Τάξη, Σχολ_έτος HAVING
AVG(Βαθμός)>15
Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Τάξη, Σχολικό έτος και το μέσο όρο του βαθμού,
ανά τάξη και Σχολικό έτος, από τους πίνακες
ΓραπτόςΒαθμόςΜαθητή, ΕγγραφήΜαθητή για τα
μαθήματα που ο βαθμός τους είναι μεγαλύτερος
από 15
129.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
INTEGER :
Ακέραιος αριθμός (χωρίς υποδιαστολή)
130.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
BIGINT :
Ακέραιος αριθμός με ακρίβεια19 ψηφία.
131.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
INTEGER(p) :
Ακέραιος αριθμός με ακρίβεια p ψηφία.
132.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
SMALLINT:
Ακέραιος αριθμός με ακρίβεια 5 ψηφία.
133.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
BINARY(n):
Σταθερού μήκους δυαδική συμβολοσειρά,
μέγιστου μήκους n.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
DECIMAL(p, s) :
Δεκαδικός αριθμός ακρίβειας p κλίμακας s. Η
κλίμακα s δε μπορεί να υπερβαίνει την ακρίβεια p.
Η ακρίβεια καθορίζει το πλήθος των ψηφίων
αριστερά της υποδιαστολής, ενώ η κλίμακα το
πλήθος των ψηφίων δεξιά της υποδιαστολής.
138.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
NUMERIC(p, s) :
Το ίδιο με το DECIMAL.
139.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
FLOAT(p) :
Προσεγγιστικός αριθμός με συντελεστή (mantissa)
ακρίβειας p. Κινητής υποδιαστολής αριθμός σε
εκθετική μορφή με βάση το 10.
140.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
REAL :
Προσεγγιστικός αριθμός με συντελεστή (mantissa)
ακρίβειας 7.
141.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
DOUBLE PRECISION :
Προσεγγιστικός αριθμός με συντελεστή (mantissa)
ακρίβειας 16.
142.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
CHARACTER(N) :
Σειρά χαρακτήρων (συμβόλων) σταθερού μήκους
N. Το μήκος N αναφέρεται στο μέγιστος μήκος της
τιμής. Οι τιμές για πεδία αυτού του τύπου πρέπει
να γράφονται μέσα σε μονά εισαγωγικά ‘ ‘, π.χ.
‘Γιώργος’.
143.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
CHARACTER N. VARYING(N), VARCHAR(N):
Συμβολοσειρά χαρακτήρων μεταβλητού μεγέθους,
μέγιστου
144.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
DATE, TIMESTAMP, TIME:
Τύποι που αποτελούνται από έναν αριθμό
ακέραιων πεδίων που παριστάνουν, μια απόλυτη
χρονική στιγμή, ανάλογα με τον επιμέρους τύπο.
145.
Οι Τύποι Δεδομένωντης Γλώσσας SQL
INTERVAL:
Τύπος που αποτελείται από έναν αριθμό ακέραιων
πεδίων που παριστάνουν μια χρονική περίοδο,
ανάλογα με τον τύπο του διαστήματος.
146.
COLLECTION (ARRAYMULTISET)
Ο πίνακας ARRAY (προστέθηκε στο πρότυπο
SQL99) είναι μια, διατεταγμένη συλλογή
στοιχείων. Ο τύπος MULTISET (προστέθηκε στο
πρότυπο SQL2003) είναι μεταβλητού μήκους και
μη διατεταγμένη συλλογή στοιχείων. Τα στοιχεία
και των δύο τύπων πρέπει να ανήκουν σε έναν από
τους προκαθορισμένους τύπους της SQL.
147.
XML
Τύποςδεδομένων που αποθηκεύει δεδομένα
μορφής XML.
148.
Εισαγωγή στην SQL
Η SQL αποτελείται από εντολές με τα ορίσματά
τους, τις οποίες μπορούμε να χρησιμοποιήσουμε με
συγκεκριμένους κανόνες σύνταξης για να πάρουμε
τα αποτελέσματα που θέλουμε.
149.
Εισαγωγή στην SQL
Με την SQL μπορούμε να δημιουργήσουμε μια
βάση δεδομένων και τους πίνακές της με τα
αντίστοιχα πεδία, να καταχωρήσουμε δεδομένα
στους πίνακες, να τροποποιήσουμε και να
διαγράψουμε τα δεδομένα αυτά, να αλλάξουμε τη
δομή των πινάκων με προσθήκη και διαγραφή
πεδίων και να εμφανίσουμε πληροφορίες
(συνδυασμούς από δεδομένα).
150.
Η SQL έχειδύο τμήματα : 1ο:
Τη Γλώσσα Ορισμού Δεδομένων (DDL, Data
Definition Language), η οποία περιέχει τις
απαραίτητες εντολές για τον ορισμό και την
τροποποίηση του σχεσιακού σχήματος καθώς και
για τη δημιουργία, την τροποποίηση και τη
διαγραφή σχέσεων.
151.
Η SQL έχειδύο τμήματα : 2ο:
Τη Γλώσσα Χειρισμού Δεδομένων (DML, Data
Manipulation Language), η οποία περιέχει τις
απαραίτητες εντολές για την εμφάνιση
(αναζήτηση) δεδομένων καθώς και για την
καταχώρηση, τροποποίηση και διαγραφή των
εγγραφών (πλειάδων) μιας σχέσης.
152.
Εισαγωγή στην SQL
Η SQL υποστηρίζει τους εξής τύπους δεδομένων
για τα πεδία μιας σχέσης :
153.
Τύποι δεδομένων τηςSQL
char(n), ένα αλφαριθμητικό (string) με n ακριβώς
χαρακτήρες.
varchar(n), ένα αλφαριθμητικό (string) με
μεταβλητό μήκος και με n το πολύ χαρακτήρες.
int, ακέραιος αριθμός.
154.
Τύποι δεδομένων τηςSQL
smallint, ακέραιος αριθμός με μικρές τιμές.
Numeric(p, d), αριθμός με p ψηφία, από τα οποία
τα d είναι δεκαδικά.
real, αριθμός κινητής υποδιαστολής απλής
ακρίβειας.
double precision, αριθμός κινητής υποδιαστολής
διπλής ακρίβειας.
155.
Τύποι δεδομένων τηςSQL
float(n), αριθμός κινητής υποδιαστολής με ακρίβεια
n ψηφίων.
date, ημερομηνία (ημέρα, μήνας, έτος).
time, ώρα (ώρα, λεπτά, δευτερόλεπτα).
156.
Δημιουργία, Τροποποίηση και
ΔιαγραφήΣχέσεων
Για να δημιουργήσουμε μια σχέση (πίνακα) χρησιμοποιούμε
την εντολή create table.
Για παράδειγμα, για να δημιουργήσουμε τη σχέση Αθλητής
δίνουμε την εξής εντολή :
Create table ΑΘΛΗΤΗΣ
(Κωδικός_Αθλητή integer not null,
Επώνυμο char(20) not null,
Όνομα char(15),
Ρεκόρ numeric(4, 2),
Ημνία_Γέννησης date,
Κωδικός_Συλλόγου integer not null,
primary key (Κωδικός_Αθλητή),
check(Κωδικός_Αθλητή >= 100));
157.
Δημιουργία, Τροποποίηση και
ΔιαγραφήΣχέσεων
Μετά την εντολή create table γράφουμε το όνομα
της σχέσης (πίνακα) και ακολουθεί μια παρένθεση
που περιέχει τα ονόματα των πεδίων με τους
τύπους δεδομένων τους. Η δήλωση not null
σημαίνει ότι το συγκεκριμένο πεδίο θα πρέπει να
έχει οπωσδήποτε κάποια τιμή.
158.
Δημιουργία, Τροποποίηση και
ΔιαγραφήΣχέσεων
Με τον όρο check μπορούμε να δηλώσουμε μια
συνθήκη για την περιοχή των τιμών ενός πεδίου.
Είδαμε τη χρήση του όρου check για να ελέγξει αν η
τιμή ενός κωδικού είναι μεγαλύτερη ή ίση από 100.
159.
Δημιουργία, Τροποποίηση και
ΔιαγραφήΣχέσεων
Μπορούμε να χρησιμοποιήσουμε τον όρο check και
για να ελέγξουμε αν η τιμή ενός πεδίου ανήκει σ’
ένα προκαθορισμένο σύνολο τιμών, ως εξής :
check (Νομός in (‘Γρεβενών’, ‘Καστοριάς’, ‘Κοζάνης’,
‘Φλώρινας’))
160.
Δημιουργία, Τροποποίηση και
ΔιαγραφήΣχέσεων
Εδώ ελέγχουμε το αν η τιμή του πεδίου Νομός θα
ανήκει σε μία από τέσσερις συγκεκριμένες τιμές.
Για να τροποποιήσουμε μια σχέση και να
προσθέσουμε ένα πεδίο, δίνουμε την εντολή alter
table και το όρισμα add, ως εξής :
Alter table ΑΘΛΗΤΗΣ add (Τηλέφωνο char(10));
161.
Δημιουργία, Τροποποίηση και
ΔιαγραφήΣχέσεων
Τα καινούργια πεδία που προστίθενται σε έναν
πίνακα, έχουν αρχικά τιμές ίσες με null. Για να
τροποποιήσουμε έναν πίνακα και να διαγράψουμε
ένα πεδίο, δίνουμε την εντολή alter table και το
όρισμα drop, ως εξής :
Alter table ΑΘΛΗΤΗΣ drop Τηλέφωνο;
162.
Δημιουργία, Τροποποίηση και
ΔιαγραφήΣχέσεων
Για να διαγράψουμε τελείως μια σχέση από τη
βάση δεδομένων στην οποία ανήκει, μαζί με τις
τιμές των εγγραφών της, δίνουμε την εντολή drop
table, ως εξής :
Drop table ΑΘΛΗΤΗΣ;
163.
Δημιουργία, Τροποποίηση και
ΔιαγραφήΣχέσεων
Υπάρχει και η εντολή delete from ΑΘΛΗΤΗΣ, με την
οποία μπορούμε να διαγράψουμε τις τιμές
(περιεχόμενα, εγγραφές) ενός πίνακα, αλλά όχι την
ίδιο τον πίνακα.
164.
Πίνακες Βάσεων Δεδομένων
Οι βάσεις δεδομένων (databases) περιέχουν
αντικείμενα (objects) που ονομάζονται Πίνακες
(Tables). Οι Εγγραφές (Records) των δεδομένων
αποθηκεύονται σ’ αυτούς τους πίνακες. Οι Πίνακες
αναγνωρίζονται με τα ονόματά τους, όπως
"Persons", "Orders", "Suppliers" κ.ά.
165.
Πίνακες Βάσεων Δεδομένων
Οι Πίνακες περιέχουν Στήλες (Columns) και
Γραμμές (Rows) με δε-δομένα. Οι Γραμμές (Rows)
περιέχουν εγγραφές (records), όπως μία εγγραφή
για κάθε άτομο. Οι Στήλες (Columns) περιέχουν
δεδομένα, όπως First Name, Last Name, Address
και City.
166.
Ερωτήματα της SQL
Με την SQL, μπορούμε να κάνουμε ένα ερώτημα
(Query) σε μια βάση δεδομένων και να έχουμε ένα
αποτέλεσμα (Result) σε μορφή πίνακα (tabu-lar
form).
167.
Ερωτήματα της SQL
Εναερώτημα σαν το εξής :
SELECT LastName FROM Persons
θα δώσει ένα αποτέλεσμα σαν το εξής :
LastName
Παπαδόπουλος
Αντωνιάδης
Γεωργιάδης
168.
Ερωτήματα της SQL
Πρέπει να έχουμε υπόψη μας ότι μερικά συστήματα
βάσεων δεδομένων απαιτούν το σύμβολο ;
(semicolon) στο τέλος μιας εντολής SQL. Δεν θα
χρησιμοποιήσουμε εδώ το σύμβολο ;.
169.
Χειρισμός Δεδομένων τηςSQL
Όπως υπονοεί και το όνομά της, η SQL είναι μια
σύνταξη για την εκτέλεση ερωτημάτων (queries).
Αλλά η γλώσσα της SQL περιλαμβάνει επίσης μια
σύνταξη για την ενημέρωση εγγραφών, την
εισαγωγή νέων εγγραφών και τη διαγραφή
υπαρχόντων εγγραφών.
170.
Εντολές ερωτημάτων καιενημέρωσης
Αυτές οι εντολές ερωτημάτων και ενημέρωσης
αποτελούν μαζί τη Γλώσσα Χειρισμού Δεδομένων
(Data Manipulation Language, DML) που αποτελεί
κομμάτι της SQL:
171.
Εντολές ερωτημάτων καιενημέρωσης
SELECT
εξάγει δεδομένα από μια βάση δεδομένων.
UPDATE
ενημερώνει δεδομένα σε μια βάση δεδομένων.
172.
Εντολές ερωτημάτων καιενημέρωσης
DELETE
διαγράφει δεδομένα από μια βάση δεδομένων.
INSERT
εισάγει νέα δεδομένα σε μια βάση δεδομένων.
173.
Ορισμός Δεδομένων τηςSQL
Η Γλώσσα Ορισμού Δεδομένων (Data Definition
Language, DDL), που αποτελεί μέρος της SQL,
επιτρέπει τη δημιουργία και τη διαγραφή πινάκων
μιας βάσης δεδομένων. Μπορούμε επίσης να
ορίσουμε indexes (keys), να καθορίσουμε
συνδέσμους (links) ανάμεσα στους πίνακες και να
επιβάλλουμε περιορισμούς ανάμεσα στους πίνακες
μιας βάσης δεδομένων.
174.
Η Εντολή Select
Θα δούμε τώρα τις εντολές της Γλώσσας Χειρισμού
Δεδομένων DML (Data Manipulation Language). Η
βασικότερη είναι η εντολή Select, που
χρησιμοποιείται για την εμφάνιση (ανάκληση)
δεδομένων από τη βάση δεδομένων.
175.
Η Εντολή Select
Η γενική σύνταξη της εντολής Select για την
αναζήτηση δεδομένων σε μια βάση δεδομένων
είναι η εξής :
Select Πεδίο1, Πεδίο2, … Πεδίοn
From Πίνακας1, Πίνακας2, …, Πίνακαςm
Where συνθήκη;
176.
Η Εντολή Select
Τα πεδία που δηλώνουμε στην εντολή Select είναι
αυτά που θα εμφανίζονται στο αποτέλεσμα. Είναι
αντίστοιχο με την πράξη της προβολής (projection)
της σχεσιακής άλγεβρας.
177.
Η Εντολή Select
Αν θέλουμε να εμφανίζονται όλα τα πεδία θα
πρέπει να χρησιμοποιήσουμε τον χαρακτήρα *. Ο
όρος From δηλώνει τις σχέσεις (πίνακες) στους
οποίους θα γίνει η αναζήτηση. Είναι αντίστοιχο με
την πράξη του καρτεσιανού γινομένου της
σχεσιακής άλγεβρας.
178.
Η Εντολή Select
Ο όρος Where είναι προαιρετικός και περιέχει τη
συνθήκη που θέλουμε να ικανοποιούν οι εγγραφές
(πλειάδες) του αποτελέσματος. Είναι αντίστοιχο με
την πράξη της επιλογής (selection) της σχεσιακής
άλγεβρας.
179.
Η Εντολή Select
Η επόμενη εντολή Select εμφανίζει μόνο τα πεδία
Επώνυμο και Όνομα αθλητή καθώς και τον Κωδικό
του Συλλόγου στον οποίο ανήκει ο κάθε αθλητής
και αυτό γι’ όλους ανεξαιρέτως τους αθλητές που
υπάρχουν στον πίνακα ΑΘΛΗΤΗΣ :
Select Επώνυμο, Όνομα, Κωδικός_Συλλόγου
From ΑΘΛΗΤΗΣ;
180.
Η Εντολή Select
Επειδή υπάρχει η περίπτωση, ακραία μεν αλλά
εφικτή, να υπάρχουν δύο ή και περισσότερες
εγγραφές με ίδια τα παραπάνω στοιχεία (πεδία)
ενός αθλητή, μπορούμε να χρησιμοποιήσουμε και
τον όρο distinct, ώστε να μην εμφανίζονται οι
όμοιες εγγραφές, ως εξής :
Select distinct Επώνυμο, Όνομα,
Κωδικός_Συλλόγου
From ΑΘΛΗΤΗΣ;
181.
Η Εντολή Select
Αν θέλουμε να δούμε όλα τα στοιχεία (πεδία) των
αθλητών, θα πρέπει να χρησιμοποιήσουμε το
σύμβολο *, ως εξής :
Select *
From ΑΘΛΗΤΗΣ;
182.
Η Εντολή Select
Η επόμενη εντολή Select εμφανίζει εκείνους τους
αθλητές που έχουν ατομικό ρεκόρ μεγαλύτερο από
μια συγκεκριμένη τιμή :
Select Επώνυμο, Όνομα, Κωδικός_Συλλόγου, Ρεκόρ
From ΑΘΛΗΤΗΣ
Where Ρεκόρ > 10.05;
183.
Η Εντολή Select
Η επόμενη εντολή Select εμφανίζει με τη χρήση της
διάζευξης (λογικό ή – or) εκείνους τους αθλητές
που ανήκουν σ’ έναν από δύο συλλόγους :
Select Επώνυμο, Όνομα, Κωδικός_Συλλόγου, Ρεκόρ
From ΑΘΛΗΤΗΣ
Where Κωδικός_Συλλόγου = 1 or
Κωδικός_Συλλόγου = 2;
184.
Η Εντολή Select
Η επόμενη εντολή Select εμφανίζει με τη χρήση της
σύζευξης (λογικό και – and) εκείνους τους αθλητές
που έχουν ατομικό ρεκόρ σε μια περιοχή τιμών :
Select Επώνυμο, Όνομα, Κωδικός_Συλλόγου, Ρεκόρ
From ΑΘΛΗΤΗΣ
Where Ρεκόρ > 10.00 and Ρεκόρ < 10.08;
185.
Η Εντολή Select
Θα δούμε τώρα πώς μπορεί να γίνει η ανάκληση
δεδομένων από πεδία που περιέχονται σε
περισσότερες από μία σχέσεις. Η αναφορά σε
πολλές σχέσεις αντιστοιχεί στην πράξη της
σύνδεσης (join) της σχεσιακής άλγεβρας.
186.
Η Εντολή Select
Για παράδειγμα, για τη συσχέτιση των σχέσεων
ΑΘΛΗΤΗΣ και ΣΥΜΜΕΤΟΧΗ χρησιμοποιήσαμε το
κοινό πεδίο Κωδικός_Αθλητή, το οποίο είναι
πρωτεύον κλειδί στη σχέση ΑΘΛΗΤΗΣ και ξένο
κλειδί στη σχέση ΣΥΜΜΕΤΟΧΗ.
187.
Η Εντολή Select
Για να βρούμε τώρα ποιοι αθλητές συμμετείχαν σε
ποιους αγώνες, δίνουμε την εξής εντολή:
Select Κωδικός_Αθλητή, Επώνυμο, Όνομα,
Κωδικός_Αγώνα
From ΑΘΛΗΤΗΣ, ΣΥΜΜΕΤΟΧΗ
Where ΑΘΛΗΤΗΣ.Κωδικός_Αθλητή =
ΣΥΜΜΕΤΟΧΗ. Κωδικός_Αθλητή;
188.
Η Εντολή Select
Είδαμε στο προηγούμενο παράδειγμα τη χρήση του
όρου where με την απαραίτητη συνθήκη για τη
δημιουργία της σύνδεσης των δύο σχέσεων
(πινάκων). Μπορούμε να ορίσουμε και μια πιο
πολύπλοκη συνθήκη για να βρούμε τους αθλητές
που συμμετείχαν σε κάποιον συγκεκριμένο αγώνα:
189.
Η Εντολή Select
Select Κωδικός_Αθλητή, Επώνυμο, Όνομα,
Κωδικός_Αγώνα
From ΑΘΛΗΤΗΣ, ΣΥΜΜΕΤΟΧΗ
Where (ΑΘΛΗΤΗΣ.Κωδικός_Αθλητή =
ΣΥΜΜΕΤΟΧΗ. Κωδικός_Αθλητή) and
Κωδικός_Αγώνα=100;8.
190.
Το Where Clauseτης SQL
Το WHERE clause χρησιμοποιείται για να
καθορίσουμε ένα κριτήριο επιλογής (selection
criteria). Για να μπορέσουμε να επιλέξουμε
δεδομένα υπό συνθήκη από έναν πίνακα, πρέπει να
προσθέσουμε ένα WHERE clause σε μια εντολή
SELECT, ως εξής :
191.
Το Where Clauseτης SQL
SELECT στήλη FROM πίνακα WHERE στήλη
συνθήκη τιμή
Με το WHERE clause, μπορούμε να
χρησιμοποιήσουμε αυτές τις συνθήκες:
192.
Το Where Clauseτης SQL
= Ίσο
<> Όχι ίσο
> Μεγαλύτερο από
< Μικρότερο από
>= Μεγαλύτερο από ή ίσο με
<= Μικρότερο από ή ίσο με
LIKE Επεξηγείται παρακάτω
193.
Το Where Clauseτης SQL
Σε μερικές εκδόσεις της SQL, ο τελεστής για το όχι
ίσο (<>), μπορεί να γραφεί ως εξής : !=.
Παράδειγμα : Επιλογή Ατόμων από μια Πόλη
194.
Το Where Clauseτης SQL
Για να επιλέξουμε μόνο τα άτομα που κατοικούν
στην πόλη Φλώρινα, προσθέτουμε ένα WHERE
clause στην εντολή SELECT, ως εξής :
SELECT * FROM Persons WHERE City='Φλώρινα'
195.
Το Where Clauseτης SQL
Έχουμε χρησιμοποιήσει μονά εισαγωγικά (single
quotes) στις τιμές των συνθηκών στα
παραδείγματα.
196.
Το Where Clauseτης SQL
Η SQL χρησιμοποιεί μονά εισαγωγικά στις
αλφαριθμητικές τιμές (κείμενο). Τα περισσότερα
συστήματα βάσεων δεδομένων αποδέχονται και τα
διπλά εισαγωγικά (double quotes). Οι αριθμητικές
τιμές δεν πρέπει να περικλείονται σε εισαγωγικά.
197.
Το Where Clauseτης SQL
Για τις τιμές κειμένου (αλφαριθμητικές) :
Αυτό είναι σωστό :
SELECT * FROM Persons WHERE
FirstName='Δημήτριος'
Αυτό δεν είναι σωστό :
SELECT * FROM Persons WHERE
FirstName=Δημήτριος
198.
Το Where Clauseτης SQL
Για τις αριθμητικές τιμές :
Αυτό είναι σωστό :
SELECT * FROM Persons WHERE Year>1965
Αυτό δεν είναι σωστό :
SELECT * FROM Persons WHERE Year>'1965'
199.
Η Συνθήκη LIKE
Η συνθήκη LIKE χρησιμοποιείται για να
καθορίσουμε μια αναζήτηση για ένα υπόδειγμα
(pattern) σε μια στήλη. Η σύνταξη είναι ως εξής :
SELECT στήλη FROM πίνακα WHERE στήλη LIKE
υπόδειγμα
200.
Η Συνθήκη LIKE
Μπορούμε να χρησιμοποιήσουμε το σύμβολο "%"
για να ορίσουμε χαρακτήρες μπαλαντέρ
(wildcards) πριν και μετά από το υπόδειγμα.
Παράδειγμα : Επιλογή Ατόμων με Υπόδειγμα
Ονόματος
201.
Η Συνθήκη LIKE
Η επόμενη εντολή SQL θα επιστρέψει τα άτομα που
το όνομά τους αρχίζει από 'O’.
SELECT * FROM Persons WHERE FirstName LIKE
'O%'
202.
Η Συνθήκη LIKE
Η επόμενη εντολή SQL θα επιστρέψει τα άτομα που
το όνομά τους τελειώνει σε 'α’.
SELECT * FROM Persons WHERE FirstName LIKE
'%α'
203.
Η Συνθήκη LIKE
Η επόμενη εντολή SQL θα επιστρέψει τα άτομα που
το όνομά τους περιέχει το 'γα’.
SELECT * FROM Persons WHERE FirstName LIKE
'%γα%'
204.
Η Λέξη ΚλειδίDistinct
Η λέξη κλειδί DISTINCT χρησιμοποιείται για να
επιστρέφει μόνο διακριτές (διαφορετικές)
(distinct, different) τιμές. Η εντολή SELECT της SQL
επιστρέφει στοιχεία από τις στήλες ενός πίνακα,
αλλά τι μπορούμε να κάνουμε αν θέλουμε να
επιλέξουμε μόνο διακριτά στοιχεία (distinct eleme-
nts);
205.
Η Λέξη ΚλειδίDistinct
Στην SQL, αυτό που πρέπει να κάνουμε είναι να
προσθέσουμε μια λέξη κλειδί DISTINCT στην
εντολή SELECT, ως εξής :
SELECT DISTINCT ονόματα_στηλών FROM
όνομα_πίνακα
206.
Η Λέξη ΚλειδίDistinct
Παράδειγμα
Επιλογή εταιρειών από έναν πίνακα παραγγελιών.
Ενας απλός πίνακας παραγγελιών :
Company OrderNumber
Line Computers 3412
Sony 2312
Algorithm 4678
Sony 6798
207.
Η Λέξη ΚλειδίDistinct
Η επόμενη εντολή SQL :
SELECT Company FROM Orders
θα δώσει αυτό το αποτέλεσμα :
Company
Line Computers
Sony
Algorithm
Sony
208.
Η Λέξη ΚλειδίDistinct
Βλέπουμε ότι η εταιρεία Sony εμφανίζεται δύο
φορές στο αποτέλεσμα. Μερικές φορές δεν το
θέλουμε αυτό.
Παράδειγμα
Επιλογή ξεχωριστών εταιρειών από έναν πίνακα
παραγγελιών.
209.
Η Λέξη ΚλειδίDistinct
Η επόμενη εντολή SQL :
SELECT DISTINCT Company FROM Orders
θα δώσει αυτό το αποτέλεσμα :
Company
Line Computers
Sony
Algorithm
Τώρα η εταιρεία Sony εμφανίζεται μόνο μία φορά
στο αποτέλεσμα.
210.
Η Λέξη ΚλειδίOrder By
Η λέξη κλειδί ORDER BY χρησιμοποιείται για να
ταξινομήσει το αποτέλεσμα. Το ORDER BY clause
χρησιμοποιείται για να ταξινομήσει τις γραμμές.
Πίνακας Παραγγελίες :
Company OrderNumber
Digital Shop 3412
ABC Shop 5678
Sony 2312
Sony 6798
211.
Η Λέξη ΚλειδίOrder By
Παράδειγμα
Για να εμφανίσουμε τις εταιρείες σε αλφαβητική σειρά :
SELECT Company, OrderNumber FROM Orders
ORDER BY Company
Αποτέλεσμα :
Company OrderNumber
ABC Shop 5678
Digital Shop 3412
Sony 6798
Sony 2312
212.
Η Εντολή INSERTINTO
Η εντολή INSERT INTO εισάγει νέες γραμμές σ’ έναν
πίνακα. Η σύνταξή της είναι ως εξής :
INSERT INTO όνομα_πίνακα
VALUES (τιμή1, τιμή2, ...)
213.
Η Εντολή INSERTINTO
Μπορούμε επίσης να καθορίσουμε τις στήλες για
τις οποίες θέλουμε να εισάγουμε δεδομένα :
INSERT INTO όνομα_πίνακα(στήλη1, στήλη2, ...)
VALUES (τμή1, τιμή2, ...)
214.
Η Εντολή INSERTINTO
Ο επόμενος πίνακας "Persons" :
LastNameFirstName Address City
Σουμπάση Μαρία Καλλέργη 15Φλώρινα
215.
Η Εντολή INSERTINTO
και αυτή η εντολή SQL :
INSERT INTO Persons
VALUES ('Σιάμκουρης', 'Ιωάννης', 'Π. Μελά 90',
'Καστοριά')
δίνουν αυτό το αποτέλεσμα :
LastNameFirstName Address City
Σουμπάση Μαρία Καλλέργη 15Φλώρινα
Σιάμκουρης Ιωάννης Π. Μελά 90
Καστοριά
216.
Η Εντολή Update
Η εντολή UPDATE ενημερώνει ή αλλάζει γραμμές. Η
σύνταξή της είναι ως εξής :
UPDATE όνομα_πίνακα SET
όνομα_στήλης=νέα_τιμή
WHERE όνομα_στήλης=τιμή
217.
Η Εντολή Update
Αρχικός πίνακας Person :
LastName FirstName Address City
Σουμπάση Μαρία Καλλέργη 15Φλώρινα
Σιάμκουρης Ιωάννης Π. Μελά 90 Καστοριά
Νικολάου Ταγμ. Ναούμ 30
218.
Η Εντολή Update
Ενημέρωση μίας Στήλης σε μια Γραμμή
Θέλουμε να προσθέσουμε ένα όνομα στο άτομο
που έχει το επώνυμο "Νικολάου" :
UPDATE Person SET FirstName = 'Αθηνά'
WHERE LastName = 'Νικολάου'
219.
Η Εντολή Update
Ενημέρωση Πολλών Στηλών σε μια Γραμμή
Για το ίδιο άτομο θέλουμε να αλλάξουμε τη
διεύθυνση και να προσθέσουμε ένα όνομα για την
πόλη:
UPDATE Person
SET Address = 'Μεγαρόβου 12', City ='Φλώρινα'
WHERE LastName = 'Νικολάου'
220.
Η Εντολή Update
Αποτέλεσμα :
LastName FirstName Address City
Σουμπάση Μαρία Καλλέργη 15Φλώρινα
Σιάμκουρης Ιωάννης Π. Μελά 90 Καστοριά
Νικολάου Αθηνά Μεγαρ 12 Φλώρινα
221.
Η Εντολή Delete
Η εντολή DELETE χρησιμοποιείται για να
διαγράψουμε γραμμές από έναν πίνακα. Η σύνταξή
της είναι ως εξής :
DELETE FROM όνομα_πίνακα
WHERE όνομα_στήλης = τιμή
222.
Η Εντολή Delete
Αρχικός πίνακας Person :
LastName FirstName Address City
Σουμπάση Μαρία Καλλέργη 15Φλώρινα
Σιάμκουρης Ιωάννης Π. Μελά 90 Καστοριά
Νικολάου Αθηνά Μεγαρ 12 Φλώρινα
223.
Η Εντολή Delete
Διαγραφή μιας Γραμμής
Θα διαγράψουμε την "Νικολάου Αθηνά" :
DELETE FROM Person WHERE LastName =
'Νικολάου'
224.
Η Εντολή Delete
Αποτέλεσμα :
LastName FirstName Address City
Σουμπάση Μαρία Καλλέργη 15Φλώρινα
Σιάμκουρης Ιωάννης Π. Μελά 90 Καστοριά
225.
Οι Λέξεις ΚλειδιάCOUNT και DISTINCT
Οι λέξεις κλειδιά DISTINCT και COUNT μπορούν να
χρησιμοποιηθούν μαζί για να μετρήσουμε τον
αριθμό των διακριτών αποτελεσμάτων (di-stinct
results).
226.
Οι Λέξεις ΚλειδιάCOUNT και DISTINCT
Η σύνταξη είναι ως εξής :
SELECT DISTINCT COUNT(στήλες) FROM
πίνακας
Με τον επόμενο πίνακα "Orders" :
Company OrderNumber
Hitachi 3412
Sony 2312
ABC 4678
Sony 6798
227.
Οι Λέξεις ΚλειδιάCOUNT και DISTINCT
Η επόμενη εντολή SQL :
SELECT COUNT(Company) FROM Orders
θα δώσει αυτό το αποτέλεσμα : 4
228.
Οι Λέξεις ΚλειδιάCOUNT και DISTINCT
Η επόμενη εντολή SQL :
SELECT DISTINCT COUNT(Company) FROM Orders
θα δώσει αυτό το αποτέλεσμα : 3
229.
Η Λέξη ΚλειδίGroup By
Η λέξη κλειδί GROUP BY έχει προστεθεί στην SQL
επειδή οι αθροιστικές συναρτήσεις (aggregate
functions), όπως είναι η SUM, επιστρέφουν το
σύνολο όλων των τιμών μιας στήλης κάθε φορά
που καλούνται.
230.
Η Λέξη ΚλειδίGroup By
καλούνται. Χωρίς την λέξη κλειδί GROUP BY, το να
βρούμε το άθροισμα για κά-θε ανεξάρτητη ομάδα
τιμών μιας στήλης θα ήταν αδύνατο. Η σύνταξη της
GROUP BY είναι η εξής :
SELECT στήλη, SUM(στήλη) FROM πίνακας GROUP
BY στήλη
231.
Η Λέξη ΚλειδίGroup By
Παράδειγμα με GROUP BY
Ο παρακάτω πίνακας "Sales" :
Company Amount
Grundig 5500
IBM 4500
Grundig 7100
232.
Η Λέξη ΚλειδίGroup By
και αυτή η εντολή SQL :
SELECT Company, SUM(Amount) FROM Sales
θα δώσουν αυτό το αποτέλεσμα :
Company SUM(Amount)
Grundig 17100
IBM 17100
Grundig 17100
233.
Η Λέξη ΚλειδίGroup By
Ο παραπάνω κώδικας δεν είναι έγκυρος επειδή η
στήλη που επιστρέφει δεν αποτελεί μέρος ενός
αθροίσματος (aggregate). Ένα GROUP BY clause
μπορεί να το διορθώσει αυτό, ως εξής :
SELECT Company, SUM(Amount) FROM Sales
GROUP BY Companyν και θα δώσει αυτό το
αποτέλεσμα :
Company SUM(Amount)
Grundig 12600
IBM 4500
234.
Η Λέξη ΚλειδίHAVING
Η λέξη κλειδί HAVING έχει προστεθεί στην SQL
επειδή η λέξη κλειδί WHERE δεν μπορεί να
χρησιμοποιηθεί σε αθροιστικές συναρτήσεις, όπως
είναι η SUM.
235.
Η Λέξη ΚλειδίHAVING
Η σύνταξη της συνάρτησης HAVING είναι η εξής :
SELECT στήλη, SUM(στήλη) FROM πίνακας
GROUP BY στήλη
HAVING SUM(στήλη) συνθήκη
236.
Η Λέξη ΚλειδίHAVING
Ο παρακάτω πίνακας "Sales" :
Company Amount
Grundig 5500
IBM 4500
Grundig 7100
237.
Η Λέξη ΚλειδίHAVING
και αυτή η εντολή SQL :
SELECT Company, SUM(Amount) FROM Sales
GROUP BY Company HAVING
SUM(Amount)>10000
θα δώσουν αυτό το αποτέλεσμα :
Company SUM(Amount)
Grundig 12600
238.
Τα Ψευδώνυμα (Aliases)
Στην SQL, τα ψευδώνυμα (aliases)
χρησιμοποιούνται για ονόματα στηλών και
πινάκων.
Ψευδώνυμο Στήλης (Column Name Alias)
Η σύνταξη είναι ως εξής :
SELECT στήλη AS column_alias FROM πίνακας
Ψευδώνυμο Πίνακα (Table Name Alias)
239.
Τα Ψευδώνυμα (Aliases)
Η σύνταξη είναι ως εξής :
SELECT στήλη FROM πίνακας AS table_alias
Παράδειγμα με Column Alias
Ο επόμενος πίνακας Persons :
LastName FirstName Address City
Σουμπάση Μαρία Καλλέργη 15Φλώρινα
Σιάμκουρης Ιωάννης Π. Μελά 90 Καστοριά
Νικολάου Αθηνά Μεγαρ 12 Φλώρινα
240.
Τα Ψευδώνυμα (Aliases)
και η εξής εντολή SQL :
SELECT LastName AS Family, FirstName AS
Name
FROM Persons
δίνουν αυτό το αποτέλεσμα :
Family Name
Σουμπάση Μαρία
Σιάμκουρης Ιωάννης
Νικολάου Αθηνά
241.
Δημιουργία Βάσης Δεδομένωνκαι
Πίνακα
Για να δημιουργήσουμε μια βάση δεδομένων,
μπορούμε να δώσουμε την εξής εντολή :
CREATE DATABASE όνομα_βάσης_δεδομένων
242.
Δημιουργία Βάσης Δεδομένωνκαι
Πίνακα
Για να δημιουργήσουμε έναν πίνακα σε μια βάση
δεδομένων, μπορούμε να δώσουμε την εξής εντολή:
CREATE TABLE όνομα_πίνακα
(
όνομα_στήλης_1 τύπος_δεδομένων,
όνομα_στήλης_2 τύπος_δεδομένων,
…
)
243.
Δημιουργία Βάσης Δεδομένωνκαι
Πίνακα
Παράδειγμα
Θα δημιουργήσουμε έναν πίνακα με όνομα "Person", με
τέσσερις στήλες με ονόματα "LastName", "FirstName",
"Address" και "Age" :
CREATE TABLE Person
(
LastName varchar,
FirstName varchar,
Address varchar,
Age number
)
244.
Δημιουργία Βάσης Δεδομένωνκαι
Πίνακα
Θα ορίσουμε ένα μέγιστο μήκος για μερικές στήλες
:
CREATE TABLE Person
(
LastName varchar(30),
FirstName varchar,
Address varchar,
Age number(3)
)
245.
Δημιουργία Βάσης Δεδομένωνκαι
Πίνακα
Ο τύπος δεδομένων (data type) καθορίζει τι είδος
δεδομένων θα περιέχει η στήλη. Ο παρακάτω
πίνακας περιέχει τους πιο συνηθισμένους τύπους
δεδομένων της SQL :
246.
Δημιουργία Βάσης Δεδομένωνκαι
Πίνακα
char(size)
Περιέχει ένα string σταθερού μήκους που μπορεί
να περιέχει γράμματα, αριθμούς και ειδικούς
χαρακτήρες. Το σταθερό μέγεθος καθορίζεται στις
παρενθέσεις.
247.
Δημιουργία Βάσης Δεδομένωνκαι
Πίνακα
varchar(size)
Περιέχει ένα string μεταβλητού μήκους που μπορεί
να περιέχει γράμματα, αριθμούς και ειδικούς
χαρακτήρες. Το μέγιστο μέγεθος καθορίζεται στις
παρενθέσεις.
248.
Δημιουργία Βάσης Δεδομένωνκαι
Πίνακα
number(size)
Περιέχει έναν αριθμό, όπου ο μέγιστος αριθμός των
ψηφίων καθορίζεται στις παρενθέσεις.
249.
Δημιουργία Βάσης Δεδομένωνκαι
Πίνακα
number(size, d)
Περιέχει έναν αριθμό, όπου ο μέγιστος αριθμός των
ψηφίων καθορίζεται στο size και ο μέγιστος
αριθμός των ψηφίων στα δεξιά της υποδιαστολής
καθορίζεται στο d.
Διαγραφή Βάσης Δεδομένωνκαι Πίνακα
Για να διαγράψουμε μια βάση δεδομένων,
χρησιμοποιούμε την εξής εντολή:
DROP DATABASE όνομα_βάσης_δεδομένων
252.
Διαγραφή Βάσης Δεδομένωνκαι Πίνακα
Για να διαγράψουμε έναν πίνακα, χρησιμοποιούμε
την εξής εντολή :
DROP TABLE όνομα_πίνακα
Για να διαγράψουμε τα δεδομένα ενός πίνακα
χωρίς να διαγράψουμε τον πίνακα, χρησιμοποιούμε
την εξής εντολή :
DELETE TABLE όνομα_πίνακα
253.
Η Εντολή AlterTable
Η εντολή ALTER TABLE χρησιμοποιείται για να
προσθέσουμε ή να διαγράψουμε στήλες από έναν
υπάρχοντα πίνακα.
254.
Η Εντολή AlterTable
Η σύνταξή της για τις δύο αυτές περιπτώσεις είναι
ως εξής :
ALTER TABLE όνομα_πίνακα ADD όνομα_στήλης
τύπος_δεδομένων
ALTER TABLE όνομα_πίνακα DROP όνομα_στήλης
255.
Η Εντολή AlterTable
Πίνακας Person :
LastNameFirstName Address
Σταύρου Μαρίνα Σαρανταπόρου 10
256.
Η Εντολή AlterTable
Παράδειγμα
Για να προσθέσουμε μια στήλη με όνομα "City"
στον πίνακα "Person", δίνουμε την εξής εντολή:
ALTER TABLE Person ADD City varchar(30)
257.
Η Εντολή AlterTable
Αποτέλεσμα :
LastName FirstName Address City
Σταύρου Μαρίνα Σαρανταπόρου 10
258.
Η Εντολή AlterTable
Παράδειγμα
Για να διαγράψουμε (drop) τη στήλη "Address"
του πίνακα "Person", δίνουμε την εξής εντολή:
ALTER TABLE Person DROP Address
Αποτέλεσμα :
LastNameFirstName City
Σταύρου Μαρίνα
259.
ALTER FUNCTION
Τροποποιείτην δομή μιας συνάρτησης που
ορίζεται από τον χρήστη. Η πρόταση ALTER
FUNCTION χρησιμοποιείται συνήθως για να
καταργήσει μια δέσμευση σχήματος. Ολες οι
επιλογές της πρότασης ALTER FUNCTION
αντιστοιχούν στις επιλογές με το ίδιο όνομα στην
πρόταση CREATE FUNCTION.
260.
DROP FUNCTION
Καταργείταιμια συνάρτηση που ορίζεται από τον
χρήστη Μόνο ο ιδιοκτήτης της συνάρτησης (ή τα
μέλη των σταθερών ρόλων βάσης δεδομένων
db_owner και sysadmin) μπορούν να καταργήσουν
την συνάρτηση
261.
Triggers
Μία σκανδάληή αλλιώς ένας ερεθισμός είναι ένας
μηχανισμός που καλείται όταν συμβαίνει μια
συγκεκριμένη ενέργεια σε ένα συγκεκριμένο
πίνακα και εκτελεί δέσμες εντολών που αφορούν
το συγκεκριμένο πίνακα ή άλλους πίνακες.
262.
Triggers
Κάθε ερεθισμόςέχει τρία γενικά μέρη:
Ένα όνομα - Μια ενέργεια - Την εκτέλεση
Η ενέργεια ενός ερεθισμού μπορεί να είναι μια
πρόταση INSERT, UPDATE ή DELETE.
To τμήμα εκτέλεσης μιας σκανδάλης περιέχει
συνήθως μια αποθηκευμένη διαδικασία ή μια
δέσμη εντολών.
263.
Triggers
Μία σκανδάληδημιουργείται χρησιμοποιώντας την
πρόταση CREATE TRIGGER, που έχει την
παρακάτω μορφή:
CREATE TRIGGER trigger name ON tablename
| viewname
{FOR | AFTER | INSTEAD OF} { [INSERT] [,]
[UPDATE] [,] [DELETE]}
[WITH ENCRYPTION] AS {batch | IF
UPDATE(column) [{AND|OR} UPDATE(column)]
batch}
264.
Triggers
trigger_name είναιτο όνομα του ερεθισμού.
table_name είναι το όνομα του πίνακα για τον
οποίο καθορίζεται ο ερεθισμός. Στον SQL Server
2000, μπορείτε επίσης να ορίσετε ερεθισμούς για
όψεις/views.
ON tablename | viewname μια σκανδάλη μπορεί να
εφαρμόζεται μόνο σε ένα πίνακα ή όψη.
265.
Triggers
AFTER καιINSTEAD OF είναι δύο πρόσθετες
επιλογές, που μπορείτε να ορίσετε σε μια
σκανδάλη.
FOR είναι συνώνυμη της AFTER. Η AFTER ξεκινά
την εκτέλεση της δέσμης εντολών μετά την
εκκίνηση της σκανδάλης.
INSTEAD OF εκτελούνται αντί του αντίστοιχου
συμβάντος INSERT, UPDATE ή DELETE της
σκανδάλης.
266.
Triggers
Οι σκανδάλεςAFTER μπορούν να εκτελεστούν
μόνο σε πίνακες, ενώ αυτές που περιέχουν την
επιλογή INSTEAD OF μπορούν να δημιουργηθούν
και σε πίνακες και σε όψεις.
267.
Triggers
Οι επιλογέςINSERT, UPDATE και DELETE
καθορίζουν την ενέργεια της σκανδάλης δηλ τις
εντολές SQL που θα εκτελεστούν μετά την
ενεργοποίηση της σκανδάλης. Οι προτάσεις αυτές
μπορούν να υπάρχουν ξεχωριστά η κάθε μια ή και
συνδυασμός τους.
268.
Triggers
IF UPDATEχρησιμοποιείται σαν μια πρόσθετη
συνθήκη σε περίπτωση εισαγωγής ή ενημέρωσης
σε μια συγκεκριμένη στήλη ή στήλες του πίνακα.
269.
Triggers
Στην πρότασηCREATE TRIGGER μπορούν να
υπάρχουν περισσότερες από μια φράσεις IF
UPDATE, και συνδυάζονται χρησιμοποιώντας τις
λογικές συνθήκες AND και OR και είναι ισοδύναμη
με τον ορισμό ενός περιορισμού επιπέδου στήλης.
270.
Triggers
Επιτρέπει ηδημιουργία πολλαπλών σκανδάλων σε
κάθε πίνακα. Μετά την δημιουργία της βάσης
δεδομένων, μόνο ο ιδιοκτήτης της βάσης
δεδομένων, ο διαχειριστής της γλώσσας ορισμού
δεδομένων και ο ιδιοκτήτης του πίνακα στον οποίο
έχει οριστεί ο ερεθισμός έχουν την εξουσιοδότηση
να δημιουργήσουν μια σκανδάλη στην τρέχουσα
βάση δεδομένων.
271.
Triggers
Σε κάθεεκτέλεση μιας σκανδάλης δημιουργούνται
δύο εικονικοί πίνακες με ειδικά ονόματα. Ο πίνακας
deleted και ο πίνακας inserted.
Η δομή αυτών των πινάκων είναι ισοδύναμη με την
δομή του πίνακα στον οποίο αναφέρεται η
σκανδάλη. Ο πίνακας deleted περιέχει αντίγραφα
από τις γραμμές που διαγράφονται από τον
πίνακα που έχει εφαρμοσθεί η σκανδάλη.
272.
Triggers
Το ίδιοισχύει και για τον πίνακα inserted όπου
δημιουργούνται αντίγραφα των γραμμών που
εισάγονται στον πίνακα που έχει εφαρμοσθεί η
σκανδάλη. Αν στην σκανδάλη υπάρχει μια εντολή
UPDATE, τότε στον πίνακα deleted μπαίνουν τα
δεδομένα πριν από την τροποποίηση και στον
πίνακα inserted μπαίνουν δεδομένα μετά την
τροποποίηση.
273.
Triggers
Ο πίνακαςdeleted χρησιμοποιείται αν υπάρχει η
εντολή DELETE ή UPDATE μέσα στην CREATE
TRIGGER. Ο πίνακας inserted χρησιμοποιείται
υπάρχει η εντολή INSERT ή UPDATE μέσα στην
CREATE TRIGGER.
274.
Triggers
Παράδειγμα
Δημιουργήστεέναν πίνακα με όνομα LOG_AUTO
στον οποίο με την ενεργοποίηση μιας σκανδάλης
(TRIGGER) που θα εφαρμόζεται πάνω στον βασικό
πίνακα ΑΥΤΟΚΙΝΗΤΑ, θα αποθηκεύονται οι
τροποποιήσεις που θα γίνονται στο πεδίο
ΤΙΜΗ_ΕΝΟΙΚΙΑSIS του πίνακα ΑΥΤΟΚΙΝΗΤΑ.
275.
Triggers
CREATE TABLELOG_AUTO( AUTO_NUM
VARCHAR(10),
USER_ID VARCHAR(20),
HMEROMHNIA DATETIME,
OLD FLOAT,
NEW FLOAT)
276.
Triggers
CREATE TRIGGERTRIG_LOG ON AYTOKINHTA
AFTER UPDATE AS
IF UPDATE(TIMH_ENOIKIASIS)
BEGIN
DECLARE @TIMH_old FLOAT
DECLARE @TIMH_new FLOAT
DECLARE @auto_number VARCHAR(10)
SELECT @TIMH_old = (SELECT TIMH_ENOIKIASIS FROM
deleted)
SELECT @TIMH_new = (SELECT TIMH_ENOIKIASIS FROM
inserted)
SELECT @auto_number = (SELECT KA FROM deleted)
INSERT INTO LOG_AUTO VALUES
(@auto_number,USER_NAME(),GETDATE(),@TIMH_old,
@TIMH_new)
END
277.
Triggers
To παράδειγμααυτό δείχνει πώς μπορούν να
χρησιμοποιηθούν οι σκανδάλες για να
υλοποιήσουν ένα ημερολόγιο παρακολούθησης της
κίνησης των συναλλαγών των χρηστών πάνω σε
ένα πίνακα.
278.
Triggers
Σε κάθετροποποίηση της στήλης
TIMH_ENOIKIASIS χρησιμοποιώντας την πρόταση
UPDATE ενεργοποιείται η σκανδάλη. Έτσι, οι τιμές
των γραμμών των εικονικών πινάκων deleted και
inserted εκχωρούνται στις αντίστοιχες μεταβλητές
@TIMH_old, @TIMH_new και @auto_number.
279.
Triggers
Οι εκχωρημένεςτιμές, μαζί με το όνομα χρήστη και
την τρέχουσα ημερομηνία και ώρα, θα εισαχθούν
κατόπιν στον πίνακα LOG_AUTO.
Αν εκτελεστεί η παρακάτω πρόταση SQL:
UPDATE AYTOKINHTA
SET TIMH_ENOIKIASIS=200 WHERE KA=1'
280.
Συνοπτικός πίνακας εντολώνSQL
SELECT
εξάγει δεδομένα από μια βάση δεδομένων
UPDATE
ενημερώνει δεδομένα σε μια βάση δεδομένων
281.
Συνοπτικός πίνακας εντολώνSQL
DELETE
διαγράφει δεδομένα από μια βάση δεδομένων
INSERT INTO
εισάγει νέα δεδομένα σε μια βάση δεδομένων
282.
Συνοπτικός πίνακας εντολώνSQL
CREATE DATABASE
δημιουργεί μια νέα βάση δεδομένων
CREATE TABLE
δημιουργεί έναν πίνακα
283.
Συνοπτικός πίνακας εντολώνSQL
ALTER TABLE
τροποποιεί έναν πίνακα
DROP TABLE
διαγράφει έναν πίνακα
DROP INDEX
διαγράφει ένα ευρετήριο