Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Σχεσιακεσ βασεισ δεδομενων

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Σχεσιακεσ βασεισ δεδομενων"— Μεταγράφημα παρουσίασης:

1 Σχεσιακεσ βασεισ δεδομενων
ΚΕΧΡΗΣ ΕΥΑΓΓΕΛΟΣ ΕΚΔΟΣΕΙΣ ΚΡΙΤΙΚΗ

2 Κεφάλαιο 6: Εισαγωγή στη γλώσσα SQL
Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

3 Στόχοι του 6ου κεφαλαίου
Ποιες είναι βασικές εντολές της γλώσσας SQL για τη δημιουργία πινάκων, την εισαγωγή, τροποποίηση και αναζήτηση δεδομένων; Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

4 Η γλώσσα SQL Υπάρχει μία κοινή γλώσσα για όλα τα σχεσιακά ΣΔΒΔ: η γλώσσα SQL. Κάθε σχεσιακό ΣΔΒΔ έχει τη δυνατότητα να δεχθεί και να εκτελέσει εντολές της γλώσσας SQL. Η πρακτική σημασία του γεγονότος αυτού είναι ότι ο χρήστης χρειάζεται να γνωρίζει μία μόνο γλώσσα (την SQL) για να χρησιμοποιήσει οποιοδήποτε σχεσιακό σύστημα διαχείρισης βάσεων δεδομένων. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

5 Σύντομο ιστορικό της SQL
Η γλώσσα SQL (Structured Query Language — Γλώσσα Δομημένων Ερωτημάτων) αναπτύχθηκε από το 1974 από τον D. Chamberlin, ο οποίος εργαζόταν στην IBM και αρχικά χρησιμοποιήθηκε σε ΣΔΒΔ της IBM. Στα τέλη της δεκαετίας του ’70, η γνωστή εταιρεία ORACLE δημιούργησε το δικό της σχεσιακό ΣΔΒΔ, υιοθέτησε την SQL. Σύντομα ακολούθησαν και άλλες εταιρείες λογισμικού που ανέπτυξαν τα δικά τους συστήματα τα οποία υιοθέτησαν την SQL. Η ευρεία διάδοση της SQL οφείλεται στο γεγονός ότι τόσο το Αμερικανικό Ινστιτούτο Τυποποίησης (American National Standards Institute — ANSI) όσο και ο Παγκόσμιος Οργανισμός Τυποποίησης (International Organisation for Standardisation — ISO) όρισαν την SQL ως την κοινή γλώσσα των σχεσιακών ΣΔΒΔ. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

6 Πρότυπα της SQL Παρά τις σημαντικές προσπάθειες που καταβλήθηκαν από τους διεθνείς οργανισμούς, ο στόχος των προτύπων της SQL δεν επιτεύχθηκε απόλυτα: Τα σχεσιακά ΣΔΒΔ υποστηρίζουν εκδοχές της SQL που ο κεντρικός τους πυρήνας είναι αυτός του προτύπου, παρέχοντας όμως πολλές δυνατότητες (επεκτάσεις) που δεν συμπεριλαμβάνονται στο πρότυπο. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

7 Εντολές SQL από χρήστη και ενσωματωμένες σε πρόγραμμα
Η SQL είναι μία γλώσσα για τη διαχείριση δεδομένων – δεν μία πλήρης γλώσσα προγραμματισμού όπως η C++ ή η Java Πολλές φορές είναι απαραίτητο η SQL να ενσωματωθεί μέσα στον κώδικα μίας άλλης γλώσσας προγραμματισμού. Τότε, η SQL αναφέρεται ως ενσωματωμένη SQL (embedded SQL). Στην περίπτωση αυτή, τα αποτελέσματα των SQL εντολών γνωστοποιούνται στο πρόγραμμα που είναι γραμμένο στη γενική γλώσσα προγραμματισμού, το οποίο και τα χειρίζεται. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

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

9 Δημιουργία πίνακα στην πιο απλή μορφή
Με την πιο απλή μορφή της εντολής CREATE TABLE: δημιουργείται ένας πίνακας δίνεται όνομα στον πίνακα αυτόν δηλώνονται τα ονόματα και οι τύποι δεδομένων των στηλών που περιέχει ο πίνακας. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

10 Παράδειγμα δημιουργίας πίνακα στην απλή μορφή
ΟΔΗΓΟΣ ΑρΔιπλώματος Επώνυμο Όνομα ΗμερΠρόσληψης Για τη δημιουργία του πίνακα ΟΔΗΓΟΣ πληκτρολογούμε την εντολή: CREATE TABLE ΟΔΗΓΟΣ ( ΑρΔ ιπλώματος INTEGER NOT NULL, Επώνυμο CHAR (50), Όνομα CHAR (50), ΗμερΠρόσληψης DATE ) Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

11 Επεξήγηση εντολής δημιουργίας πίνακα στην απλή μορφή
Γραμμή SQL εντολής Ερμηνεία της γραμμής SQL CREATE TABLE ΟΔΗΓΟΣ Δημιούργησε έναν πίνακα και ονόμασέ τον ΟΔΗΓΟΣ. ( Στο σημείο αυτό ξεκινάει η περιγραφή του πίνακα. Συγκεκριμένα, ο πίνακας περιέχει: ΑρΔιπλώματος INTEGER NOT NULL, Τη στήλη ΑρΔιπλώματος που παίρνει ακέραιες τιμές και η οποία δεν μπορεί να πάρει την τιμή NULL, Επώνυμο CHAR (50), Τη στήλη Επώνυμο που παίρνει ως τιμές 50 χαρακτήρες Όνομα CHAR (50), Τη στήλη Όνομα που παίρνει ως τιμές 50 χαρακτήρες ΗμερΠρόσληψης DATE Τη στήλη ΗμερΠρόσληψης που παίρνει ως τιμή μία ημερομηνία. ) Στο σημείο αυτό ολοκληρώνεται η περιγραφή του πίνακα

12 Δημιουργία πίνακα με ταυτόχρονη δήλωση του πρωτεύοντος κλειδιού
Μία στήλη ενός πίνακα που αποτελεί το (απλό) πρωτεύον κλειδί του πίνακα δηλώνεται μέσα στην παρένθεση που ακολουθεί τις λέξεις PRIMARY KEY. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

13 Παράδειγμα δημιουργίας πίνακα στην απλή μορφή
ΟΔΗΓΟΣ ΑρΔιπλώματος Επώνυμο Όνομα ΗμερΠρόσληψης Για τη δημιουργία του πίνακα ΟΔΗΓΟΣ με ταυτόχρονη δήλωση του πρωτεύοντος κλειδιού του πληκτρολογούμε την εντολή: CREATE TABLE ΟΔΗΓΟΣ ( ΑρΔ ιπλώματος INTEGER NOT NULL, Επώνυμο CHAR (50), Όνομα CHAR (50), ΗμερΠρόσληψης DATE, PRIMARY KEY (ΑρΔιπλώματος) ) Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

14 Παράδειγμα δημιουργίας πίνακα στην απλή μορφή
ΑΥΤΟΚΙΝΗΤΟ ΑρΚυκλοφορίας ΩφέλιμοΦορτίο ΗμερομηνίαΑγοράς Για τη δημιουργία του πίνακα ΑΥΤΟΚΙΝΗΤΟ με ταυτόχρονη δήλωση του πρωτεύοντος κλειδιού του πληκτρολογούμε την εντολή: CREATE TABLE ΑΥΤΟΚΙΝΗΤΟ ( ΑρΚυκλοφορίας CHAR (7) NOT NULL, ΩφέλιμοΦορτ ίο DECIMAL (3,1), ΗμερομηνίαΑγοράς DATE, PRIMARY KEY (ΑρΚυκλοφορίας) ) Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

15 Δήλωση σύνθετου πρωτεύοντος κλειδιού
ΑΥΤΟΚΙΝΗΤΟ ΑρΚυκλοφορίας ΩφέλιμοΦορτίο ΗμερομηνίαΑγοράς Για να δημιουργηθεί αυτός ο πίνακας με ταυτόχρονη δήλωση του σύνθετου πρωτεύοντος κλειδιού του, το οποίο αποτελείται από τις στήλες ΑρΔιπλώματος και ΑρΚυκλοφορίας, πρέπει να δοθεί η εντολή: CREATE TABLE 0ΔΗΓ0Ι_ΑΥΤ0ΚΙΝΗΤΩΝ ( ΑρΔ ιπλώματος INTEGER NOT NULL, ΑρΚυκλοφορ ί ας CHAR (7) NOT NULL, Ημερομην ία DATE, PRIMARY KEY (ΑρΔιπλώματ ος,ΑρΚυκλοφορίας) ) Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

16 Δημιουργία πίνακα με ταυτόχρονη δήλωση των ξένων κλειδιών του
Τα ξένα κλειδιά που περιλαμβάνονται σε έναν πίνακα και οι αναφορές των ξένων κλειδιών μπορούν να δηλωθούν κατά τη δημιουργία του πίνακα με χρήση της εντολής FOREIGN KEY. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

17 Παράδειγμα δημιουργίας πίνακα με δήλωση των ξένων κλειδιών του
ΟΔΗΓΟΣ ΑρΔιπλώματος Επώνυμο Όνομα ΗμερΠρόσληψης ΟΔΗΓΟΙ_ΑΥΤΟΚΙΝΗΤΩΝ ΑρΔιπλώματος ΑρΚυκλοφορίας Ημερομηνία ΑΥΤΟΚΙΝΗΤΟ ΑρΚυκλοφορίας ΩφέλιμοΦορτίο ΗμερομηνίαΑγοράς Θα δημιουργηθεί ο πίνακας ΟΔΗΓΟΙ_ΑΥΤΟΚΙΝΗΤΩΝ με το πρωτεύον κλειδί του και ταυτόχρονα θα δηλωθεί: Ο ΑριθμόςΔιπλώμ του πίνακα ΟΔΗΓΟΙ_ΑΥΤΟΚΙΝΗΤΩΝ ως ξένο κλειδί που αναφέρεται στη στήλη ΑρΔιπλώματος του πίνακα ΟΔΗΓΟΣ και Ο ΑρΚυκλοφ του πίνακα ΟΔΗΓΟΙ_ ΑΥΤΟΚΙΝΗΤΩΝ ως ξένο κλειδί που αναφέρεται στη στήλη ΑρΚυκλοφορίας του πίνακα ΑΥΤΟΚΙΝΗΤΟ Για το σκοπό αυτό πρέπει να δοθεί η εντολή: Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

18 Παράδειγμα δημιουργίας πίνακα με δήλωση των ξένων κλειδιών του
ΟΔΗΓΟΣ ΑρΔιπλώματος Επώνυμο Όνομα ΗμερΠρόσληψης ΟΔΗΓΟΙ_ΑΥΤΟΚΙΝΗΤΩΝ ΑρΔιπλώμ ΑρΚυκλοφ Ημερομηνία ΑΥΤΟΚΙΝΗΤΟ ΑρΚυκλοφορίας ΩφέλιμοΦορτίο ΗμερομηνίαΑγοράς CREATE TABLE ΟΔΗΓΟΙ_ΑΥΤΟΚΙΝΗΤΩΝ ( ΑρΔιπλώμ INTEGER NOT NULL, ΑρΚυκλοφ CHAR (7) NOT NULL, Ημερομηνία DATE, PRIMARY KEY (ΑρΔιπλώμ, ΑρΚυκλοφ), FOREIGN KEY (ΑρΔιπλώμ) REFERENCES ΟΔΗΓΟΣ (ΑρΔιπλώματος), FOREIGN KEY (ΑρΚυκλοφ) REFERENCES ΑΥΤΟΚΙΝΗΤΟ (ΑρΚυκλοφορίας) ) Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

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

20 Μετακύλιση της ενέργειας
Σύμφωνα με την προσέγγιση αυτή: Το ΣΔΒΔ εκτελεί την πράξη που παραβιάζει την ακεραιότητα αναφοράς Και αυτόματα εκτελεί αντίστοιχες πράξεις σε άλλους πίνακες της βάσης δεδομένων ώστε να διατηρηθεί η ακεραιότητα αναφοράς. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

21 Παράδειγμα μετακύλισης της ενέργειας σε περίπτωση διαγραφής
ΟΔΗΓΟΣ ΑρΔιπλώματος Επώνυμο Όνομα Ημερ Πρόσληψης 10001 Αρίστου Ανέστης 7/10/2010 20002 Βασίλης Βασιλείου 10/9/2010 ΟΔΗΓΟΙ_ΑΥΤΟΚΙΝΗΤΩΝ ΑρΔιπλώμ ΑρΚυκλοφ Ημερομηνία 10001 ΑΑΑ 1234 5/5/2014 ΒΒΒ 1234 6/5/2014 20002 ΑΥΤΟΚΙΝΗΤΟ ΑρΚυκλοφορίας ΩφέλιμοΦορτίο ΗμερομηνίαΑγοράς ΑΑΑ 1234 1,5 3/6/2009 ΒΒΒ 1234 3,2 5/7/2010 Ο χρήστης υποβάλλει εντολή διαγραφής της εγγραφής  από τον πίνακα ΟΔΗΓΟΣ. Σύμφωνα με τη μετακύλιση της ενέργειας: αφού διαγραφεί η εγγραφή , αυτόματα, διαγράφεται και η αντίστοιχη εγγραφή  του πίνακα ΟΔΗΓΟΙ_ΑΥΤΟΚΙΝΗΤΩΝ ώστε να διατηρηθεί η ακεραιότητα αναφοράς.

22 Παράδειγμα μετακύλισης της ενέργειας σε περίπτωση τροποποίησης
ΟΔΗΓΟΣ ΑρΔιπλώματος Επώνυμο Όνομα Ημερ Πρόσληψης 10001 Αρίστου Ανέστης 7/10/2010 20002 Βασίλης Βασιλείου 10/9/2010 ΟΔΗΓΟΙ_ΑΥΤΟΚΙΝΗΤΩΝ ΑρΔιπλώμ ΑρΚυκλοφ Ημερομηνία 10001 ΑΑΑ 1234 5/5/2014 ΒΒΒ 1234 6/5/2014 20002 ΑΥΤΟΚΙΝΗΤΟ ΑρΚυκλοφορίας ΩφέλιμοΦορτίο ΗμερομηνίαΑγοράς ΑΑΑ 1234 1,5 3/6/2009 ΒΒΒ 1234 3,2 5/7/2010 Ο χρήστης υποβάλλει εντολή τροποποίησης της εγγραφής  και αλλάζει τον ΑρΚυκλοφορίας από ΑΑΑ 1234 στην τιμή ΑΑΑ Σύμφωνα με τη μετακύλιση ενέργειας: μετά την αλλαγή της εγγραφής , αυτόματα τροποποιούνται και οι αντίστοιχες εγγραφές  και  στη νέα τιμή ΑΑΑ 4444, έτσι ώστε να διατηρηθεί η ακεραιότητα αναφοράς.

23 2n εναλλακτική ενέργεια: καμία ενέργεια
Σύμφωνα με την προσέγγιση αυτή, το ΣΔΒΔ απορρίπτει την πράξη που προκάλεσε την παραβίαση της ακεραιότητας αναφοράς. Στην περίπτωση αυτή, η βάση δεδομένων δεν αλλάζει καθόλου, αφού η αιτούμενη διαγραφή ή τροποποίηση δεν εκτελείται καθόλου. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

24 3η εναλλακτική ενέργεια: ενέργεια κενού
Σύμφωνα με την προσέγγιση αυτή: το ΣΔΒΔ εκτελεί την πράξη που προκάλεσε την παραβίαση της ακεραιότητας αναφοράς, Και αυτόματα αλλάζει τις τιμές που παραβιάζουν την ακεραιότητα αναφοράς στην τιμή NULL Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

25 Δήλωση της ενέργειας σε περίπτωση παραβίασης της ακεραιότητας της αναφοράς
Κατά τη δημιουργία του πίνακα ΟΔΗΓΟΙ ΑΥΤΟΚΙΝΗΤΩΝ, μπορούμε να δηλώσουμε την απόρριψη της διαγραφής και τη μετακύληση της τροποποίησης ως ενέργειες που αυτόματα θα εκτελεί το ΣΔΒΔ σε περίπτωση παραβίασης της ακεραιότητας αναφοράς: CREATE TABLE ΟΔΗΓΟΙ_ΑΥΤΟΚΙΝΗΤΩΝ ( ΑρΔ ιπλώμ INTEGER NOT NULL, ΑρΚυκλοφ CHAR (7) NOT NULL, Ημερομην ία DATE, PRIMARY KEY (ΑρΔιπλώμ, ΑρΚυκλοφ), FOREIGN KEY (ΑρΔιπλώμ) REFERENCES ΟΔΗΓΟΣ (ΑρΔιπλώματος) ON DELETE NO ACTION ON UPDATE CASCADE, FOREIGN KEY (ΑρΚυκλοφ) REFERENCES ΑΥΤΟΚΙΝΗΤΟ (ΑρΚυκλοφορίας) ON DELETE NO ACTION ON UPDATE CASCADE ) Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

26 Καταστροφή πίνακα Ένας πίνακας που δημιουργήθηκε με την εντολή CREATE TABLE μπορεί να καταστραφεί (δηλαδή να διαγραφεί από τον κατάλογο του ΣΔΒΔ) με την εντολή DROP TABLE. Η εντολή DROP TABLE ΟΔΗΓΟΙ_ΑΥΤΟΚΙΝΗΤΩΝ καταστρέφει τον πίνακα ΟΔΗΓΟΙ_ΑΥΤΟΚΙΝΗΤΩΝ. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

27 Εισαγωγή δεδομένων με την SQL
Η εισαγωγή δεδομένων στην SQL γίνεται με την εντολή INSERT, η οποία εισάγει σε έναν πίνακα μία ολόκληρη εγγραφή. Συντακτικό της εντολής: INSERT INTO όνομα_πίνακα VALUES (λίστα_τιμών) Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

28 INSERT INTO ΟΔΗΓΟΣ VALUES (100001, 'Αρίστου', 'Ανέστης', ‘7/10/2010’)
ΑρΔιπλώματος Επώνυμο Όνομα Ημερ Πρόσληψης Για να εισαχθούν στον πίνακα ΟΔΗΓΟΣ οι τιμές για τον οδηγό Ανέστη Αρίστου με αριθμό διπλώματος και ημερομηνία πρόσληψης τις 7/10/2010 δίνεται η εντολή: INSERT INTO ΟΔΗΓΟΣ VALUES (100001, 'Αρίστου', 'Ανέστης', ‘7/10/2010’) Μετά την εκτέλεση της εντολής αυτής ο πίνακας έχει μία γραμμή: ΟΔΗΓΟΣ ΑρΔιπλώματος Επώνυμο Όνομα Ημερ Πρόσληψης 10001 Αρίστου Ανέστης 7/10/2010 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

29 Παρατηρήσεις για την εντολή insert
Τα δεδομένα που θα εισαχθούν στον πίνακα να χωρίζονται μεταξύ τους με κόμμα (,). Ο αριθμός των δεδομένων που υπάρχουν μέσα στην παρένθεση της εντολής INSERT πρέπει να είναι ίδιος με τον αριθμό των στηλών του πίνακα στον οποίο θα εισαχθούν οι τιμές. Η σειρά με την οποία δίνονται τα δεδομένα θα πρέπει να αντιστοιχεί στη σειρά με την οποία ορίσθηκαν οι στήλες του πίνακα κατά στη δημιουργία του πίνακα με την εντολή CREATE TABLE. Οι τύποι των δεδομένων που εισάγονται πρέπει να συμφωνούν με τους τύπους των δεδομένων όπως ορίστηκαν κατά τη δημιουργία του πίνακα. Τα δεδομένα με τύπο δεδομένων συμβολοσειράς (δηλ. τα αυτά που δηλώθηκαν ως τύπου CHAR ή VARCHAR στην εντολή δημιουργίας πίνακα CREATE TABLE) πρέπει να περικλείονται μέσα σε απλά εισαγωγικά. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

30 Insert και η τιμή null Στην περίπτωση που η τιμή μίας στήλης δεν είναι γνωστή, μπορεί να δοθεί σε αυτήν η τιμή NULL εφόσον: η στήλη δεν είναι πρωτεύον κλειδί του πίνακα και δεν έχει οριστεί με την επιλογή NOT NULL στην εντολή CREATE TABLE. Για παράδειγμα, για να εισαχθούν στον πίνακα ΟΔΗΓΟΙ οι τιμές για τον οδηγό Δημητριάδη Δημήτριο με αριθμό διπλώματος , για τον οποίο δεν γνωρίζουμε την ημερομηνία πρόσληψης, δίνεται η εντολή: INSERT INTO ΟΔΗΓΟΣ VALUES (400004, 'Δημητριάδης', 'Δημήτριος', NULL) Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

31 Διαγραφή δεδομένων με την SQL
Η διαγραφή των δεδομένων από έναν πίνακα γίνεται με την εντολή DELETE, η οποία έχει το παρακάτω συντακτικό: DELETE όνομα__πινακα [WHERE συνθήκη] Στην απλή μορφή της η εντολή DELETE δεν περιλαμβάνει την δεύτερη γραμμή WHERE συνθήκη η οποία είναι προαιρετική. Στην μορφή αυτή η εντολή DELETE διαγράφει όλες τις εγγραφές του πίνακα. Στην σύνθετη μορφή της η εντολή περιέχει και γραμμή WHERE συνθήκη. Στην μορφή αυτή η εντολή διαγράφει μόνο τις εγγραφές του πίνακα που ικανοποιούν την συνθήκη. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

32 Παραδείγματα διαγραφής εγγραφών
ΦΟΙΤΗΤΕΣ Κωδικός Όνομα Επώνυμο Οδός Αριθμός Πόλη 123 Ανέστης Αρίστου Ανθέων 53 Σέρρες 124 Βασίλης Βελισαρίου Ηρώων 20 125 Γιάννης Γεωργίου Κήπων 4 Βόλος 126 Κωνσταντίνα Δημητρίου Εγνατία DELETE ΦΟΙΤΗΤΕΣ ΦΟΙΤΗΤΕΣ Κωδικός Όνομα Επώνυμο Οδός Αριθμός Πόλη ΦΟΙΤΗΤΕΣ Κωδικός Όνομα Επώνυμο Οδός Αριθμός Πόλη 124 Βασίλης Βελισαρίου Ηρώων 20 Σέρρες 125 Γιάννης Γεωργίου Κήπων 4 Βόλος 126 Κωνσταντίνα Δημητρίου Εγνατία 123 DELETE ΦΟΙΤΗΤΕΣ WHERE Κωδικός = 123 DELETE ΦΟΙΤΗΤΕΣ WHERE Πόλη = ‘Βόλος’ ΦΟΙΤΗΤΕΣ Κωδικός Όνομα Επώνυμο Οδός Αριθμός Πόλη 123 Ανέστης Αρίστου Ανθέων 53 Σέρρες 124 Βασίλης Βελισαρίου Ηρώων 20 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

33 Συνθήκες με αριθμητικές στήλες στην SQL
Στην προηγούμενη εντολή DELETE, η παράσταση που ακολουθεί τη δεσμευμένη λέξη WHERE καθορίζει τις γραμμές του πίνακα που διαγράφονται. Όσες γραμμές έχουν τιμές που ικανοποιούν την παράσταση που περιγράφει η συνθήκη, διαγράφονται με την εκτέλεση της εντολής. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

34 Τελεστές σύγκρισης Η συνθήκη που ακολουθεί τη δεσμευμένη λέξη WHERE δημιουργείται με τη βοήθεια των τελεστών σύγκρισης: = ίσο > μεγαλύτερο < μικρότερο >= μεγαλύτερο ή ίσο <= μικρότερο ή ίσο <> διάφορο Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

35 Παραδείγματα διαγραφής εγγραφών με απλή συνθήκη σε αριθμητικό πεδίο
ΠΡΟΪΟΝΤΑ Εγγραφή Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1 1001 Στυλό 0.75 200 2 1002 Μολύβι 250 3 1003 Μαρκαδόρος 1.3 130 4 1004 Δισκέτα 3,5’’ 0.8 120 5 1005 CD ROM 315 6 1006 CD Audio 1.2 84 Ενέργεια Εντολή SQL Διαγράφονται οι εγγραφές Διαγραφή των προϊόντων με απόθεμα μεγαλύτερο του 150 DELETE ΠΡΟΪΟΝΤΑ WHERE Απόθεμα > 150 1, 2, 5 Διαγραφή των προϊόντων με απόθεμα μικρότερο ή ίσο του 125 WHERE Απόθεμα <= 125 4, 6 Διαγραφή των προϊόντων με τιμή αγοράς μικρότερη του 1€ WHERE ΤιμήΑγοράς < 1 1, 4 Διαγραφή όλων των προϊόντων που ανήκουν στην κατηγορία 2 WHERE Κατηγορία= 2 4, 5, 6 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

36 Λογικοί τελεστές Περισσότερο σύνθετες συνθήκες μπορούν να διαμορφωθούν με την χρήση των λογικών τελεστών: AND (λογικό και) OR (λογικό ή) και NOT (λογική άρνηση). Οι λογικοί τελεστές χρησιμοποιούνται για να συνδυαστούν λογικά δύο απλές συνθήκες. Για παράδειγμα, τα προϊόντα που είναι στην κατηγορία 2 και έχουν τιμή αγοράς μικρότερη του 1 € περιγράφονται από τη συνθήκη: κατηγορία = 2 AND Τιμή Αγοράς < 1. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

37 Παραδείγματα με σύνθετη συνθήκη σε αριθμητικά πεδία (1)
ΠΡΟΪΟΝΤΑ Εγγραφή Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1 1001 Στυλό 0.75 200 2 1002 Μολύβι 250 3 1003 Μαρκαδόρος 1.3 130 4 1004 Δισκέτα 3,5’’ 0.8 120 5 1005 CD ROM 315 6 1006 CD Audio 1.2 84 Ενέργεια Εντολή SQL Διαγράφονται οι εγγραφές Διαγραφή των προϊόντων με απόθεμα μεγαλύτερο του 150 και ανήκουν στην κατηγορία 2 DELETE ΠΡΟΪΟΝΤΑ WHERE Κωδικός >150 AND Κατηγορία = 2 5 Διαγραφή των προϊόντων της κα­τηγορίας 2 με απόθεμα μικρότε­ρο ή ίσο του 125 WHERE Απόθεμα <=125 4,6 Διαγραφή των προϊόντων της κα­τηγορίας 1 με απόθεμα μικρότερο ή ίσο του 125 AND Κατηγορία = 1 καμία Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

38 Παραδείγματα με σύνθετη συνθήκη σε αριθμητικά πεδία (2)
ΠΡΟΪΟΝΤΑ Εγγραφή Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1 1001 Στυλό 0.75 200 2 1002 Μολύβι 250 3 1003 Μαρκαδόρος 1.3 130 4 1004 Δισκέτα 3,5’’ 0.8 120 5 1005 CD ROM 315 6 1006 CD Audio 1.2 84 Ενέργεια Εντολή SQL Διαγράφονται οι εγγραφές Διαγραφή των προϊόντων που εί­τε έχουν τιμή αγοράς κάτω του 1 €, είτε ανήκουν στην κατηγο­ρία 2 DELETE ΠΡΟΪΟΝΤΑ WHERE ΤιμήΑγοράς < 1 OR Κατηγορία = 2 1, 4, 5,6 Διαγραφή των προϊόντων που έχουν τιμή αγοράς μεγαλύτερη του 0.5 € και μικρότερη του 1.2 € WHERE ΤιμήΑγοράς >0.5 AND ΤιμήΑγοράς <1.2 1,2, 4,5 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

39 Συνθήκες με στήλες τύπου συμβολοσειράς
Στην περίπτωση που στη συνθήκη συμμετέχει μία στήλη τύπου συμβολοσειράς (δηλ. μία στήλη που έχει δηλωθεί στην εντολή CREATE TABLE ως CHAR ή VARCHAR), η συνθήκη σχηματίζεται με χρήση ενός εκ των δύο τελεστών του τελεστή της ισότητας (=) και του τελεστή LIKE Ο τελεστής της ισότητας (=) χρησιμοποιείται όταν η στήλη πρέπει έχει μία απολύτως συγκεκριμένη τιμή. Για παράδειγμα, η έκφραση πόλη = 'Σέρρες' σημαίνει ότι η πόλη πρέπει να έχει ακριβώς την τιμή Σέρρες. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

40 Ο τελεστής LIKE Ο τελεστής LIKE χρησιμοποιείται όταν οι τιμές της στήλης πρέπει να ακολουθούν ένα σύνολο τιμών που ακολουθούν ένα συγκεκριμένο πρότυπο. Το πρότυπο περιγράφεται εισάγοντάς το σε απλά εισαγωγικά ('). Συνήθως, ο τελεστής LIKE χρησιμοποιείται σε συνδυασμό με το σύμβολο επί τοις εκατό (%), το οποίο αντιπροσωπεύει ένα οποιοδήποτε σύνολο χαρακτήρων. Παράδειγμα: η έκφραση Επώνυμο like 'Παπα%' σημαίνει ότι το επώνυμο πρέπει να αρχίζει με τα γράμματα Παπα και να ακολουθείται από οποιοδήποτε σύνολο χαρακτήρων. Άρα, η έκφραση αυτή περιγράφει όλα τα ονόματα που αρχίζουν από Παπα, όπως Παπαθασιλείου, Παπαγεωργίου, Παπαντωνίου, κ.λπ. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

41 Παραδείγματα συνθηκών που περιέχουν συμβολοσειρά
ΠΡΟΜΗΘΕΥΤΕΣ Εγγραφή Κωδικός Όνομα Επώνυμο Οδός Αριθμός Πόλη 1 123 Αρίστος Παπαβασιλείου Ανθέων 53 Σέρρες 2 124 Βελισαρίων Παπαντωνίου Ηρώων 20 3 125 Γεώργιος Γεωργίου Κήπων 4 Βόλος 126 Γεωργία Δημητρίου Ενέργεια Εντολή SQL Διαγράφονται οι εγγραφές Διαγραφή των προμηθευτών που έχουν ως πόλη τις Σέρρες DELETE ΠΡΟΜΗΘΕΥΤΕΣ WHERE Πόλη ='Σέρρες’ 1, 2 Διαγραφή των προμηθευτών που μένουν σε οδό Ανθέων (ανεξαρτήτως πόλεως) WHERE Οδός = 'Ανθέων' 1, 4 Διαγραφή των προμηθευτών με Επώνυμο που αρχίζει από Παπα WHERE Επώνυμο LIKE 'Παπα%' 1 (Παπαβασιλείου) 2 (Παπαντωνίου) Διαγραφή των προμηθευτών με όνομα που τελειώνει σε ος WHERE Όνομα LIKE '%ος' 1 (Αρίστος) 3 (Γεώργιος) Διαγραφή όλων των προμηθευτών που το όνομά τους περιέχει τον συνδυασμό γραμμάτων ρί WHERE Όνομα LIKE '%ρί%' 1 (Αρίστος), 2 (Βελισαρίων) Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

42 Παραδείγματα σύνθετων συνθηκών με συμβολοσειρές
ΠΡΟΜΗΘΕΥΤΕΣ Εγγραφή Κωδικός Όνομα Επώνυμο Οδός Αριθμός Πόλη 1 123 Αρίστος Παπαβασιλείου Ανθέων 53 Σέρρες 2 124 Βελισαρίων Παπαντωνίου Ηρώων 20 3 125 Γεώργιος Γεωργίου Κήπων 4 Βόλος 126 Γεωργία Δημητρίου Ενέργεια Εντολή SQL Διαγράφονται οι εγγραφές Διαγραφή των προμηθευτών που έχουν ως πόλη τις Σέρρες και το όνομά τους περιέχει τον συνδυασμό γραμμάτων ρί DELETE ΠΡΟΜΗΘΕΥΤΕΣ WHERE Πόλη =‘Σέρρες’ AND Όνομα LIKE ‘%ρί%’ 1, 2 Διαγραφή των προμηθευτών που μένουν στην οδό Ανθέων στον Βόλο WHERE Οδός = ‘Ανθέων’ AND Πόλη =‘Βόλος’ 4 Διαγραφή των προμηθευτών με Επώνυμο που αρχίζει από Παπα και έχουν κωδικό μεγαλύτερο ή ίσο του 124 WHERE Επώνυμο LIKE ‘Παπα%’ AND Κωδικός >= 124 2 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

43 Τροποποίηση δεδομένων με την SQL
Η τροποποίηση (ή αλλιώς ενημέρωση) των δεδομένων που έχουν αποθηκευτεί σε έναν πίνακα γίνεται με χρήση της εντολής UPDATE, η οποία έχει το παρακάτω συντακτικό: UPDATE όνομα_πίνακα SET όνομα_στήλης = τ ιμή [, ] [WHERE συνθήκη] Η εντολή UPDATE εμφανίζεται σε δύο μορφές: Στην απλούστερη μορφή της δεν περιλαμβάνει τη γραμμή WHERE οπότε η εντολή τροποποιεί όλες τις εγγραφές του πίνακα. Στη σύνθετη μορφή της —όταν περιέχει και τη γραμμή WHERE— η εντολή τροποποιεί μόνο τις εγγραφές του πίνακα που ικανοποιούν τη συνθήκη. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

44 Παραδείγματα τροποποίησης πίνακα
Για να ενταχθούν όλα τα προϊόντα (ανεξάρτητα της κατηγορίας που ανήκουν) στην κατηγορία 3, χρησιμοποιούμε την εντολή: ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Αγοράς Από- θεμα Κατη- γορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Αγοράς Από- θεμα Κατη- γορία 1001 Στυλό 0.75 200 3 1002 Μολύβι 1 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 1005 CD ROM 315 1006 CD Audio 1.2 84 UPDATE ΠΡΟΪΟΝΤΑ SET Κατηγορία = 3 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

45 Παραδείγματα τροποποίησης πίνακα
Για να αυξηθεί κατά 50 το απόθεμα όλων των προϊόντων, δίνεται η εντολή: ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Αγοράς Από- θεμα Κατη- γορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Αγοράς Από- θεμα Κατη- γορία 1001 Στυλό 0.75 300 1 1002 Μολύβι 1003 Μαρκαδόρος 1.3 180 1004 Δισκέτα 3,5’’ 0.8 170 2 1005 CD ROM 365 1006 CD Audio 1.2 134 UPDATE ΠΡΟΪΟΝΤΑ SET Απόθεμα = Απόθεμα +50 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

46 Παραδείγματα τροποποίησης πίνακα
Αύξηση της τιμής αγοράς όλων των προϊόντων κατά 2% επιτυγχάνεται με την εντολή: ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Αγοράς Από- θεμα Κατη- γορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Αγοράς Από- θεμα Κατη- γορία 1001 Στυλό 0.765 250 1 1002 Μολύβι 1.02 1003 Μαρκαδόρος 1.326 130 1004 Δισκέτα 3,5’’ 0.816 120 2 1005 CD ROM 315 1006 CD Audio 1.224 84 UPDATE ΠΡΟΪΟΝΤΑ SET ΤιμήΑγοράς = 1.02 * ΤιμήΑγοράς Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

47 Παραδείγματα τροποποίησης πίνακα
Για να αυξηθεί κατά 4% η τιμή αγοράς των προϊόντων της κατηγορίας 2 δίνεται η εντολή: ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Αγοράς Από- θεμα Κατη- γορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Αγοράς Από- θεμα Κατη- γορία 1001 Στυλό 0.75 250 1 1002 Μολύβι 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.832 120 2 1005 CD ROM 1.04 315 1006 CD Audio 1.248 84 UPDATE ΠΡΟΪΟΝΤΑ SET ΤιμήΑγοράς =1.04* ΤιμήΑγοράς WHERE Κατηγορία = 2 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

48 Παραδείγματα τροποποίησης πίνακα
Για να αυξηθεί κατά 30 το απόθεμα του προϊόντος με κωδικό 1003 και κατά 4% η τιμή αγοράς του (Εικόνα 6.10.ε) δίνεται η εντολή: ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Αγοράς Από- θεμα Κατη- γορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Αγοράς Από- θεμα Κατη- γορία 1001 Στυλό 0.75 250 1 1002 Μολύβι 1003 Μαρκαδόρος 1.352 160 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 UPDATE ΠΡΟΪΟΝΤΑ SET Απόθεμα = Απόθεμα + 30, ΤιμήΑγοράς = 1.04 * ΤιμήΑγοράς WHERE Κωδικός = 1003 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

49 Αναζήτηση δεδομένων με την SQL
Η αναζήτηση των δεδομένων που έχουν αποθηκευτεί σε μία βάση δεδομένων και η ταυτόχρονη εμφάνισή τους σε μορφή πίνακα γίνεται με χρήση της εντολής SELECT. Η εντολή αυτή έχει μία ιδιαίτερα ισχυρή εκφραστική ικανότητα, αφού συνδυάζει πολλές πράξεις της σχεσιακής άλγεβρας. Η εντολή SELECT έχει το παρακάτω συντακτικό: SELECT [DINSTICT | ALL] {* | [έκφραση_στήλης] [, ...]} FROM όνομα_πίνακα [συνώνυμο] [,...] [WHERE συνθήκη] [GROUP BY στήλες] [ORDER BY στήλες] Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

50 Εμφάνιση όλων των γραμμών και όλων των στηλών ενός πίνακα
Στην πιο απλή της μορφή, η εντολή SELECT χρησιμοποιείται για την εμφάνιση όλων των γραμμών και όλων των στηλών ενός πίνακα και έχει τη μορφή: SELECT * FROM όνομα_πίνακα Ο αστερίσκος (*) μετά τη δεσμευμένη λέξη SELECT αναπαριστάνει όλες τις στήλες ενός πίνακα. Παράδειγμα: FROM ΠΡΟΪΟΝΤΑ Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

51 Εμφάνιση συγκεκριμένων στηλών ενός πίνακα
Ορισμένες φορές είναι επιθυμητή η εμφάνιση ορισμένων μόνο στηλών ενός πίνακα και όχι όλων. Στην περίπτωση αυτή, μετά τη δεσμευμένη λέξη SELECT δεν χρησιμοποιείται ο αστερίσκος, αλλά δηλώνονται με το όνομά τους οι στήλες που ζητείται να εμφανιστούν, χωρισμένες με κόμμα (,). Στην περίπτωση αυτή, το συντακτικό της SELECT είναι: SELECT [έκφραση_στήλης][, ...] FROM όνομα_πίνακα Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

52 SELECT Κωδικός, Περιγραφή, Απόθεμα FROM ΠΡΟΪΟΝΤΑ
Για να εμφανιστεί ο κωδικός, η περιγραφή και το απόθεμα όλων των προϊόντων πρέπει να δοθεί η εντολή: ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Απόθεμα 1001 Στυλό 200 1002 Μολύβι 250 1003 Μαρκαδόρος 130 1004 Δισκέτα 3,5’’ 120 1005 CD ROM 315 1006 CD Audio 84 SELECT Κωδικός, Περιγραφή, Απόθεμα FROM ΠΡΟΪΟΝΤΑ Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

53 Για να εμφανιστεί ο κωδικός όλων των προϊόντων πρέπει να δοθεί η εντολή:
ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Απόθεμα 1001 Στυλό 200 1002 Μολύβι 250 1003 Μαρκαδόρος 130 1004 Δισκέτα 3,5’’ 120 1005 CD ROM 315 1006 CD Audio 84 SELECT Κωδικός FROM ΠΡΟΪΟΝΤΑ Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

54 Εμφάνιση συγκεκριμένων στηλών και συγκεκριμένων γραμμών ενός πίνακα
Η επιλογή και εμφάνιση συγκεκριμένων γραμμών ενός πίνακα γίνεται με χρήση της δεσμευμένης λέξης where, η οποία ακολουθείται από μία συνθήκη: SELECT [έκφραση_στήλης][, ...] FROM όνομα_πίνακα WHERE συνθήκη Η μορφή αυτή της SELECT, εμφανίζει όσες στήλες δηλώνονται μετά τη δεσμευμένη λέξη SELECT και όσες γραμμές του πίνακα ικανοποιούν τη συνθήκη. Η συνθήκη που ακολουθεί τη δεσμευμένη λέξη WHERE σχηματίζεται όπως περιγράφηκε στην εντολή DELETE. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

55 SELECT Κωδικός, Περιγραφή, Απόθεμα FROM ΠΡΟΪΟΝΤΑ WHERE Κατηγορία = 2
Για να εμφανιστεί ο κωδικός, η περιγραφή και το απόθεμα των προϊόντων που είναι της κατηγορίας 2, χρησιμοποιείται η εντολή: ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 SELECT Κωδικός, Περιγραφή, Απόθεμα FROM ΠΡΟΪΟΝΤΑ WHERE Κατηγορία = 2 ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Απόθεμα 1004 Δισκέτα 3,5’’ 120 1005 CD ROM 315 1006 CD Audio 84 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

56 SELECT Κωδικός, Περιγραφή, ΤιμήΑγοράς, Κατηγορία FROM ΠΡΟΪΟΝΤΑ
Για να εμφανιστεί ο κωδικός, η περιγραφή, η τιμή αγοράς και η κατηγορία των προϊόντων που έχουν απόθεμα μικρότερο των 160, χρησιμοποιείται η εντολή: ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 SELECT Κωδικός, Περιγραφή, ΤιμήΑγοράς, Κατηγορία FROM ΠΡΟΪΟΝΤΑ WHERE Απόθεμα < 160 ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Απόθεμα Κατηγορία 1003 Μαρκαδόρος 130 1 1004 Δισκέτα 3,5’’ 120 2 1006 CD Audio 84 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

57 Για να εμφανιστούν όλες οι στήλες του πίνακα ΠΡΟΪΟΝΤΑ που έχουν κωδικό μεγαλύτερο ή ίσο του 1003 και μικρότερο ή ίσο του 1005, χρησιμοποιείται η εντολή: ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 SELECT * FROM ΠΡΟΪΟΝΤΑ WHERE Κωδικός >=1003 AND Κωδ ικός <= 1005 ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1003 Μαρκαδόρος 1.3 130 1 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

58 Συνθήκη που περιέχει ένα εύρος τιμών
Στην περίπτωση που μία συνθήκη εκφράζει ένα εύρος τιμών, η συνθήκη μπορεί να περιγράφει και με χρήση των δεσμευμένων λέξεων BETWEEN... AND. Έτσι, το προηγούμενο παράδειγμα μπορεί επίσης να γραφεί ως: SELECT * FROM ΠΡΟΪΟΝΤΑ WHERE Κωδικός BETWEEN 1003 AND 1005 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

59 Συνθήκη που περιέχει ένα σύνολο διακεκριμένων τιμών
Όταν η συνθήκη περιέχει ένα συγκεκριμένο σύνολο τιμών, τότε η συνθήκη μπορεί να εκφραστεί με τη βοήθεια του λογικού OR. Ωστόσο, είναι πιο βολικό να χρησιμοποιήσουμε τη δυνατότητα ορισμού ενός συνόλου που δίνει η SQL με τη δεσμευμένη λέξη IN. Τα στοιχεία του συνόλου εμφανίζονται μετά τη λέξη IN μέσα σε παρενθέσεις και χωρίζονται μεταξύ τους με ένα κόμμα (,), Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

60 Παράδειγμα συνθήκης που περιέχει σύνολο διακεκριμένων τιμών
Για να εμφανιστούν όλες οι στήλες του πίνακα που αφορούν τους φοιτητές με κωδικούς 123, 125 και 126, μπορούμε να χρησιμοποιήσουμε την εντολή: ΦΟΙΤΗΤΕΣ Κωδικός Όνομα Επώνυμο Οδός Αριθμός Πόλη 123 Αρίστου Παπαβασιλείου Ανθέων 53 Σέρρες 124 Βελισαρίου Παπαντωνίου Ηρώων 20 Λαμία 125 Γεωργίου Κήπων 4 Βόλος 126 Γεωργία Δημητρίου Κιλκίς SELECT * FROM ΦΟΙΤΗΤΕΣ WHERE Κωδικός IN (123, 125, 126) ΦΟΙΤΗΤΕΣ Κωδικός Όνομα Επώνυμο Οδός Αριθμός Πόλη 123 Αρίστου Παπαβασιλείου Ανθέων 53 Σέρρες 125 Γεωργίου Κήπων 4 Βόλος 126 Γεωργία Δημητρίου Κιλκίς Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

61 Παράδειγμα συνθήκης που περιέχει σύνολο διακεκριμένων τιμών
Η ισοδύναμη εντολή με χρήση του λογικού OR είναι: ΦΟΙΤΗΤΕΣ Κωδικός Όνομα Επώνυμο Οδός Αριθμός Πόλη 123 Αρίστου Παπαβασιλείου Ανθέων 53 Σέρρες 124 Βελισαρίου Παπαντωνίου Ηρώων 20 Λαμία 125 Γεωργίου Κήπων 4 Βόλος 126 Γεωργία Δημητρίου Κιλκίς SELECT * FROM ΦΟΙΤΗΤΕΣ WHERE Κωδικός = 123 OR Κωδικός = 125 OR Κωδικός = 126 ΦΟΙΤΗΤΕΣ Κωδικός Όνομα Επώνυμο Οδός Αριθμός Πόλη 123 Αρίστου Παπαβασιλείου Ανθέων 53 Σέρρες 125 Γεωργίου Κήπων 4 Βόλος 126 Γεωργία Δημητρίου Κιλκίς Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

62 Παράδειγμα συνθήκης που περιέχει σύνολο διακεκριμένων τιμών
Για να εμφανιστούν όλες οι στήλες του πίνακα ΦΟΙΤΗΤΕΣ που αφορούν τους φοιτητές οι οποίοι είναι από τις Σέρρες ή το Κιλκίς, χρησιμοποιείται η εντολή: ΦΟΙΤΗΤΕΣ Κωδικός Όνομα Επώνυμο Οδός Αριθμός Πόλη 123 Αρίστου Παπαβασιλείου Ανθέων 53 Σέρρες 124 Βελισαρίου Παπαντωνίου Ηρώων 20 Λαμία 125 Γεωργίου Κήπων 4 Βόλος 126 Γεωργία Δημητρίου Κιλκίς SELECT * FROM ΦΟΙΤΗΤΕΣ WHERE Πόλη IN ('Σέρρες', 'Κιλκίς') ΦΟΙΤΗΤΕΣ Κωδικός Όνομα Επώνυμο Οδός Αριθμός Πόλη 123 Αρίστου Παπαβασιλείου Ανθέων 53 Σέρρες 126 Γεωργία Δημητρίου Κιλκίς Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

63 Εμφάνιση εγγραφών με συγκεκριμένη σειρά
Ορισμένες φορές είναι επιθυμητό τα αποτελέσματα μίας εντολής SELECT να εμφανιστούν με μία συγκεκριμένη σειρά. Η σειρά εμφάνισης καθορίζεται με χρήση των δεσμευμένων λέξεων ORDER BY, οι οποίες ακολουθούνται από τη στήλη σύμφωνα με την οποία θα γίνει η ταξινόμηση και τον τρόπο ταξινόμησης. Η αύξουσα σειρά δηλώνεται με τη δεσμευμένη λέξη ASC, ενώ η φθίνουσα σειρά δηλώνεται με τη δεσμευμένη λέξη DESC. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

64 Για να εμφανιστούν όλα τα δεδομένα του πίνακα ΠΡΟΪΟΝΤΑ κατά αύξουσα σειρά αποθεμάτων, χρησιμοποιούμε την εντολή: ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1006 CD Audio 1.2 84 2 1004 Δισκέτα 3,5’’ 0.8 120 1003 Μαρκαδόρος 1.3 130 1 1001 Στυλό 0.75 200 1002 Μολύβι 250 1005 CD ROM 315 SELECT * FROM ΠΡΟΪΟΝΤΑ ORDER BY Απόθεμα ASC Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

65 Για να εμφανιστούν όλα τα δεδομένα του πίνακα ΠΡΟΪΟΝΤΑ κατά φθίνουσα σειρά τιμής αγοράς, χρησιμοποιούμε την εντολή: ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1003 Μαρκαδόρος 1.3 130 1 1006 CD Audio 1.2 84 2 1002 Μολύβι 250 1005 CD ROM 315 1004 Δισκέτα 3,5’’ 0.8 120 1001 Στυλό 0.75 200 SELECT * FROM ΠΡΟΪΟΝΤΑ ORDER BY ΤιμήΑγοράς DESC Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

66 SELECT Κωδικός, Περιγραφή, Απόθεμα FROM ΠΡΟΪΟΝΤΑ WHERE Κατηγορία = 2
Για να εμφανίσουμε τον κωδικό, την περιγραφή και το απόθεμα των προϊόντων που είναι της κατηγορίας 2, κατά φθίνουσα σειρά του αποθέματος, χρησιμοποιούμε την παρακάτω εντολή: ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή ΤιμήΑγοράς Απόθεμα Κατηγορία 1001 Στυλό 0.75 200 1 1002 Μολύβι 250 1003 Μαρκαδόρος 1.3 130 1004 Δισκέτα 3,5’’ 0.8 120 2 1005 CD ROM 315 1006 CD Audio 1.2 84 SELECT Κωδικός, Περιγραφή, Απόθεμα FROM ΠΡΟΪΟΝΤΑ WHERE Κατηγορία = 2 ORDER BY Απόθεμα DESC ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Απόθεμα 1005 CD ROM 315 1004 Δισκέτα 3,5’’ 120 1006 CD Audio 84 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

67 Εμφάνιση στήλης με άλλο όνομα
Τα αποτελέσματα μίας εντολής SELECT εμφανίζονται πάντοτε σε μορφή πίνακα. Τα ονόματα των στηλών του πίνακα αποτελεσμάτων είναι ίδια με τα ονόματα των στηλών του πίνακα από τον οποίο προέρχονται τα δεδομένα. Μπορούμε να αλλάξουμε τα ονόματα των στηλών του πίνακα αποτελεσμάτων, χρησιμοποιώντας τη δεσμευμένη λέξη AS όπως φαίνεται στην παρακάτω εντολή: SELECT Κωδικός AS ΚωδΠροϊόντος, Απόθεμα AS ΑπόθΠροιόντος FROM ΠΡΟΪΟΝΤΑ Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

68 Υπολογισμοί απλών παραστάσεων
Η SQL επιτρέπει τον υπολογισμό μαθηματικών παραστάσεων που δηλώνο-νται μετά τη δεσμευμένη λέξη SELECT. Οι απλές μαθηματικές παραστάσεις περιέχουν τις συνηθισμένες αριθμητικές πράξεις και χρησιμοποιούν τα γνωστά αριθμητικά σύμβολα: + για την πρόσθεση - για την αφαίρεση * για τον πολλαπλασιασμό / για την διαίρεση Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

69 Παραδείγματα υπολογισμού απλής αριθμητικής παράστασης (1)
Ας υποθέσουμε ότι θέλουμε να εμφανίσουμε για το προϊόν που έχει κωδικό 1003, την τωρινή τιμή αγοράς του καθώς και την τιμή αγοράς του αυξημένης κατά 5%. Για την εμφάνιση αυτών των δεδομένων χρησιμοποιείται η εντολή: SELECT ΤιμήΑγοράς, ΤιμήΑγοράς * 1.05 AS ΝέαΤιμή FROM ΠΡΟΪΟΝΤΑ WHERE Κωδικός = 1003 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

70 Παραδείγματα υπολογισμού απλής αριθμητικής παράστασης (2)
Για τον υπολογισμό του συνολικού ποσού που διατέθηκε για την αγορά του αποθέματος του προϊόντος με κωδικό 1001 χρησιμοποιείται η παρακάτω εντολή SQL: SELECT Κωδικός, ΤιμήΑγοράς * Απόθεμα AS ΣυνολικόΚόστος FROM ΠΡΟΪΟΝΤΑ WHERE Κωδικός = 1001 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

71 Παράδειγμα αριθμητικού υπολογισμού για πολλές εγγραφές ταυτόχρονα
Η SQL παρέχει τη δυνατότητα αριθμητικών υπολογισμών για πολλές εγγραφές ταυτόχρονα. Έτσι, ο υπολογισμός του συνολικού ποσού που διατέθηκε για την αγορά των αποθεμάτων για καθένα από τα προϊόντα που ανήκουν στην κατηγορία 2 γίνεται με την παρακάτω εντολή SQL: SELECT Κωδ ικός, Τ ιμήΑγοράς * Απόθεμα AS ΣυνολικόΚόστος FROM ΠΡΟΪΟΝΤΑ WHERE Κατηγορία = 2 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

72 Υπολογισμοί με συγκεντρωτικές συναρτήσεις
Περισσότερο σύνθετες αριθμητικές παραστάσεις μπορούν να δημιουργηθούν με χρήση ορισμένων ειδικών συναρτήσεων που παρέχει η SQL και οι οποίες είναι γνωστές με τον όρο συγκεντρωτικές συναρτήσεις (aggregate functions). Οι συγκεντρωτικές συναρτήσεις είναι οι εξής: COUNT: απαριθμεί το πλήθος των εγγραφών SUM: υπολογίζει το άθροισμα μίας στήλης ή μίας αριθμητικής παράστασης ΜΙΝ: υπολογίζει το ελάχιστο μίας αριθμητικής στήλης MAX: υπολογίζει το μέγιστο μίας αριθμητικής στήλης AVG: υπολογίζει τη μέση τιμή μίας αριθμητικής στήλης Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

73 Παραδείγματα χρήσης συγκεντρωτικών συναρτήσεων
ΣΥΝΤΗΡΗΣΗ Παραδείγματα χρήσης συγκεντρωτικών συναρτήσεων Ο παρακάτω πίνακας δείχνει τα χρήματα που ξοδεύτηκαν για συντήρηση των αυτοκινήτων για όλη την προηγούμενη χρονιά ΑριθμόςΚυκλοφορίας ΕτήσιοΚόστος ΕΡΗ 1234 4500 ΥΑΑ 2345 1200 ΕΡΗ 3455 900 ΚΖΑ 4567 3510 ΡΗΖ 6789 2700 SELECT AVG(ΕτήσιοΚόστος) FROM ΣΥΝΤΗΡΗΣΗ AVG(ΕτήσιοΚόστος) 2562 Ο μέσος όρος το κόστους της συντήρησης SELECT ΜΙΝ (ΕτήσιοΚόστος) FROM ΣΥΝΤΗΡΗΣΗ MIN(ΕτήσιοΚόστος) 900 Το ελάχιστο κόστους της συντήρησης SELECT SUM(ΕτήσιοΚόστος) FROM ΣΥΝΤΗΡΗΣΗ SUM(ΕτήσιοΚόστος) 12810 Το συνολικό κόστος συντήρησης SELECT COUNT (ΑριθμόςΚυκλοφορίας) FROM ΣΥΝΤΗΡΗΣΗ WHERE ΕτήσιοΚόστος > 3000 Το πλήθος των αυτοκινήτων με κόστος συντήρησης πάνω από 3000 € COUNT(ΑριθμόςΚυκλοφορίας) 2 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

74 Υπολογισμοί σε ομάδες εγγραφών
Πολλές φορές είναι απαραίτητο να θεωρήσουμε έναν πίνακα ως αποτελούμενο από ομάδες εγγραφών (γραμμών). Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

75 Παράδειγμα ομαδοποίησης 1
ΕΠΙΔΟΣΕΙΣΠΩΛΗΤΩΝ Κωδικός Πωλητή Προϊόντος Πωλήσεις 1 1001 55 1002 60 1003 25 2 70 15 Ο πίνακας ΕΠΙΔΟΣΕΙΣΠΩΛΗΤΩΝ δείχνει τις πωλήσεις σε κάθε προϊόν που έκανε ο καθένας από τους πωλητές μίας εταιρείας στη διάρκεια του προηγούμενου μήνα. Θεωρούμε ότι ο πίνακας αυτός αποτελείται από δύο ομάδες εγγραφών: η α’ ομάδα περιλαμβάνει τις πωλήσεις του πωλητή με κωδικό 1 (ομάδα Α), ενώ η β’ άλλη ομάδα περιλαμβάνει τις πωλήσεις του πωλητή με κωδικό 2 (ομάδα Β) . Στην περίπτωση αυτή ο χωρισμός σε ομάδες γίνεται ανάλογα με την τιμή που έχει η στήλη ΚωδικόςΠωλητή. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

76 Ομαδοποίηση με το Group by
ΕΠΙΔΟΣΕΙΣΠΩΛΗΤΩΝ Κωδικός Πωλητή Προϊόντος Πωλήσεις 1 1001 55 1002 60 1003 25 2 70 15 Κωδικός Πωλητή Επίδοση 1 130 2 85 SELECT ΚωδικόςΠωλητή, SUM (Πωλήσεις) AS Επίδοση FROM ΕΠΙΔΟΣΕΙΣΠΩΛΗΤΩΝ GROUP BY ΚωδικόςΠωλητή Στην SQL είναι δυνατό οι συγκεντρωτικές συναρτήσεις να υπολογιστούν για κάθε ομάδα χωριστά. Αυτό γίνεται με χρήση των δεσμευμένων λέξεων GROUP BY με τη βοήθεια των οποίων δηλώνονται οι διάφορες ομάδες του πίνακα. Έτσι, το σύνολο των πωλήσεων για κάθε πωλητή χωριστά υπολογίζεται από την παραπάνω εντολή Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

77 Παράδειγμα ομαδοποίησης 2
ΕΠΙΔΟΣΕΙΣΠΩΛΗΤΩΝ Κωδικός Πωλητή Προϊόντος Πωλήσεις 1 1001 55 1002 60 1003 25 2 70 15 Οι εγγραφές ενός πίνακα μπορούν να ομαδοποιηθούν με διάφορους τρόπους, ανάλογα με τον υπολογισμό που απαιτείται. Έτσι, πίνακας ΕΠΙΔΟΣΕΙΣΠΩΛΗΤΩΝ μπορεί να θεωρηθεί ότι αποτελείται από τρεις ομάδες εγγραφών: η α’ ομάδα αφορά τις πωλήσεις του προϊόντος 1001 (ομάδα 1), η β’ ομάδα αφορά τις πωλήσεις του προϊόντος 1002 (ομάδα 2) και η γ’ ομάδα αφορά τις πωλήσεις του προϊόντος 1003 (ομάδα 3). Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

78 Παράδειγμα ομαδοποίησης 2
ΕΠΙΔΟΣΕΙΣΠΩΛΗΤΩΝ Κωδικός Πωλητή Προϊόντος Πωλήσεις 1 1001 55 1002 60 1003 25 2 70 15 Κωδικός Προϊόντος ΠωλήσειςΠΡ 1001 125 1002 75 1003 25 SELECT ΚωδικόςΠροΐόντος, SUM (Πωλήσεις) AS ΠωλήσειςΠΡ FROM ΕΠΙΔΟΣΕΙΣΠΩΛΗΤΩΝ GROUP BY ΚωδικόςΠροιόντος Τώρα, η ομαδοποίηση γίνεται ανάλογα με την τιμή που έχει η στήλη ΚωδικόςΠροΐόντος. Αυτή η ομαδοποίηση είναι απαραίτητη όταν θέλουμε να υπολογίσουμε το σύνολο των πωλήσεων για κάθε προϊόν. Η εντολή SQL που δίνει τον υπολογισμό αυτόν φαίνεται παραπάνω Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

79 Επιλογή δεδομένων από δύο ή περισσότερους πίνακες
Μέχρι τώρα είδαμε πώς μπορούμε να αναζητούμε με τη βοήθεια της SQL δεδομένα από ένα μόνο πίνακα. Ορισμένες φορές, ωστόσο, είναι απαραίτητο να αναζητήσουμε δεδομένα από δύο ή περισσότερους πίνακες, όπως εξηγείται στο επόμενο παράδειγμα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

80 Συνδυασμός εγγραφών δύο πινάκων
ΠΡΟΪΟΝΤΑ ΚΑΤΗΓΟΡΙΕΣ Εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία π1 1001 Στυλό 0.75 Π200 1 κ1 Είδη γραφείου π2 1002 Μολύβι Π250 κ2 2 Είδη υπολογιστή π3 1003 Μαρκαδόρος 1.3 Π130 5 κ3 3 Υπολογιστής π4 1004 Δισκέτα 3,5" 0.8 Π120 Μπορούμε να συνδυάσουμε την εγγραφή π1 με την κ1 και να δημιουργήσουμε την εγγραφή: εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία πκ1: π1 με κ1 1001 Στυλό 0.75 Π200 1 Είδη γραφείου Με την ίδια λογική μπορούμε να συνδυάσουμε την εγγραφή π1 με την κ2 και να δημιουργήσουμε την εγγραφή: εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία πκ2: π1 με κ2 1001 Στυλό 0.75 Π200 1 2 Είδη υπολογιστή Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

81 Καρτεσιανό γινόμενο Συνολικά μπορούμε να συνδυάσουμε κάθε μία από τις 4 εγγραφές του α’ πίνακα με κάθε μία από τις 3 εγγραφές του β’ πίνακα και έτσι να δημιουργήσουμε τις παρακάτω 12 εγγραφές: εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία πκ1: π1 με κ1 1001 Στυλό 0.75 Π200 1 Είδη γραφείου πκ2: π1 με κ2 2 Είδη υπολογιστή πκ3: π1 με κ3 3 Υπολογιστής πκ4: π2 με κ1 1002 Μολύβι Π250 πκ5: π2 με κ2 πκ6: π2 με κ3 πκ7: π3 με κ1 1003 Μαρκαδόρος 1.3 Π130 5 πκ8: π3 με κ2 πκ9: π3 με κ2 πκ10: π4 με κ1 1004 Δισκέτα 3,5" 0.8 Π120 πκ11: π4 με κ2 πκ12: π4 με κ3 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής Οι παραπάνω εγγραφές αποτελούν το καρτεσιανό γινόμενο των δύο πινάκων

82 Καρτεσιανό γινόμενο στην SQL
SELECT ΠΡΟΪΟΝΤΑ.*, ΚΑΤΗΓΟΡΙΕΣ.* FROM ΠΡΟΪΟΝΤΑ, ΚΑΤΗΓΟΡΙΕΣ Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

83 Καρτεσιανό γινόμενο και ‘λάθος’ εγγραφές
Η εγγραφή πκ2 συνδυάζει το προϊόν 1001 που είναι στην κατηγορία 1 με τα είδη υπολογιστή που έχουν κωδικό κατηγορίας 2. Επομένως η εγγραφή πκ2 είναι λάθος. Για τον ίδιο λόγο λάθος είναι οι εγγραφές που εμφανίζονται με κόκκινα γράμματα και κανονικά δεν θα θέλαμε να εμφανιστούν. εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία πκ1: π1 με κ1 1001 Στυλό 0.75 Π200 1 Είδη γραφείου πκ2: π1 με κ2 2 Είδη υπολογιστή πκ3: π1 με κ3 3 Υπολογιστής πκ4: π2 με κ1 1002 Μολύβι Π250 πκ5: π2 με κ2 πκ6: π2 με κ3 πκ7: π3 με κ1 1003 Μαρκαδόρος 1.3 Π130 5 πκ8: π3 με κ2 πκ9: π3 με κ2 πκ10: π4 με κ1 1004 Δισκέτα 3,5" 0.8 Π120 πκ11: π4 με κ2 πκ12: π4 με κ3 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

84 Εμφάνιση των σωστών εγγραφών
Για να πάρουμε δεδομένα τα οποία είναι σωστά πρέπει να χρησιμοποιούμε τον όρο WHERE που επιτρέπει να περιγράψουμε τη συνθήκη που θέλουμε να ικανοποιούν τα δεδομένα που εμφανίζονται. Στο συγκεκριμένο παράδειγμα, οι γραμμές που θέλουμε να εμφανίζονται είναι αυτές στις οποίες κάθε προϊόν συνδυάζεται μόνο με την δική του κατηγορία: SELECT ΠΡΟΪΟΝΤΑ.*, ΚΑΤΗΓΟΡΙΕΣ.* FROM ΠΡΟΪΟΝΤΑ, ΚΑΤΗΓΟΡΙΕΣ WHERE Κατηγορία = ΚωδικόςΚατηγορίας Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

85 Η εντολή: SELECT ΠΡΟΪΟΝΤΑ. , ΚΑΤΗΓΟΡΙΕΣ
Η εντολή: SELECT ΠΡΟΪΟΝΤΑ.*, ΚΑΤΗΓΟΡΙΕΣ.* FROM ΠΡΟΪΟΝΤΑ, ΚΑΤΗΓΟΡΙΕΣ WHERE Κατηγορία = ΚωδικόςΚατηγορίας Εμφανίζει τα παρακάτω δεδομένα: εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία πκ1: π1 με κ1 1001 Στυλό 0.75 Π200 1 Είδη γραφείου πκ4: π2 με κ1 1002 Μολύβι Π250 πκ11: π4 με κ2 1004 Δισκέτα 3,5" 0.8 Π120 2 Είδη υπολογιστή Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

86 SELECT ΠΡΟΪΟΝΤΑ.*, Ονομασία FROM ΠΡΟΪΟΝΤΑ, ΚΑΤΗΓΟΡΙΕΣ
Στον προηγούμενο πίνακα η κατηγορία ενός προϊόντος εμφανίζεται δύο φορές: μία φορά στη στήλη Κατηγορία και μία φορά στη στήλη ΚωδικόςΚατηγορίας. Μπορούμε να εμφανίσουμε κάθε στήλη μία μόνο φορά χρησιμοποιώντας για παράδειγμα την παρακάτω εντολή: SELECT ΠΡΟΪΟΝΤΑ.*, Ονομασία FROM ΠΡΟΪΟΝΤΑ, ΚΑΤΗΓΟΡΙΕΣ WHERE Κατηγορία = ΚωδικόΚατηγορίας Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

87 Πρακτική οδηγία Όποτε θέλουμε να συνδυάσουμε δεδομένα από δύο ή περισσότερους πίνακες: στον όρο SELECT γράφουμε τα ονόματα των στηλών που θέλουμε να εμφανίζονται όταν εκτελείται η εντολή. στον όρο FROM αναφέρουμε τα ονόματα των πινάκων από τους οποίους θέλουμε να αντλήσουμε δεδομένα ενώ στον όρο WHERE περιγράφουμε με ποιόν τρόπο συνδέονται οι πίνακες από τους οποίους αντλούμε δεδομένα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

88 Γραφική παράσταση Venn
ΠΡΟΪΟΝΤΑ ΚΑΤΗΓΟΡΙΕΣ Εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία π1 1001 Στυλό 0.75 Π200 1 κ1 Είδη γραφείου π2 1002 Μολύβι Π250 κ2 2 Είδη υπολογιστή π3 1003 Μαρκαδόρος 1.3 Π130 5 κ3 3 Υπολογιστής π4 1004 Δισκέτα 3,5" 0.8 Π120 Στη γραφική παράσταση Venn, οι εγγραφές των δύο πινάκων που συσχετίζονται αναπαριστάνονται ως στοιχεία τα οποία συνδέονται άμεσα με μία γραμμή τοποθετούνται κεντρικά ώστε να ανήκουν και στα δύο σύνολα Οι εγγραφές πίνακα που δεν συσχετίζονται με άλλη εγγραφή, αναπαριστάνονται ως στοιχεία τα οποία τοποθετούνται περιφερειακά στο σύνολο Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

89 Ο όρος JOIN της SQL Η SQL προσφέρει την δεσμευμένη λέξη JOIN η οποία μπορεί να χρησιμοποιηθεί για να συνδυάσουμε δεδομένα δύο ή περισσοτέρων πινάκων. Στην απλούστερη μορφή του ο όρος JOIN χρησιμοποιείται σε μία εντολή SELECT για να βρούμε τις εγγραφές δύο ή περισσότερων πινάκων που σε μία στήλη τους έχουν την ίδια τιμή. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

90 Εσωτερική συνένωση H εσωτερική συνένωση (inner join) ανάμεσα σε δύο πίνακες που έχουν μία κοινή στήλη είναι η πράξη με την οποία εμφανίζονται οι εγγραφές που στην κοινή τους στήλη έχουν την ίδια τιμή. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

91 Παράδειγμα εσωτερικής συνένωσης πινάκων με τον όρο JOIN
ΠΡΟΪΟΝΤΑ ΚΑΤΗΓΟΡΙΕΣ Εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία π1 1001 Στυλό 0.75 Π200 1 κ1 Είδη γραφείου π2 1002 Μολύβι Π250 κ2 2 Είδη υπολογιστή π3 1003 Μαρκαδόρος 1.3 Π130 5 κ3 3 Υπολογιστής π4 1004 Δισκέτα 3,5" 0.8 Π120 SELECT * FROM ΠΡΟΪΟΝΤΑ JOIN ΚΑΤΗΓΟΡΙΕΣ ON κατηγορία = κωδικός_κατηγορίας Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία πκ1: π1 με κ1 1001 Στυλό 0.75 Π200 1 Είδη γραφείου πκ4: π2 με κ1 1002 Μολύβι Π250 πκ11: π4 με κ2 1004 Δισκέτα 3,5" 0.8 Π120 2 Είδη υπολογιστή Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

92 Αριστερή συνένωση H αριστερή συνένωση (left join) ανάμεσα σε δύο πίνακες που έχουν μία κοινή στήλη είναι η πράξη με την οποία εμφανίζονται όλες τις εγγραφές του αριστερού (δηλαδή του πρώτου) πίνακα. Δηλαδή η αριστερή συνένωση περιλαμβάνει: (α) τις εγγραφές των δύο πινάκων που στη κοινή στήλη τους έχουν την ίδια τιμή καθώς και (β) τις εγγραφές του αριστερού (δηλαδή του πρώτου στη σειρά) πίνακα τα οποία στην κοινή στήλη έχουν τιμή που δεν υπάρχει στον δεξιό (δεύτερο) πίνακα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

93 Παράδειγμα αριστερής συνένωσης πινάκων με τον όρο LEFT JOIN
ΠΡΟΪΟΝΤΑ ΚΑΤΗΓΟΡΙΕΣ Εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία π1 1001 Στυλό 0.75 Π200 1 κ1 Είδη γραφείου π2 1002 Μολύβι Π250 κ2 2 Είδη υπολογιστή π3 1003 Μαρκαδόρος 1.3 Π130 5 κ3 3 Υπολογιστής π4 1004 Δισκέτα 3,5" 0.8 Π120 SELECT * FROM ΠΡΟΪΟΝΤΑ LEFT JOIN ΚΑΤΗΓΟΡΙΕΣ ON κατηγορία = κωδικός_κατηγορίας Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία πκ1: π1 με κ1 1001 Στυλό 0.75 Π200 1 Είδη γραφείου πκ4: π2 με κ1 1002 Μολύβι Π250 πκ11: π4 με κ2 1004 Δισκέτα 3,5" 0.8 Π120 2 Είδη υπολογιστή 1003 Μαρκαδόρος 1.3 Π130 5 NULL Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

94 Παράδειγμα αριστερής συνένωσης πινάκων για μη σχετιζόμενες εγγραφές
ΠΡΟΪΟΝΤΑ ΚΑΤΗΓΟΡΙΕΣ Εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία π1 1001 Στυλό 0.75 Π200 1 κ1 Είδη γραφείου π2 1002 Μολύβι Π250 κ2 2 Είδη υπολογιστή π3 1003 Μαρκαδόρος 1.3 Π130 5 κ3 3 Υπολογιστής π4 1004 Δισκέτα 3,5" 0.8 Π120 SELECT * FROM ΠΡΟΪΟΝΤΑ LEFT JOIN ΚΑΤΗΓΟΡΙΕΣ ON κατηγορία = κωδικός_κατηγορίας WHERE κωδικός_κατηγορίας IS NULL Συνδυασμός εγγραφών Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία Κ3 με καμία 1003 Μαρκαδόρος 1.3 Π130 5 NULL Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

95 Δεξιά συνένωση H δεξιά συνένωση (right join) ανάμεσα σε δύο πίνακες που έχουν μία κοινή στήλη είναι η πράξη με την οποία εμφανίζονται όλες τις εγγραφές του δεξιού (δηλαδή του δεύτερου) πίνακα. Η δεξιά συνένωση περιλαμβάνει: (α) τις εγγραφές των δύο πινάκων που στη κοινή στήλη τους έχουν την ίδια τιμή καθώς και (β) τις εγγραφές του δεξιού (δηλαδή του δεύτερου στη σειρά) πίνακα οι οποίες στην κοινή στήλη έχουν τιμή που δεν υπάρχει στον αριστερό (πρώτο) πίνακα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

96 Παράδειγμα δεξιάς συνένωσης πινάκων με τον όρο RIGHT JOIN
ΠΡΟΪΟΝΤΑ ΚΑΤΗΓΟΡΙΕΣ Εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία π1 1001 Στυλό 0.75 Π200 1 κ1 Είδη γραφείου π2 1002 Μολύβι Π250 κ2 2 Είδη υπολογιστή π3 1003 Μαρκαδόρος 1.3 Π130 5 κ3 3 Υπολογιστής π4 1004 Δισκέτα 3,5" 0.8 Π120 SELECT * FROM ΠΡΟΪΟΝΤΑ RIGHT JOIN ΚΑΤΗΓΟΡΙΕΣ ON κατηγορία = κωδικός_κατηγορίας Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία πκ1: π1 με κ1 1001 Στυλό 0.75 Π200 1 Είδη γραφείου πκ4: π2 με κ1 1002 Μολύβι Π250 πκ11: π4 με κ2 1004 Δισκέτα 3,5" 0.8 Π120 2 Είδη υπολογιστή NULL 3 Υπολογιστή

97 Παράδειγμα δεξιάς συνένωσης πινάκων για τις μη σχετιζόμενες εγγραφές
ΠΡΟΪΟΝΤΑ ΚΑΤΗΓΟΡΙΕΣ Εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία π1 1001 Στυλό 0.75 Π200 1 κ1 Είδη γραφείου π2 1002 Μολύβι Π250 κ2 2 Είδη υπολογιστή π3 1003 Μαρκαδόρος 1.3 Π130 5 κ3 3 Υπολογιστής π4 1004 Δισκέτα 3,5" 0.8 Π120 SELECT * FROM ΠΡΟΪΟΝΤΑ RIGHT JOIN ΚΑΤΗΓΟΡΙΕΣ ON κατηγορία = κωδικός_κατηγορίας WHERE κατηγορία IS NULL Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία πκ1: π1 με κ1 1001 Στυλό 0.75 Π200 1 Είδη γραφείου πκ4: π2 με κ1 1002 Μολύβι Π250 πκ11: π4 με κ2 1004 Δισκέτα 3,5" 0.8 Π120 2 Είδη υπολογιστή NULL 3 Υπολογιστή

98 Πλήρης συνένωση H πλήρης συνένωση ανάμεσα σε δύο πίνακες που έχουν μία κοινή στήλη είναι η πράξη με την οποία εμφανίζονται όλα τα στοιχεία όλων των πινάκων: εγγραφή ενός πίνακα που δεν συνδέεται με καμία εγγραφή του άλλου πίνακα εμφανίζεται με τιμές NULL στα πεδία του άλλου πίνακα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

99 Παράδειγμα πλήρους συνένωσης πινάκων όταν υποστηρίζεται ο όρος FULL JOIN
ΠΡΟΪΟΝΤΑ ΚΑΤΗΓΟΡΙΕΣ Εγγραφή Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία π1 1001 Στυλό 0.75 Π200 1 κ1 Είδη γραφείου π2 1002 Μολύβι Π250 κ2 2 Είδη υπολογιστή π3 1003 Μαρκαδόρος 1.3 Π130 5 κ3 3 Υπολογιστής π4 1004 Δισκέτα 3,5" 0.8 Π120 SELECT * FROM ΠΡΟΪΟΝΤΑ FULL OUTER JOIN ΚΑΤΗΓΟΡΙΕΣ ON κατηγορία = κωδικός_κατηγορίας Κωδικός Προϊόντος Περιγραφή Τιμή Αγοράς Προμηθευτή Κατηγορία Κατηγορίας Ονομασία πκ1: π1 με κ1 1001 Στυλό 0.75 Π200 1 Είδη γραφείου πκ4: π2 με κ1 1002 Μολύβι Π250 πκ11: π4 με κ2 1004 Δισκέτα 3,5" 0.8 Π120 2 Είδη υπολογιστή 1003 Μαρκαδόρος 1.3 Π130 5 NULL 3 Υπολογιστή

100 Πλήρης συνένωση στην SQL όταν δεν υποστηρίζεται ο όρος FULL JOIN
Σε συστήματα που δεν υποστηρίζεται η δεσμευμένη λέξη FULL χρησιμοποιείται η εντολή UNION: SELECT * FROM ΠΡΟΪΟΝΤΑ LEFT JOIN ΚΑΤΗΓΟΡΙΕΣ ΟΝ κατηγορία = κωδικός_κατηγορίας UNION FROM ΠΡΟΪΟΝΤΑ RIGHT JOIN ΚΑΤΗΓΟΡΙΕΣ Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής


Κατέβασμα ppt "Σχεσιακεσ βασεισ δεδομενων"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google