ΕΚΠΑΙΔΕΥΤΗΣ
Νίκος Μπαλατσούκας
Η γλώσσα SQL
Η γλώσσα SQL
 Η SQL αποτελείται από δύο βασικά μέρη: τη
γλώσσα SQL Ορισμού Δεδομένων (SQL DDL) και τη
γλώσσα SQL χειρισμού δεδομένων (SQL DML).
 Με την γλώσσα ορισμού δεδομένων ορίζεται το
σχήμα των δεδομένων, δηλαδή η μορφή τους, ενώ
με τη γλώσσα χειρισμού δεδομένων ορίζονται οι
λειτουργίες αποθήκευσης και ανάκτησης των
δεδομένων.
Η γλώσσα SQL
 Επομένως η γλώσσα SQL περιέχει εντολές για τη
δημιουργία και την επεξεργασία της μορφής των
πινάκων (ορισμός δεδομένων), αλλά και εντολές
για την εισαγωγή, ενημέρωση, διαγραφή και
ανάκτηση των δεδομένων που είναι αποθηκευμένα
σε πίνακες (χειρισμός δεδομένων).
Η γλώσσα SQL
 Αν για παράδειγμα θέλουμε να αποθηκεύσουμε τα
στοιχεία των μαθητών ενός σχολείου σε σχεσιακή
βάση δεδομένων, θα χρησιμοποιήσουμε τη γλώσσα
SQL DDL για να δημιουργήσουμε τους σχεσιακούς
πίνακες και κατόπιν θα χρησιμοποιήσουμε τη
γλώσσα SQL DML για να εισάγουμε τα στοιχεία
των μαθητών και για να κάνουμε ερωτήσεις που θα
ανακτούν δεδομένα από τη βάση.
Σε ένα Σχεσιακό Σύστημα Διαχείρισης
Βάσεων Δεδομένων:
 Δημιουργώ πίνακες με τη Γλώσσα Ορισμού
Δεδομένων (DDL)
 Εισάγω δεδομένα στους σχεσιακούς πίνακες με τη
Γλώσσα Χειρισμού Δεδομένων (DML)
 Ενημερώνω/διαγράφω τα δεδομένα των πινάκων
με τη Γλώσσα Χειρισμού Δεδομένων (DML)
 Εκτελώ ερωτήματα ανάκτησης για τα δεδομένα
των πινάκων με τη Γλώσσα Χειρισμού Δεδομένων
(DML)
Η γλώσσα SQL
 Φυσικά η δημιουργία πινάκων και η
εισαγωγή/ενημέρωση/διαγραφή δεδομένων σε
αυτούς μπορεί να γίνει και με γραφικά εργαλεία
στα περισσότερα ΣΔΒΔ, όμως η χρήση της γλώσσας
SQL εξασφαλίζει ανεξαρτησία από τον
κατασκευαστή του συστήματος και εύκολη
μεταφορά των προγραμμάτων ανάμεσα σε
συστήματα κατασκευαστών.
DDL
 SQL Σχεσιακή Γλώσσα Ορισμού Δεδομένων (DDL)
 Μία Γλώσσα Ορισμού Δεδομένων (Data Definition
Language DDL) χρησιμοποιείται από τους
σχεδιαστές προγραμματιστές και από τους
διαχειριστές Βάσεων Δεδομένων για τον ορισμό
του σχήματος των δεδομένων, δηλαδή για να
καθοριστεί η μορφή με την οποία θα «βλέπουν» οι
χρήστες και τα προγράμματα τα αποθηκευμένα
δεδομένα.
DDL
 Τα ΣΔΒΔ διαθέτουν μεταφραστή της γλώσσας DDL
που υποστηρίζουν, ώστε να μετατρέπεται η
περιγραφή από DDL σε μορφή που μπορεί να
αποθηκευτεί.
 Τα σχεσιακά ΣΔΒΔ χρησιμοποιούν κατά κανόνα τη
γλώσσα SQL για τον ορισμό του σχεσιακού
σχήματος των δεδομένων.
DDL
 Η γλώσσα SQL DDL περιγράφει τους πίνακες, τα
πεδία (ή χαρακτηριστικά ή στήλες) από τα οποία
αποτελούνται οι πίνακες, το είδος ή τύπο
δεδομένων κάθε πεδίου και τους περιορισμούς για
τα πεδία των πινάκων.
Tύποι Δεδομένων της SQL
 Οι περισσότερες γλώσσες προγραμματισμού έχουν
τύπους δεδομένων, δηλαδή συγκεκριμένους
τρόπους αναπαράστασης των δεδομένων.
 Αυτό σημαίνει ότι δίνουν στον προγραμματιστή
συγκεκριμένες επιλογές για το είδος των στοιχείων
που θα επεξεργαστούν τα προγράμματά του.
Tύποι Δεδομένων της SQL
 Για παράδειγμα, σε ένα πρόγραμμα που
επεξεργάζεται βαθμούς μαθητών, ο
προγραμματιστής θα ορίσει τους προφορικούς
βαθμούς των τετραμήνων ως ακέραιους αριθμούς.
 Με άλλα λόγια, ο τύπος δεδομένων των
προφορικών βαθμών θα είναι ακέραιος αριθμός.
Tύποι Δεδομένων της SQL
 Η SQL που είναι γλώσσα προγραμματισμού
Βάσεων Δεδομένων, έχει τους δικούς της τύπους
δεδομένων, οι οποίοι χρησιμοποιούνται για να
καθοριστεί το είδος των στοιχείων που θα
αποθηκεύονται στους σχεσιακούς πίνακες.
Tύποι Δεδομένων της SQL
 Για να δημιουργηθεί ένας πίνακας με SQL, πρέπει
πρώτα να καθοριστούν τα πεδία από τα οποία θα
αποτελείται ο πίνακας. Τα πεδία καθορίζονται από
το όνομά τους και τον τύπο τους.
 Το όνομα κάθε πεδίου το επιλέγει ο σχεδιαστής και
είναι μία λέξη, π.χ. Τίτλος, Ονοματεπώνυμο,
Ημερομηνία_γέννησης, Έτος_δημιουργίας, Βαθμός,
κλπ.
Tύποι Δεδομένων της SQL
 Ο τύπος ενός πεδίου καθορίζει το είδος των
δεδομένων που μπορούν να αποθηκευτούν σε αυτό
το πεδίο.
 Ο τύπος αυτός είναι ένας από τους τύπους
δεδομένων που υποστηρίζει η γλώσσα SQL.
 Πριν μάθουμε επομένως πώς δημιουργούμε έναν
πίνακα σε SQL, πρέπει να μάθουμε ποιοι είναι οι
τύποι δεδομένων της SQL.
Tύποι Δεδομένων της SQL
 Η SQL υποστηρίζει διάφορους τύπους δεδομένων:
αριθμητικούς, αλφαριθμητικούς, ημερομηνίας,
ώρας, κλπ οι οποίοι επιλέγονται από το σχεδιαστή
της βάσης ανάλογα με τις ανάγκες.
 Για παράδειγμα, σε μια βάση δεδομένων που
αποθηκεύει στοιχεία για ταινίες κινηματογράφου,
ο τίτλος της ταινίας είναι μια φράση που
αποτελείται από αλφαριθμητικά στοιχεία, δηλαδή
γράμματα και σύμβολα.
Tύποι Δεδομένων της SQL
 Ο τύπος του πεδίου «Τίτλος» θα είναι επομένως
αλφαριθμητικός. Το κόστος δημιουργίας μιας
ταινίας όμως, είναι αριθμητικού τύπου. Στην
Εικόνα 4 1 βλέπουμε τον πίνακα «Ταινία» που
αποτελείται από τις στήλες «Τίτλος»,
«Έτος_δημιουργίας», «Σκηνοθέτης» και «Κόστος»
καθώς και τιμές για την ταινία «Το κύμα (Die
Welle)».
Tύποι Δεδομένων της SQL
 Σε ένα διαφορετικό παράδειγμα, αν θέλουμε να
αποθηκεύσουμε σε έναν πίνακα τιμές προϊόντων, η
τιμή κάθε προϊόντος σε ευρώ πρέπει να
αποθηκευτεί ως αριθμός με υποδιαστολή, π.χ. 4,25 .
Tύποι Δεδομένων της SQL
 Στα σχολεία, για να διευκολυνθεί η λειτουργία
τους, υπάρχει η ανάγκη αποθήκευσης δεδομένων
για τους καθηγητές, τους μαθητές, τα τμήματα, τα
μαθήματα, τις απουσίες, τους βαθμούς των
μαθητών, κλπ. Τα στοιχεία των μαθητών
περιλαμβάνουν το ονοματεπώνυμο και το
πατρώνυμό τους.
Αριθμητικοί τύποι δεδομένων της SQL
 Δύο βασικοί αριθμητικοί τύποι δεδομένων που
υποστηρίζονται από την SQL είναι οι ακέραιοι και
οι πραγματικοί αριθμοί.
 Οι ακέραιοι αριθμοί δεν έχουν υποδιαστολή, ενώ οι
πραγματικοί έχουν. Η λέξη που χρησιμοποιεί η SQL
για τον ορισμό πεδίων ακέραιου τύπου είναι
INTEGER, ενώ για τον ορισμό πεδίων πραγματικού
τύπου είναι FLOAT.
Αριθμητικοί τύποι δεδομένων της SQL
 Στο παράδειγμα των ταινιών κινηματογράφου
επομένως που αναφέρθηκε παραπάνω, το πεδίο
«Κόστος» είναι ακέραιου τύπου, δηλαδή τύπου
INTEGER.
 Στο παράδειγμα με τα προϊόντα, το πεδίο
«Τιμή_προϊόντος» είναι πραγματικού τύπου,
δηλαδή τύπου FLOAT γιατί οι τιμές έχουν και
δεκαδικό μέρος.
Αριθμητικοί τύποι δεδομένων της SQL
 Σε μια βάση δεδομένων Μαθητολογίου για την
αποθήκευση και διαχείριση των δεδομένων του
σχολείου, καταγράφεται η πληροφορία για τα
μαθήματα του προγράμματος σπουδών. Έτσι
δημιουργείται ο πίνακας «Μάθημα» που
αποτελείται από τις στήλες «Όνομα» και «Ώρες».
Αριθμητικοί τύποι δεδομένων της SQL
 Στον πίνακα Μάθημα αποθηκεύονται οι
πληροφορίες για όλα τα μαθήματα που
παρακολουθούν οι μαθητές του σχολείου. Οι
εβδομαδιαίες ώρες διδασκαλίας των μαθημάτων
που αποθηκεύονται στη στήλη «Ώρες», είναι
ακέραιος αριθμός.
Αλφαριθμητικοί τύποι δεδομένων της
SQL
 Οι αλφαριθμητικοί τύποι δεδομένων υποστηρίζουν
την αποθήκευση κειμένου, δηλαδή συμβολοσειρών
ή σειρών από χαρακτήρες, γι’ αυτό και συχνά
ονομάζονται τύποι ‘χαρακτήρων’.
 Η λέξη που χρησιμοποιεί η SQL για τον ορισμό
πεδίων τύπου χαρακτήρα (αλφαριθμητικού) είναι
CHARACTER.
Αλφαριθμητικοί τύποι δεδομένων της
SQL
 Η SQL δίνει τη δυνατότητα ορισμού του μεγέθους
μιας σειράς χαρακτήρων με την έκφραση
CHARACTER(N), όπου στη θέση του N
τοποθετείται ένας ακέραιος αριθμός που δηλώνει
το μέγεθος του πεδίου, δηλαδή περιορίζει τις τιμές
σε μέγεθος Ν.
 Ο τύπος CHARACTER VARYING(N) ή VARCHAR(N)
χρησιμοποιείται για τη δημιουργία πεδίων τύπου
χαρακτήρων μεταβλητού μεγέθους N.
Αλφαριθμητικοί τύποι δεδομένων της
SQL
 Στο παράδειγμα των μαθημάτων της
προηγούμενης παραγράφου, το πεδίο
«Όνομα_μαθήματος» είναι αλφαριθμητικού τύπου
και επειδή κάθε όνομα έχει διαφορετικό πλήθος
χαρακτήρων, το συγκεκριμένο πεδίο θα μπορούσε
να οριστεί ως τύπου VARCHAR(100) ώστε να
μπορέσει να αποθηκεύσει ονόματα μεταβλητού
μεγέθους και αρκετά μεγάλα ονόματα, μέχρι 100
χαρακτήρων.
Αλφαριθμητικοί τύποι δεδομένων της
SQL
 Στο Μαθητολόγιο του σχολείου, ένα άλλο πεδίο
που αποθηκεύεται για τους μαθητές είναι το φύλο
τους. Το φύλο μπορεί να πάρει τις τιμές ‘Άρρεν’ και
‘Θήλυ’ ή σε συντομία ‘Α’ ή ‘Θ’. Σε αυτή την
περίπτωση το φύλο μπορεί να οριστεί ως τύπου
CHARACTER(1).
Τύποι δεδομένων για την ημερομηνία
και την ώρα
 Πεδία που αποθηκεύουν ημερομηνία ή ώρα
μπορούν να οριστούν ως τύπου DATE, TIME ή
TIMESTAMP.
 Ο τύπος DATE μπορεί να αποθηκεύσει δεδομένα
που αποτελούνται από το έτος (YEAR) με τιμές από
0001 ως 9999, το μήνα (MONTH) και την ημέρα
(DAY)
Τύποι δεδομένων για την ημερομηνία
και την ώρα
 Ο τύπος TIME μπορεί να αποθηκεύσει τιμές που
αποτελούνται από την ώρα (HOUR), τα λεπτά
(MINUTE) και τα δευτερόλεπτα (SECOND).
 Ο τύπος TIMESTAMP μπορεί να αποθηκεύσει τιμές
που αποτελούνται από το έτος, το μήνα, την ημέρα,
την ώρα, τα λεπτά και τα δευτερόλεπτα.
Τύποι δεδομένων για την ημερομηνία
και την ώρα
 Επομένως, τιμές όπως ‘24 06 2015’ μπορούν να
αποθηκευτούν σε πεδία τύπου DATE, τιμές όπως
‘15:02:34’ μπορούν να αποθηκευτούν σε πεδία
τύπου TIME, ενώ τιμές όπως ‘24 06 2015 15:02:34’.
Στο παράδειγμα του Μαθητολογίου, η ημερομηνία
γέννησης ενός μαθητή μπορεί να αποθηκευτεί σε
πεδίο τύπου DATE.
CREATE TABLE
 Μετά την παρουσίαση βασικών τύπων δεδομένων
μπορούμε να δημιουργήσουμε πίνακες
χρησιμοποιώντας τη γλώσσα SQL.
 Η εντολή της SQL που μας δίνει αυτή τη
δυνατότητα είναι η CREATE TABLE, η οποία
χρησιμοποιείται ως εξής:
CREATE TABLE
 Δηλαδή, ξεκινάμε δηλαδή με τη φράση CREATE
TABLE, ακολουθούμενη από έναν ή περισσότερους
κενούς χαρακτήρες και κατόπιν γράφουμε το
όνομα του πίνακα που θέλουμε να
δημιουργήσουμε.
 Κατόπιν ανοίγουμε παρένθεση ‘(‘ και γράφουμε τα
ονόματα και τους τύπους δεδομένων των στηλών
του πίνακα.
CREATE TABLE
 Για κάθε στήλη (πεδίο) του πίνακα καθορίζουμε το
όνομά της και μετά από ένα ή περισσότερα κενά
τον τύπο δεδομένων της στήλης.
 Οι τύποι δεδομένων είναι αυτοί που
παρουσιάστηκαν στην προηγούμενη ενότητα.
 Οι ορισμοί των στηλών μεταξύ τους διαχωρίζονται
με κόμμα ‘,’.
CREATE TABLE
 Όταν ολοκληρωθεί ο ορισμός των στηλών
κλείνουμε την παρένθεση ‘)’.
 Κενός χαρακτήρας πρέπει να υπάρχει ανάμεσα στο
όνομα και τον τύπο κάθε στήλης.
CREATE TABLE
 Αν επιστρέψουμε στα παραδείγματά μας, για να
δημιουργήσουμε τον πίνακα Μάθημα, θα γράψουμε
την εξής εντολή:
 CREATE TABLE Μάθημα ( Όνομα
VARCHAR(100), Ώρες INTEGER )
CREATE TABLE
 Ο πίνακας Μάθημα αποτελείται από δύο πεδία:
Όνομα και Ώρες.
 Ο τύπος του πεδίου "Όνομα" είναι συμβολοσειρά
μέχρι 100 χαρακτήρων (VARCHAR(100)), ενώ ο
τύπος του πεδίου "Ώρες" είναι ακέραιος αριθμός
(INTEGER).
 Για να δημιουργήσουμε τον πίνακα Μαθητής
προσθέτοντας το πεδίο «Φύλο», θα γράψουμε την
εξής εντολή:
CREATE TABLE
 CREATE TABLE Μαθητής ( Επώνυμο
VARCHAR(50), Όνομα VARCHAR (50),
Πατρώνυμο VARCHAR (50),
Ημερομηνία_Γέννησης DATE, Φύλο CHAR(1) )
CREATE TABLE
 Τα πεδία αλφαριθμητικού τύπου «Επώνυμο»,
«Όνομα» και «Πατρώνυμο» είναι τύπου χαρακτήρα
μεταβλητού μεγέθους με μήκος έως 50, δηλαδή
VARCHAR(50).
 Το πεδίο «Ημερομηνία_Γέννησης» είναι τύπου
ημερομηνίας, δηλαδή DATE, ενώ το πεδίο «Φύλο»
είναι ένας χαρακτήρας (‘Α’ ή ‘Θ’).
Προκαθορισμένες τιμές
 Κατά τη δημιουργία πινάκων με την εντολή
CREATE TABLE μπορούν να καθοριστούν
προκαθορισμένες τιμές και περιορισμοί για τα
πεδία των πινάκων.
Προκαθορισμένη τιμή πεδίων
 Κατά την εισαγωγή δεδομένων σε έναν πίνακα,
είναι πιθανό κάποιες τιμές πεδίων να μην είναι
γνωστές, οπότε να μην εισάγονται. Σε αυτή την
περίπτωση, το πεδίο θα έχει την τιμή NULL, που
σημαίνει ότι δεν έχει εισαχθεί τιμή.
CREATE TABLE
 Για παράδειγμα όταν γίνονται εγγραφές μαθητών
στο Μαθητολόγιο του σχολείου, μπορεί να μην
εισάγεται η ημερομηνία γέννησης του μαθητή μέχρι
εκείνος να προσκομίσει το πιστοποιητικό
γέννησης.
 Σε αυτή την περίπτωση η ημερομηνία γέννησης
έχει την τιμή NULL μέχρι να γίνει εισαγωγή μιας
έγκυρης ημερομηνίας.
Προκαθορισμένη τιμή (default value)
 Προκαθορισμένη τιμή (default value) σε ένα πεδίο
σημαίνει ότι αν δεν καθοριστεί άλλη τιμή κατά την
εισαγωγή δεδομένων, χρησιμοποιείται μία τιμή που
έχει καθορίσει ο σχεδιαστής της Βάσης Δεδομένων.
CREATE TABLE
 Για παράδειγμα, αν στο Μαθητολόγιο
καταχωρείται η πόλη καταγωγής των μαθητών
ενός σχολείου, το πεδίο αυτό θα μπορούσε να έχει
προκαθορισμένη τιμή συγκεκριμένη πόλη π.χ.
«Αθήνα» αν πρόκειται για σχολείο της Αθήνας και
αναμένεται οι περισσότεροι μαθητές να έχουν
καταγωγή από την Αθήνα.
CREATE TABLE
 Σε αυτή την περίπτωση η προκαθορισμένη τιμή
διευκολύνει την εισαγωγή δεδομένων εφόσον δεν
είναι απαραίτητο να εισάγεται με κάθε νέο μαθητή,
αλλά δημιουργείται αυτόματα από το σύστημα.
Στην γλώσσα SQL, οι προκαθορισμένες τιμές
περιγράφονται στην εντολή CREATE TABLE με την
σύνταξη DEFAULT <τιμή> δίπλα από την
περιγραφή της αντίστοιχης στήλης. Το παράδειγμα
δημιουργίας του πίνακα Μαθητής θα γινόταν
επομένως :
CREATE TABLE
 CREATE TABLE Μαθητής ( Επώνυμο
VARCHAR(50), Όνομα VARCHAR (50),
Πατρώνυμο VARCHAR (50),
Ημερομηνία_Γέννησης DATE, Φύλο CHAR(1),
Πόλη VARCHAR(50) DEFAULT ‘Αθήνα’ )
Περιορισμοί
 Συχνά είναι αναγκαίο να επιβληθούν περιορισμοί
στα δεδομένα για να εξασφαλιστεί η ορθότητα και
η ακεραιότητά τους.
 Οι περιορισμοί με τους οποίους θα ασχοληθούμε σε
αυτήν την υποενότητα είναι: περιορισμοί
υπαρξιακής ακεραιότητας, περιορισμοί κύριου
κλειδιού και περιορισμοί αναφορικής
ακεραιότητας.
Περιορισμοί υπαρξιακής ακεραιότητας
 Οι περιορισμοί αυτοί μπορεί να αφορούν στην
ύπαρξη ή μη τιμών σε κάποιο πεδίο πίνακα και
εκφράζονται σε γλώσσα SQL με τις φράσεις NULL
και NOT NULL.
 Η λέξη «NULL» σημαίνει καμία τιμή και
χρησιμοποιείται για πεδία που είναι αποδεκτό να
μην έχουν τιμή, ενώ η φράση «NOT NULL»
χρησιμοποιείται για πεδία που δεν επιτρέπεται να
μην έχουν τιμή.
CREATE TABLE
 Στο παράδειγμα του Μαθητολογίου, η καταχώρηση
μαθημάτων χωρίς τίτλους δεν είναι αποδεκτή,
οπότε η δημιουργία του πίνακα Μάθημα θα έπρεπε
να γραφτεί προσθέτοντας δίπλα στο πεδίο
«Όνομα» τη φράση NOT NULL, ως εξής:
CREATE TABLE
 CREATE TABLE Μάθημα( Όνομα VARCHAR(100)
NOT NULL, Ώρες INT )
CREATE TABLE
 Παρόμοια, στον πίνακα Μαθητής, η καταχώρηση
μαθητών χωρίς το ονοματεπώνυμό τους δεν είναι
αποδεκτή, οπότε και στα δύο πεδία καθορίζεται ο
περιορισμός NOT NULL ώστε να αποφευχθεί η
εισαγωγή μαθητών χωρίς ονοματεπώνυμο.
CREATE TABLE
 CREATE TABLE Μάθημα( Επώνυμο
VARCHAR(50) NOT NULL, Όνομα VARCHAR
(50) NOT NULL, Πατρώνυμο VARCHAR (50),
Ημερομηνία_Γέννησης DATE, Φύλο CHAR(1),
Πόλη VARCHAR(50) DEFAULT ‘Αθήνα’ )
Περιορισμοί κύριου κλειδιού
 Το κύριο κλειδί ενός σχεσιακού πίνακα είναι ένα
πεδίο ή συνδυασμός πεδίων που για κάθε γραμμή
του πίνακα έχει μοναδική τιμή. Ο περιορισμός του
κύριου κλειδιού μπορεί να καθοριστεί στην εντολή
CREATE TABLE με τη σύνταξη PRIMARY KEY
(<πεδίο ή πεδία>). Η φράση PRIMARY KEY (<πεδίο
ή πεδία>) προστίθεται μετά τον ορισμό των
στηλών του πίνακα στην εντολή CREATE TABLE.
CREATE TABLE
 Ας επανέλθουμε στο παράδειγμα του
Μαθητολογίου και στον πίνακα Μάθημα που
δημιουργήθηκε προηγουμένως. Ένας ορθός
σχεδιασμός της βάσης δεδομένων επιβάλλει τον
καθορισμό κύριου κλειδιού σε όλους τους πίνακες
που θα δημιουργηθούν.
CREATE TABLE
 Άρα στον πίνακα Μάθημα πρέπει να προστεθεί
κύριο κλειδί. Σε αυτή την περίπτωση επιλέγουμε
ως κύριο κλειδί το όνομα του μαθήματος, το οποίο
θεωρούμε ότι είναι μοναδικό, π.χ. «Φυσική Α’
Τάξης», «Μαθηματικά Γ’ Τάξης», κ.ο.κ.
CREATE TABLE
 Άρα η δημιουργία του πίνακα Μάθημα θα
συμπληρωθεί ως εξής:
 CREATE TABLE Μάθημα ( Όνομα
VARCHAR(100) NOT NULL, Ώρες INTEGER,
PRIMARY KEY (Όνομα) )
CREATE TABLE
 Στο παράδειγμα του Μαθητολογίου, θέλουμε οι
μαθητές επίσης να διακρίνονται μεταξύ τους με
μοναδικό τρόπο. Αυτό εφαρμόζεται και στην πράξη
στο μητρώο μαθητών του σχολείου.
CREATE TABLE
 Κατά την εγγραφή του στο βιβλίο του μητρώου
μαθητών, κάθε μαθητής αποκτά έναν μοναδικό
Αριθμό Μητρώου.
 Στην Βάση Δεδομένων Μαθητολόγιο αυτό
υλοποιείται με την προσθήκη του πεδίου ΑΜ στον
πίνακα Μαθητής και τον καθορισμό του πεδίου ως
κύριου κλειδιού ως εξής:
CREATE TABLE
 CREATE TABLE Μαθητής ( ΑΜ INT, Επώνυμο
VARCHAR(50) NOT NULL, Όνομα VARCHAR
(50) NOT NULL, Πατρώνυμο VARCHAR (50),
Ημερομηνία_Γέννησης DATE, Φύλο CHAR(1),
Πόλη VARCHAR(50) DEFAULT ‘Αθήνα’, PRIMARY
KEY (ΑΜ) )
CREATE TABLE
 Αυτό σημαίνει ότι στον πίνακα δε μπορούν να
εισαχθούν δύο μαθητές με τον ίδιο Αριθμό
Μητρώου.
 Περιορισμοί αναφορικής ακεραιότητας
 Οι περιορισμοί αναφορικής ακεραιότητας
καθορίζουν συσχετίσεις μεταξύ των πεδίων
διαφορετικών πινάκων, δηλαδή τα ξένα κλειδιά.
CREATE TABLE
 Ο περιορισμός ξένου κλειδιού στην γλώσσα SQL
καθορίζει ότι το πεδίο ενός πίνακα Β αναφέρεται
σε ένα πεδίο ενός άλλου πίνακα Α, επομένως οι
τιμές του πεδίου στον πίνακα Β πρέπει να
υπάρχουν στο αντίστοιχο πεδίο στον πίνακα Α.
 Οι περιορισμοί αναφορικής ακεραιότητας
περιγράφονται στη γλώσσα SQL με την έκφραση
FOREIGN KEY (<πεδίο>) REFERENCES <πίνακας
αναφοράς> ( <πεδίο πίνακα αναφοράς>) .
CREATE TABLE
 Στο παράδειγμά μας του Μαθητολογίου, οι μαθητές
του σχολείου εγγράφονται κάθε χρόνο που
φοιτούν σε συγκεκριμένη τάξη (Α, Β, ή Γ). Κάθε
μαθητής που θα φοιτήσει παραπάνω από ένα έτος
στο ίδιο σχολείο θα εγγραφεί τουλάχιστον μία
φορά σε κάθε τάξη που θα φοιτήσει.
 Για να καταγραφεί αυτή η πληροφορία στη
σχεσιακή Βάση Δεδομένων, θα πρέπει να
δημιουργηθεί ένας νέος πίνακας ο οποίος να
επιτρέπει την εγγραφή μαθητών σε σχολικά έτη
και τάξεις.
CREATE TABLE
 Σε αυτόν τον πίνακα που μπορούμε να τον
ονομάσουμε ΕγγραφήΜαθητή, αυτό που πρέπει να
δημιουργηθεί είναι ένα πεδίο που να ταυτοποιεί
κάθε μαθητή.
 Το πεδίο αυτό είναι ο αριθμός μητρώου (ΑΜ) του
μαθητή.
 Ο ΑΜ μαθητή πρέπει να συνοδεύεται και από το
σχολικό έτος και την τάξη στην οποία εγγράφεται ο
μαθητής.
CREATE TABLE
 Το πεδίο ΑΜ_Μαθητή αναφέρεται σε μαθητές που
είναι ήδη καταχωρημένοι στον πίνακα Μαθητής.
Για να εξασφαλιστεί αυτή η αναφορική
ακεραιότητα, το πεδίο ΑΜ_Μαθητή πρέπει να είναι
ξένο κλειδί που αναφέρεται στο πεδίο ΑΜ του
πίνακα Μαθητής.
CREATE TABLE
 Ένα επιπλέον σημείο που πρέπει να διευκρινιστεί
για τον συγκεκριμένο πίνακα, είναι το κύριο κλειδί
του, δηλαδή το πεδίο ή τα πεδία που πρέπει να
είναι μοναδικά για κάθε εγγραφή. Ας κάνουμε
μερικές παρατηρήσεις:
CREATE TABLE
 - Το πεδίο Σχολ_έτος δε μπορεί να είναι μοναδικό
γιατί σε κάθε σχολικό έτος εγγράφονται πολλοί
μαθητές στο σχολείο.
 - Ο ΑΜ_Μαθητή δε μπορεί να είναι μοναδικός γιατί
κάθε μαθητή μπορεί να γίνουν πολλές εγγραφές
(στην Α’, τη Β’ και τη Γ’ τάξη)
CREATE TABLE
 Επομένως το κύριο κλειδί θα είναι συνδυασμός
κάποιων πεδίων. Συγκεκριμένα, θα είναι ο
συνδυασμός των πεδίων (ΑΜ_Μαθητή, Σχολ_έτος)
ώστε να εξασφαλίζεται ότι κάθε μαθητής θα
εγγράφεται μόνο μία φορά ανά σχολικό έτος σε
κάποια τάξη.
 Άρα η δημιουργία του πίνακα μπορεί να γίνει με
την εξής εντολή SQL:
CREATE TABLE
 CREATE TABLE ΕγγραφήΜαθητή ( ΑΜ_Μαθητή
ΙΝΤ, Σχολ_έτος CHAR(9), Τάξη CHAR(1),
PRIMARY KEY (ΑΜ_Μαθητή, Σχολ_έτος),
FOREIGN KEY (ΑΜ_Μαθητή) REFERENCES
Μαθητής(ΑΜ) )
CREATE TABLE
 Παρατηρούμε ότι ο τύπος του πεδίο ΑΜ_Μαθητή
είναι ΙΝΤ, ίδιος με τον τύπο του πεδίου ΑΜ στον
πίνακα Μαθητής. Αυτή είναι απαραίτητη
προϋπόθεση για την δημιουργία του περιορισμού
ξένου κλειδιού (FOREIGN KEY) στον πίνακα
ΕγγραφήΜαθητή.
CREATE TABLE
 Στο ίδιο παράδειγμα, ένας μαθητής παίρνει γραπτό
βαθμό στα μαθήματα της τάξης που ένας μαθητής
παίρνει έναν γραπτό βαθμό στα μαθήματα της
τάξης που παρακολουθεί για κάθε σχολικό έτος
που φοιτά στο σχολείο.
 Άρα υπάρχει συσχέτιση ανάμεσα στον μαθητή και
τα μαθήματα για την καταχώρηση της γραπτής
βαθμολογίας.
CREATE TABLE
 Η συσχέτιση αυτή πρέπει να υλοποιηθεί στη
σχεσιακή Βάση Δεδομένων με ένα νέο πίνακα ο
οποίος θα συσχετίζει τον Αριθμό Μητρώου του
μαθητή με το μάθημα στο οποίο καταχωρείται η
βαθμολογία του, συμπληρωμένο με το σχολικό
έτος.
CREATE TABLE
 Σε αυτόν τον πίνακα, το κύριο κλειδί, δηλαδή το
πεδίο που πρέπει να είναι μοναδικό για κάθε
εγγραφή στον πίνακα είναι ο συνδυασμός των
πεδίων Αριθμός Μητρώου Μαθητή, Σχολικό Έτος
και Όνομα Μαθήματος, έτσι ώστε:
CREATE TABLE
 - να είναι δυνατό να εισαχθούν βαθμοί για όλα τα
(διαφορετικά) μαθήματα κάποιου μαθητή, να μην
είναι δυνατόν να εισαχθεί παραπάνω από ένας
βαθμός ανά μαθητή, μάθημα και σχολικό έτος,
CREATE TABLE
 - να είναι δυνατόν να εισαχθούν οι βαθμοί όλων
των μαθητών σε κάθε μάθημα που
παρακολουθούν,
 - να είναι δυνατόν να εισαχθούν βαθμοί κάποιου
μαθητή στο ίδιο μάθημα για διαφορετικά σχολικά
έτη σε περίπτωση επανάληψης της ίδιας τάξης
(κάτι που δεν είναι επιθυμητό φυσικά αλλά πρέπει
να προβλεφθεί στο ΣΔΒΔ).
CREATE TABLE
 Επομένως η δημιουργία του πίνακα για τις γραπτές
βαθμολογίες θα έχει ως εξής:
CREATE TABLE
 CREATE TABLE ΓραπτόςΒαθμόςΜαθητή (
ΑΜ_Μαθητή INT, Σχολ_έτος CHAR(9),
Όνομα_Μαθήματος VARCHAR(100), Βαθμός
FLOAT, PRIMARY KEY (ΑΜ_Μαθητή, Σχολ_έτος,
Όνομα_Μαθήματος), FOREIGN KEY
(ΑΜ_Μαθητή) REFERENCES Μαθητής(ΑΜ),
FOREIGN KEY (Όνομα_Μαθήματος)
REFERENCES Μάθημα(Όνομα) )
CREATE TABLE
 Παρατηρούμε ότι ο τύπος του πεδίο ΑΜ_Μαθητή
είναι ΙΝΤ, ίδιος με τον τύπο του πεδίου ΑΜ στον
πίνακα Μαθητής και ο τύπος του πεδίου
Όνομα_Μαθήματος είναι VARCHAR(100), ίδιος με
τον τύπο του πεδίου Όνομα στον πίνακα Μάθημα.
SQL DML
 SQL Σχεσιακή Γλώσσα Χειρισμού Δεδομένων
(DML)
 Μία Γλώσσα Χειρισμού Δεδομένων (Data
Manipulation Language DML) χρησιμοποιείται
από τους σχεδιαστές προγραμματιστές και από
τους διαχειριστές Βάσεων Δεδομένων για τον
χειρισμό των δεδομένων, δηλαδή για να εισαχθούν,
να ενημερωθούν, να διαγραφούν και να
ανακτηθούν τα δεδομένα της βάσης.
SQL DML
 Τα σχεσιακά ΣΔΒΔ χρησιμοποιούν κατά κανόνα τη
γλώσσα SQL για τον χειρισμό των δεδομένων. Η
γλώσσα SQL DML επιτρέπει την περιγραφή
εντολών εισαγωγής, ενημέρωσης, διαγραφής και
ανάκτησης των δεδομένων των πινάκων.
Εισαγωγή Δεδομένων με SQL
 Η εισαγωγή δεδομένων σε πίνακα σχεσιακής
Βάσης Δεδομένων πραγματοποιείται με την εντολή
INSERT INTO της SQL. Η σύνταξη της εντολής
INSERT INTO στη γενική της μορφή είναι:
 INSERT INTO <όνομα πίνακα> VALUES (τιμή_1,
τιμή_2, τιμή_3, ...)
Εισαγωγή Δεδομένων με SQL
 Με την παραπάνω εντολή εισάγεται μια νέα
γραμμή στον πίνακα που καθορίζεται στην εντολή.
Οι τιμές που εισάγονται στα πεδία του πίνακα
καθορίζονται μέσα στην παρένθεση χωριζόμενες με
κόμμα. Οι τιμές αυτές αντιστοιχίζονται σε όλα τα
πεδία του πίνακα και με τη σειρά που αυτά έχουν
καθοριστεί κατά την δημιουργία του πίνακα.
Εισαγωγή Δεδομένων με SQL
 Εισαγωγή εγγραφών καθορίζοντας τιμές για όλα
τα πεδία του πίνακα
 Για την εισαγωγή των στοιχείων του μαθητή
Πηλείδη Αχιλλέα στον πίνακα Μαθητής, γράφουμε
σε SQL την παρακάτω εντολή:
 INSERT INTO Μαθητής VALUES (863, ‘Πηλείδης’,
‘Αχιλλέας’, ‘Πηλέας’, ‘1999 06 24’, ‘Α’, ‘Αθήνα’)
Εισαγωγή Δεδομένων με SQL
 Στο παράδειγμα αυτό θυμίζουμε ότι στην εντολή
CREATE TABLE του πίνακα Μαθητής
καθορίστηκαν τα πεδία με τη σειρά: ΑΜ, Επώνυμο,
Όνομα, Πατρώνυμο, Ημερομηνία_γέννησης, Φύλο,
Πόλη.
 Παρατηρούμε ότι η τιμή της ημερομηνίας εισάγεται
με τη μορφή 'έτος μήνας ημέρα'.
Απλά παραδείγματα SQL
Απλά παραδείγματα SQL
 SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα=’Γιώργος’
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή είναι ‘Γιώργος’
Απλά παραδείγματα SQL
 SELECT Όνομα, Ώρες FROM Μάθημα WHERE
Ώρες >=4
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα και Ώρες από τον πίνακα Μάθημα, όταν οι
ώρες του μαθήματος είναι μεγαλύτερες ή ίσες με 4
Απλά παραδείγματα SQL
 SELECT Όνομα, Ώρες FROM Μάθημα WHERE
Ώρες <>4
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα και Ώρες από τον πίνακα Μάθημα, όταν οι
ώρες του μαθήματος είναι διαφορετικές από 4
Απλά παραδείγματα SQL
 SELECT Όνομα, Ώρες FROM Μάθημα WHERE
Ώρες BETWEEN 4 AND 5
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα και Ώρες από τον πίνακα Μάθημα, όταν οι
ώρες του μαθήματος είναι μεταξύ 4 και 5 ωρών,
δηλαδή μεγαλύτερες ή ίσες με 4 και μικρότερες ή
ίσες με
Απλά παραδείγματα SQL
 SELECT Όνομα, Ώρες FROM Μάθημα WHERE
Ώρες IN (4, 5)
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα και Ώρες από τον πίνακα Μάθημα, όταν οι
ώρες του μαθήματος είναι 4 ή 5, δηλαδή
ικανοποιούν τις τιμές που περιλαμβάνονται στην
παρένθεση
Απλά παραδείγματα SQL
 SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα LIKE “Μ%”
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή αρχίζει από “M”
Απλά παραδείγματα SQL
 SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα LIKE “Μ “
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή αρχίζει από “M” και
περιλαμβάνει 5 χαρακτήρες
Απλά παραδείγματα SQL
 SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Ημερομηνία_Γέννησης IS NULL
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
η Ημερομηνία_Γέννησης δεν είναι συμπληρωμένη

Απλά παραδείγματα SQL
 SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα NOT LIKE “Μ%”
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή δεν αρχίζει από “M”
Απλά παραδείγματα SQL
 SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Ημερομηνία_Γέννησης IS NOT NULL
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
η Ημερομηνία_Γέννησης είναι συμπληρωμένη
 Σημείωση: Ποτέ δεν γίνετε σύγκριση με Null. Πάντα
χρησιμοποιούμε τις φράσεις is Null ή is not Null.
Απλά παραδείγματα SQL
 SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα LIKE “Μ%” AND Πόλη=’Χανιά’
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή αρχίζει από “M” και είναι από
τα Χανιά.
Απλά παραδείγματα SQL
 SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα LIKE “Μ%” AND Πόλη=’Χανιά’ OR
Πόλη=’Ρέθυμνο’
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή αρχίζει από “M” και είναι από
τα Χανιά ή το Ρέθυμνο ανεξαρτήτως Ονόματος
μαθητή
Απλά παραδείγματα SQL
 SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα LIKE “Μ%” AND (Πόλη=’Χανιά’
OR Πόλη=’Ρέθυμνο’)
 Ή
 SELECT Επώνυμο, Όνομα FROM Μαθητής
WHERE Όνομα LIKE “Μ%” OR Πόλη=’Χανιά’ AND
Πόλη=’Ρέθυμνο’
Απλά παραδείγματα SQL
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής, όταν
το όνομα του μαθητή αρχίζει από “M” και είναι από
τα Χανιά ή το Ρέθυμνο
 Σημείωση: Ισχύει και στις λογικές πράξεις η
προτεραιότητα των πράξεων (Not, And, Or)
Δεδομένα από περισσότερους από ένα
πίνακα
 Η φράση FROM
 Οι εγγραφές ενός πίνακα μπορούν να συνδυαστούν
με τις εγγραφές ενός άλλου πίνακα, εφόσον
υπάρχουν κοινά πεδία στους δύο πίνακες.
 Ο συνδυασμός γίνεται βάσει των τιμών του κοινού
πεδίου. Στη φράση from ορίζονται οι πίνακες.
Δεδομένα από περισσότερους από ένα
πίνακα
 Για να μπορέσουμε να εμφανίζουμε τις
πληροφορίες των πινάκων, στη φράση where θα
πρέπει να συνδέσουμε τα κοινά πεδία.
 Η αναφορά μας σε ένα πεδίο ενός πίνακα γίνεται με
το συμβολισμό: <όνομα-πίνακα>.<όνομα- πεδίου>
Δεδομένα από περισσότερους από ένα
πίνακα
 Η πρόταση from αντιστοιχεί στην πράξη του
καρτεσιανού γινομένου της σχεσιακής άλγεβρας.
Δίνει τη λίστα των σχέσεων που πρέπει να
σαρωθούν κατά την αξιολόγηση της έκφρασης.
Δεδομένα από περισσότερους από ένα
πίνακα
 Όταν το ίδιο γνώρισμα εμφανίζεται στο σχήμα
περισσότερων από μια σχέσεων, τότε γίνεται
διάκριση βάση του συμβολισμού: <όνομα -
σχέσης>.<όνομα -γνωρίσματος>
ΠΑΡΑΔΕΙΓΜΑΤΑ
 SELECT Επώνυμο, Όνομα, Τάξη FROM Μαθητής,
ΕγγραφήΜαθητή WHERE Μαθητής.ΑΜ=
ΕγγραφήΜαθητή.ΑΜ_Μαθητή
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα και την Τάξη από τους πίνακες
Μαθητής και ΕγγραφήΜαθητή, για όλους τους
μαθητές. Στο αποτέλεσμα, εμφανίζονται όλοι οι
δυνατοί συνδυασμοί των δύο πινάκων που έχουν
κοινό πεδίο τον ΑΜ
ΠΑΡΑΔΕΙΓΜΑΤΑ
 SELECT Επώνυμο, Όνομα, Τάξη FROM Μαθητής,
ΕγγραφήΜαθητή WHERE Μαθητής.ΑΜ=
ΕγγραφήΜαθητή.ΑΜ_Μαθητή AND
Σχολ_έτος=’2013 2014’
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες για
το Επώνυμο, Όνομα και την Τάξη από τους πίνακες
Μαθητής και ΕγγραφήΜαθητή, για τους μαθητές
στο σχολικό έτος 2013 2014. Στο αποτέλεσμα,
περιορίζονται οι συνδυασμοί των δύο πινάκων στο
σχολικό έτος 2013 -2014
Υποερωτήματα
 Τα υποερωτήματα είναι ερωτήματα που
περιέχονται στη φράση WHERE άλλων
ερωτημάτων. Τα αποτελέσματα των
υποερωτημάτων δεν εμφανίζονται αλλά απλά
δρουν βοηθητικά, ώστε να συνδεθούν τα στοιχεία
των πινάκων.
Υποερωτήματα
 SELECT Επώνυμο, Όνομα FROM Μαθητής,
ΕγγραφήΜαθητή WHERE Μαθητής.ΑΜ=
ΕγγραφήΜαθητή.ΑΜ_Μαθητή AND ΑΜ IN
(SELECT ΑΜ FROM ΕγγραφήΜαθητή
WHERE Σχολ_έτος=’2013 -2014’)
Υποερωτήματα
 Παρατηρούμε ότι έχουμε το ίδιο αποτέλεσμα με το
προηγούμενο ερώτημα, δηλαδή επέλεξε και
εμφάνισε τις πληροφορίες για το Επώνυμο, Όνομα
και την Τάξη από τους πίνακες Μαθητής και
ΕγγραφήΜαθητή, για τους μαθητές στο σχολικό
έτος 2013 -2014. Στο αποτέλεσμα, περιορίζονται οι
συνδυασμοί των δύο πινάκων στο σχολικό έτος
2013- 2014)
Ταξινόμηση Αποτελεσμάτων
 Διάταξη των εγγραφών – ORDER BY
 Στην SQL χρησιμοποιείται η φράση order by ώστε
οι εγγραφές στο αποτέλεσμα να είναι
ταξινομημένες (π.χ. με αλφαβητική σειρά) με βάση
το αντίστοιχο πεδίο.
Ταξινόμηση Αποτελεσμάτων
 SELECT Επώνυμο, Όνομα FROM Μαθητής ORDER
BY Επώνυμο
 Δηλαδή επέλεξε και εμφάνισε ταξινομημένες σε
αύξουσα σειρά, βάση του Επωνύμου τις πληροφορίες
για το Επώνυμο, Όνομα από τον πίνακα Μαθητής
 Η προεπιλογή είναι η αύξουσα διάταξη, αλλά μπορούμε
να επιλέξουμε διάταξη χρησιμοποιώντας το asc
(αύξουσα) ή το desc (φθίνουσα).
 Επίσης, μπορούμε να κάνουμε ταξινόμηση
χρησιμοποιώντας πολλά πεδία.
Ταξινόμηση Αποτελεσμάτων
 SELECT Επώνυμο, Όνομα FROM Μαθητής
ORDER BY Επώνυμο DESC, Όνομα ASC
 Δηλαδή επέλεξε και εμφάνισε ταξινομημένες σε
φθίνουσα σειρά, βάση του Επωνύμου και στη
συνέχεια στις εγγραφές με κοινό Επώνυμο σε
αύξουσα βάση του Ονόματος, τις πληροφορίες για
το Επώνυμο, Όνομα από τον πίνακα Μαθητής.
Ταξινόμηση Αποτελεσμάτων
 Ταξινόμηση εγγραφών μπορούμε να έχουμε και
όταν η επιλογή των πεδίων είναι από
περισσότερους από έναν πίνακες.

Ταξινόμηση Αποτελεσμάτων
 SELECT Επώνυμο, Όνομα, Τάξη FROM Μαθητής,
ΕγγραφήΜαθητή WHERE Μαθητής.ΑΜ=
ΕγγραφήΜαθητή.ΑΜ_Μαθητή ORDER BY Τάξη
 Δηλαδή επέλεξε και εμφάνισε ταξινομημένες σε
αύξουσα σειρά τις πληροφορίες για το Επώνυμο,
Όνομα και την Τάξη από τους πίνακες Μαθητής και
ΕγγραφήΜαθητή, για όλους τους μαθητές. Στο
αποτέλεσμα, εμφανίζονται όλοι οι δυνατοί
συνδυασμοί των δύο πινάκων που έχουν κοινό
πεδίο τον ΑΜ, ταξινομημένοι ανά τάξη.
Ταξινόμηση Αποτελεσμάτων
 Σημείωση:
 Η ταξινόμηση μπορεί να γίνει και με πεδία που δεν
εμφανίζονται στο Select, ενώ δεν επιτρέπεται η
ταξινόμηση με βάση τις πράξεις μεταξύ πεδίων.
Συναρτήσεις Συνάθροισης και
Ομαδοποίησης
 Η SQL έχει 5 ενσωματωμένες συναθροιστικές
συναρτήσεις.
 Οι ακόλουθες συναρτήσεις εφαρμόζονται στο
σύνολο των τιμών μιας στήλης ενός πίνακα, και
επιστρέφουν μία τιμή:
 Αυτές επιδρούν σε ομάδα εγγραφών (γραμμών)
του πίνακα και είναι:
Συναρτήσεις Συνάθροισης και
Ομαδοποίησης
 AVG (Α) :
 Μέσος όρος τιμών (μόνο σε αριθμούς)
Συναρτήσεις Συνάθροισης και
Ομαδοποίησης
 COUNT(Α):
 Πλήθος τιμών
Συναρτήσεις Συνάθροισης και
Ομαδοποίησης
 MAX (Α) :
 Μέγιστη τιμή
Συναρτήσεις Συνάθροισης και
Ομαδοποίησης
 MIN (Α) :
 Ελάχιστη τιμή
Συναρτήσεις Συνάθροισης και
Ομαδοποίησης
 SUM (Α) :
 Άθροισμα τιμών (μόνο σε αριθμούς)
Συναρτήσεις Συνάθροισης και
Ομαδοποίησης
 (Α): αποτελεί τη στήλη :
 Όλες οι συναρτήσεις αγνοούν τις τιμές NULL εκτός
από την COUNT(*).
ΠΑΡΑΔΕΙΓΜΑΤΑ:
 SELECT Όνομα_Μαθήματος, AVG(Βαθμός) FROM
ΓραπτόςΒαθμόςΜαθητή WHERE
Όνομα_Μαθήματος=’Συστήματα Διαχείρισης
Βάσεων Δεδομένων (ΣΔΒΔ) και Εφαρμογές στο
Διαδίκτυο’
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα_Μαθήματος και το Μέσο Όρο του βαθμού
από τον πίνακα ΓραπτόςΒαθμόςΜαθητή, για το
μάθημα Συστήματα Διαχείρισης Βάσεων
Δεδομένων (ΣΔΒΔ) και Εφαρμογές στο Διαδίκτυο
ΠΑΡΑΔΕΙΓΜΑΤΑ:
 SELECT Όνομα_Μαθήματος, MIN(Βαθμός) FROM
ΓραπτόςΒαθμόςΜαθητή WHERE
Όνομα_Μαθήματος=’Συστήματα Διαχείρισης
Βάσεων Δεδομένων (ΣΔΒΔ) και Εφαρμογές στο
Διαδίκτυο
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα_Μαθήματος και το Μικρότερο βαθμό από
τον πίνακα Γραπτός Βαθμός Μαθητή, για την για το
μάθημα Συστήματα Διαχείρισης Βάσεων
Δεδομένων (ΣΔΒΔ) και Εφαρμογές στο Διαδίκτυο
ΠΑΡΑΔΕΙΓΜΑΤΑ:
 SELECT Όνομα_Μαθήματος, COUNT(*) FROM
ΓραπτόςΒαθμόςΜαθητή WHERE
Όνομα_Μαθήματος=’Συστήματα Διαχείρισης
Βάσεων Δεδομένων (ΣΔΒΔ) και Εφαρμογές στο
Διαδίκτυο’ AND Βαθμός<10
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα_Μαθήματος και το Πλήθος των μαθητών
από τον πίνακα ΓραπτόςΒαθμόςΜαθητή, για το
μάθημα Συστήματα Διαχείρισης Βάσεων
Δεδομένων (ΣΔΒΔ) και Εφαρμογές στο Διαδίκτυο
που ο βαθμός τους είναι μικρότερος από 10
Η φράση GROUP BY
 Μπορούμε να εφαρμόσουμε τις συναρτήσεις όχι
μόνο σε ένα σύνολο από εγγραφές, αλλά σε ομάδες
από σύνολα εγγραφών.
 Οι ομάδες προσδιορίζονται χρησιμοποιώντας το
group by και οι εγγραφές μιας ομάδας περιέχουν
την ίδια τιμή σε κάποιο δεδομένο πεδίο.
 Η φράση αυτή μπαίνει ΠΑΝΤΑ στο τέλος του
ερωτήματος.
Η φράση GROUP BY
 SELECT Τάξη, COUNT(*) FROM
ΕγγραφήΜαθητή GROUP BY Τάξη
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Τάξη και το Πλήθος των μαθητών, ανά τάξη από
τον πίνακα ΕγγραφήΜαθητή

Η φράση GROUP BY
 SELECT Τάξη, COUNT(*) FROM
ΕγγραφήΜαθητή WHERE Σχολ_έτος=’2014 -2015’
GROUP BY Τάξη
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Τάξη και το Πλήθος των μαθητών, ανά τάξη από
τον πίνακα ΕγγραφήΜαθητή, για το Σχολικό έτος
είναι 2014 -2015

Η φράση GROUP BY
 SELECT Τάξη, COUNT(*) FROM
ΕγγραφήΜαθητή WHERE Τάξη<>’Α’ AND
Σχολ_έτος=’2014-2015’ GROUP BY Τάξη
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Τάξη και το Πλήθος των μαθητών, ανά τάξη, εκτός
της Α, για το Σχολικό έτος είναι 2014 -2015, από
τον πίνακα ΕγγραφήΜαθητή. Η φράση where,
αποκλείει ομάδες.
Η Φράση HAVING
 Μπορούμε να εφαρμόσουμε μια συνθήκη σε μια
συγκεκριμένη ομάδα από εγγραφές
χρησιμοποιώντας το having. Η συνθήκη στην
φράση having εφαρμόζεται αφού σχηματιστούν οι
ομάδες (group by) και υπολογιστούν οι
συναθροιστικές συναρτήσεις.
Η Φράση HAVING
 SELECT Όνομα_Μαθήματος, AVG(Βαθμός) FROM
ΓραπτόςΒαθμόςΜαθητή GROUP BY
Όνομα_Μαθήματος HAVING AVG(Βαθμός)>15
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Όνομα_Μαθήματος και το μέσο όρο του βαθμού,
ανά μάθημα από τον πίνακα
ΓραπτόςΒαθμόςΜαθητή για τα μαθήματα που ο
βαθμός τους είναι μεγαλύτερος από 15
Η Φράση HAVING
 SELECT Τάξη, Σχολ_έτος, AVG(Βαθμός) FROM
ΓραπτόςΒαθμόςΜαθητή, ΕγγραφήΜαθητή
WHERE
ΓραπτόςΒαθμόςΜαθητή.ΑΜ=ΕγγραφήΜαθητή.ΑΜ
GROUP BY Τάξη, Σχολ_έτος HAVING
AVG(Βαθμός)>15
 Δηλαδή επέλεξε και εμφάνισε τις πληροφορίες
Τάξη, Σχολικό έτος και το μέσο όρο του βαθμού,
ανά τάξη και Σχολικό έτος, από τους πίνακες
ΓραπτόςΒαθμόςΜαθητή, ΕγγραφήΜαθητή για τα
μαθήματα που ο βαθμός τους είναι μεγαλύτερος
από 15
Οι Τύποι Δεδομένων της Γλώσσας SQL
 INTEGER :
 Ακέραιος αριθμός (χωρίς υποδιαστολή)
Οι Τύποι Δεδομένων της Γλώσσας SQL
 BIGINT :
 Ακέραιος αριθμός με ακρίβεια19 ψηφία.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 INTEGER(p) :
 Ακέραιος αριθμός με ακρίβεια p ψηφία.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 SMALLINT:
 Ακέραιος αριθμός με ακρίβεια 5 ψηφία.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 BINARY(n):
 Σταθερού μήκους δυαδική συμβολοσειρά,
μέγιστου μήκους n.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 BOOLEAN :
 Τιμές TRUE ή FALSE.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 BINARY VARYING(n), VARBINARY(n) :
 Μεταβλητού μήκους δυαδική συμβολοσειρά
μέγιστου μήκους n.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 FLOAT:
 Αριθμός με υποδιαστολή
Οι Τύποι Δεδομένων της Γλώσσας SQL
 DECIMAL(p, s) :
 Δεκαδικός αριθμός ακρίβειας p κλίμακας s. Η
κλίμακα s δε μπορεί να υπερβαίνει την ακρίβεια p.
Η ακρίβεια καθορίζει το πλήθος των ψηφίων
αριστερά της υποδιαστολής, ενώ η κλίμακα το
πλήθος των ψηφίων δεξιά της υποδιαστολής.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 NUMERIC(p, s) :
 Το ίδιο με το DECIMAL.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 FLOAT(p) :
 Προσεγγιστικός αριθμός με συντελεστή (mantissa)
ακρίβειας p. Κινητής υποδιαστολής αριθμός σε
εκθετική μορφή με βάση το 10.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 REAL :
 Προσεγγιστικός αριθμός με συντελεστή (mantissa)
ακρίβειας 7.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 DOUBLE PRECISION :
 Προσεγγιστικός αριθμός με συντελεστή (mantissa)
ακρίβειας 16.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 CHARACTER(N) :
 Σειρά χαρακτήρων (συμβόλων) σταθερού μήκους
N. Το μήκος N αναφέρεται στο μέγιστος μήκος της
τιμής. Οι τιμές για πεδία αυτού του τύπου πρέπει
να γράφονται μέσα σε μονά εισαγωγικά ‘ ‘, π.χ.
‘Γιώργος’.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 CHARACTER N. VARYING(N), VARCHAR(N):
 Συμβολοσειρά χαρακτήρων μεταβλητού μεγέθους,
μέγιστου
Οι Τύποι Δεδομένων της Γλώσσας SQL
 DATE, TIMESTAMP, TIME:
 Τύποι που αποτελούνται από έναν αριθμό
ακέραιων πεδίων που παριστάνουν, μια απόλυτη
χρονική στιγμή, ανάλογα με τον επιμέρους τύπο.
Οι Τύποι Δεδομένων της Γλώσσας SQL
 INTERVAL:
 Τύπος που αποτελείται από έναν αριθμό ακέραιων
πεδίων που παριστάνουν μια χρονική περίοδο,
ανάλογα με τον τύπο του διαστήματος.
 COLLECTION (ARRAY MULTISET)
 Ο πίνακας ARRAY (προστέθηκε στο πρότυπο
SQL99) είναι μια, διατεταγμένη συλλογή
στοιχείων. Ο τύπος MULTISET (προστέθηκε στο
πρότυπο SQL2003) είναι μεταβλητού μήκους και
μη διατεταγμένη συλλογή στοιχείων. Τα στοιχεία
και των δύο τύπων πρέπει να ανήκουν σε έναν από
τους προκαθορισμένους τύπους της SQL.
 XML
 Τύπος δεδομένων που αποθηκεύει δεδομένα
μορφής XML.
Εισαγωγή στην SQL
 Η SQL αποτελείται από εντολές με τα ορίσματά
τους, τις οποίες μπορούμε να χρησιμοποιήσουμε με
συγκεκριμένους κανόνες σύνταξης για να πάρουμε
τα αποτελέσματα που θέλουμε.
Εισαγωγή στην SQL
 Με την SQL μπορούμε να δημιουργήσουμε μια
βάση δεδομένων και τους πίνακές της με τα
αντίστοιχα πεδία, να καταχωρήσουμε δεδομένα
στους πίνακες, να τροποποιήσουμε και να
διαγράψουμε τα δεδομένα αυτά, να αλλάξουμε τη
δομή των πινάκων με προσθήκη και διαγραφή
πεδίων και να εμφανίσουμε πληροφορίες
(συνδυασμούς από δεδομένα).
Η SQL έχει δύο τμήματα : 1ο:
 Τη Γλώσσα Ορισμού Δεδομένων (DDL, Data
Definition Language), η οποία περιέχει τις
απαραίτητες εντολές για τον ορισμό και την
τροποποίηση του σχεσιακού σχήματος καθώς και
για τη δημιουργία, την τροποποίηση και τη
διαγραφή σχέσεων.
Η SQL έχει δύο τμήματα : 2ο:
 Τη Γλώσσα Χειρισμού Δεδομένων (DML, Data
Manipulation Language), η οποία περιέχει τις
απαραίτητες εντολές για την εμφάνιση
(αναζήτηση) δεδομένων καθώς και για την
καταχώρηση, τροποποίηση και διαγραφή των
εγγραφών (πλειάδων) μιας σχέσης.
Εισαγωγή στην SQL
 Η SQL υποστηρίζει τους εξής τύπους δεδομένων
για τα πεδία μιας σχέσης :
Τύποι δεδομένων της SQL
 char(n), ένα αλφαριθμητικό (string) με n ακριβώς
χαρακτήρες.
 varchar(n), ένα αλφαριθμητικό (string) με
μεταβλητό μήκος και με n το πολύ χαρακτήρες.
 int, ακέραιος αριθμός.
Τύποι δεδομένων της SQL
 smallint, ακέραιος αριθμός με μικρές τιμές.
 Numeric(p, d), αριθμός με p ψηφία, από τα οποία
τα d είναι δεκαδικά.
 real, αριθμός κινητής υποδιαστολής απλής
ακρίβειας.
 double precision, αριθμός κινητής υποδιαστολής
διπλής ακρίβειας.
Τύποι δεδομένων της SQL
 float(n), αριθμός κινητής υποδιαστολής με ακρίβεια
n ψηφίων.
 date, ημερομηνία (ημέρα, μήνας, έτος).
 time, ώρα (ώρα, λεπτά, δευτερόλεπτα).
Δημιουργία, Τροποποίηση και
Διαγραφή Σχέσεων
 Για να δημιουργήσουμε μια σχέση (πίνακα) χρησιμοποιούμε
την εντολή create table.
 Για παράδειγμα, για να δημιουργήσουμε τη σχέση Αθλητής
δίνουμε την εξής εντολή :
 Create table ΑΘΛΗΤΗΣ
 (Κωδικός_Αθλητή integer not null,
 Επώνυμο char(20) not null,
 Όνομα char(15),
 Ρεκόρ numeric(4, 2),
 Ημνία_Γέννησης date,
 Κωδικός_Συλλόγου integer not null,
 primary key (Κωδικός_Αθλητή),
 check(Κωδικός_Αθλητή >= 100));
Δημιουργία, Τροποποίηση και
Διαγραφή Σχέσεων
 Μετά την εντολή create table γράφουμε το όνομα
της σχέσης (πίνακα) και ακολουθεί μια παρένθεση
που περιέχει τα ονόματα των πεδίων με τους
τύπους δεδομένων τους. Η δήλωση not null
σημαίνει ότι το συγκεκριμένο πεδίο θα πρέπει να
έχει οπωσδήποτε κάποια τιμή.
Δημιουργία, Τροποποίηση και
Διαγραφή Σχέσεων
 Με τον όρο check μπορούμε να δηλώσουμε μια
συνθήκη για την περιοχή των τιμών ενός πεδίου.
Είδαμε τη χρήση του όρου check για να ελέγξει αν η
τιμή ενός κωδικού είναι μεγαλύτερη ή ίση από 100.
Δημιουργία, Τροποποίηση και
Διαγραφή Σχέσεων
 Μπορούμε να χρησιμοποιήσουμε τον όρο check και
για να ελέγξουμε αν η τιμή ενός πεδίου ανήκει σ’
ένα προκαθορισμένο σύνολο τιμών, ως εξής :
 check (Νομός in (‘Γρεβενών’, ‘Καστοριάς’, ‘Κοζάνης’,
‘Φλώρινας’))
Δημιουργία, Τροποποίηση και
Διαγραφή Σχέσεων
 Εδώ ελέγχουμε το αν η τιμή του πεδίου Νομός θα
ανήκει σε μία από τέσσερις συγκεκριμένες τιμές.
Για να τροποποιήσουμε μια σχέση και να
προσθέσουμε ένα πεδίο, δίνουμε την εντολή alter
table και το όρισμα add, ως εξής :
 Alter table ΑΘΛΗΤΗΣ add (Τηλέφωνο char(10));
Δημιουργία, Τροποποίηση και
Διαγραφή Σχέσεων
 Τα καινούργια πεδία που προστίθενται σε έναν
πίνακα, έχουν αρχικά τιμές ίσες με null. Για να
τροποποιήσουμε έναν πίνακα και να διαγράψουμε
ένα πεδίο, δίνουμε την εντολή alter table και το
όρισμα drop, ως εξής :
 Alter table ΑΘΛΗΤΗΣ drop Τηλέφωνο;
Δημιουργία, Τροποποίηση και
Διαγραφή Σχέσεων
 Για να διαγράψουμε τελείως μια σχέση από τη
βάση δεδομένων στην οποία ανήκει, μαζί με τις
τιμές των εγγραφών της, δίνουμε την εντολή drop
table, ως εξής :
 Drop table ΑΘΛΗΤΗΣ;
Δημιουργία, Τροποποίηση και
Διαγραφή Σχέσεων
 Υπάρχει και η εντολή delete from ΑΘΛΗΤΗΣ, με την
οποία μπορούμε να διαγράψουμε τις τιμές
(περιεχόμενα, εγγραφές) ενός πίνακα, αλλά όχι την
ίδιο τον πίνακα.
Πίνακες Βάσεων Δεδομένων
 Οι βάσεις δεδομένων (databases) περιέχουν
αντικείμενα (objects) που ονομάζονται Πίνακες
(Tables). Οι Εγγραφές (Records) των δεδομένων
αποθηκεύονται σ’ αυτούς τους πίνακες. Οι Πίνακες
αναγνωρίζονται με τα ονόματά τους, όπως
"Persons", "Orders", "Suppliers" κ.ά.
Πίνακες Βάσεων Δεδομένων
 Οι Πίνακες περιέχουν Στήλες (Columns) και
Γραμμές (Rows) με δε-δομένα. Οι Γραμμές (Rows)
περιέχουν εγγραφές (records), όπως μία εγγραφή
για κάθε άτομο. Οι Στήλες (Columns) περιέχουν
δεδομένα, όπως First Name, Last Name, Address
και City.
Ερωτήματα της SQL
 Με την SQL, μπορούμε να κάνουμε ένα ερώτημα
(Query) σε μια βάση δεδομένων και να έχουμε ένα
αποτέλεσμα (Result) σε μορφή πίνακα (tabu-lar
form).
Ερωτήματα της SQL
Ενα ερώτημα σαν το εξής :
 SELECT LastName FROM Persons
θα δώσει ένα αποτέλεσμα σαν το εξής :
 LastName
 Παπαδόπουλος
 Αντωνιάδης
 Γεωργιάδης
Ερωτήματα της SQL
 Πρέπει να έχουμε υπόψη μας ότι μερικά συστήματα
βάσεων δεδομένων απαιτούν το σύμβολο ;
(semicolon) στο τέλος μιας εντολής SQL. Δεν θα
χρησιμοποιήσουμε εδώ το σύμβολο ;.
Χειρισμός Δεδομένων της SQL
 Όπως υπονοεί και το όνομά της, η SQL είναι μια
σύνταξη για την εκτέλεση ερωτημάτων (queries).
Αλλά η γλώσσα της SQL περιλαμβάνει επίσης μια
σύνταξη για την ενημέρωση εγγραφών, την
εισαγωγή νέων εγγραφών και τη διαγραφή
υπαρχόντων εγγραφών.
Εντολές ερωτημάτων και ενημέρωσης
 Αυτές οι εντολές ερωτημάτων και ενημέρωσης
αποτελούν μαζί τη Γλώσσα Χειρισμού Δεδομένων
(Data Manipulation Language, DML) που αποτελεί
κομμάτι της SQL:
Εντολές ερωτημάτων και ενημέρωσης
 SELECT
 εξάγει δεδομένα από μια βάση δεδομένων.
 UPDATE
 ενημερώνει δεδομένα σε μια βάση δεδομένων.
Εντολές ερωτημάτων και ενημέρωσης
 DELETE
 διαγράφει δεδομένα από μια βάση δεδομένων.
 INSERT
 εισάγει νέα δεδομένα σε μια βάση δεδομένων.
Ορισμός Δεδομένων της SQL
 Η Γλώσσα Ορισμού Δεδομένων (Data Definition
Language, DDL), που αποτελεί μέρος της SQL,
επιτρέπει τη δημιουργία και τη διαγραφή πινάκων
μιας βάσης δεδομένων. Μπορούμε επίσης να
ορίσουμε indexes (keys), να καθορίσουμε
συνδέσμους (links) ανάμεσα στους πίνακες και να
επιβάλλουμε περιορισμούς ανάμεσα στους πίνακες
μιας βάσης δεδομένων.
Η Εντολή Select
 Θα δούμε τώρα τις εντολές της Γλώσσας Χειρισμού
Δεδομένων DML (Data Manipulation Language). Η
βασικότερη είναι η εντολή Select, που
χρησιμοποιείται για την εμφάνιση (ανάκληση)
δεδομένων από τη βάση δεδομένων.
Η Εντολή Select
 Η γενική σύνταξη της εντολής Select για την
αναζήτηση δεδομένων σε μια βάση δεδομένων
είναι η εξής :
Select Πεδίο1, Πεδίο2, … Πεδίοn
From Πίνακας1, Πίνακας2, …, Πίνακαςm
Where συνθήκη;
Η Εντολή Select
 Τα πεδία που δηλώνουμε στην εντολή Select είναι
αυτά που θα εμφανίζονται στο αποτέλεσμα. Είναι
αντίστοιχο με την πράξη της προβολής (projection)
της σχεσιακής άλγεβρας.
Η Εντολή Select
 Αν θέλουμε να εμφανίζονται όλα τα πεδία θα
πρέπει να χρησιμοποιήσουμε τον χαρακτήρα *. Ο
όρος From δηλώνει τις σχέσεις (πίνακες) στους
οποίους θα γίνει η αναζήτηση. Είναι αντίστοιχο με
την πράξη του καρτεσιανού γινομένου της
σχεσιακής άλγεβρας.
Η Εντολή Select
 Ο όρος Where είναι προαιρετικός και περιέχει τη
συνθήκη που θέλουμε να ικανοποιούν οι εγγραφές
(πλειάδες) του αποτελέσματος. Είναι αντίστοιχο με
την πράξη της επιλογής (selection) της σχεσιακής
άλγεβρας.
Η Εντολή Select
 Η επόμενη εντολή Select εμφανίζει μόνο τα πεδία
Επώνυμο και Όνομα αθλητή καθώς και τον Κωδικό
του Συλλόγου στον οποίο ανήκει ο κάθε αθλητής
και αυτό γι’ όλους ανεξαιρέτως τους αθλητές που
υπάρχουν στον πίνακα ΑΘΛΗΤΗΣ :
 Select Επώνυμο, Όνομα, Κωδικός_Συλλόγου
 From ΑΘΛΗΤΗΣ;
Η Εντολή Select
 Επειδή υπάρχει η περίπτωση, ακραία μεν αλλά
εφικτή, να υπάρχουν δύο ή και περισσότερες
εγγραφές με ίδια τα παραπάνω στοιχεία (πεδία)
ενός αθλητή, μπορούμε να χρησιμοποιήσουμε και
τον όρο distinct, ώστε να μην εμφανίζονται οι
όμοιες εγγραφές, ως εξής :
 Select distinct Επώνυμο, Όνομα,
Κωδικός_Συλλόγου
 From ΑΘΛΗΤΗΣ;
Η Εντολή Select
 Αν θέλουμε να δούμε όλα τα στοιχεία (πεδία) των
αθλητών, θα πρέπει να χρησιμοποιήσουμε το
σύμβολο *, ως εξής :
 Select *
 From ΑΘΛΗΤΗΣ;
Η Εντολή Select
 Η επόμενη εντολή Select εμφανίζει εκείνους τους
αθλητές που έχουν ατομικό ρεκόρ μεγαλύτερο από
μια συγκεκριμένη τιμή :
 Select Επώνυμο, Όνομα, Κωδικός_Συλλόγου, Ρεκόρ
 From ΑΘΛΗΤΗΣ
 Where Ρεκόρ > 10.05;
Η Εντολή Select
 Η επόμενη εντολή Select εμφανίζει με τη χρήση της
διάζευξης (λογικό ή – or) εκείνους τους αθλητές
που ανήκουν σ’ έναν από δύο συλλόγους :
 Select Επώνυμο, Όνομα, Κωδικός_Συλλόγου, Ρεκόρ
 From ΑΘΛΗΤΗΣ
 Where Κωδικός_Συλλόγου = 1 or
Κωδικός_Συλλόγου = 2;
Η Εντολή Select
 Η επόμενη εντολή Select εμφανίζει με τη χρήση της
σύζευξης (λογικό και – and) εκείνους τους αθλητές
που έχουν ατομικό ρεκόρ σε μια περιοχή τιμών :
 Select Επώνυμο, Όνομα, Κωδικός_Συλλόγου, Ρεκόρ
 From ΑΘΛΗΤΗΣ
 Where Ρεκόρ > 10.00 and Ρεκόρ < 10.08;
Η Εντολή Select
 Θα δούμε τώρα πώς μπορεί να γίνει η ανάκληση
δεδομένων από πεδία που περιέχονται σε
περισσότερες από μία σχέσεις. Η αναφορά σε
πολλές σχέσεις αντιστοιχεί στην πράξη της
σύνδεσης (join) της σχεσιακής άλγεβρας.
Η Εντολή Select
 Για παράδειγμα, για τη συσχέτιση των σχέσεων
ΑΘΛΗΤΗΣ και ΣΥΜΜΕΤΟΧΗ χρησιμοποιήσαμε το
κοινό πεδίο Κωδικός_Αθλητή, το οποίο είναι
πρωτεύον κλειδί στη σχέση ΑΘΛΗΤΗΣ και ξένο
κλειδί στη σχέση ΣΥΜΜΕΤΟΧΗ.
Η Εντολή Select
 Για να βρούμε τώρα ποιοι αθλητές συμμετείχαν σε
ποιους αγώνες, δίνουμε την εξής εντολή:
 Select Κωδικός_Αθλητή, Επώνυμο, Όνομα,
Κωδικός_Αγώνα
 From ΑΘΛΗΤΗΣ, ΣΥΜΜΕΤΟΧΗ
 Where ΑΘΛΗΤΗΣ.Κωδικός_Αθλητή =
 ΣΥΜΜΕΤΟΧΗ. Κωδικός_Αθλητή;
Η Εντολή Select
 Είδαμε στο προηγούμενο παράδειγμα τη χρήση του
όρου where με την απαραίτητη συνθήκη για τη
δημιουργία της σύνδεσης των δύο σχέσεων
(πινάκων). Μπορούμε να ορίσουμε και μια πιο
πολύπλοκη συνθήκη για να βρούμε τους αθλητές
που συμμετείχαν σε κάποιον συγκεκριμένο αγώνα:
Η Εντολή Select
 Select Κωδικός_Αθλητή, Επώνυμο, Όνομα,
Κωδικός_Αγώνα
 From ΑΘΛΗΤΗΣ, ΣΥΜΜΕΤΟΧΗ
 Where (ΑΘΛΗΤΗΣ.Κωδικός_Αθλητή =
 ΣΥΜΜΕΤΟΧΗ. Κωδικός_Αθλητή) and
Κωδικός_Αγώνα=100;8.
Το Where Clause της SQL
 Το WHERE clause χρησιμοποιείται για να
καθορίσουμε ένα κριτήριο επιλογής (selection
criteria). Για να μπορέσουμε να επιλέξουμε
δεδομένα υπό συνθήκη από έναν πίνακα, πρέπει να
προσθέσουμε ένα WHERE clause σε μια εντολή
SELECT, ως εξής :
Το Where Clause της SQL
 SELECT στήλη FROM πίνακα WHERE στήλη
συνθήκη τιμή
 Με το WHERE clause, μπορούμε να
χρησιμοποιήσουμε αυτές τις συνθήκες:
Το Where Clause της SQL
 = Ίσο
 <> Όχι ίσο
 > Μεγαλύτερο από
 < Μικρότερο από
 >= Μεγαλύτερο από ή ίσο με
 <= Μικρότερο από ή ίσο με
 LIKE Επεξηγείται παρακάτω
Το Where Clause της SQL
 Σε μερικές εκδόσεις της SQL, ο τελεστής για το όχι
ίσο (<>), μπορεί να γραφεί ως εξής : !=.
 Παράδειγμα : Επιλογή Ατόμων από μια Πόλη
Το Where Clause της SQL
 Για να επιλέξουμε μόνο τα άτομα που κατοικούν
στην πόλη Φλώρινα, προσθέτουμε ένα WHERE
clause στην εντολή SELECT, ως εξής :
 SELECT * FROM Persons WHERE City='Φλώρινα'
Το Where Clause της SQL
 Έχουμε χρησιμοποιήσει μονά εισαγωγικά (single
quotes) στις τιμές των συνθηκών στα
παραδείγματα.
Το Where Clause της SQL
 Η SQL χρησιμοποιεί μονά εισαγωγικά στις
αλφαριθμητικές τιμές (κείμενο). Τα περισσότερα
συστήματα βάσεων δεδομένων αποδέχονται και τα
διπλά εισαγωγικά (double quotes). Οι αριθμητικές
τιμές δεν πρέπει να περικλείονται σε εισαγωγικά.
Το Where Clause της SQL
 Για τις τιμές κειμένου (αλφαριθμητικές) :
 Αυτό είναι σωστό :
 SELECT * FROM Persons WHERE
FirstName='Δημήτριος'
 Αυτό δεν είναι σωστό :
 SELECT * FROM Persons WHERE
FirstName=Δημήτριος
Το Where Clause της SQL
 Για τις αριθμητικές τιμές :
 Αυτό είναι σωστό :
 SELECT * FROM Persons WHERE Year>1965
 Αυτό δεν είναι σωστό :
 SELECT * FROM Persons WHERE Year>'1965'
Η Συνθήκη LIKE
 Η συνθήκη LIKE χρησιμοποιείται για να
καθορίσουμε μια αναζήτηση για ένα υπόδειγμα
(pattern) σε μια στήλη. Η σύνταξη είναι ως εξής :
 SELECT στήλη FROM πίνακα WHERE στήλη LIKE
υπόδειγμα
Η Συνθήκη LIKE
 Μπορούμε να χρησιμοποιήσουμε το σύμβολο "%"
για να ορίσουμε χαρακτήρες μπαλαντέρ
(wildcards) πριν και μετά από το υπόδειγμα.
 Παράδειγμα : Επιλογή Ατόμων με Υπόδειγμα
Ονόματος
Η Συνθήκη LIKE
 Η επόμενη εντολή SQL θα επιστρέψει τα άτομα που
το όνομά τους αρχίζει από 'O’.
 SELECT * FROM Persons WHERE FirstName LIKE
'O%'
Η Συνθήκη LIKE
 Η επόμενη εντολή SQL θα επιστρέψει τα άτομα που
το όνομά τους τελειώνει σε 'α’.
 SELECT * FROM Persons WHERE FirstName LIKE
'%α'
Η Συνθήκη LIKE
 Η επόμενη εντολή SQL θα επιστρέψει τα άτομα που
το όνομά τους περιέχει το 'γα’.
 SELECT * FROM Persons WHERE FirstName LIKE
'%γα%'
Η Λέξη Κλειδί Distinct
 Η λέξη κλειδί DISTINCT χρησιμοποιείται για να
επιστρέφει μόνο διακριτές (διαφορετικές)
(distinct, different) τιμές. Η εντολή SELECT της SQL
επιστρέφει στοιχεία από τις στήλες ενός πίνακα,
αλλά τι μπορούμε να κάνουμε αν θέλουμε να
επιλέξουμε μόνο διακριτά στοιχεία (distinct eleme-
nts);
Η Λέξη Κλειδί Distinct
 Στην SQL, αυτό που πρέπει να κάνουμε είναι να
προσθέσουμε μια λέξη κλειδί DISTINCT στην
εντολή SELECT, ως εξής :
 SELECT DISTINCT ονόματα_στηλών FROM
όνομα_πίνακα
Η Λέξη Κλειδί Distinct
 Παράδειγμα
 Επιλογή εταιρειών από έναν πίνακα παραγγελιών.
 Ενας απλός πίνακας παραγγελιών :
 Company OrderNumber
 Line Computers 3412
 Sony 2312
 Algorithm 4678
 Sony 6798
Η Λέξη Κλειδί Distinct
 Η επόμενη εντολή SQL :
 SELECT Company FROM Orders
 θα δώσει αυτό το αποτέλεσμα :
 Company
 Line Computers
 Sony
 Algorithm
 Sony
Η Λέξη Κλειδί Distinct
 Βλέπουμε ότι η εταιρεία Sony εμφανίζεται δύο
φορές στο αποτέλεσμα. Μερικές φορές δεν το
θέλουμε αυτό.
 Παράδειγμα
 Επιλογή ξεχωριστών εταιρειών από έναν πίνακα
παραγγελιών.
Η Λέξη Κλειδί Distinct
Η επόμενη εντολή SQL :
SELECT DISTINCT Company FROM Orders
θα δώσει αυτό το αποτέλεσμα :
 Company
 Line Computers
 Sony
 Algorithm
Τώρα η εταιρεία Sony εμφανίζεται μόνο μία φορά
στο αποτέλεσμα.
Η Λέξη Κλειδί Order By
 Η λέξη κλειδί ORDER BY χρησιμοποιείται για να
ταξινομήσει το αποτέλεσμα. Το ORDER BY clause
χρησιμοποιείται για να ταξινομήσει τις γραμμές.
 Πίνακας Παραγγελίες :
 Company OrderNumber
 Digital Shop 3412
 ABC Shop 5678
 Sony 2312
 Sony 6798
Η Λέξη Κλειδί Order By
 Παράδειγμα
 Για να εμφανίσουμε τις εταιρείες σε αλφαβητική σειρά :
 SELECT Company, OrderNumber FROM Orders
 ORDER BY Company
 Αποτέλεσμα :
 Company OrderNumber
 ABC Shop 5678
 Digital Shop 3412
 Sony 6798
 Sony 2312
Η Εντολή INSERT INTO
 Η εντολή INSERT INTO εισάγει νέες γραμμές σ’ έναν
πίνακα. Η σύνταξή της είναι ως εξής :
 INSERT INTO όνομα_πίνακα
 VALUES (τιμή1, τιμή2, ...)
Η Εντολή INSERT INTO
 Μπορούμε επίσης να καθορίσουμε τις στήλες για
τις οποίες θέλουμε να εισάγουμε δεδομένα :
 INSERT INTO όνομα_πίνακα(στήλη1, στήλη2, ...)
 VALUES (τμή1, τιμή2, ...)
Η Εντολή INSERT INTO
 Ο επόμενος πίνακας "Persons" :
 LastNameFirstName Address City
 Σουμπάση Μαρία Καλλέργη 15Φλώρινα
Η Εντολή INSERT INTO
 και αυτή η εντολή SQL :
 INSERT INTO Persons
 VALUES ('Σιάμκουρης', 'Ιωάννης', 'Π. Μελά 90',
'Καστοριά')
 δίνουν αυτό το αποτέλεσμα :
 LastNameFirstName Address City
 Σουμπάση Μαρία Καλλέργη 15Φλώρινα
 Σιάμκουρης Ιωάννης Π. Μελά 90
Καστοριά
Η Εντολή Update
 Η εντολή UPDATE ενημερώνει ή αλλάζει γραμμές. Η
σύνταξή της είναι ως εξής :
 UPDATE όνομα_πίνακα SET
όνομα_στήλης=νέα_τιμή
 WHERE όνομα_στήλης=τιμή
Η Εντολή Update
 Αρχικός πίνακας Person :
LastName FirstName Address City
Σουμπάση Μαρία Καλλέργη 15Φλώρινα
Σιάμκουρης Ιωάννης Π. Μελά 90 Καστοριά
Νικολάου Ταγμ. Ναούμ 30
Η Εντολή Update
 Ενημέρωση μίας Στήλης σε μια Γραμμή
 Θέλουμε να προσθέσουμε ένα όνομα στο άτομο
που έχει το επώνυμο "Νικολάου" :
 UPDATE Person SET FirstName = 'Αθηνά'
 WHERE LastName = 'Νικολάου'
Η Εντολή Update
 Ενημέρωση Πολλών Στηλών σε μια Γραμμή
 Για το ίδιο άτομο θέλουμε να αλλάξουμε τη
διεύθυνση και να προσθέσουμε ένα όνομα για την
πόλη:
 UPDATE Person
 SET Address = 'Μεγαρόβου 12', City ='Φλώρινα'
 WHERE LastName = 'Νικολάου'
Η Εντολή Update
 Αποτέλεσμα :
LastName FirstName Address City
Σουμπάση Μαρία Καλλέργη 15Φλώρινα
Σιάμκουρης Ιωάννης Π. Μελά 90 Καστοριά
Νικολάου Αθηνά Μεγαρ 12 Φλώρινα
Η Εντολή Delete
 Η εντολή DELETE χρησιμοποιείται για να
διαγράψουμε γραμμές από έναν πίνακα. Η σύνταξή
της είναι ως εξής :
 DELETE FROM όνομα_πίνακα
 WHERE όνομα_στήλης = τιμή
Η Εντολή Delete
 Αρχικός πίνακας Person :
LastName FirstName Address City
Σουμπάση Μαρία Καλλέργη 15Φλώρινα
Σιάμκουρης Ιωάννης Π. Μελά 90 Καστοριά
Νικολάου Αθηνά Μεγαρ 12 Φλώρινα
Η Εντολή Delete
 Διαγραφή μιας Γραμμής
 Θα διαγράψουμε την "Νικολάου Αθηνά" :
 DELETE FROM Person WHERE LastName =
'Νικολάου'
Η Εντολή Delete
 Αποτέλεσμα :
LastName FirstName Address City
Σουμπάση Μαρία Καλλέργη 15Φλώρινα
Σιάμκουρης Ιωάννης Π. Μελά 90 Καστοριά
Οι Λέξεις Κλειδιά COUNT και DISTINCT
 Οι λέξεις κλειδιά DISTINCT και COUNT μπορούν να
χρησιμοποιηθούν μαζί για να μετρήσουμε τον
αριθμό των διακριτών αποτελεσμάτων (di-stinct
results).
Οι Λέξεις Κλειδιά COUNT και DISTINCT
 Η σύνταξη είναι ως εξής :
 SELECT DISTINCT COUNT(στήλες) FROM
πίνακας
 Με τον επόμενο πίνακα "Orders" :
 Company OrderNumber
 Hitachi 3412
 Sony 2312
 ABC 4678
 Sony 6798
Οι Λέξεις Κλειδιά COUNT και DISTINCT
 Η επόμενη εντολή SQL :
 SELECT COUNT(Company) FROM Orders
 θα δώσει αυτό το αποτέλεσμα : 4
Οι Λέξεις Κλειδιά COUNT και DISTINCT
 Η επόμενη εντολή SQL :
 SELECT DISTINCT COUNT(Company) FROM Orders
 θα δώσει αυτό το αποτέλεσμα : 3
Η Λέξη Κλειδί Group By
 Η λέξη κλειδί GROUP BY έχει προστεθεί στην SQL
επειδή οι αθροιστικές συναρτήσεις (aggregate
functions), όπως είναι η SUM, επιστρέφουν το
σύνολο όλων των τιμών μιας στήλης κάθε φορά
που καλούνται.
Η Λέξη Κλειδί Group By
 καλούνται. Χωρίς την λέξη κλειδί GROUP BY, το να
βρούμε το άθροισμα για κά-θε ανεξάρτητη ομάδα
τιμών μιας στήλης θα ήταν αδύνατο. Η σύνταξη της
GROUP BY είναι η εξής :
 SELECT στήλη, SUM(στήλη) FROM πίνακας GROUP
BY στήλη
Η Λέξη Κλειδί Group By
 Παράδειγμα με GROUP BY
 Ο παρακάτω πίνακας "Sales" :
 Company Amount
 Grundig 5500
 IBM 4500
 Grundig 7100
Η Λέξη Κλειδί Group By
 και αυτή η εντολή SQL :
 SELECT Company, SUM(Amount) FROM Sales
 θα δώσουν αυτό το αποτέλεσμα :
 Company SUM(Amount)
 Grundig 17100
 IBM 17100
 Grundig 17100
Η Λέξη Κλειδί Group By
 Ο παραπάνω κώδικας δεν είναι έγκυρος επειδή η
στήλη που επιστρέφει δεν αποτελεί μέρος ενός
αθροίσματος (aggregate). Ένα GROUP BY clause
μπορεί να το διορθώσει αυτό, ως εξής :
 SELECT Company, SUM(Amount) FROM Sales
 GROUP BY Companyν και θα δώσει αυτό το
αποτέλεσμα :
 Company SUM(Amount)
 Grundig 12600
 IBM 4500
Η Λέξη Κλειδί HAVING
 Η λέξη κλειδί HAVING έχει προστεθεί στην SQL
επειδή η λέξη κλειδί WHERE δεν μπορεί να
χρησιμοποιηθεί σε αθροιστικές συναρτήσεις, όπως
είναι η SUM.
Η Λέξη Κλειδί HAVING
 Η σύνταξη της συνάρτησης HAVING είναι η εξής :
 SELECT στήλη, SUM(στήλη) FROM πίνακας
 GROUP BY στήλη
 HAVING SUM(στήλη) συνθήκη
Η Λέξη Κλειδί HAVING
 Ο παρακάτω πίνακας "Sales" :
 Company Amount
 Grundig 5500
 IBM 4500
 Grundig 7100
Η Λέξη Κλειδί HAVING
 και αυτή η εντολή SQL :
 SELECT Company, SUM(Amount) FROM Sales
 GROUP BY Company HAVING
SUM(Amount)>10000
 θα δώσουν αυτό το αποτέλεσμα :
 Company SUM(Amount)
 Grundig 12600
Τα Ψευδώνυμα (Aliases)
 Στην SQL, τα ψευδώνυμα (aliases)
χρησιμοποιούνται για ονόματα στηλών και
πινάκων.
 Ψευδώνυμο Στήλης (Column Name Alias)
 Η σύνταξη είναι ως εξής :
 SELECT στήλη AS column_alias FROM πίνακας
 Ψευδώνυμο Πίνακα (Table Name Alias)
Τα Ψευδώνυμα (Aliases)
 Η σύνταξη είναι ως εξής :
 SELECT στήλη FROM πίνακας AS table_alias
 Παράδειγμα με Column Alias
 Ο επόμενος πίνακας Persons :
LastName FirstName Address City
Σουμπάση Μαρία Καλλέργη 15Φλώρινα
Σιάμκουρης Ιωάννης Π. Μελά 90 Καστοριά
Νικολάου Αθηνά Μεγαρ 12 Φλώρινα
Τα Ψευδώνυμα (Aliases)
 και η εξής εντολή SQL :
 SELECT LastName AS Family, FirstName AS
Name
 FROM Persons
 δίνουν αυτό το αποτέλεσμα :
 Family Name
 Σουμπάση Μαρία
 Σιάμκουρης Ιωάννης
 Νικολάου Αθηνά
Δημιουργία Βάσης Δεδομένων και
Πίνακα
 Για να δημιουργήσουμε μια βάση δεδομένων,
μπορούμε να δώσουμε την εξής εντολή :
 CREATE DATABASE όνομα_βάσης_δεδομένων
Δημιουργία Βάσης Δεδομένων και
Πίνακα
 Για να δημιουργήσουμε έναν πίνακα σε μια βάση
δεδομένων, μπορούμε να δώσουμε την εξής εντολή:
 CREATE TABLE όνομα_πίνακα
 (
 όνομα_στήλης_1 τύπος_δεδομένων,
 όνομα_στήλης_2 τύπος_δεδομένων,
 …
 )
Δημιουργία Βάσης Δεδομένων και
Πίνακα
 Παράδειγμα
 Θα δημιουργήσουμε έναν πίνακα με όνομα "Person", με
τέσσερις στήλες με ονόματα "LastName", "FirstName",
"Address" και "Age" :
 CREATE TABLE Person
 (
 LastName varchar,
 FirstName varchar,
 Address varchar,
 Age number
 )
Δημιουργία Βάσης Δεδομένων και
Πίνακα
 Θα ορίσουμε ένα μέγιστο μήκος για μερικές στήλες
:
 CREATE TABLE Person
 (
 LastName varchar(30),
 FirstName varchar,
 Address varchar,
 Age number(3)
 )
Δημιουργία Βάσης Δεδομένων και
Πίνακα
 Ο τύπος δεδομένων (data type) καθορίζει τι είδος
δεδομένων θα περιέχει η στήλη. Ο παρακάτω
πίνακας περιέχει τους πιο συνηθισμένους τύπους
δεδομένων της SQL :
Δημιουργία Βάσης Δεδομένων και
Πίνακα
 char(size)
 Περιέχει ένα string σταθερού μήκους που μπορεί
να περιέχει γράμματα, αριθμούς και ειδικούς
χαρακτήρες. Το σταθερό μέγεθος καθορίζεται στις
παρενθέσεις.
Δημιουργία Βάσης Δεδομένων και
Πίνακα
 varchar(size)
 Περιέχει ένα string μεταβλητού μήκους που μπορεί
να περιέχει γράμματα, αριθμούς και ειδικούς
χαρακτήρες. Το μέγιστο μέγεθος καθορίζεται στις
παρενθέσεις.
Δημιουργία Βάσης Δεδομένων και
Πίνακα
 number(size)
 Περιέχει έναν αριθμό, όπου ο μέγιστος αριθμός των
ψηφίων καθορίζεται στις παρενθέσεις.
Δημιουργία Βάσης Δεδομένων και
Πίνακα
 number(size, d)
 Περιέχει έναν αριθμό, όπου ο μέγιστος αριθμός των
ψηφίων καθορίζεται στο size και ο μέγιστος
αριθμός των ψηφίων στα δεξιά της υποδιαστολής
καθορίζεται στο d.
Δημιουργία Βάσης Δεδομένων και
Πίνακα
 date
 Περιέχει μια ημερομηνία.
Διαγραφή Βάσης Δεδομένων και Πίνακα
 Για να διαγράψουμε μια βάση δεδομένων,
χρησιμοποιούμε την εξής εντολή:
 DROP DATABASE όνομα_βάσης_δεδομένων
Διαγραφή Βάσης Δεδομένων και Πίνακα
 Για να διαγράψουμε έναν πίνακα, χρησιμοποιούμε
την εξής εντολή :
 DROP TABLE όνομα_πίνακα
 Για να διαγράψουμε τα δεδομένα ενός πίνακα
χωρίς να διαγράψουμε τον πίνακα, χρησιμοποιούμε
την εξής εντολή :
 DELETE TABLE όνομα_πίνακα
Η Εντολή Alter Table
 Η εντολή ALTER TABLE χρησιμοποιείται για να
προσθέσουμε ή να διαγράψουμε στήλες από έναν
υπάρχοντα πίνακα.
Η Εντολή Alter Table
 Η σύνταξή της για τις δύο αυτές περιπτώσεις είναι
ως εξής :
 ALTER TABLE όνομα_πίνακα ADD όνομα_στήλης
τύπος_δεδομένων
 ALTER TABLE όνομα_πίνακα DROP όνομα_στήλης
Η Εντολή Alter Table
 Πίνακας Person :
 LastNameFirstName Address
 Σταύρου Μαρίνα Σαρανταπόρου 10
Η Εντολή Alter Table
 Παράδειγμα
 Για να προσθέσουμε μια στήλη με όνομα "City"
στον πίνακα "Person", δίνουμε την εξής εντολή:
 ALTER TABLE Person ADD City varchar(30)
Η Εντολή Alter Table
 Αποτέλεσμα :
 LastName FirstName Address City
 Σταύρου Μαρίνα Σαρανταπόρου 10
Η Εντολή Alter Table
 Παράδειγμα
 Για να διαγράψουμε (drop) τη στήλη "Address"
του πίνακα "Person", δίνουμε την εξής εντολή:
 ALTER TABLE Person DROP Address
 Αποτέλεσμα :
 LastNameFirstName City
 Σταύρου Μαρίνα
ALTER FUNCTION
 Τροποποιεί την δομή μιας συνάρτησης που
ορίζεται από τον χρήστη. Η πρόταση ALTER
FUNCTION χρησιμοποιείται συνήθως για να
καταργήσει μια δέσμευση σχήματος. Ολες οι
επιλογές της πρότασης ALTER FUNCTION
αντιστοιχούν στις επιλογές με το ίδιο όνομα στην
πρόταση CREATE FUNCTION.
DROP FUNCTION
 Καταργείται μια συνάρτηση που ορίζεται από τον
χρήστη Μόνο ο ιδιοκτήτης της συνάρτησης (ή τα
μέλη των σταθερών ρόλων βάσης δεδομένων
db_owner και sysadmin) μπορούν να καταργήσουν
την συνάρτηση
Triggers
 Μία σκανδάλη ή αλλιώς ένας ερεθισμός είναι ένας
μηχανισμός που καλείται όταν συμβαίνει μια
συγκεκριμένη ενέργεια σε ένα συγκεκριμένο
πίνακα και εκτελεί δέσμες εντολών που αφορούν
το συγκεκριμένο πίνακα ή άλλους πίνακες.
Triggers
 Κάθε ερεθισμός έχει τρία γενικά μέρη:
 Ένα όνομα - Μια ενέργεια - Την εκτέλεση
 Η ενέργεια ενός ερεθισμού μπορεί να είναι μια
πρόταση INSERT, UPDATE ή DELETE.
 To τμήμα εκτέλεσης μιας σκανδάλης περιέχει
συνήθως μια αποθηκευμένη διαδικασία ή μια
δέσμη εντολών.
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}
Triggers
 trigger_name είναι το όνομα του ερεθισμού.
table_name είναι το όνομα του πίνακα για τον
οποίο καθορίζεται ο ερεθισμός. Στον SQL Server
2000, μπορείτε επίσης να ορίσετε ερεθισμούς για
όψεις/views.
 ON tablename | viewname μια σκανδάλη μπορεί να
εφαρμόζεται μόνο σε ένα πίνακα ή όψη.
Triggers
 AFTER και INSTEAD OF είναι δύο πρόσθετες
επιλογές, που μπορείτε να ορίσετε σε μια
σκανδάλη.
 FOR είναι συνώνυμη της AFTER. Η AFTER ξεκινά
την εκτέλεση της δέσμης εντολών μετά την
εκκίνηση της σκανδάλης.
 INSTEAD OF εκτελούνται αντί του αντίστοιχου
συμβάντος INSERT, UPDATE ή DELETE της
σκανδάλης.
Triggers
 Οι σκανδάλες AFTER μπορούν να εκτελεστούν
μόνο σε πίνακες, ενώ αυτές που περιέχουν την
επιλογή INSTEAD OF μπορούν να δημιουργηθούν
και σε πίνακες και σε όψεις.
Triggers
 Οι επιλογές INSERT, UPDATE και DELETE
καθορίζουν την ενέργεια της σκανδάλης δηλ τις
εντολές SQL που θα εκτελεστούν μετά την
ενεργοποίηση της σκανδάλης. Οι προτάσεις αυτές
μπορούν να υπάρχουν ξεχωριστά η κάθε μια ή και
συνδυασμός τους.
Triggers
 IF UPDATE χρησιμοποιείται σαν μια πρόσθετη
συνθήκη σε περίπτωση εισαγωγής ή ενημέρωσης
σε μια συγκεκριμένη στήλη ή στήλες του πίνακα.
Triggers
 Στην πρόταση CREATE TRIGGER μπορούν να
υπάρχουν περισσότερες από μια φράσεις IF
UPDATE, και συνδυάζονται χρησιμοποιώντας τις
λογικές συνθήκες AND και OR και είναι ισοδύναμη
με τον ορισμό ενός περιορισμού επιπέδου στήλης.
Triggers
 Επιτρέπει η δημιουργία πολλαπλών σκανδάλων σε
κάθε πίνακα. Μετά την δημιουργία της βάσης
δεδομένων, μόνο ο ιδιοκτήτης της βάσης
δεδομένων, ο διαχειριστής της γλώσσας ορισμού
δεδομένων και ο ιδιοκτήτης του πίνακα στον οποίο
έχει οριστεί ο ερεθισμός έχουν την εξουσιοδότηση
να δημιουργήσουν μια σκανδάλη στην τρέχουσα
βάση δεδομένων.
Triggers
 Σε κάθε εκτέλεση μιας σκανδάλης δημιουργούνται
δύο εικονικοί πίνακες με ειδικά ονόματα. Ο πίνακας
deleted και ο πίνακας inserted.
 Η δομή αυτών των πινάκων είναι ισοδύναμη με την
δομή του πίνακα στον οποίο αναφέρεται η
σκανδάλη. Ο πίνακας deleted περιέχει αντίγραφα
από τις γραμμές που διαγράφονται από τον
πίνακα που έχει εφαρμοσθεί η σκανδάλη.
Triggers
 Το ίδιο ισχύει και για τον πίνακα inserted όπου
δημιουργούνται αντίγραφα των γραμμών που
εισάγονται στον πίνακα που έχει εφαρμοσθεί η
σκανδάλη. Αν στην σκανδάλη υπάρχει μια εντολή
UPDATE, τότε στον πίνακα deleted μπαίνουν τα
δεδομένα πριν από την τροποποίηση και στον
πίνακα inserted μπαίνουν δεδομένα μετά την
τροποποίηση.
Triggers
 Ο πίνακας deleted χρησιμοποιείται αν υπάρχει η
εντολή DELETE ή UPDATE μέσα στην CREATE
TRIGGER. Ο πίνακας inserted χρησιμοποιείται
υπάρχει η εντολή INSERT ή UPDATE μέσα στην
CREATE TRIGGER.
Triggers
 Παράδειγμα
 Δημιουργήστε έναν πίνακα με όνομα LOG_AUTO
στον οποίο με την ενεργοποίηση μιας σκανδάλης
(TRIGGER) που θα εφαρμόζεται πάνω στον βασικό
πίνακα ΑΥΤΟΚΙΝΗΤΑ, θα αποθηκεύονται οι
τροποποιήσεις που θα γίνονται στο πεδίο
ΤΙΜΗ_ΕΝΟΙΚΙΑSIS του πίνακα ΑΥΤΟΚΙΝΗΤΑ.
Triggers
 CREATE TABLE LOG_AUTO( AUTO_NUM
VARCHAR(10),
 USER_ID VARCHAR(20),
 HMEROMHNIA DATETIME,
 OLD FLOAT,
 NEW FLOAT)
Triggers
 CREATE TRIGGER TRIG_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
Triggers
 To παράδειγμα αυτό δείχνει πώς μπορούν να
χρησιμοποιηθούν οι σκανδάλες για να
υλοποιήσουν ένα ημερολόγιο παρακολούθησης της
κίνησης των συναλλαγών των χρηστών πάνω σε
ένα πίνακα.
Triggers
 Σε κάθε τροποποίηση της στήλης
TIMH_ENOIKIASIS χρησιμοποιώντας την πρόταση
UPDATE ενεργοποιείται η σκανδάλη. Έτσι, οι τιμές
των γραμμών των εικονικών πινάκων deleted και
inserted εκχωρούνται στις αντίστοιχες μεταβλητές
@TIMH_old, @TIMH_new και @auto_number.
Triggers
 Οι εκχωρημένες τιμές, μαζί με το όνομα χρήστη και
την τρέχουσα ημερομηνία και ώρα, θα εισαχθούν
κατόπιν στον πίνακα LOG_AUTO.
 Αν εκτελεστεί η παρακάτω πρόταση SQL:
 UPDATE AYTOKINHTA
 SET TIMH_ENOIKIASIS=200 WHERE KA=1'
Συνοπτικός πίνακας εντολών SQL
 SELECT
εξάγει δεδομένα από μια βάση δεδομένων
 UPDATE
ενημερώνει δεδομένα σε μια βάση δεδομένων
Συνοπτικός πίνακας εντολών SQL
 DELETE
διαγράφει δεδομένα από μια βάση δεδομένων
 INSERT INTO
εισάγει νέα δεδομένα σε μια βάση δεδομένων
Συνοπτικός πίνακας εντολών SQL
 CREATE DATABASE
δημιουργεί μια νέα βάση δεδομένων
 CREATE TABLE
δημιουργεί έναν πίνακα
Συνοπτικός πίνακας εντολών SQL
 ALTER TABLE
τροποποιεί έναν πίνακα
 DROP TABLE
διαγράφει έναν πίνακα
 DROP INDEX
διαγράφει ένα ευρετήριο

Εισαγωγή στην SQL

  • 1.
  • 2.
    Η γλώσσα 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).  Για να δημιουργήσουμε τον πίνακα Μαθητής προσθέτοντας το πεδίο «Φύλο», θα γράψουμε την εξής εντολή:
  • 36.
    CREATE TABLE  CREATETABLE Μαθητής ( Επώνυμο VARCHAR(50), Όνομα VARCHAR (50), Πατρώνυμο VARCHAR (50), Ημερομηνία_Γέννησης DATE, Φύλο CHAR(1) )
  • 37.
    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 <τιμή> δίπλα από την περιγραφή της αντίστοιχης στήλης. Το παράδειγμα δημιουργίας του πίνακα Μαθητής θα γινόταν επομένως :
  • 44.
    CREATE TABLE  CREATETABLE Μαθητής ( Επώνυμο VARCHAR(50), Όνομα VARCHAR (50), Πατρώνυμο VARCHAR (50), Ημερομηνία_Γέννησης DATE, Φύλο CHAR(1), Πόλη VARCHAR(50) DEFAULT ‘Αθήνα’ )
  • 45.
    Περιορισμοί  Συχνά είναιαναγκαίο να επιβληθούν περιορισμοί στα δεδομένα για να εξασφαλιστεί η ορθότητα και η ακεραιότητά τους.  Οι περιορισμοί με τους οποίους θα ασχοληθούμε σε αυτήν την υποενότητα είναι: περιορισμοί υπαρξιακής ακεραιότητας, περιορισμοί κύριου κλειδιού και περιορισμοί αναφορικής ακεραιότητας.
  • 46.
    Περιορισμοί υπαρξιακής ακεραιότητας Οι περιορισμοί αυτοί μπορεί να αφορούν στην ύπαρξη ή μη τιμών σε κάποιο πεδίο πίνακα και εκφράζονται σε γλώσσα SQL με τις φράσεις NULL και NOT NULL.  Η λέξη «NULL» σημαίνει καμία τιμή και χρησιμοποιείται για πεδία που είναι αποδεκτό να μην έχουν τιμή, ενώ η φράση «NOT NULL» χρησιμοποιείται για πεδία που δεν επιτρέπεται να μην έχουν τιμή.
  • 47.
    CREATE TABLE  Στοπαράδειγμα του Μαθητολογίου, η καταχώρηση μαθημάτων χωρίς τίτλους δεν είναι αποδεκτή, οπότε η δημιουργία του πίνακα Μάθημα θα έπρεπε να γραφτεί προσθέτοντας δίπλα στο πεδίο «Όνομα» τη φράση NOT NULL, ως εξής:
  • 48.
    CREATE TABLE  CREATETABLE Μάθημα( Όνομα VARCHAR(100) NOT NULL, Ώρες INT )
  • 49.
    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:
  • 66.
    CREATE TABLE  CREATETABLE ΕγγραφήΜαθητή ( ΑΜ_Μαθητή ΙΝΤ, Σχολ_έτος CHAR(9), Τάξη CHAR(1), PRIMARY KEY (ΑΜ_Μαθητή, Σχολ_έτος), FOREIGN KEY (ΑΜ_Μαθητή) REFERENCES Μαθητής(ΑΜ) )
  • 67.
    CREATE TABLE  Παρατηρούμεότι ο τύπος του πεδίο ΑΜ_Μαθητή είναι ΙΝΤ, ίδιος με τον τύπο του πεδίου ΑΜ στον πίνακα Μαθητής. Αυτή είναι απαραίτητη προϋπόθεση για την δημιουργία του περιορισμού ξένου κλειδιού (FOREIGN KEY) στον πίνακα ΕγγραφήΜαθητή.
  • 68.
    CREATE TABLE  Στοίδιο παράδειγμα, ένας μαθητής παίρνει γραπτό βαθμό στα μαθήματα της τάξης που ένας μαθητής παίρνει έναν γραπτό βαθμό στα μαθήματα της τάξης που παρακολουθεί για κάθε σχολικό έτος που φοιτά στο σχολείο.  Άρα υπάρχει συσχέτιση ανάμεσα στον μαθητή και τα μαθήματα για την καταχώρηση της γραπτής βαθμολογίας.
  • 69.
    CREATE TABLE  Ησυσχέτιση αυτή πρέπει να υλοποιηθεί στη σχεσιακή Βάση Δεδομένων με ένα νέο πίνακα ο οποίος θα συσχετίζει τον Αριθμό Μητρώου του μαθητή με το μάθημα στο οποίο καταχωρείται η βαθμολογία του, συμπληρωμένο με το σχολικό έτος.
  • 70.
    CREATE TABLE  Σεαυτόν τον πίνακα, το κύριο κλειδί, δηλαδή το πεδίο που πρέπει να είναι μοναδικό για κάθε εγγραφή στον πίνακα είναι ο συνδυασμός των πεδίων Αριθμός Μητρώου Μαθητή, Σχολικό Έτος και Όνομα Μαθήματος, έτσι ώστε:
  • 71.
    CREATE TABLE  -να είναι δυνατό να εισαχθούν βαθμοί για όλα τα (διαφορετικά) μαθήματα κάποιου μαθητή, να μην είναι δυνατόν να εισαχθεί παραπάνω από ένας βαθμός ανά μαθητή, μάθημα και σχολικό έτος,
  • 72.
    CREATE TABLE  -να είναι δυνατόν να εισαχθούν οι βαθμοί όλων των μαθητών σε κάθε μάθημα που παρακολουθούν,  - να είναι δυνατόν να εισαχθούν βαθμοί κάποιου μαθητή στο ίδιο μάθημα για διαφορετικά σχολικά έτη σε περίπτωση επανάληψης της ίδιας τάξης (κάτι που δεν είναι επιθυμητό φυσικά αλλά πρέπει να προβλεφθεί στο ΣΔΒΔ).
  • 73.
    CREATE TABLE  Επομένωςη δημιουργία του πίνακα για τις γραπτές βαθμολογίες θα έχει ως εξής:
  • 74.
    CREATE TABLE  CREATETABLE ΓραπτόςΒαθμόςΜαθητή ( ΑΜ_Μαθητή INT, Σχολ_έτος CHAR(9), Όνομα_Μαθήματος VARCHAR(100), Βαθμός FLOAT, PRIMARY KEY (ΑΜ_Μαθητή, Σχολ_έτος, Όνομα_Μαθήματος), FOREIGN KEY (ΑΜ_Μαθητή) REFERENCES Μαθητής(ΑΜ), FOREIGN KEY (Όνομα_Μαθήματος) REFERENCES Μάθημα(Όνομα) )
  • 75.
    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 του πίνακα Μαθητής καθορίστηκαν τα πεδία με τη σειρά: ΑΜ, Επώνυμο, Όνομα, Πατρώνυμο, Ημερομηνία_γέννησης, Φύλο, Πόλη.  Παρατηρούμε ότι η τιμή της ημερομηνίας εισάγεται με τη μορφή 'έτος μήνας ημέρα'.
  • 82.
  • 83.
    Απλά παραδείγματα 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  Δηλαδή επέλεξε και εμφάνισε ταξινομημένες σε φθίνουσα σειρά, βάση του Επωνύμου και στη συνέχεια στις εγγραφές με κοινό Επώνυμο σε αύξουσα βάση του Ονόματος, τις πληροφορίες για το Επώνυμο, Όνομα από τον πίνακα Μαθητής.
  • 109.
    Ταξινόμηση Αποτελεσμάτων  Ταξινόμησηεγγραφών μπορούμε να έχουμε και όταν η επιλογή των πεδίων είναι από περισσότερους από έναν πίνακες. 
  • 110.
    Ταξινόμηση Αποτελεσμάτων  SELECTΕπώνυμο, Όνομα, Τάξη FROM Μαθητής, ΕγγραφήΜαθητή WHERE Μαθητής.ΑΜ= ΕγγραφήΜαθητή.ΑΜ_Μαθητή ORDER BY Τάξη  Δηλαδή επέλεξε και εμφάνισε ταξινομημένες σε αύξουσα σειρά τις πληροφορίες για το Επώνυμο, Όνομα και την Τάξη από τους πίνακες Μαθητής και ΕγγραφήΜαθητή, για όλους τους μαθητές. Στο αποτέλεσμα, εμφανίζονται όλοι οι δυνατοί συνδυασμοί των δύο πινάκων που έχουν κοινό πεδίο τον ΑΜ, ταξινομημένοι ανά τάξη.
  • 111.
    Ταξινόμηση Αποτελεσμάτων  Σημείωση: Η ταξινόμηση μπορεί να γίνει και με πεδία που δεν εμφανίζονται στο Select, ενώ δεν επιτρέπεται η ταξινόμηση με βάση τις πράξεις μεταξύ πεδίων.
  • 112.
    Συναρτήσεις Συνάθροισης και Ομαδοποίησης Η SQL έχει 5 ενσωματωμένες συναθροιστικές συναρτήσεις.  Οι ακόλουθες συναρτήσεις εφαρμόζονται στο σύνολο των τιμών μιας στήλης ενός πίνακα, και επιστρέφουν μία τιμή:  Αυτές επιδρούν σε ομάδα εγγραφών (γραμμών) του πίνακα και είναι:
  • 113.
    Συναρτήσεις Συνάθροισης και Ομαδοποίησης AVG (Α) :  Μέσος όρος τιμών (μόνο σε αριθμούς)
  • 114.
  • 115.
  • 116.
  • 117.
    Συναρτήσεις Συνάθροισης και Ομαδοποίησης SUM (Α) :  Άθροισμα τιμών (μόνο σε αριθμούς)
  • 118.
    Συναρτήσεις Συνάθροισης και Ομαδοποίησης (Α): αποτελεί τη στήλη :  Όλες οι συναρτήσεις αγνοούν τις τιμές NULL εκτός από την COUNT(*).
  • 119.
    ΠΑΡΑΔΕΙΓΜΑΤΑ:  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.
  • 134.
    Οι Τύποι Δεδομένωντης Γλώσσας SQL  BOOLEAN :  Τιμές TRUE ή FALSE.
  • 135.
    Οι Τύποι Δεδομένωντης Γλώσσας SQL  BINARY VARYING(n), VARBINARY(n) :  Μεταβλητού μήκους δυαδική συμβολοσειρά μέγιστου μήκους n.
  • 136.
    Οι Τύποι Δεδομένωντης Γλώσσας SQL  FLOAT:  Αριθμός με υποδιαστολή
  • 137.
    Οι Τύποι Δεδομένωντης Γλώσσας 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.
  • 250.
    Δημιουργία Βάσης Δεδομένωνκαι Πίνακα  date  Περιέχει μια ημερομηνία.
  • 251.
    Διαγραφή Βάσης Δεδομένωνκαι Πίνακα  Για να διαγράψουμε μια βάση δεδομένων, χρησιμοποιούμε την εξής εντολή:  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 διαγράφει ένα ευρετήριο