Professional Documents
Culture Documents
Διαχείριση Δεδομένων και Βάσεις Δεδομένων Αθανάσιος Σταυρακούδης Πανεπιστήμιο Ιωαννίνων PDF
Διαχείριση Δεδομένων και Βάσεις Δεδομένων Αθανάσιος Σταυρακούδης Πανεπιστήμιο Ιωαννίνων PDF
Δεδομένων
Αθανάσιος Σταυρακούδης
Πανεπιστήμιο Ιωαννίνων
Ηλεκτρονικοί Υπολογιστές ΙΙ
Περιγραφή και στόχοι του μαθήματος
Οδηγίες προς ναυτιλομένους
Αθανάσιος Σταυρακούδης
΄Ανοιξη 2014
1 / 43
Επισκόπηση 1
1 Δεδομένα, καταγραφή δεδομένων, επεξεργασία δεδομένων
2 Περιεχόμενο και ύλη του μαθήματος
3 Βιβλιογραφία, Εύδοξος, Βιβλιοθήκη
4 Αξιολόγηση φοιτητών, εξετάσεις, εργασίες, βαθμολογίες,
επιδοτήσεις κ.λπ.
5 Ασκήσεις εξάσκησης και προετοιμασίας
6 Επιπλέον βοήθεια, αλληλοβοήθεια, συνεργατική μάθηση, κριτική,
και άλλες πολιτικές.
7 Προετοιμασία για το επόμενο μάθημα
3 / 43
Στρατολογικοί κατάλογοι
Φορολογικοί κατάλογοι
Δωρητές Ναών, Μοναστηριών, κ.λπ.
Καταγραφή αγροτικής παραγωγής
Καταγραφή εμπορικών συναλλαγών
6 / 43
Δεδομένα στις αρχές του 20ου αιώνα
΄Ολα τα προηγηγούμενα
Γενική απογραφή πληθυσμού
Καταγραφή μαθητών σχολείων και βαθμολόγιο
Τήρηση λογιστικών βιβλίων
Εργατικά και επαγγελματικά σωματεία
Βιβλιοθήκες
Εκλογικοί κατάλογοι, αποτελέσματα εκλογών
Λεπτομερής καταγραφή απωλειών πολέμου
7 / 43
΄Ολα τα προηγηγούμενα
Ηλεκτρονικές βάσεις δεδομένων της κυβέρνησης: Ληξιαρχείο,
ασφαλιστικοί φορείς, φοιτητολόγιο, φορολογικές δηλώσεις,
μισθοδοσία Δ/Υ, κ.α.
Τήρηση τραπεζικών συνναλαγών
Πελατολόγιο, παραγγελίες, πωλήσεις, χρηματικές ροές, κ.λπ.
Επικοινωνία, τηλέφωνα, μηνύματα, βιντεοκλήσεις, κ.λπ.
Μετακινήσεις, εισητήρια, διόδια, κ.λπ.
και:
8 / 43
Δεδομένα από ηλεκτρονική δραστηριότητα
9 / 43
Ορολογία
10 / 43
Στόχος του μαθήματος
19 / 43
20 / 43
Συστήματα Βάσεων Δεδομένων
21 / 43
22 / 43
Γενική βιβλιογραφία I
23 / 43
Γενική βιβλιογραφία II
24 / 43
Ταξίδι στις βάσεις δεδομένων, δεδομένα,
μοντέλα, αρχεία, μετατροπές, διαδίκτυο,
λήψη και χειρισμός δεδομένων
2 / 57
Εν αρχή
3 / 57
Μορφότυπο αρχείων
Ορισμός
Μορφότυπο (format) είναι ο προτυποποιημένος τρόπος
κωδικοποίησης δεδομένων (bits) που αποθηκεύονται σε ψηφιακά
μέσα.
Παραδείγματα
Δεδομένα λογιστικών φύλλων, .xls, .ods
Ιστοσελίδες, .htm, .html
Μουσική, .mp3, .flac
Αρχεία κειμένου δεδομένων, .csv, .tsv, .txt
Ταινίες ή βίντεο .avi, .mp4
4 / 57
Παραδείγματα
http:
//research.stlouisfed.org/fred2/data/DEXUSEU.txt
Αρχεία ρυθμίσεων σε κάθε υπολογιστή
5 / 57
Αρχεία κειμένου και δυαδικά αρχεία
Παραδείγματα
Προγράμματα Η/Υ, πχ το πρόγραμμα acroread ή okular με
το οποίο πιθανά βλέπετε αυτό το αρχείο παρουσίασης.
΄Ενα αρχείο μουσικής ή βίντεο στον Η/Υ σας.
Αρχεία του MS Office.
Συμπιεσμένα αρχεία, όπως .zip, .gz, .rar
6 / 57
8 / 57
Αρχεία .csv
Ορισμός
Αρχεία κειμένου με λίστες τιμών που χωρίζονται με κόμματα, ή
κάποιο άλλο χαρακτήρα.
Παράδειγμα
Country , C a p i t a l , Popul
Fr anc e , P a r i s , 9 . 1
Gr ee c e , Athens , 3 . 7
I t a l y , Rome , 2 . 6
Bulgaria , Sofia ,1.2
Επισύναψη:
9 / 57
΄Ανοιγμα και επεξεργασία αρχείων .csv
Excel ή Calc
Δυνατότητα για :
΄Ανοιγμα και προβολή δεδομένων αρχείων csv.
Επεξεργασία δεδομένων αρχείων csv.
Εξαγωγή δεδομένων σε μορφή csv.
R
Δυνατότητα για :
΄Ανοιγμα και προβολή δεδομένων αρχείων csv.
Επεξεργασία δεδομένων αρχείων csv.
Εξαγωγή δεδομένων σε μορφή csv.
10 / 57
11 / 57
Δρομολόγια Αστικών Συγκοινωνιών της Αθήνας
http://data.gov.gr/dataset/28
12 / 57
Επισκόπηση
14 / 57
Επισκόπηση
15 / 57
Το πρόβλημα
Ζητείται ένα ηλεκτρονικό αρχείο καταγραφής των επαφών/φίλων
μας, με στοιχεία όπως όνομα, τηλέφωνο, γενέθλια κ.λπ.
Επισύναψη:
17 / 57
Πολλά προβλήματα
Είναι πολύ εύκολο να γίνει λάθος και να εισαχθεί δεύτερη φορά
το ίδιο πρόσωπο.
Είναι πολύ δύσκολο, ή ακόμα και αδύνατο, να δοθούν
απαντήσεις σε ερωτήματα όπως «πόσες μέρες μένουν για τα
γενέθλια του Νίκου», ή πόσους αριθμούς τηλεφώνου έχουμε
καταχωρίσει για το Στέφανο».
Αν το αρχείο γίνει μεγάλο, τότε γίνεται δύσκολη η αναζήτηση
πληροφοριών, ακόμα και απλών πληροφοριών όπως «σε ποια
πόλη μένει η Αλέκα».
18 / 57
Προσέγγιση με λογιστικό φύλλο
Επισύναψη:
19 / 57
20 / 57
Επισκόπηση
21 / 57
22 / 57
Παράδειγμα ανάλυσης απαιτήσεων
23 / 57
24 / 57
Ποιος είναι φίλος
Ορισμός
Φίλος είναι «κάτι» που έχει όνομα, διεύθυνση, τηλέφωνο και
γενέθλια.
Παράδειγμα
Νίκος Αλεξίου, Λάρισα, 2410990291, 5/Φεβ.
Αφαίρεση
1 Οι βάσεις δεδομένων περιέχουν δεδομένα που προέρχονται
από αφαίρεση της πραγματικότητας.
2 Η διαδικασία με την οποία γίνεται η αφαίρεση λέγεται
μοντελοποίηση δεδομένων.
25 / 57
Επισκόπηση
31 / 57
Τα πολλά λόγια είναι φτώχεια
΄Ονομα Διεύθυνση
Φίλος
Τηλέφωνο Γενέθλια
33 / 57
Ορισμός δεδομένων
1 CREATE TABLE friends
2 (
3 name VARCHAR(50),
4 address VARCHAR(50),
5 phone VARCHAR(50),
6 birthdate VARCHAR(50)
7 );
35 / 57
Ορισμός δεδομένων σε γραφικό περιβάλλον
36 / 57
37 / 57
Πρωτεύον κλειδί
1 CREATE TABLE friends
2 (
3 id INTEGER NOT NULL,
4 name VARCHAR(50),
5 address VARCHAR(50),
6 phone VARCHAR(50),
7 birthdate VARCHAR(50),
8 PRIMARY KEY (id)
9 );
38 / 57
41 / 57
42 / 57
Πηγές οικονομικών δεδομένων
1 The Word Bank http://data.worldbank.org
2 Federal Reserve Economic Data
http://research.stlouisfed.org/fred2
3 Eurostat http://ec.europa.eu/eurostat
4 Data Market http://datamarket.com
5 Fao Stat http://faostat.fao.org
6 Index Mundi http://www.indexmundi.com
7 Ελληνικά Δημόσια Δεδομένα
http://data.gov.gr
43 / 57
Επισκόπηση
44 / 57
Μαθητές ανά δάσκαλο σε δημοτικά σχολεία
Μαθητές ανά δάσκαλο
30
20
5 10
0
Έτος
45 / 57
http://data.worldbank.org/indicator/SE.PRM.ENRL.TC.ZS
46 / 57
R, WDI library
1 library(WDI)
2 DF <- WDI(country=c("GR"),
3 indicator="SE.PRM.ENRL.TC.ZS", start=1970)
4 ppt <- ts(rev(DF$SE), start=1970)
5 cairo_pdf("PupilsPerTeacher.pdf", width=6, height=4)
6 plot(ppt, lwd=2, col=2, ylim=c(0,35), main="",
7 xlab="΄Ετος", ylab="Μαθητές ανά δάσκαλο")
8 dev.off()
Επισύναψη:
47 / 57
Επισκόπηση
48 / 57
Ευρωπαϊκή Στατιστική Υπηρεσία
http://ec.europa.eu/eurostat
49 / 57
http://ec.europa.eu/eurostat
50 / 57
Σύγκριση Ελλάδας / Πολωνίας
6
4
% GDP change
2
0
−2
Greece
−6
Poland
53 / 57
http://data.gov.gr
54 / 57
Πόσοι είναι οι δημόσιοι υπάλληλοι;
http://apografi.gov.gr/
http://data.gov.gr/dataset/33
55 / 57
56 / 57
Το σχεσιακό μοντέλο δεδομένων και οι
σχεσιακές βάσεις δεδομένων
Επισκόπηση
1 Οι 12 κανόνες του Codd
2 Κεντρικές έννοιες του σχεσιακού μοντέλου
Ορισμοί για τις σχέσεις
Οι 4 βασικές ιδιότητες των σχέσεων
Τα είδη των σχέσεων
3 Ελλιπείς τιμές, Null
Ιστορία και σημασία των τιμών Null
Παραδείγματα Null τιμών
Πλεονεκτήματα και μειονεκτήματα των Null τιμών
4 Κλειδιά σχέσεων, υπερκλειδί, υποψήφιο κλειδί, πρωτεύον κλειδί,
ξένο κλειδί
2 / 71
Edgar F. Codd
΄Αγγλος επιστήμονας, 1923 – 2003.
Θεμελιωτής του σχεσιακού μοντέλου
βάσεων δεδομένων.
Πιλότος στο 2ο παγκόσμιο πόλεμο.
Εργάστηκε πολλά χρόνια για την IBM.
Περισσότερο γνωστός για την εργασία
του ”A Relational Model of Data for
Large Shared Data Banks”.a
Βραβείο Turing το 1981.
a
http://dl.acm.org/citation.cfm?doid=362384.362685
3 / 71
Κανόνας #1
The information Rule
All information in a relational database (including table and
column names) is represented in only one way, namely as a
value in a table.
4 / 71
Κανόνας #2
The guaranteed access rule
All data must be accessible. This rule is essentially a restate-
ment of the fundamental requirement for primary keys. It says
that every individual scalar value in the database must be log-
ically addressable by specifying the name of the containing
table, the name of the containing column and the primary key
value of the containing row.
Κανόνας #3
Systematic treatment of null values:
The DBMS must allow each field to remain null (or empty).
Specifically, it must support a representation of ”missing infor-
mation and inapplicable information” that is systematic, dis-
tinct from all regular values (for example, ”distinct from zero
or any other number”, in the case of numeric values), and
independent of data type. It is also implied that such repre-
sentations must be manipulated by the DBMS in a systematic
way.
8 / 71
Τι είναι σχέση;
Κωδικός ΄Ονομα Εξάμηνο
504 Βάσεις Δεδομένων 5
404 Μακροοικονομική Θεωρία ΙΙ 4
303 Προγραμματισμός Υπολογιστών Ι 3
604 Πληροφοριακά Συστήματα Διοίκησης 6
9 / 71
Αντιστοιχία πίνακα με σχέση
Η αντιστοιχία είναι άτυπη, μια σχέση δεν είναι ακριβώς
ένας πίνακας.
Η σχέση έχει μια επικεφαλίδα, την πρώτη γραμμή του
πίνακα, που συνιστά το σχήμα της σχέσης.
Το σχήμα της σχέσης είναι ένα σύνολο από γνωρίσματα,
πχ {Κωδικός, ΄Ονομα, Εξάμηνο}.
Το σύνολο {504, Βάσεις Δεδομένων, 5} είναι μια πλειάδα
(ή συστοιχία) της σχέσης Μαθήματα.
Μια σχέση έχει ακριβώς ένα καθορισμένο σχήμα, έχει
όμως, ενδεχομένως, πολλές πλειάδες.
Οι τιμές κάθε γνωρίσματος προέρχονται από το κάποιο
πεδίο ορισμού.
10 / 71
12 / 71
Σχήμα σχέσης
Σχήμα σχέσης
Σχήμα μιας σχέσης είναι το σύνολο των γνωρισμάτων της.
R(A1 , A2 , . . . , An )
Στιγμιότυπο σχέσης
Στιγμιότυπο σχέσης που συμβολίζεται με t[R] είναι το σύνολο
όλων των πλειάδων μιας σχέσης μια συγκεκριμένη χρονική στιγμή.
Κωδικός ΄Ονομα Εξάμηνο
504 Βάσεις Δεδομένων 5
404 Μακροοικονομική Θεωρία ΙΙ 4
303 Προγραμματισμός Υπολογιστών Ι 3
604 Πληροφοριακά Συστήματα Διοίκησης 6
14 / 71
Γνώρισμα σχέσης
Γνώρισμα
Γνώρισμα της σχέσης (πεδίο ή στήλη ενός πίνακα) είναι μια
ιδιότητα της σχέσης και έχει ένα μοναδικό όνομα μέσα στη σχέση.
Κωδικός ΄Ονομα Εξάμηνο
504 Βάσεις Δεδομένων 5
404 Μακροοικονομική Θεωρία ΙΙ 4
303 Προγραμματισμός Υπολογιστών Ι 3
604 Πληροφοριακά Συστήματα Διοίκησης 6
Παράδειγμα
Ο Κωδικός, το ΄Ονομα και το Εξάμηνο του μαθήματος είναι
γνωρίσματα της σχέσης.
15 / 71
Πεδίο ορισμού γνωρίσματος σχέσης
Πεδίο ορισμού
Πεδίο ορισμού dom(Ai ) ενός γνωρίσματος (Ai ) είναι όλες οι
επιτρεπτές τιμές του γνωρίσματος Ai .
Κωδικός ΄Ονομα Εξάμηνο
504 Βάσεις Δεδομένων 5
404 Μακροοικονομική Θεωρία ΙΙ 4
303 Προγραμματισμός Υπολογιστών Ι 3
604 Πληροφοριακά Συστήματα Διοίκησης 6
Παράδειγμα
Πεδίο ορισμού του γνωρίσματος Εξάμηνο είναι το σύνολο των
ακεραίων αριθμών {1, 2, 3, 4, 5, 6, 7, 8}.
16 / 71
Συστοιχία ή πλειάδα
Συστοιχία ή πλειάδα
Συστοιχία ή πλειάδα είναι μια διατεταγμένη λίστα από τιμές
t = < v1 , v2 , . . . , vn >, που κάθε μία ανήκει στο πεδίο ορισμού
dom(Ai ) του αντίστοιχου γνωρίσματος Ai .
Σχέση
Είναι ο συνδυασμός του σχήματος R και του στιγμιότυπου r
της σχέσης.
Γράφουμε r (R) και διαβάζουμε
Σχέση
Γράφουμε r (R) και διαβάζουμε:
Μια σχέση r πάνω στο σχήμα R.
Στιγμυότυπο r του (σχεσιακού) σχήματος R.
18 / 71
Βαθμός σχέσης
Βαθμός σχέσης
Βαθμός μιας σχέσης r (R) είναι το πλήθος των γνωρισμάτων
της σχέσης.
19 / 71
Πληθικότητα σχέσης
Πληθικότητα σχέσης
Πληθικότητα μιας σχέσης r (R) είναι το πλήθος των πλειάδων
της σχέσης.
20 / 71
Παράδειγμα
Μαθήματα(Κωδικός, ΄Ονομα, Εξάμηνο)
21 / 71
Ιδιότητες των σχέσεων
22 / 71
Μοναδικότητα
23 / 71
Μοναδικότητα πλειάδων
Με τον όρο μοναδικότητα υπονοείται πως ένα σύνολο
τιμών (μια πλειάδα) δεν μπορεί να επαναληφθεί μέσα σε
μια σχέση.
Πιθανά να επαναληφθεί ένα υποσύνολο τιμών για κάποια
γνωρίσματα, όχι όμως το σύνολο των τιμών.
Η ιδιότητα της μοναδικότητας εξασφαλίζει την ύπαρξη του
πρωτεύοντος κλειδιού.
Τις περισσότερες φορές βέβαια, ένα υποσύνολο των
γνωρισμάτων της σχέσης είναι αρκετό να ορίσει το
πρωτεύον κλειδί.
Τέτοιο για παράδειγμα, μπορεί να είναι ο αριθμός
κυκλοφορίας ενός αυτοκινήτου, το όνομα χρήστη μιας
υπηρεσίας ηλεκτρονικού ταχυδρομείου, ή το ΑΦΜ ενός
φορολογούμενου.
24 / 71
25 / 71
Διάταξη πλειάδων
Το θέμα της διάταξης των πλειάδων ανάγεται στην ισότητα
των συνόλων, τα οποία δεν είναι διατεταγμένα.
Δεν έχει νόημα να μιλάμε για την πρώτη ή την έβδομη
πλειάδα μιας σχέσης, όπως ακριβώς δεν έχει νόημα να μιλάμε
για το πρώτο ή έβδομο στοιχείο ενός μη διατεταγμένου
μαθηματικού συνόλου.
Κάθε πλειάδα μιας σχέσης μπορεί να ταυτοποιηθεί με βάση
την τιμή του κλειδιού της, και όχι με βάση τη θέση της σε ένα
σύνολο.
Πχ ενδιαφέρει ο πελάτης με ΑΦΜ 004329439 και όχι ο πελάτης
στην πέμπτη γραμμή του πίνακα πελατών.
Μια πλειάδα προσδιορίζεται με βάση την τιμή κάποιου
γνωρίσματος (για παράδειγμα την τιμή του πρωτεύοντος
κλειδιού).
26 / 71
Διάταξη γνωρισμάτων
27 / 71
Ατομικότητα και 1η κανονική μορφή
Ο όρος ατομικότητα των τιμών αναφέρεται στη μη διάσπασή τους
σε απλούστερες τιμές. Αναφέρεται επίσης στο γεγονός πως κάθε
πλειάδα μιας σχέσης έχει μόνο μία τιμή σε κάθε γνώρισμα.
28 / 71
Ατομικότητα – συνέχεια
Φανέλα ΄Ονομα Επώνυμο
3 Μάριος Αλεξίου
4 Δημήτρης-΄Αγγελος Σταθόπουλος
11 Βασίλης Μαργαρίτης
7 Αλέξανδρος Παπαβασιλείου
19 Βασίλης Βλάχος
Είναι η σχέση σε πρώτη κανονική μορφή; Είναι δηλαδή όλες οι τιμές
όλων των γνωρισμάτων ατομικές; Προσοχή στην παρανόηση: ο
παίχτης με τη φανέλα 4 έχει δύο ονόματα, η τιμή του γνωρίσματος
΄Ονομα είναι πολλαπλή, επομένως παραβιάζεται ο κανόνας της
ατομικότητας και η σχέση Παίχτης δεν είναι στην πρώτη κανονική
μορφή. Ωστόσο, αυτή η άποψη, είναι λανθασμένη. Το όνομα του
παίχτη με τη φανέλα 4 είναι ατομικό από τη σκοπιά του σχεσιακού
μοντέλου, επειδή αναφέρεται σε ένα παίχτη.
29 / 71
Είδη σχέσεων: Επώνυμες σχέσεις
Επώνυμες σχέσεις
Επώνυμες σχέσεις είναι αυτές που έχουν οριστεί από το
Σχεσιακό Σύστημα Διαχείρισης Βάσεων Δεδομένων και
έχουν κάποιο μοναδικό όνομα στη βάση δεδομένων. Για
παράδειγμα, οι πίνακες και όψεις που ορίζονται με τις εντολές της
SQL: CREATE TABLE και CREATE VIEW είναι επώνυμες
σχέσεις. Είναι δουλειά του Σχεσιακού Συστήματος
Διαχείρισης Βάσεων Δεδομένων να ελέγχει την εγκυρότητα
του ορισμού και τη μοναδικότητα του ονόματος. Μια επώνυμη
σχέση, μπορεί στη συνέχεια να κληθεί με το όνομά της
30 / 71
Παραστάσιμες σχέσεις
Παραστάσιμες είναι οι σχέσεις που προκύπτουν από σχεσιακές
παραστάσεις επώνυμων σχέσεων. Κάθε επώνυμη σχέση είναι
παραστάσιμη, μια παραστάσιμη σχέση ωστόσο δεν είναι
υποχρεωτικά επώνυμη
31 / 71
Είδη σχέσεων: Παράγωγες σχέσεις
Παράγωγες σχέσεις
Παράγωγες είναι οι επώνυμες σχέσεις που ορίζονται με τη
βοήθεια άλλων επώνυμων σχέσεων. Οι παράγωγες σχέσεις είναι
παραστάσιμες, χωρίς να ισχύει υποχρεωτικά το αντίθετο
32 / 71
Βασικές σχέσεις
Βασικές είναι οι επώνυμες σχέσεις που δεν είναι παράγωγες,
δηλαδή ορίζονται αυτόνομα από άλλες σχέσεις. Για παράδειγμα,
οι πίνακες που ορίζονται με την εντολή CREATE TABLE είναι
βασικοί πίνακες (βασικές σχέσεις). Κάθε βάση δεδομένων έχει
τουλάχιστον μία βασική σχέση. Στην πράξη, οι βασικές σχέσεις
είναι οι μόνες που αποθηκεύουν δεδομένα. Επομένως είναι και οι
πιο βασικές
33 / 71
Είδη σχέσεων: ΄Οψεις
΄Οψεις
΄Οψεις (αλλιώς και απόψεις) είναι οι επώνυμες παράγωγες
σχέσεις. Ο ορισμός τους στηρίζεται στην ύπαρξη μιας τουλάχιστον
βασικής σχέσης. Οι όψεις είναι επώνυμες σχέσεις, με την SQL
δημιουργούνται με την εντολή CREATE VIEW. Οι όψεις δεν
αποθηκεύουν δεδομένα, γι΄ αυτό λέγεται και ιδεατοί πίνακες. Μια
όψη μπορεί να οριστεί με βάση κάποια άλλη όψη, ωστόσο, κάπου
στην άκρη του νήματος, πρέπει να υπάρχει μια βασική σχέση.
34 / 71
Ενδιάμεσα αποτελέσματα
Ενδιάμεσα αποτελέσματα είναι οι σχέσεις που παράγονται σε
ενδιάμεσα στάδια πολύπλοκων ερωτημάτων. Τα ενδιάμεσα
αποτελέσματα έχουν πρόσκαιρη μόνο ύπαρξη στη βάση δεδομένων
35 / 71
Είδη σχέσεων: Αποτελέσματα ερωτημάτων
Αποτελέσματα ερωτημάτων
Αποτελέσματα ερωτημάτων είναι οι ανώνυμες παράγωγες
σχέσεις που δημιουργούνται κατά την εκτέλεση ερωτημάτων και
την προβολή των αποτελεσμάτων. Τα αποτελέσματα ερωτημάτων
έχουν παροδική ύπαρξη στις βάσεις δεδομένων. Για να κρατηθούν
τα αποτελέσματα στη βάση πρέπει το ερώτημα να γίνει επώνυμη
σχέση, δηλαδή όψη
36 / 71
39 / 71
Ελλιπείς τιμές
Λογικά ή ΄Οργανον
1 Περί Ερμηνείας
2 Κατηγορίαι
3 Αναλυτικά Πρότερα
4 Αναλυτικά ΄Υστερα
5 Τοπικοί και Σοφιστικοί ΄Ελεγχοι
41 / 71
΄Εξω βρέχει
Αληθές (αν όντως βρέχει)
Ψευδές (αν δεν βρέχει)
42 / 71
Αληθές, Ψευδές και ΄Αγνωστο
΄Εξω βρέχει
Αληθές (αν όντως βρέχει)
Ψευδές (αν δεν βρέχει)
΄Αγνωστο (δεν μπορώ να το ελέγξω)
Jan Lukasiewicz
1 Λβιβ Γαλικίας 1878 – Δουβλίνο
1956.
2 Πολωνός φιλόσοφος και
μαθηματικός.
3 Πρωτεργάτης της
τριαδικής λογικής.
4 Εφευρέτης της «πολωνικής γραφής».
5 Σημαντικό έργο στα μαθηματικά
και την υπολογιστική επιστήμη.
Εικόνα από: http://en.wikipedia.org/wiki/Jan_Lukasiewicz
44 / 71
Setun
1 Μόσχα 1958.
2 Ο πρώτος Η/Υ τριαδικής λογικής.
3 Μεγάλα πλεονεκτήματα έναντι
Η/Υ δυαδικής λογικής.
4 Το σχέδιο εγκαταλείφθηκε, λόγω μη
συμμόρφωσης των στόχων με την
επικρατούσα ιδεολογία.
5 ΄Αλλος ένας λόγος κατάρρευσης της
Ε.Σ.Σ.Δ.
Εικόνα από: http://en.wikipedia.org/wiki/Ternary_computer
45 / 71
Τιμή NULL
Πολλά τα προβλήματα
΄Οσο είναι δυνατό, αποφεύγουμε την καταχώριση τιμών NULL. 46 / 71
Τιμή NULL– ΄Αγνωστη τιμή
Κωδικός ΄Ονομα Αυτοκίνητο
1025 Βασίλης Κάππος ΙΧΟ 9239
1026 Μαρίνα Θεοδώρου ΙΥΓ 4561
1027 Νίκη Αλεξιάδου ΙΥΜ 5012
1028 Στέλιος Μακρίδης
47 / 71
48 / 71
Τιμή NULL– Μη διαθέσιμη τιμή
Κωδικός ΄Ονομα Αυτοκίνητο
1025 Βασίλης Κάππος ΙΧΟ 9239
1026 Μαρίνα Θεοδώρου ΙΥΓ 4561
1027 Νίκη Αλεξιάδου ΙΥΜ 5012
1028 Στέλιος Μακρίδης
49 / 71
50 / 71
Πλεονεκτήματα
Διάσπαση
Χωρίς τη δυνατότητα χρήσης των τιμών NULL θα ήταν
απαραίτητη διάσπαση των σχέσεων της βάσης δεδομένων σε
περισσότερες ειδικές σχέσεις. Κάτι τέτοιο είναι βέβαια δυνατό,
αλλά δυσχεραίνει τη λειτουργικότητα της βάσης δεδομένων.
52 / 71
Μεταφορά γνωρίσματος σε νέα σχέση
Μία σχέση για τα μαθήματα:
Κωδικός ΄Ονομα
504 Βάσεις Δεδομένων
404 Μακροοικονομική Θεωρία ΙΙ
303 Προγραμματισμός Υπολογιστών Ι
951 Ιστορία της Επιστημονικής Σκέψης
53 / 71
Επισκόπηση
1 Οι 12 κανόνες του Codd
2 Κεντρικές έννοιες του σχεσιακού μοντέλου
Ορισμοί για τις σχέσεις
Οι 4 βασικές ιδιότητες των σχέσεων
Τα είδη των σχέσεων
3 Ελλιπείς τιμές, Null
Ιστορία και σημασία των τιμών Null
Παραδείγματα Null τιμών
Πλεονεκτήματα και μειονεκτήματα των Null τιμών
4 Κλειδιά σχέσεων, υπερκλειδί, υποψήφιο κλειδί, πρωτεύον κλειδί,
ξένο κλειδί
55 / 71
Υπερκλειδί
Υπερκλειδί
Υπερκλειδί ενός σχήματος μιας σχέσης R αποτελεί κάθε
υποσύνολο γνωρισμάτων του σχήματος που, για οποιοδήποτε
στιγμιότυπο r της σχέσης R, δεν υπάρχουν δύο πλειάδες με
ίδιες τιμές στα γνωρίσματα αυτά. Δηλαδή ισχύει:
t1 [S] 6= t2 [S]
56 / 71
Κλειδί
Κλειδί
Κλειδί ενός σχήματος μιας σχέσης R είναι ένα υποσύνολο των
γνωρισμάτων της R που είναι υπερκλειδί της R, χωρίς να είναι
δυνατό να αφαιρεθεί ένα γνώρισμα και να παραμείνει
υπερκλειδί. Το κλειδί λέγεται και ελάχιστο υπερκλειδί.
57 / 71
Υποψήφιο κλειδί
Υποψήφιο κλειδί
Υποψήφιο κλειδί είναι κάθε κλειδί της της R. Γενικά, μια
σχέση μπορεί να έχει περισσότερα από ένα κλειδιά.
58 / 71
Πρωτεύον κλειδί
Πρωτεύον κλειδί
Πρωτεύον κλειδί είναι το υποψήφιο κλειδί που επιλέγεται
ώστε κάθε πλειάδα της σχέσης R να προσδιορίζεται μοναδικά
με βάση την τιμή αυτού του κλειδιού. Κάθε σχέση πρέπει να
έχει ένα (και μόνο ένα) πρωτεύον κλειδί
59 / 71
Υπογράμμιση και δήλωση πρωτεύοντος κλειδιού
60 / 71
Μοναδικότητα
Ο συνδυασμός (ΚωδΜαθ, ΚωδΚαθ, ΄Ετος) παίρνει
μοναδικές τιμές.
Τα γνωρίσματα ΚωδΜαθ, ΚωδΚαθ, ΄Ετος μπορεί να
πάρουν διπλότυπα, πχ ο καθηγητής με κωδικό 17.
΄Αλλοι συνδυασμοί μπορεί να πάρουν διπλότυπα, πχ ο
συνδυασμός (17,2010) για τον καθηγητή και το έτος. 62 / 71
Υπερκλειδί
΄Εστω μια σχέση r με σχήμα R = {α, β, γ, δ}. ΄Εστω επίσης τα
γνωρίσματα α και β παίρνουν μοναδικές τιμές και μπορούν να
χρησιμοποιηθούν (το καθένα χωριστά) ως αναγνωριστικό (κλειδί).
Τα υπερκλειδιά της σχέσης r (R):
Ξένο κλειδί
Ξένο κλειδί
Ξένο κλειδί είναι το πρωτεύον κλειδί μιας σχέσης R που
τοποθετείται ως επιπλέον γνώρισμα σε μια σχέση S, έτσι ώστε
οι πλειάδες της των σχέσεων R, S να συσχετίζονται μεταξύ
τους.
Ξένο κλειδί
R(A1 , A2 , A3 ) S(B1 , B2 , A1 )
Το γνώρισμα S.A1 είναι ξένο κλειδί, δεν παίρνει αναγκαστικά
μοναδικές τιμές, δεν είναι πρωτεύον κλειδί της σχέσης S.
65 / 71
Παράδειγμα ξένου κλειδιού, παραγγελίες
ΑρΠαρ Αξία ΚωδΠελ
ΚωδΠελ ΄Ονομα 1 29.10 2
1 Νίκος 2 14.00 1
2 Κατερίνα 3 10.50 2
3 Μαριάνθη 4 19.30 1
4 Ιωάννα 5 25.90 4
(αʹ) Πελάτες 6 17.50 2
(βʹ) Παραγγελίες
66 / 71
67 / 71
Αναφορική ακεραιότητα
68 / 71
Παράδειγμα
Μαθήματα.Κωδικός → Διδασκαλία.ΚωδΜαθ
σημαίνει πως το γνώρισμα ΚωδΜαθ της σχέσης
Διδασκαλία είναι ξένο κλειδί και αναφέρεται στο
γνώρισμα Κωδικός της σχέσης Μαθήματα.
Καθηγητές.Κωδικός → Διδασκαλία.ΚωδΚαθ
σημαίνει πως το γνώρισμα ΚωδΚαθ της σχέσης
Διδασκαλία είναι ξένο κλειδί και αναφέρεται στο
γνώρισμα Κωδικός της σχέσης Καθηγητές. 69 / 71
Γραφική αναπαράσταση σχεσιακού μοντέλου
70 / 71
Σχεσιακή άλγεβρα
Σχεσιακή άλγεβρα
Η σχεσιακή άλγεβρα είναι μια
διαδικαστική (procedural) γλώσσα.
Διαθέτει ένα σύνολο τελεστών για
σχεσιακές πράξεις.
Βασικές πράξεις: Προβολή, Επιλογή, ΄Ενωση,
Διαφορά, Καρτεσιανό Γινόμενο.
Παράγωγες πράξεις: Σύζευξη, Διαίρεση,
Τομή.
Επιπλέον πράξεις: Συνάθροιση,
Μετονομασία, Εισαγωγή, Διαγραφή,
Ενημέρωση.
2 / 88
Κλειστότητα
Η σχεσιακή άλγεβρα και ο σχεσιακός
λογισμός παρέχουν ένα σύνολο από τελεστές
για πράξεις ανάμεσα σε σχέσεις.
Οι πράξεις με σχέσεις παράγουν νέες
σχέσεις.
Το αποτέλεσμα της πράξης έχει καθορισμένο
βαθμό και πληθικότητα.
Κλειστότητα
Το αποτέλεσμα οποιασδήποτε σχεσιακής
πράξης είναι σχέση.
3 / 88
Συμβατότητα τύπου
Ορισμός
Δύο σχέσεις r και s, έχουν συμβατότητα τύπου, αν
και μόνο αν:
΄Εχουν τον ίδιο βαθμό, δηλαδή έχουν το ίδιο πλήθος
γνωρισμάτων.
Τα αντίστοιχα γνωρίσματα έχουν το ίδιο πεδίο
ορισμού.
4 / 88
Συμβατότητα τύπου
Ορισμός
Δύο σχέσεις r και s, έχουν συμβατότητα τύπου, αν
και μόνο αν:
΄Εχουν τον ίδιο βαθμό, δηλαδή έχουν το ίδιο πλήθος
γνωρισμάτων.
Τα αντίστοιχα γνωρίσματα έχουν το ίδιο πεδίο
ορισμού.
Παράδειγμα
A B C A B C
r 1 b 10 s 5 a 20
5 a 30 2 b 10
3 c 20 3 c 20
5 / 88
Παραδείγματα μη συμβατότητας τύπου
Παράδειγμα
A B C A B C A B A B C
r 1 b 10 s 5 a 20 t 5 b u 5 b a
5 a 30 2 b 10 2 b 2 b b
3 c 20 3 c 20 3 c 3 c b
Προβολή
r [X ] = {t[X ] | t ∈ r }
Προβολή μιας σχέσης r (R), πάνω στο υποσύνολο γνω-
ρισμάτων της X (X ⊆ R) είναι μια σχέση με σχήμα το
σύνολο X και κορμό εκείνες τις πλειάδες που αντιστοιχο-
ύν σε μοναδικές τιμές για τα γνωρίσματα X .
Η προβολή συμβολίζεται με το ελληνικό γράμμα Π:
7 / 88
Παραδείγματα προβολής
A B C A B B C B A B C
5 a 30 5 a a 30 a 5 a 30
2 b 10 2 b b 10 b 2 b 10
3 c 20 3 c c 20 c 3 c 20
5 b 10 5 b 5 b 10
Παρατηρήσεις
Απαλοιφή διπλοεγγραφών.
Π(r ) : Ταυτοτική προβολή.
8 / 88
Επιλογή
σφ(r ) = {t ∈ r | t satisfies φ}
Η επιλογή ή αλλιώς και περιορισμός μιας σχέσης r (R),
είναι μια σχέση που έχει το ίδιο σχήμα R με τη σχέση r
και κορμό ένα υποσύνολο του κορμού της r που
ικανοποιεί μια συνθήκη, πχ: X θ Y .
Η επιλογή συμβολίζεται με:
σX θ Y (r )
9 / 88
Διευκρινίσεις για την επιλογή
Παραδείγματα επιλογής
΄Εστω η σχέση employees :
empid name salary
101 Αθανασίου Μιχ. 1200
102 Βαφειάδης Νικ. 1150
104 Νικολοπούλου Ναν. 1570
108 Βασιλειάδη Μαρ. 1320
Παραδείγματα:
1
σsalary <1300(employees)
2
σsalary ≥1200∧salary ≤1600(employees)
3
σempid=102(employees)
11 / 88
Υπάλληλοι με μισθό < 1300
empid name salary
101 Αθανασίου Μιχ. 1200
102 Βαφειάδης Νικ. 1150
104 Νικολοπούλου Ναν. 1570
108 Βασιλειάδη Μαρ. 1320
Απάντηση
σsalary <1300 (employees)
12 / 88
Απάντηση
σsalary ≥1200∧salary ≤1600 (employees)
13 / 88
Ο υπάλληλος με κωδικό 101
empid name salary
101 Αθανασίου Μιχ. 1200
102 Βαφειάδης Νικ. 1150
104 Νικολοπούλου Ναν. 1570
108 Βασιλειάδη Μαρ. 1320
Απάντηση
σempid=102 (employees)
14 / 88
Κλειστότητα
Το αποτέλεσμα κάθε σχεσιακής πράξης είναι σχέση.
15 / 88
Ο πίνακας employees από τη βάση company
΄Εστω η σχέση employees με σχήμα:
Πfirstname,lastname (employees)
17 / 88
Ερωτήσεις και απαντήσεις 4–6
4 Να βρεθούν οι υπάλληλοι (κωδικός, επώνυμο,
τμήμα) που δεν εργάζονται στο τμήμα 2 και έχουν
μισθό μικρότερο από 1200:
Πempid,lastname,depid σ(depid6=2∧salary <1200) (employees)
18 / 88
19 / 88
Παράδειγμα ένωσης σχέσεων
r s
r = {1, 2}
s = {2, 3}
1 2 3 r ∪ s = {1, 2, 3}
20 / 88
A B C A B C A B C
1 b 10 5 a 30 1 b 10
5 a 30 2 b 10 5 a 30
3 c 20 3 c 20 3 c 20
2 b 10
r s r ∪s
21 / 88
΄Ενωση και αντιμεταθετική ιδιότητα
r ∪s =s ∪r
Παράδειγμα
A B C A B C
A B C A B C
1 b 10 5 a 30
1 b 10 5 a 30
5 a 30 2 b 10
5 a 30 2 b 10
3 c 20 3 c 20
3 c 20 3 c 20
2 b 10 1 b 10
r s r ∪s s ∪r
22 / 88
r ∪ (s ∪ t) = (r ∪ s) ∪ t
Λόγω αυτής της της ιδιότητας, είναι δυνατό να γραφεί
η παρακάτω παράσταση χωρίς παρενθέσεις:
r ∪s ∪t
23 / 88
Η σχεσιακή πράξη της διαφοράς
24 / 88
25 / 88
Παράδειγμα διαφοράς δύο σχέσεων
r s
r = {1, 2}
s = {2, 3}
1 2 3 r −s = {1}
s −r = {3}
A B C A B C A B C A B C
1 b 10 5 a 30 1 b 10 2 b 10
5 a 30 2 b 10
3 c 20 3 c 20
r s r −s s −r
26 / 88
Υπενθύμιση
5 − 3 6= 3 − 5
8 − (3 − 2) 6= (8 − 3) − 2
27 / 88
Η σχεσιακή πράξη της τομής
28 / 88
29 / 88
Παράδειγμα τομής δύο σχέσεων
r s
r = {1, 2}
s = {2, 3}
1 2 3 r ∩ s = {2}
A B C A B C A B C
1 b 10 5 a 30 5 a 30
5 a 30 2 b 10 3 c 20
3 c 20 3 c 20
r s r ∩s
30 / 88
r ∩s =s ∩r
Παράδειγμα
A B C A B C A B C A B C
1 b 10 5 a 30 5 a 30 5 a 30
5 a 30 2 b 10 3 c 20 3 c 20
3 c 20 3 c 20
r s r ∩s s ∩r
31 / 88
Τομή και προσεταιριστική ιδιότητα
r ∩ (s ∩ t) = (r ∩ s) ∩ t
Λόγω αυτής της της ιδιότητας, είναι δυνατό να γραφεί
η παρακάτω παράσταση χωρίς παρενθέσεις:
r ∩s ∩t
32 / 88
r ∩ s = r − (r − s)
Δηλαδή το αποτέλεσμα της τομής r ∩ s ισούται με το α-
ποτέλεσμα της διαφοράς της r από τη διαφορά r − s.
Παράδειγμα
Δώστε εσείς ένα παράδειγμα που να επιβεβαιώνει (ή να
αναιρεί) τον παραπάνω ορισμό.
33 / 88
Pane Amore
Pane amore
f g
actorID name actorID name
0001120 Vittorio De Sica 0001120 Vittorio De Sica
0518178 Gina Lollobrigida 0518178 Gina Lollobrigida
0581028 Marisa Merlini 0581028 Marisa Merlini
0139214 Memmo Carotenuto 0139214 Memmo Carotenuto
0728376 Roberto Risso 0681365 Tina Pica
0681365 Tina Pica 0882237 Saro Urzı̀
0188022 Vittoria Crispo 0188022 Vittoria Crispo
35 / 88
Pane amore (Ερωτήματα συμμετοχής)
36 / 88
actorID name
0001120 Vittorio De Sica
0518178 Gina Lollobrigida
0581028 Marisa Merlini
0139214 Memmo Carotenuto
0681365 Tina Pica
0188022 Vittoria Crispo
37 / 88
Διαφορά fantasia − gelosia
f g
actorID name actorID name
0001120 Vittorio De Sica 0001120 Vittorio De Sica
0518178 Gina Lollobrigida 0518178 Gina Lollobrigida
0581028 Marisa Merlini 0581028 Marisa Merlini
0139214 Memmo Carotenuto 0139214 Memmo Carotenuto
0728376 Roberto Risso 0681365 Tina Pica
0681365 Tina Pica 0882237 Saro Urzı̀
0188022 Vittoria Crispo 0188022 Vittoria Crispo
actorID name
0728376 Roberto Risso
38 / 88
r × s = {t u | t ∈ r and u ∈ s}
Καρτεσιανό γινόμενο δύο σχέσεων r (R) και
s(S), είναι μια σχέση που έχει επικεφαλίδα το
σύνολο των γνωρισμάτων των σχέσεων R και S,
και κορμό το σύνολο όλων των συνδυασμών των
πλειάδων που ανήκουν στην r και στην s. Το
καρτεσιανό γινόμενο συμβολίζεται με r × s ή
r TIMES s.
39 / 88
Γνωρίσματα καρτεσιανού γινομένου
T = (R − S) ∪ (S − R) ∪ {R.Y , S.Y | Y ∈ R ∩ S}
40 / 88
Βαθμός γινομένου
Αν η σχέση r είναι nR βαθμού και η σχέση s είναι nS
βαθμού τότε το αποτέλεσμα του γινομένου έχει βαθμό:
nr ×s = nR + nS
Πληθικότητα γινομένου
Αν η σχέση r είναι mr βαθμού και η σχέση s είναι ms
βαθμού τότε το αποτέλεσμα του γινομένου έχει βαθμό:
mr ×s = mr · ms
41 / 88
Παράδειγμα σχεσιακού γινομένου
r s r ×s
A B D E F A B D E F
1 b b 4 30 1 b b 4 30
5 a a 2 10 1 b a 2 10
3 c 5 a b 4 30
5 a a 2 10
3 c b 4 30
3 c a 2 10
42 / 88
43 / 88
Δενδροειδής απεικόνιση καρτεσιανού γινομένου
1 (a,1)
a A= {a, b, c}
2 (a,2) B= {1, 2}
A×B = {(a, 1), (a, 2)
1 (b,1)
(b, 1), (b, 2),
b
2 (b,2) (c, 1), (c, 2)}
1 (c,1)
c
2 (c,2)
44 / 88
45 / 88
Προσοχή στο καρτεσιανό γινόμενο
47 / 88
Παράδειγμα φυσικής σύζευξης
A B C C D A B C D
1 b 10 20 1 1 b 10 3
5 a 30 10 3 3 c 20 1
3 c 20 20 3 3 c 20 3
r s r ⊲⊳ s
Παρατηρήσεις
1 Τα κοινά γνωρίσματα, εδώ το C, μόνο μία φορά στο
αποτέλεσμα.
2 Πλειάδες με μη ταιριαστές τιμές δεν συμμετέχουν
στο αποτέλεσμα.
48 / 88
A B C C D A B C D
1 b 10 20 1 1 b 10 3
5 a 30 10 3 3 c 20 1
3 c 20 20 3 3 c 20 3
r s r ⊲⊳ s
Παρατηρήσεις
1 Τα κοινά γνωρίσματα, εδώ το C, μόνο μία φορά στο
αποτέλεσμα.
2 Πλειάδες με μη ταιριαστές τιμές δεν συμμετέχουν
στο αποτέλεσμα.
49 / 88
Παράδειγμα φυσικής σύζευξης
A B C C D A B C D
1 b 10 20 1 1 b 10 3
5 a 30 10 3 3 c 20 1
3 c 20 20 3 3 c 20 3
r s r ⊲⊳ s
Παρατηρήσεις
1 Τα κοινά γνωρίσματα, εδώ το C, μόνο μία φορά στο
αποτέλεσμα.
2 Πλειάδες με μη ταιριαστές τιμές δεν συμμετέχουν
στο αποτέλεσμα.
50 / 88
A B C C D A B C D
1 b 10 20 1 1 b 10 3
5 a 30 10 3 3 c 20 1
3 c 20 20 3 3 c 20 3
r s r ⊲⊳ s
Παρατηρήσεις
1 Τα κοινά γνωρίσματα, εδώ το C, μόνο μία φορά στο
αποτέλεσμα.
2 Πλειάδες με μη ταιριαστές τιμές δεν συμμετέχουν
στο αποτέλεσμα.
51 / 88
Παράδειγμα φυσικής σύζευξης
A B C C D A B C D
1 b 10 20 1 1 b 10 3
5 a 30 10 3 3 c 20 1
3 c 20 20 3 3 c 20 3
r s r ⊲⊳ s
Παρατηρήσεις
1 Τα κοινά γνωρίσματα, εδώ το C, μόνο μία φορά στο
αποτέλεσμα.
2 Πλειάδες με μη ταιριαστές τιμές δεν συμμετέχουν
στο αποτέλεσμα.
52 / 88
Ορισμός
Αν η r είναι σχέση με σχήμα R = {A1 , A2 , . . . , An }, s
είναι σχέση με σχήμα S = {B1 , B2 , . . . , Bm }, τα
γνωρίσματα Ai και Bj έχουν το ίδιο πεδίο ορισμού, και θ
είναι τελεστής σύγκρισης, θ ∈ {=, 6=, <, ≤, >, ≥},
τότε η θ σύζευξη των r και s, r ⊲⊳Ai θBj s,
είναι μια σχέση με σχήμα το σύνολο των γνωρισμάτων
των R και S, {A1 , A2 , . . . , An B1 , B2 , . . . , Bm } και κορμό
το σύνολο των πλειάδων από κάθε συνδυασμό των
πλειάδων των r και s, που ικανοποιούν τη συνθήκη
Ai θBj .
54 / 88
σX θY (r × s) = r ⊲⊳X θY s
55 / 88
Παράδειγμα σύζευξης θ, ξένο κλειδί, 1:Ν
departments: employees:
depcode depname empid empname depid
1 Μελετών 102 Αποστολάκης 2
2 Λογιστήριο 154 Βασιλάκης 1
3 Διαφήμισης 132 Χρηστάκης 2
432 Δημητράκης 3
203 Κωστάκης 1
Να βρεθούν οι συνδυασμοί:
1 Παπούτσια και φούστες ίδιου χρώματος.
2 Παπούτσια και φούστες διαφορετικού χρώματος.
3 Παπούτσια και φούστες με ακριβότερη τη φούστα.
57 / 88
Παπούτσια και φούστες ίδιου χρώματος
58 / 88
59 / 88
Παπούτσια και φούστες με ακριβότερη φούστα
60 / 88
Εξωτερική σύζευξη
61 / 88
Εξωτερική σύζευξη
Επέκταση της σύζευξης
Η εξωτερική σύζευξη είναι επέκταση της σύζευξης, στην
περίπτωση που υπάρχουν πλειάδες σε μία ή περισσότερες
σχέσεις, χωρίς ταιριαστές τιμές.
Για παράδειγμα:
θεωρείστε τις δύο σχέσεις του σχήματος, που παριστάνουν
ένα δείγμα από τα υποκαταστήματα (Υ) και τους πελάτες
(Π) μιας εταιρείας.
Θέλουμε να βρούμε το αποτέλεσμα της εξωτερικής σύζευξης
των δύο σχέσεων με βάση την πόλη:
Υ ⊲⊳ Π
Εξωτερική σύζευξη
Υ Π
id city name city
1 Αθήνα Νίκος Πάτρα
2 Πάτρα Βάσω Κοζάνη
3 Θεσσαλονίκη Αγγελική Πάτρα
Βασίλης Αθήνα
Υ ⊲⊳ Π
id city name
1 Αθήνα Βασίλης
2 Πάτρα Νίκος
2 Πάτρα Αγγελική
3 Θεσσαλονίκη NULL
NULL Κοζάνη Βάσω
63 / 88
Αριστερή εξωτερική σύζευξη
Ορισμός
Αν r είναι σχέση με σχήμα R = {X , Y } και s είναι μία
σχέση με σχήμα S = {Y , Z }, τότε η αριστερή εξωτερική
σύζευξη t = r ⊲⊳ s έχει σχήμα T = {X , Y , Z } και κορμό
που αποτελείται από τις πλειάδες:
r ⊲⊳ s = (r ⊲⊳ s) ∪ ((r − ΠR (r ⊲⊳ s)) × w )
64 / 88
Δηλαδή
65 / 88
Παράδειγμα αριστερής σύζευξης
Υ Π
id city name city
1 Αθήνα Νίκος Πάτρα
2 Πάτρα Βάσω Κοζάνη
3 Θεσσαλονίκη Αγγελική Πάτρα
Βασίλης Αθήνα
Υ ⊲⊳ Π Υ ⊲⊳ Π
id city name id city name
1 Αθήνα Βασίλης 1 Αθήνα Βασίλης
2 Πάτρα Νίκος 2 Πάτρα Νίκος
2 Πάτρα Αγγελική 2 Πάτρα Αγγελική
3 Θεσσαλονίκη NULL
66 / 88
Ορισμός
Αν r είναι σχέση με σχήμα R = {X , Y } και s είναι μία
σχέση με σχήμα S = {Y , Z }, τότε η δεξιά εξωτερική
σύζευξη t = r ⊲⊳ s έχει σχήμα T = {X , Y , Z } και κορμό
που αποτελείται από τις πλειάδες:
r ⊲⊳ s = (r ⊲⊳ s) ∪ (w × ((s − ΠS (r ⊲⊳ s)))
67 / 88
Επεξήγηση ορισμού δεξιάς σύζευξης
Ορισμός
Η δεξιά εξωτερική σύζευξη (ή απλώς δεξιά σύζευξη):
r ⊲⊳ s
68 / 88
Υ ⊲⊳ Π Υ ⊲⊳ Π
id city name id city name
1 Αθήνα Βασίλης 1 Αθήνα Βασίλης
2 Πάτρα Νίκος 2 Πάτρα Νίκος
2 Πάτρα Αγγελική 2 Πάτρα Αγγελική
NULL Κοζάνη Βάσω
69 / 88
Γενική μορφή συνάθροισης
Η σύνοψη (ή αλλιώς ομαδοποίηση) ομαδοποιεί πλειάδες μιας
σχέσης με βάση κοινές τιμές σε ένα ή περισσότερα
γνωρίσματα. Σε κάθε ένα από τα υποσύνολα των πλειάδων
που προκύπτουν μπορεί να εφαρμοστεί μια συναθροιστική
συνάρτηση.
Συνάθροιση:
Αν R είναι μια σχεσιακή παράσταση και X ⊂ R και
A ⊂ R τότε η παράσταση:
X GF (A) (R)
Συναρτήσεις συνάθροισης
71 / 88
Παράδειγμα άθροισης τιμών γνωρίσματος
area employee amount
Ημαθίας Ευθυμίου 1890
Μαγνησίας Αλεξανρίδης 2400
΄Εστω η σχέση sales: Καβάλας Αλεξανρίδης 780
Μαγνησίας Ευθυμίου 2100
Τρικάλων Πετρίδης 4400
Πιερίας Πετρίδης 1820
Καβάλας Ευθυμίου 2400
72 / 88
73 / 88
Παράδειγμα άθροισης με ομαδοποίηση
area employee amount
΄Αθροισμα πωλήσεων
ανά υπάλληλο Ημαθίας Ευθυμίου 1890
Μαγνησίας Αλεξανρίδης 2400
Καβάλας Αλεξανρίδης 780
employee Gsum(amount) (sales) Μαγνησίας Ευθυμίου 2100
Τρικάλων Πετρίδης 4400
employee sum(amount) Πιερίας Πετρίδης 1820
Καβάλας Ευθυμίου 2400
Ευθυμίου 6390
Αλεξανρίδης 3180
Πετρίδης 6220
74 / 88
75 / 88
Παραδείγματα συναρτήσεων συνάθροισης
77 / 88
Περιορισμός μετά από ομαδοποίηση
Μόνο οι σκιασμένες
depid count(empid)
γραμμές στο αποτέλεσμα,
1 3 δηλαδή μόνο εκείνες για τις
2 4 οποίες η σύγκριση
3 9
4 5 count(depid) > 4
5 2
6 7 αποδίδει την τιμή TRUE.
78 / 88
Ενημέρωση
Εκτός από τις πράξεις επιλογής, η σχεσιακή άλγεβρα έχει
ανάγκη από τις πράξεις ενημέρωσης της βάσης δεδομένων.
Με αυτές υπάρχει η δυνατότητα:
Εισαγωγής δεδομένων στις σχέσεις, δηλαδή
εισαγωγής μιας ή περισσοτέρων πλειάδων.
Τροποποίησης δεδομένων στις σχέσεις, δηλαδή
αλλαγή στις τιμές των γνωρισμάτων μιας σχέσης.
Διαγραφής δεδομένων από τις σχέσεις, δηλαδή
απαλοιφή μιας ή περισσότερων πλειάδων της
σχέσης.
79 / 88
Επιπτώσεις της ενημέρωσης
80 / 88
Η σχέση movies
΄Εστω η σχέση movies(code, title, year ):
81 / 88
Εισαγωγή
82 / 88
83 / 88
Τροποποίηση
84 / 88
85 / 88
Τροποποίηση του έτους σε 1942
86 / 88
Διαγραφή
87 / 88
Σχεσιακή άλγεβρα
Φεβρουάριος 2013
Περιεχόμενα
i
1 Σχεσιακή άλγεβρα και βασικές σχεσια-
κές πράξεις
• Να καταλάβετε τις διαφορές και ομοιότητες μεταξύ των διαφορετικών τύπων σύζευξης: φυσι-
κή, θήτα σύζευξη, εξωτερική, δεξιά εξωτερική, αριστερή εξωτερική, κ.α.
1
2 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
1.1 Κλειστότητα
Η σχεσιακή άλγεβρα και ο σχεσιακός λογισμός παρέχουν ένα σύνολο από τελεστές για πράξεις
ανάμεσα σε σχέσεις. ΄Ολες οι πράξεις στηρίζονται στην ιδιότητα της κλειστότητας, δηλαδή
στο γεγονός πως το αποτέλεσμα οποιασδήποτε σχεσιακής πράξης είναι μια σχέση. Η ιδιότητα
της κλειστότητας επιτρέπει τη λεγόμενη εμφώλευση (ένθεση) παραστάσεων: το αποτέλεσμα μιας
σχεσιακής πράξης είναι σχέση, οπότε αυτό το αποτέλεσμα μπορεί να συμμετέχει ως τελεστέος σε
μια νέα σχεσιακή παράσταση, σε μια νέα σχεσιακή πράξη δηλαδή.
Θυμηθείτε πως κάτι ανάλογο συμβαίνει στην άλγεβρα αριθμών: το σύνολο των αριθμών είναι κλειστό,
δηλαδή πράξεις με αριθμούς, έχουν αποτέλεσμα αριθμούς. Λόγω αυτής της ιδιότητας μπορούν να
γραφούν ένθετες παραστάσεις, όπως:
4 + (3 · 2)
Το ίδιο μπορεί να γίνει και στην άλγεβρα σχέσεων: το αποτέλεσμα μιας σχεσιακής πράξης (σε
αντιστοιχία με το 3 · 2 = 6) μπορεί να είναι τελεστέος σε μια άλλη σχεσιακή πράξη (σε αντιστοιχία
με 4 + 6).
Οι πράξεις με σχέσεις παράγουν σχέσεις. Το αποτέλεσμα της πράξης, αφού είναι σχέση, έχει μια
επικεφαλίδα (σχήμα της σχέσης), επομένως πρέπει να μπορεί να οριστεί ο βαθμός της, δηλαδή το
πλήθος των γνωρισμάτων της σχέσης αποτέλεσμα. Επίσης, έχει κορμό, δηλαδή ένα σύνολο από
πλειάδες (συστοιχίες), επομένως πρέπει να έχει πληθικότητα. Θα πρέπει κανείς, για κάθε σχεσιακή
πράξη, να μπορεί να ορίσει το σχήμα της σχέσης του αποτελέσματος, το βαθμό και την πληθικότητά
του.
Προσοχή, δεν ενδιαφέρουν τα ονόματα των γνωρισμάτων, παρά μόνο το πλήθος τους και οι τύποι
δεδομένων.
A B C A B C A B A B C
1 b 10 5 a 20 5 b 5 b a
5 a 30 2 b 10 2 b 2 b b
3 c 20 3 c 20 3 c 3 c b
r s t u
Δείτε για παράδειγμα το σχήμα 1.1. Οι σχέσεις r και s έχουν συμβατότητα τύπου γιατί πληρούν και
τις δύο προϋποθέσεις που έχουν αναφερθεί. Αντίθετα οι σχέσεις r και t δεν έχουν συμβατότητα τύπου
1.3. Συνολοθεωρητικές πράξεις 3
επειδή δεν έχουν το ίδιο πλήθος γνωρισμάτων. Επίσης, ούτε οι σχέσεις r και u έχουν συμβατότητα
τύπου. έχουν βέβαια το ίδιο πλήθος γνωρισμάτων, αλλά οι τύποι δεδομένων διαφέρουν. Η γνώρισμα
C της σχέσης r περιέχει ακεραίους, ενώ το γνώρισμα C της σχέσης u περιέχει κείμενο. Επομένως
δεν υπάρχει συμβατότητα τύπου.
1.3.1 ΄Ενωση
΄Ενωση δύο σχέσεων r(R) και s(S), που έχουν συμβατότητα τύπου, είναι μια νέα σχέση που έχει
σχήμα (επικεφαλίδα) ίδιο με αυτό της r και s, και κορμό το σύνολο των κορμών των r και s, δηλαδή
όλες τις πλειάδες που ανήκουν στην r, ή στην s, η και στις δύο πλειάδες. Η ένωση συμβολίζεται με
r ∪ s ή r U N ION s.
Ορισμός της ένωσης:
r ∪ s = {t | t ∈ r or t ∈ s} (1.1)
r s
r = {1, 2}
s = {2, 3}
1 2 3 r ∪ s = {1, 2, 3}
Σχήμα 1.2: Η ένωση δύο συνόλων έχει ως μέλη τα στοιχεία είτε του ενός είτε του
άλλου συνόλου.
Δείτε για παράδειγμα το σχήμα 1.2, το οποίο αναπαριστά σχηματικά την ένωση r ∪ s. Αν r = {1, 2}
και s = {2, 3} τότε t = r ∪ s = {1, 2, 3}. Δηλαδή η ένωση συμπεριλαμβάνει όλα τα στοιχεία των δύο
συνόλων. Προσέξτε πως το 2 είναι μέλος και των δύο συνόλων. Ωστόσο, στο αποτέλεσμα υπάρχει
μόνο φορά.
A B C
A B C A B C
1 b 10
1 b 10 5 a 30
5 a 30
5 a 30 2 b 10
3 c 20
3 c 20 3 c 20
2 b 10
r s r∪s
΄Ενα ακόμη παράδειγμα σχεσιακής ένωσης δίνεται στο σχήμα 1.3. Προσέξτε πως οι πλειάδες
<5,a,30> και <3,c,20> βρίσκονται και στις δύο σχέσεις. Ωστόσο, στο αποτέλεσμα της σχεσια-
κής ένωσης θα υπάρχουν μόνο μία φορά η καθεμία από αυτές.
Για τη σχεσιακή πράξη της ένωσης ισχύει η αντιμεταθετική ιδιότητα:
r∪s=s∪r (1.2)
4 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
Δηλαδή δεν έχει σημασία η σειρά των τελεστέων, με οποιαδήποτε σειρά και να γίνει η πράξη της
τομής το αποτέλεσμα είναι το ίδιο.
Δείτε ένα παράδειγμα της αντιμεταθετικής ιδιότητας στο σχήμα 1.4. Υπενθυμίζετε πως η διάταξη
των πλειάδων σε μία σχέση δεν έχει σημασία.
A B C A B C
A B C A B C
1 b 10 5 a 30
1 b 10 5 a 30
5 a 30 2 b 10
5 a 30 2 b 10
3 c 20 3 c 20
3 c 20 3 c 20
2 b 10 1 b 10
r s r∪s s∪r
Για την σχεσιακή πράξη της ένωσης ισχύει επίσης και η προσεταιριστική ιδιότητα:
r ∪ (s ∪ t) = (r ∪ s) ∪ t (1.3)
Λόγω αυτής της της ιδιότητας, είναι δυνατό να γραφεί η παράσταση χωρίς παρενθέσεις:
r∪s∪t
Η επιλογή DISTINCT (που στην SQL είναι προαιρετική) χρειάζεται εδώ για την απαλοιφή των
διπλότυπων εγγραφών. ΄Οπως είναι γνωστό τα αποτελέσματα ερωτημάτων SQL επιτρέπουν την
εμφάνιση διπλότυπων εγγραφών, ενώ κάτι τέτοιο στην σχεσιακή άλγεβρα δεν ισχύει. Ωστόσο, όπως
η σχεσιακή άλγεβρα απαιτεί τη συμβατότητα τύπου για την ένωση, έτσι και η SQL απαιτεί την
ομοιογένεια των δύο αποτελεσμάτων για την ορθή εκτέλεση του ερωτήματος.
1.3.2 Διαφορά
Διαφορά δύο σχέσεων r και s, που έχουν συμβατότητα τύπου, είναι μια νέα σχέση που έχει σχήμα
(επικεφαλίδα) ίδιο με αυτό της r και s, και κορμό τις πλειάδες που ανήκουν στην r αλλά όχι στην s.
Η διαφορά συμβολίζεται με R − S ή r M IN U S s.
Ορισμός της διαφοράς:
r − s = {t | t ∈ r and t ∈
/ s} (1.4)
1.3. Συνολοθεωρητικές πράξεις 5
r s
r = {1, 2}
s = {2, 3}
1 2 3 r − s = {1}
s − r = {3}
Σχήμα 1.5: Η διαφορά δύο συνόλων έχει ως μέλη τα στοιχεία του ενός συνόλου που
δεν ανήκουν στο άλλο σύνολο.
Δείτε το σχήμα 1.5 που απεικονίζει ένα παράδειγμα διαφοράς δύο συνόλων. Προσέξτε πως r − s =
{1}, δηλαδή το αποτέλεσμα της διαφοράς r − s είναι εκείνα τα μέλη του συνόλου r που δεν ανήκουν
στο σύνολο r. Από την άλλη πλευρά, προσέξτε πως s−r = {3}, δηλαδή το αποτέλεσμα της διαφοράς
s − r είναι εκείνα τα μέλη του συνόλου s που δεν ανήκουν στο σύνολο r.
Στη σχεσιακή πράξη της διαφοράς δεν ισχύει η αντιμεταθετική ιδιότητα:
r − s 6= s − r (1.5)
Δηλαδή η σειρά των τελεστέων έχει σημασία. ΄Ενα τέτοιο παράδειγμα φαίνεται στο σχήμα 1.6.
A B C A B C
A B C A B C
1 b 10 5 a 30
5 a 30 2 b 10 1 b 10 2 b 10
3 c 20 3 c 20
r s r−s s−r
Σχήμα 1.6: Παράδειγμα μη ισχύος της αντιμεταθετικής ιδιότητας της σχεσιακής πράξης
της διαφοράς: t1 = r − s και t2 = s − r. Προσέξτε πως t1 6= t2.
r − (s − t) 6= (s − r) − t (1.6)
1.3.3 Τομή
Τομή δύο σχέσεων r(R) και s(S), που έχουν συμβατότητα τύπου, είναι μια νέα σχέση που έχει
σχήμα (επικεφαλίδα) ίδιο με αυτό της r και s, και κορμό τις πλειάδες που ανήκουν στην r και στην
s, δηλαδή τις κοινές πλειάδες. Η τομή συμβολίζεται με r ∩ s ή r IN T ERSECT s.
Ορισμός της τομής:
r ∩ s = {t | t ∈ r and t ∈ s} (1.7)
Δείτε για παράδειγμα το σχήμα 1.7, το οποίο αναπαριστά σχηματικά την τομή r ∩ s. Αν r = {1, 2}
και s = {2, 3} τότε t = r ∩ s = {2}. Δηλαδή η τομή περιλαμβάνει μόνο τα κοινά στοιχεία των δύο
συνόλων.
΄Ενα ακόμη παράδειγμα σχεσιακής ένωσης δίνεται στο σχήμα 1.8. Μόνο οι κοινές πλειάδες <5,a,30>
και <3,c,20> των δύο σχέσεων υπεισέρχονται στο αποτέλεσμα. Η πλειάδα <1,b,10> της σχέσης
6 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
r s
r = {1, 2}
s = {2, 3}
1 2 3 r ∩ s = {2}
Σχήμα 1.7: Η τομή δύο συνόλων έχει ως μέλη τα κοινά στοιχεία των δύο συνόλων.
A B C A B C
A B C
1 b 10 5 a 30
5 a 30
5 a 30 2 b 10
3 c 20
3 c 20 3 c 20
r s r∩s
r και η πλειάδα <2,b,10> της σχέσης s αποκλείονται από το αποτέλεσμα. Προσέξτε ότι στο απο-
τέλεσμα της σχεσιακής πράξης της τομής κάθε πλειάδα υπάρχει μία μόνο φορά.
Για τη σχεσιακή πράξη της τομής ισχύει η αντιμεταθετική ιδιότητα:
r∩s=s∩r (1.8)
Δηλαδή δεν έχει σημασία η σειρά των τελεστέων, με οποιαδήποτε σειρά και να γίνει η πράξη της
τομής το αποτέλεσμα είναι το ίδιο.
΄Ενα τέτοιο παράδειγμα φαίνεται στο σχήμα 1.9. Με όποια σειρά και αν τοποθετηθούν οι τελεστέοι
της σχεσιακής πράξης, το αποτέλεσμα της τομής είναι το ίδιο.
A B C A B C
A B C A B C
1 b 10 5 a 30
5 a 30 5 a 30
5 a 30 2 b 10
3 c 20 3 c 20
3 c 20 3 c 20
r s r∩s s∩r
Σχήμα 1.9: Παράδειγμα της αντιμεταθετικής ιδιότητας της σχεσιακής πράξης της τομής:
r ∩ s = s ∩ r.
r ∩ (s ∩ t) = (r ∩ s) ∩ t (1.9)
΄Οπως και στην ένωση, έτσι και στην τομή, είναι δυνατό να γραφεί η παράσταση χωρίς παρενθέσεις:
r∩s∩t
΄Οπως και στην ένωση, έτσι και στην τομή η SQL υποστηρίζει τη φράση INTERSECT που αν-
τιστοιχεί στη σχεσιακή πράξη της τομής. Το παράδειγμα του σχήματος 1.8, μπορεί στην SQL να
γραφεί ως:
Ισχύει και εδώ η απαίτηση για ομοιογένεια στα αποτελέσματα των ερωτημάτων, σε αντιστοίχιση με
την απαίτηση για συμβατότητα τύπου, στις παραστάσεις της σχεσιακής άλγεβρας.
Αξίζει να σημειωθεί πως η τομή είναι μια παράγωγη πράξη. Ισχύει:
Ορισμός της τομής:
r ∩ s = r − (r − s) (1.10)
Δηλαδή το αποτέλεσμα της τομής r ∩ s ισούται με το αποτέλεσμα της διαφοράς της r από τη διαφορά
r − s. ΄Ενα παράδειγμα ισχύος της σχέσης 1.10 φαίνεται στο σχήμα 1.10.
A B C A B C
A B C A B C
A B C
1 b 10 5 a 30
5 a 30 5 a 30
5 a 30 2 b 10 1 b 10
3 c 20 3 c 20
3 c 20 3 c 20
r s r−s r − (r − s) r∩s
1.3.4 Γινόμενο
Στη θεωρία συνόλων το καρτεσιανό γινόμενο ορίζεται ως:
Καρτεσιανό γινόμενο συνόλων:
A × B = { (a, b) : a ∈ A , b ∈ B} (1.11)
A × B = {(a, 1), (a, 2), (a, 3), (b, 1), (b, 2), (b, 3)}
Δηλαδή το γινόμενο δύο συνόλων A και B αποτελείται από όλους του συνδυασμούς των μελών των
A και B. Προσέξτε πως το καρτεσιανό γινόμενο περιέχει διατεταγμένα ζεύγη.
Το καρτεσιανό γινόμενο της σχεσιακής άλγεβρας ορίζεται λίγο διαφορετικά. Καρτεσιανό γι-
νόμενο δύο σχέσεων r(R) και s(S), είναι μια σχέση που έχει επικεφαλίδα το σύνολο των γνωρι-
σμάτων των σχέσεων r(R) και s(S), και κορμό το σύνολο όλων των συνδυασμών των πλειάδων που
ανήκουν στην r(R) και στην s(S). Το καρτεσιανό γινόμενο συμβολίζεται με r×s ή r T IM ES s.
Προσέξτε πως δεν υπάρχει καμία απαίτηση για συμβατότητα τύπου ανάμεσα στις r και s.
8 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
r × s = { tu | t ∈ r ∧ u ∈ s} (1.12)
Το σχήμα ενός καρτεσιανού γινομένου προκύπτει μετά από μετονομασία των πιθανών κοινών γνωρι-
σμάτων δύο σχέσεων. Για παράδειγμα, αν Y είναι ένα κοινό γνώρισμα των σχέσεων r(R) και s(S),
τότε το σχήμα της σχέσης r × s είναι:
T = (R − S) ∪ (S − R) ∪ {R.Y, S.Y | Y ∈ R ∩ S}
Αυτό σημαίνει πως στο γινόμενο τα κοινά γνωρίσματα υπάρχουν δύο φορές. Προσοχή, αυτό επι-
τρέπεται μόνο μετά από μετονομασία, τα μέλη ενός συνόλου πρέπει να είναι μοναδικά.
Αν η σχέση r είναι mR βαθμού και έχει nR πληθικότητα, και η σχέση s είναι mS βαθμού και έχει
nS πληθικότητα, τότε το αποτέλεσμα είναι mR + mS βαθμού και nR · nS πληθικότητας. Δηλαδή το
αποτέλεσμα έχει βαθμό ίσο με το άθροισμα των βαθμών των σχέσεων r και s, και πληθικότητα το
γινόμενο των πληθικοτήτων των σχέσεων r και s.
A B C D E
A B 1 b b 4 30
D E F
1 b a 2 10
1 b
b 4 30 5 a b 4 30
5 a
a 2 10 5 a a 2 10
3 c
3 c b 4 30
3 c a 2 10
r s r×s
Το σχήμα 1.11 απεικονίζει ένα παράδειγμα σχεσιακού καρτεσιανού γινομένου, όπου οι δύο σχέσεις
δεν έχουν γνώρισμα με κοινό όνομα. Αν υπάρχει γνώρισμα με κοινό όνομα στις δύο σχέσεις, τότε
γίνεται μετονομασία του γνωρίσματος. ΄Ενα τέτοιο παράδειγμα φαίνεται στο σχήμα 1.12.
Το γινόμενο, από μόνο του, δεν έχει κάποια χρησιμότητα. Δεν προσθέτει καμία νέα πληροφορία
στη βάση δεδομένων. Η κατανόησή του όμως, είναι απολύτως απαραίτητη διότι χρησιμοποιείται πολύ
συχνά ως ενδιάμεσο αποτέλεσμα πράξεων, όπως είναι η σύζευξη.
1.3. Συνολοθεωρητικές πράξεις 9
Γενικά το γινόμενο ορίζεται για δύο σχέσεις που δεν έχουν κοινό όνομα στα γνωρίσματά τους.
Ωστόσο, κάτι τέτοιο, δεν μπορεί να αποκλειστεί, είναι πιθανό να υπάρχουν γνωρίσματα με το ίδιο
όνομα. Επειδή το αποτέλεσμα του γινομένου περιλαμβάνει στο σχήμα του (επικεφαλίδα) όλα τα
γνωρίσματα των δύο σχέσεων, για να μην υπάρξει σύγκρουση ονοματοδοσίας, το γνωρίσματα αυτά
δηλώνονται από τη σχετική τους θέση στις αρχικές σχέσεις.
Για το καρτεσιανό γινόμενο δεν ισχύει η αντιμεταθετική ιδιότητα:
r × s 6= s × r
r × (s × t) = (r × s) × t
΄Οπως και στην ένωση και στην τομή, έτσι και στο γινόμενο, είναι δυνατό να γραφεί η παράσταση
χωρίς παρενθέσεις:
r×s×t
για να δηλώσει το γινόμενο τριών ή περισσότερων σχέσεων.
Ας θεωρήσουμε ένα παιχνίδι ποδοσφαίρου, για παράδειγμα ανάμεσα στις ομάδες Milan1 και Real.2
Στο παράδειγμά μας, έχουμε δύο σχέσεις με τους ποδοσφαιριστές των δύο ομάδων:
M ilan(number, name) και Real(number, name).
Οι δύο αυτές σχέσεις, που έχουν συμβατότητα τύπου, περιγράφουν το αριθμό της φανέλας με
τον οποίο αγωνίζεται κάθε ποδοσφαιριστής και το όνομά του. Η χρήση τους είναι πολύ απλή:
βοηθούν τον αθλητικό δημοσιογράφο που καλύπτει τον αγώνα να διακρίνει κάθε ποδοσφαιριστή από
το νούμερο της φανέλας του.
Στο συγκεκριμένο αγώνα, οι πλειάδες των δύο δύο σχέσεων δεν έχουν επικάλυψη: δεν υπάρχει
δηλαδή κανείς ποδοσφαιριστής που να εμφανίζεται και στις δύο σχέσεις. Δεν μπορεί ένας ποδοσφαι-
ριστής, στον ίδιο αγώνα, να αγωνιστεί και με τις δύο ομάδες.
Η ένωση των δύο σχέσεων:
M ilan ∪ Real
μας δίνει το σύνολο των ποδοσφαιριστών που συμμετέχουν στον ποδοσφαιρικό αγώνα, είτε από την
μία ομάδα, είτε από την άλλη. Το αποτέλεσμα είναι το ίδιο με την ένωση:
Real ∪ M ilan
Η σειρά εμφάνισης δεν παίζει κάποιο ρόλο. Λόγω της αντιμεταθετικής ιδιότητας, ισχύει:
θα επιστρέψει το κενό σύνολο. Αυτό γίνεται επειδή καμία πλειάδα της σχέσης M ilan δεν ταυτίζεται
με κάποια πλειάδα της σχέση Real.
Το ίδιο θα συμβεί και με την τομή:
Real ∩ M ilan
θα αποδώσει επίσης το κενό σύνολο, καμία πλειάδα της Real δεν ταυτίζεται με κάποια από της
πλειάδες της M ilan. Το γεγονός αυτό συνοψίζεται με την ισχύ της αντιμεταθετικής ιδιότητας:
Αν η τομή δύο σχέσεων είναι το κενό σύνολο, τότε η διαφορά των δύο σχέσεων δεν έχει κάποιο
νόημα. Για παράδειγμα:
M ilan − Real = M ilan
όπως επίσης και:
Real − M ilan = Real
Δηλαδή, αν από τους ποδοσφαιριστές της M ilan αφαιρέσουμε τους ποδοσφαιριστές της Real, θα
μας μείνουν οι ποδοσφαιριστές της M ilan. Το ίδιο θα συμβεί και με την ανάποδη σειρά, αν από
τους ποδοσφαιριστές της Real αφαιρέσουμε τους ποδοσφαιριστές της M ilan, θα μας μείνουν οι
ποδοσφαιριστές της Real.
Στη συγκεκριμένη, ακραία, αυτή περίπτωση, ισχύει:
Το γεγονός αυτό δεν πρέπει να σας μπερδεύει, η ισχύς της παραπάνω σχέσης οφείλεται στη συγκε-
κριμένη περίπτωση και δεν θα πρέπει να γενικευτεί σε άλλες περιπτώσεις. Στη σχεσιακή πράξη της
διαφοράς, γενικά, δεν ισχύει η αντιμεταθετική ιδιότητα.
Διαχρονική καταγραφή των ποδοσφαιριστών των δύο ομάδων.
Ας γενικεύσουμε τώρα το παράδειγμα, ως προς τη χρονική του διάσταση. Ας μην περιοριστούμε
στη διάρκεια ενός παιχνιδιού, αλλά ας καταγράψουμε στις δύο σχέσεις τους ποδοσφαιριστές των δύο
ομάδων σε μια μεγάλη χρονική διάρκεια, για παράδειγμα κατά την τελευταία δεκαετία.
Σε αυτή την περίπτωση, η πληθικότητα των δύο σχέσεων θα είναι αρκετά μεγαλύτερη: περίπου 20–
22 παίκτες ποδοσφαίρου συμμετέχουν από κάθε ομάδα σε ένα παιχνίδι, κάθε ομάδα ωστόσο αλλάζει
περίπου 3–8 παίκτες κάθε περίοδο. Σε μια δεκαετία, μια ομάδα ενδέχεται να έχουν συμμετάσχει
περίπου 50–100 ποδοσφαιριστές. ΄Ενα μικρό δείγμα δεδομένων παρουσιάζεται στο σχήμα 1.13.
Σχήμα 1.13: Ποδοσφαιριστές της Milan και της Real. Εδώ δίνεται ένα μικρό μόνο
δείγμα δεδομένων. Ο αριθμός (number) είναι ένας αυθαίρετος κωδικός αρίθμησης των
ποδοσφαιριστών και δεν έχει σχέση με τη φανέλα του ποδοσφαιριστή σε ένα συγκεκριμένο
παιχνίδι. Το σχήμα παρουσιάζει ποιοι παίκτες έχουν παίξει με τις δύο ομάδες, ως ιστορικός
πίνακας. Κάποιοι παίκτες δεν αγωνίζονται πλέον.
1.3. Συνολοθεωρητικές πράξεις 11
Επίσης υπάρχει και ένα άλλο ενδεχόμενο: κάποιοι ποδοσφαιριστές αλλάζουν ομάδα. Ενδέχεται
λοιπόν κάποιος ποδοσφαιριστής της M ilan να έχει εμφανιστεί, κάποια άλλη περίοδο, ως παίκτης
της Real. Μπορεί βέβαια να συμβεί και το ανάποδο. Μία τέτοια περίπτωση είναι ο βραζιλιάνος
ποδοσφαιριστής Kaká ο οποίος έχει αγωνιστεί και με τις δύο ομάδες.
Αν λοιπόν δεν ισχύει ο περιορισμός ενός ποδοσφαιρικού αγώνα, όπου κάθε ποδοσφαιριστής συμμε-
τέχει σε μία μόνο ομάδα, αλλά εξεταστούν οι συμμετοχές των ποδοσφαιριστών σε ομάδες για μια
μεγάλη χρονική περίοδο. τότε όλες οι απαντήσεις που δώσαμε πριν πρέπει να εξεταστούν εκ νέου.
Ας δούμε πρώτα την ένωση. Δηλαδή:
M ilan ∪ Real
Το αποτέλεσμα της ένωσης, για το δείγμα δεδομένων, απεικονίζεται στο σχήμα 1.14. Οι πλειάδες
των δύο σχέσεων ενώνονται, στο αποτέλεσμα εμφανίζονται όλοι οι παίκτες. Ωστόσο, κάθε παίκτης
εμφανίζεται μία φορά. Για παράδειγμα, ο Kaká εμφανίζεται μία φορά στο αποτέλεσμα.
number name
806 Marek Jankulovski
705 Kaká
580 Alessandro Nesta
322 Andriy Shevchenko
205 Claude Makélélé
108 Raúl Albiol
203 Xabi Alonso
M ilan ∪ Real
Σχήμα 1.14: ΄Ενωση των σχέσεων M ilan και Real, όπως απεικονίζονται στο
σχήμα 1.13. Στο αποτέλεσμα εμφανίζονται οι ποδοσφαιριστές που έχουν αγωνιστεί ε-
ίτε με τη Milan είτε με την Real.
M ilan ∩ Real
θα δώσει ως αποτέλεσμα τις κοινές πλειάδες των δύο σχέσεων, δηλαδή τους ποδοσφαιριστές που
έχουν αγωνιστεί και με τις δύο ομάδες.
Το αποτέλεσμα απεικονίζεται στο σχήμα 1.15. Για το συγκεκριμένο δείγμα δεδομένων, μόνο ο
βραζιλιάνος Kaká έχει αγωνιστεί και με τις δύο ομάδες, οπότε η πλειάδα <505, Kaká> υπάρχει στο
αποτέλεσμα της τομής.
number name
705 Kaká
M ilan ∪ Real
Σχήμα 1.15: Τομή των σχέσεων M ilan και Real, όπως απεικονίζονται στο σχήμα 1.15.
Στο αποτέλεσμα εμφανίζονται οι ποδοσφαιριστές που έχουν αγωνιστεί και με τη Milan
και με την Real.
12 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
Η διαφορά των σχέσεων M ilan και Real θα μας δώσει στο αποτέλεσμα του ποδοσφαιριστές που
έχουν αγωνιστεί μόνο με την μία από τις δύο ομάδες.
Για παράδειγμα, η διαφορά:
M ilan − Real
θα επιστρέψει εκείνες τις πλειάδες της σχέσης M ilan οι οποίες δεν βρίσκονται στη σχέση Real,
δηλαδή τους ποδοσφαιριστές της Milan που δεν έχουν αγωνιστεί με την Real.
Ενώ η διαφορά:
Real − M ilan
θα επιστρέψει εκείνες τις πλειάδες της σχέσης Real οι οποίες δεν βρίσκονται στη σχέση M ilan,
δηλαδή τους ποδοσφαιριστές της Real οι οποίοι δεν έχουν αγωνιστεί με την M ilan.
Τα αποτελέσματα των δύο αυτών σχεσιακών πράξεων απεικονίζονται στο σχήμα 1.16. Παρατηρείστε
πως τα αποτελέσματα είναι διαφορετικά, κάτι που επιβεβαιώνει την μη ισχύ της αντιμεταθετικής
ιδιότητας στη σχεσιακή πράξη της διαφοράς.
Σχήμα 1.16: Διαφορά M ilan−Real και Real−M ilan. Ποδοσφαιριστές της Milan που
δεν έχουν αγωνιστεί με τη Real και ποδοσφαιριστές της Real που δεν έχουν αγωνιστεί
με την Milan, αντίστοιχα.
΄Ενα ενδιαφέρον αποτέλεσμα θα ήταν να είχαμε τους ποδοσφαιριστές των δύο ομάδων που δεν έχουν
αγωνιστεί με άλλη ομάδα. Δηλαδή την ένωση των πλειάδων της σχέσης M ilan και Real χωρίς
τον συνυπολογισμό των κοινών τους πλειάδων. Στο συγκεκριμένο παράδειγμα του σχήματος 1.13,
όλους τους ποδοσφαιριστές, εκτός του βραζιλιάνου Kaká που έχει αγωνιστεί και με τις δύο ομάδες.
Στη σχεσιακή άλγεβρα αυτό μπορεί πολύ εύκολα να υπολογιστεί ως εξής:
Δηλαδή, από την ένωση των σχέσεων M ilan και Real αφαιρούμε την τομή των των σχέσεων M ilan
και Real. Το αποτέλεσμα θα είναι αυτό του σχήματος 1.17.
Ταινιοθήκη
Ας υποθέσουμε ένα φανταστικό σενάριο, μιας και το θέμα αυτής της ενότητας έχει να κάνει με τον
κινηματογράφο.
Βρισκόμαστε στα 1955, στην Ιταλία. Εκείνη την εποχή δύο ταινίες του παραγωγού (και σεναριο-
γράφου) Marcello Girosi έχουν κάνει μεγάλη επιτυχία: η ταινία Pane, amore e fantasia3 και η ταινία
Pane, amore e gelosia.4
3
http://www.imdb.com/title/tt0046159
4
http://www.imdb.com/title/tt0047327
1.3. Συνολοθεωρητικές πράξεις 13
number name
806 Marek Jankulovski
580 Alessandro Nesta
322 Andriy Shevchenko
205 Claude Makélélé
108 Raúl Albiol
203 Xabi Alonso
M ilan ∪ Real
Σχήμα 1.17: ΄Ενωση των των σχέσεων M ilan και Real, με αποκλεισμό των κοινών
πλειάδων, όπως υπολογίστηκαν με βάση τη σχέση 1.13.
Το σχήμα 1.18 δείχνει ένα αντιπροσωπευτικό δείγμα από τους ηθοποιούς που εμφανίστηκαν στις
δύο ταινίες. Οι δύο σχέσεις έχουν από δύο γνωρίσματα, το κωδικό κάθε ηθοποιού5 και το όνομά
του.
Η σχέση f για την ταινία Pane, amore e fantasia:
Σχήμα 1.18: Ηθοποιοί που εμφανίστηκαν στις ταινίες Pane, amore e fantasia (δεξιά)
και Pane, amore e fantasia (αριστερά). Το σχήμα δείχνει μέρος μόνο των ηθοποιών που
εμφανίστηκαν. Το δείγμα ωστόσο είναι αντιπροσωπευτικό και επαρκεί πλήρως για τις
ανάγκες του παραδείγματος της ενότητας.
Το 1955 θα κυκλοφορήσει και η τρίτη ταινία της τριλογίας, η ταινία Pane, amore e...6
Υποθετικά, ας βρεθούμε με τη φαντασία μας στην Ιταλία του 1955, πριν το γύρισμα της τρίτης ταινίας
της τριλογίας «Pane, amore». Λίγο πριν το γύρισμα της τρίτης ταινίας της τριλογίας «Pane, amore»
υπάρχουν προτάσεις για αλλαγές στη σύνθεση των ηθοποιών. Μερικές από τις προτάσεις φαίνονται
στο σχήμα 1.19.
5
΄Οπως δίνονται από την IMDB, http://www.imdb.com
6
http://www.imdb.com/title/tt0050817
14 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
actorID name
0001120 Vittorio De Sica
0000047 Sophia Loren
0655833 Lea Padovani
0681365 Tina Pica
0139213 Mario Carotenuto
Ας υποθέσουμε λοιπόν πως κάνουμε μια μελέτη για τις τρεις αυτές ταινίες.
Οι ηθοποιοί που έχουν παίξει στις δύο πρώτες ταινίες μπορούν να βρεθούν με την ένωση των σχέσεων
f και g:
f ∪g
Το αποτέλεσμα της ένωσης φαίνεται στο σχήμα 1.20.
actorID name
0001120 Vittorio De Sica
0518178 Gina Lollobrigida
0581028 Marisa Merlini
0139214 Memmo Carotenuto
0728376 Roberto Risso
0681365 Tina Pica
0188022 Vittoria Crispo
0882237 Saro Urzì
Σχήμα 1.20: Ηθοποιοί των δύο πρώτων ταινιών της τριλογίας «Pane, amore».
Πολλοί ηθοποιοί έχουν εμφανιστεί και στις δύο ταινίες, όπως φαίνεται στο σχήμα 1.18. Ωστόσο,
στο αποτέλεσμα της ένωσης, σχήμα 1.20, κάθε ηθοποιός εμφανίζεται μόνο μία φορά.
Υπάρχουν αρκετοί ηθοποιοί που εμφανίστηκαν και στις δύο ταινίες. Αυτοί μπορούν να βρεθούν από
την τομή:
f ∩g
Το αποτέλεσμα της τομής φαίνεται στο σχήμα 1.21 το οποίο απεικονίζει τους ηθοποιούς που εμφα-
νίστηκαν στις δύο πρώτες ταινίες της τριλογίας «Pane, amore». Κάποιοι από τους ηθοποιούς της
ταινίας Pane, amore e fantasia δεν εμφανίζονται στο αποτέλεσμα γιατί δεν έχουν συμμετοχή στην
ταινία Pane, amore e gelosia. Το ίδιο συμβαίνει και για κάποιους από τους ηθοποιούς της ταινίας
Pane, amore e gelosia, δεν εμφανίζονται στο αποτέλεσμα γιατί δεν έχουν παίξει στην ταινία Pane,
amore e fantasia.
Ας δούμε τώρα τι συμβαίνει με τους ηθοποιούς της τρίτης ταινίας (Pane, amore e...). Οι ηθοποιοί
της που έχουν παίξει σε κάποια από τις δύο πρώτες ταινίες είναι:
e ∩ (f ∪ g)
1.3. Συνολοθεωρητικές πράξεις 15
actorID name
0001120 Vittorio De Sica
0518178 Gina Lollobrigida
0581028 Marisa Merlini
0139214 Memmo Carotenuto
0681365 Tina Pica
0188022 Vittoria Crispo
Σχήμα 1.21: Ηθοποιοί των δύο πρώτων ταινιών της τριλογίας «Pane, amore» που
εμφανίστηκαν και στις δύο ταινίες.
actorID name
0001120 Vittorio De Sica
0681365 Tina Pica
Σχήμα 1.22: Ηθοποιοί της τρίτης ταινίας της τριλογίας «Pane, amore» που εμφανίστη-
καν σε κάποια από τις δύο πρώτες δύο ταινίες.
Το αποτέλεσμα φαίνεται στο σχήμα 1.22. Η διαπίστωση μπορεί να γίνει εύκολα συγκρίνοντας τα
σχήματα 1.18 και 1.19.
Χρειάζεται προσοχή στη διατύπωση της παράστασης σχεσιακής άλγεβρας. Για παράδειγμα, η αλλαγή
των παρενθέσεων:
(e ∩ f ) ∪ g
θα δώσει τελείως διαφορετικό αποτέλεσμα: Στους κοινούς ηθοποιούς των δύο πρώτων ταινιών (τομή)
προσθέτουμε (ένωση) τους ηθοποιούς της τρίτης ταινίας. Το αποτέλεσμα φαίνεται στο σχήμα 1.23.
actorID name
0001120 Vittorio De Sica
0518178 Gina Lollobrigida
0581028 Marisa Merlini
0139214 Memmo Carotenuto
0681365 Tina Pica
0188022 Vittoria Crispo
0000047 Sophia Loren
0655833 Lea Padovani
0139213 Mario Carotenuto
Μπορούμε επίσης να βρούμε τους ηθοποιούς της τρίτης ταινίας που δεν έχουν εμφανιστεί σε καμία
από τις δύο πρώτες:
e − (f ∪ g)
16 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
actorID name
0000047 Sophia Loren
0655833 Lea Padovani
0139213 Mario Carotenuto
Το αποτέλεσμα φαίνεται στο σχήμα 1.24, το οποίο απεικονίζει τους ηθοποιούς της ταινίας Pane,
amore, e... που δεν εμφανίστηκαν ούτε στην ταινία Pane, amore, e fantasia ούτε στην ταινία Pane,
amore, e gelosia.
Η αλλαγή της θέσης των παρενθέσεων θα δώσει εσφαλμένο αποτέλεσμα, παρόμοιο με αυτό που
είδαμε λίγο παραπάνω.
΄Ενα άλλο συχνό λάθος είναι η χρήση της τομής αντί της ένωσης:
e − (f ∩ g)
Το ερώτημα αυτό θα επιστρέψει στο αποτέλεσμα τους ηθοποιούς της τρίτης ταινίας που δεν έχουν
εμφανιστεί και στις δύο προηγούμενες ταινίες. Προσοχή, το λάθος δεν είναι γραμματικό, είναι
εννοιολογικό και αναφέρεται στη συγκεκριμένη ερώτηση.
Λεπτές διαφορές στη διατύπωση του ερωτήματος απαιτούν διαφορετική διατύπωση στην παράσταση
σχεσιακής άλγεβρας. Με τον ίδιο τρόπο, μικρές διαφορές στην παράσταση σχεσιακής άλγεβρας
(τελεστές, παρενθέσεις, κ.λπ.) προκαλούν αλλαγή στο αποτέλεσμα, στην ουσία απαντούν σε άλλο
ερώτημα.
Τέλος, μπορούμε να βρούμε τους κοινούς ηθοποιούς και των τριών ταινιών:
f ∩ g cape
actorID name
0001120 Vittorio De Sica
0681365 Tina Pica
Σχήμα 1.25: Ηθοποιοί που εμφανίστηκαν σε όλες τις ταινίες της τριλογίας «Pane,
amore».
Το αποτέλεσμα της τομής φαίνεται στο σχήμα 1.25. Υπενθυμίζεται πως για την τομή ισχύει η
προσεταιριστική ιδιότητα, η σειρά των πράξεων δεν έχει σημασία:
(f ∩ g) ∩ e = f ∩ (g ∩ e)
Προτιμήσεις καταναλωτή
Μια συνοικιακή πιτσαρία δέχεται παραγγελίες πίτσας μέσω μηνυμάτων κινητού τηλεφώνου (SMS).
Τα μηνύματα επεξεργάζονται μέσω Η/Υ και οι παραγγελίες προωθούνται προς εκτέλεση.
Τρία διαδοχικά απογεύματα, η πιτσαρία δέχθηκε παραγγελίες από τον ίδιο πελάτη.
Το περιεχόμενο της κάθε παραγγελίας φαίνεται στο σχήμα 1.26.
1.3. Συνολοθεωρητικές πράξεις 17
Ο υπεύθυνος πωλήσεων της πιτσαρίας ζητά τη βοήθειά σας για την ανάλυση αυτών των παραγγελι-
ών.7
Τι είναι κοινό σε όλες τις παραγγελίες; Αυτό είναι ένα ερώτημα ένωσης:
order1 ∪ order2 ∪ order3
product
Margarita
Napolitana
Beer
Calzone
Lasagne
Σχήμα 1.27: Το αποτέλεσμα της ένωσης τριών παραγγελιών της πιτσαρίας: order1 ∪
order2 ∪ order3.
Τι κοινό έχουν και οι τρεις παραγγελίες; Αυτό είναι ένα ερώτημα τομής:
order1 ∩ order2 ∩ order3
product
Napolitana
Σχήμα 1.28: Το αποτέλεσμα της τομής των τριών παραγγελιών της πιτσαρίας: order1∩
order2 ∩ order3.
Τι υπάρχει στην τρίτη παραγγελία, που δεν υπάρχει στις δύο πρώτες; Αυτό είναι ένα ερώτημα
διαφοράς:
order3 − (order1 ∪ order2)
product
Lasagne
Σχήμα 1.29: Τα προϊόντα της τρίτης παραγγελίας που δεν υπήρχαν στις πρώτες δύο
παραγγελίες.
Τι υπάρχει στην πρώτες δύο παραγγελίες που δεν υπάρχει στην τρίτη; Αυτό είναι ένα ερώτημα
διαφοράς:
(order1 ∪ order2) − order3)
product
Beer
Σχήμα 1.30: Τα προϊόντα των πρώτων δύο παραγγελιών που δεν υπήρχαν στην τρίτη
παραγγελία.
1.4.1 Προβολή
Προβολή μιας σχέσης r, με σχήμα R, πάνω στο υποσύνολο γνωρισμάτων της X (Q ⊆ R) είναι
μια σχέση με σχήμα το σύνολο X και κορμό εκείνες τις πλειάδες που αντιστοιχούν σε μοναδικές
τιμές για τα γνωρίσματα X.
Ορισμός της προβολής:
r[X] = {t[X] | t ∈ r} (1.17)
Με απλά λόγια, η προβολή μιας σχέσης, προκύπτει από την αφαίρεση κάποιων γνωρισμάτων της
και την απαλοιφή των πιθανών διπλότυπων εγγραφών από τις πλειάδες που προκύπτουν. Γιατί είναι
πιθανό να συμβεί αυτό; Μα επειδή από τη λίστα γνωρισμάτων της προβολής μπορεί ενδεχομένως να
λείπει το πρωτεύον ή άλλο υποψήφιο κλειδί.
Η προβολή συμβολίζεται με το ελληνικό γράμμα Π:
Είναι δυνατόν να μην υπάρχει κανένα γνώρισμα στη λίστα γνωρισμάτων, και τότε υπονοείται πως
η προβολή γίνεται σε όλα τα γνωρίσματα. Σε αυτή την περίπτωση έχουμε τη λεγόμενη ταυτοτική
προβολή. Η προβολή δηλαδή μιας σχέσης στον εαυτό της, η οποία συμβολίζεται απλά με όνομα της
σχέσης: Π(r)
Αυτό σημαίνει, πως το όνομα μιας σχέσης, είναι από μόνο του μια σχεσιακή παράσταση.
1.4. Οι βασικές πράξεις προβολής και επιλογής 19
A B C A B A B C
B C B
5 a 30 5 a 5 a 30
a 30 a
2 b 10 2 b 2 b 10
b 10 b
3 c 20 3 c 3 c 20
c 20 c
5 b 10 5 b 5 b 10
Μερικά παραδείγματα προβολής φαίνονται στο σχήμα 1.31. Ας τα δούμε ένα-ένα. Στην πρώτη
περίπτωση, ΠA,B (r), έχουμε:
A B
5 a
ΠA,B (r) = 2 b
3 c
5 b
Δηλαδή, από τα γνωρίσματα της σχέσης r επιλέγονται τα A, B και παραλείπεται το γνώρισμα C. Από
τις πλειάδες της σχέσης r μένουν στο αποτέλεσμα όσες, για τα γνωρίσματα A, B έχουν μοναδικές
τιμές.
Στην δεύτερη περίπτωση του σχήματος 1.31, ΠB,C (r), έχουμε:
B C
a 30
ΠB,C (r) =
b 10
c 20
Δηλαδή, από τα γνωρίσματα της σχέσης r επιλέγονται τα B, C και παραλείπεται το γνώρισμα A. Από
τις πλειάδες της σχέσης r μένουν στο αποτέλεσμα όσες, για τα γνωρίσματα B, C, έχουν μοναδικές
τιμές. Παρατηρείστε ότι η πλειάδα hb, 10i υπάρχει μία φορά στο αποτέλεσμα.
Στην τρίτη περίπτωση του σχήματος 1.31, ΠB (r), έχουμε:
B
a
ΠB (r) =
b
c
Δηλαδή, από τα γνωρίσματα της σχέσης r επιλέγεται το γνώρισμα B και παραλείπονται τα γνω-
ρίσματα A, C. Από τις πλειάδες της σχέσης r μένουν στο αποτέλεσμα όσες, για το γνώρισμα B,
έχουν μοναδικές τιμές. Παρατηρείστε ότι η πλειάδα hbi υπάρχει μία φορά στο αποτέλεσμα.
Στην τελευταία περίπτωση του σχήματος 1.31, Π(r), έχουμε την ταυτοτική προβολή:
A B C
5 a 30
ΠB (r) = 2 b 10
3 c 20
5 b 10
Δηλαδή, από τα γνωρίσματα της σχέσης r επιλέγονται όλα τα τα γνωρίσματα.
Η SQL χρησιμοποιεί τη φράση:
20 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
για την επιλογή δεδομένων από πίνακες. Η ομοιότητα με την σχεσιακή πράξη της προβολής είναι
προφανής. Για την επιλογή όλων των πεδίων ενός πίνακα, δηλαδή την ταυτοτική προβολή μιας
σχέσης, με όρους σχεσιακής άλγεβρας, θα γράφουμε:
1 SELECT *
2 FROM πίνακας
1.4.2 Επιλογή
Η επιλογή ή αλλιώς και περιορισμός μιας σχέσης r(R), είναι μια σχέση που έχει το ίδιο σχήμα R με
τη σχέση r και κορμό ένα υποσύνολο του κορμού της r που ικανοποιεί μια συνθήκη, πχ: X θ Y .
Η επιλογή συμβολίζεται με:
A W HERE X θ Y
ή αλλιώς: σcondition (r), όπου η συνθήκη περιορισμού είναι μια παράσταση που μπορεί να αποτιμηθεί
σε TRUE, FALSE ή NULL. Οι παραστάσεις μπορούν επίσης να περιέχουν τους λογικούς τελεστές
AND ∧, OR ∨ και NOT ¬.
Ο τελεστής θ μπορεί να είναι ένας από =, 6=, <, ≤, >, ≥. Η τιμή ενός γνωρίσματος μπορεί να
συγκριθεί με την τιμή ενός άλλου γνωρίσματος, ή με μια κυριολεκτική τιμή, ή ακόμα και με μια άλλη
σχεσιακή παράσταση που αποδίδει κάποια τιμή (εμφώλευση ερωτημάτων).
Αν φ είναι μια παράσταση που χρησιμοποιεί τελεστές σύγκρισης ή/και λογικούς τελεστές, τότε η
επιλογή μπορεί να οριστεί ως:
Ορισμός της επιλογής:
σφ (r) = {t ∈ r | t satisfies φ} (1.18)
Η SQL υποστηρίζει την πράξη της επιλογή με την προσθήκη της φράσης WHERE:
Για παράδειγμα αν έχουμε τη σχέση employees(empid, name, salary) των υπαλλήλων που κατα-
γράφει τον κωδικό, το όνομα και το μισθό τους (σε €), όπως φαίνεται στο σχήμα 1.32, τότε μπορούμε
να γράψουμε παραστάσεις όπως:
1.4. Οι βασικές πράξεις προβολής και επιλογής 21
σsalary<1300 (employees)
σsalary≥1200∧salary≤1600 (employees)
σempid=102 (employees)
που περιγράφει τους υπαλλήλους μιας εταιρείας. Μέρος από τα περιεχόμενα του πίνακα δίνεται στον
πίνακα1.1. Τα πλήρη δεδομένα δίνονται στον πίνακα ;;, της σελίδας ;;.
Πίνακας 1.1: Μέρος από τα περιεχόμενα του πίνακα employees. Δείτε τον πίνακα ;; της
σελίδας ;; για πλήρη απεικόνιση.
Στα παραδείγματα θα δούμε πράξεις προβολής, επιλογής ή και συνδυασμούς των δύο πράξεων.
Εκεί όπου το αποτέλεσμα έχει περισσότερες από 5 πλειάδες (εγγραφές πίνακα) οι επιπλέον πλειάδες
δείχνονται με τρεις τελείες, κάτι που υπονοεί πως υπάρχουν υπάρχουν επιπλέον πλειάδες. Η αποκοπή
γίνεται καθαρά για λόγους οικονομίας χώρου.
Οι απαντήσεις στα ερωτήματα δίνονται επίσης στα κεφάλαια ;;–;; με τη γλώσσα SQL. ΄Ετσι μπορείτε
να συνδυάσετε τις γνώσεις σας στη σχεσιακή άλγεβρα με τη γλώσσα ερωτημάτων SQL.
Πsalary (employees)
Πf irstname,lastname (employees)
σsalary>1500 (employees)
4. Να βρεθεί το όνομα και το επώνυμο όλων των υπαλλήλων που παίρνουν μισθό μεγαλύτερο
από 1500:
5. Να βρεθεί το ονοματεπώνυμο και ο μισθός όλων των υπαλλήλων που εργάζονται στο τμήμα
με κωδικό 2:
6. Να βρεθεί το ονοματεπώνυμο, το τμήμα και ο μισθός όλων των υπαλλήλων που που εργάζονται
σε τμήμα με κωδικό διαφορετικό του 1:
7. Να βρεθεί το όνομα και ο κωδικός των υπαλλήλων που προσλήφθηκαν πριν από την 1/8/2000:
8. Να βρεθεί το επώνυμο και ο μισθός του υπαλλήλου με κωδικό 109 μετά την αύξηση 5% στο
μισθό του:
Πlastname,salary∗1.05 (σempid=109 (employees))
1.5. Συζεύξη 23
9. Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων με μισθό μεγαλύτερο του 1200 ή με μισθό
μικρότερο του 1600:
σsalary>1200∨salary<1600 (employees)
10. Να βρεθεί ο κωδικός, το όνομα, ο μισθό, και το τμήμα όλων των υπαλλήλων του τμήματος 2,
αλλά και των υπαλλήλων από άλλα τμήματα με μισθό στο εύρος [1330, 1630):
σ(salary>1330∧salary<1630)∨depid=2 (employees)
11. Να βρεθούν οι υπάλληλοι (κωδικός, επώνυμο, τμήμα) που εργάζονται στο τμήμα 2 και παίρνουν
μισθό μικρότερο από 1200
Πempid,lastname,depid σ(depid=2∨salary<1200 (employees)
1.5 Συζεύξη
1. Οι σχέσεις r με σχήμα R = {A, B, C} και s με σχήμα {C, D} έχουν ένα κοινό γνώρισμα, το
C. Σύμφωνα με τα παραπάνω μπορούμε να πούμε πως X = {A, B}, Y = {C} και Z = {D}.
24 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
A B C C D A B C D
1 b 10 20 1 1 b 10 3
5 a 30 10 3 3 c 20 1
3 c 20 20 3 3 c 20 3
r s r ./ s
2. Το σχήμα της σχέσης που προκύπτει από τη σύζευξη r ./ s είναι R ∪ S = {A, B, C, D}.
Προσοχή, το S υπάρχει μία φορά ως γνώρισμα στο σχήμα της σχέσης που προκύπτει από τη
σύζευξη.
3. Κάθε πλειάδα της r ενώνεται με την αντίστοιχη πλειάδα της s, όταν οι τιμές στο κοινό γνώριμα
C ταυτίζονται.
4. Η πλειάδα h1, b, 10i της r ενώνεται με την πλειάδα h10, 3i της s γιατί οι τιμές στο κοινό
γνώρισμα C ταυτίζονται.
5. Η πλειάδα h5, a, 30i της r δεν ενώνεται με καμία πλειάδα της s γιατί οι τιμές στο κοινό
γνώρισμα C δεν ταυτίζονται.
6. Η πλειάδα h3, c, 20i της r ενώνεται με δύο πλειάδες της s γιατί υπάρχουν δύο πλειάδες της r,
h20, 1i και h20, 3i , για τις οποίες οι τιμές στο κοινό γνώρισμα C ταυτίζονται.
r ./ s 6= s ./ r (1.20)
ΠL (r ./ s) = ΠL (s ./ r) (1.21)
r ./ (s ./ t) = (r ./ s) ./ t (1.22)
οπότε μια απλοποιημένη παράσταση, χωρίς παρενθέσεις, είναι εξ΄ ίσου έγκυρη:
r ./ s ./ t = r ./ s ./ t (1.23)
Η SQL υποστηρίζει τη (φυσική) σύζευξη με τον όρο NATURAL JOIN. Για παράδειγμα, για δύο
πίνακες που έχουν τουλάχιστον ένα κοινό γνώρισμα, μπορούμε να γράψουμε:
1 SELECT *
2 FROM πίνακας1 NATURAL JOIN πίνακας2
1.5. Συζεύξη 25
Η σύζευξη μπορεί να εκφραστεί ως παράγωγη πράξη του γινομένου και της επιλογής.
Σύζευξη ως καρτεσιανό γινόμενο :
r ./0 s = σφ (r × s) (1.24)
A B C C D A B R.C S.C D A B C D
1 b 10 20 1 1 b 10 10 3 1 b 10 3
5 a 30 10 3 3 c 20 20 1 3 c 20 1
3 c 20 20 3 3 c 20 20 3 3 c 20 3
0
r s r ./ s r ./ s
΄Ενα παράδειγμα σύζευξης ως συνδυασμού γινομένου και επιλογής φαίνεται στο σχήμα 1.34. Πα-
ρατηρείστε ότι το κοινό γνώρισμα C στις δύο σχέσεις r και s του σχήματος 1.34 εμφανίζεται δύο
φορές στο αποτέλεσμα του γινομένου, με διαφορετικό όνομα που προκύπτει από τη συνένωση του
ονόματος της σχέσης και του ονόματος του γνωρίσματος: R.C και S.C αντίστοιχα. Αν θέλουμε να
απαλειφθεί η διπλή εμφάνιση του γνωρίσματος R.C από το αποτέλεσμα, πρέπει να χρησιμοποιήσουμε
τη σχεσιακή πράξη της προβολής (Π).
Μπορούμε έτσι να δώσουμε έναν ακόμα εναλλακτικό ορισμό της φυσικής σύζευξης. Αν Y =
{A1 , A2 , . . . , An } είναι τα κοινά γνωρίσματα στα δύο σχήματα R, S, των σχέσεων r και s αντίστοιχα,
τότε η φυσική σύζευξης μπορεί να οριστεί και ως:
Φυσικής σύζευξη:
Υπάρχουν περιπτώσεις όπου ανάμεσα σε δύο σχέσεις r και s δεν υπάρχει κανένα κοινό γνώρισμα.
Τότε το αποτέλεσμα της φυσικής σύζευξη ισούται με το καρτεσιανό γινόμενο:
Αν για δύο σχέσεις r(R) και s(S) ισχύει R ∩ S = Ø, τότε
r ./ s = r × s (1.26)
(r × s) W HERE X θ Y
26 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
όπου X, Y ο τελεστής θ δεν είναι κατά ανάγκη ισότητα. Προσέξτε ότι τα γνωρίσματα που εμπλέκον-
ται στη σύζευξη πρέπει να έχουν κοινό πεδίο ορισμού.
Αν η r είναι σχέση με σχήμα {A1 , A2 , . . . , An }, s είναι σχέση με σχήμα {B1 , B2 , . . . , Bm }, τα
γνωρίσματα Ai και Bj έχουν το ίδιο πεδίο ορισμού, και θ είναι τελεστής σύγκρισης, θ ∈ {=, 6=, <
, ≤, >, ≥}, τότε η θ σύζευξη των R και S, R ./Ai θBj S, είναι μια σχέση με σχήμα το σύνολο των
γνωρισμάτων των R και S, {A1 , A2 , . . . , An B1 , B2 , . . . , Bm } και κορμό το σύνολο των πλειάδων
από κάθε συνδυασμό των πλειάδων των R και S, που ικανοποιούν τη συνθήκη Ai θBj .
Το αποτέλεσμα είναι μια σχέση με βαθμό m + n, και πληθικότητα ανάμεσα στο 0 και στο nR × nS .
Αν κάποια πλειάδα έχει τιμή NULL στο γνώρισμα που συμμετέχει στη σύζευξη (Ai ή Bj ), τότε
δεν συμμετέχει στο αποτέλεσμα. Με αυτή την έννοια το αποτέλεσμα της σύζευξης, ενδεχομένως,
περιέχει λιγότερη πληροφορία, από ότι οι επιμέρους σχέσεις.
Αν ο τελεστής θ είναι το = τότε η σύζευξη καλείται ισοσύζευξη, και πρακτικά είναι φυσική
σύζευξη.
Ορισμός της σύζευξης θ:
r ./θ s = {σθ r × s} (1.27)
A B C C D A B R.C S.C D
A B R.C S.C D
1 b 10 20 1 1 b 10 10 3
5 a 30 10 3
5 a 30 10 3 3 c 20 20 1
3 c 20 10 3
3 c 20 20 3 3 c 20 20 3
r s r ./R.C=S.C s r ./R.C>S.C s
name city
id city
Νίκος Πάτρα
1 Αθήνα
Βάσω Κοζάνη
2 Πάτρα
Αγγελική Πάτρα
3 Θεσσαλονίκη
Βασίλης Αθήνα
Υποκαταστήματα (b) Πελάτες (c)
id city name
id city name
1 Αθήνα Βασίλης
2 Πάτρα Νίκος 1 Αθήνα Βασίλης
2 Πάτρα Αγγελική 2 Πάτρα Νίκος
3 Θεσσαλονίκη NULL 2 Πάτρα Αγγελική
NULL NULL Βάσω
Εξωτερική σύζευξη b ./ c Φυσική σύζευξη b ./ c
1. Για τις δύο σχέσεις, b και c, γίνεται σύζευξη με βάση την τιμή στο γνώρισμα city, που είναι
κοινό στις δύο σχέσεις. Οπότε ουσιαστικά γίνεται λόγος για φυσική σύζευξη. Το σχήμα της
σχέσης b ./ c είναι το ίδιο με αυτό της φυσικής σύζευξης. Στο αποτέλεσμα της εξωτερικής
σύζευξης b ./ c υπάρχουν όλες οι πλειάδες που υπάρχουν και στο αποτέλεσμα της φυσικής
σύζευξης b ./ c.
2. Υπάρχει το υποκατάστημα 3 στη Θεσσαλονίκη, ενώ δεν υπάρχει κανείς πελάτης από τη Θεσ-
σαλονίκη. Το υποκατάστημα 3 δεν θα εμφανιστεί στο αποτέλεσμα μιας φυσικής ή εσωτερικής
σύζευξης. Εμφανίζεται ωστόσο στο αποτέλεσμα της εξωτερικής σύζευξης.
3. Υπάρχει η πελάτης με όνομα Βάσω από την Κοζάνη, χωρίς στην πόλη αυτή να υπάρχει υπο-
κατάστημα. Η Βάσω δεν θα εμφανιστεί στο αποτέλεσμα μιας φυσικής ή εσωτερικής σύζευξης.
Εμφανίζεται ωστόσο στο αποτέλεσμα της εξωτερικής σύζευξης.
5. Συνέπεια του προηγούμενου είναι ότι, στο αποτέλεσμα μιας φυσικής ή εσωτερικής σύζευξης,
θα εμφανιστούν ο Βασίλης (Αθήνα) και οι Νίκος, Αγγελική (Πάτρα), επειδή στις πόλεις τους
υπάρχουν υποκαταστήματα.
6. Το αποτέλεσμα της εξωτερικής σύζευξης θα περιέχει όλες τις πλειάδες της εσωτερικής σύζευ-
ξης, καθώς και επιπλέον τις πλειάδες που πιθανώς δεν έχουν ταιριαστές τιμές. Τέτοιες είναι
το υποκατάστημα στη Θεσσαλονίκη και η πελάτης με όνομα Βάσω.
7. Οι πλειάδες της μίας σχέσης, που δεν έχουν ταιριαστές τιμές στην άλλη σχέση, θα συμπλη-
ρώσουν με τιμές NULL τα γνωρίσματα των σχέσεων (πεδία στους πίνακες) στο αποτέλεσμα
της εξωτερικής σύζευξης. ΄Ετσι η πλειάδα h3, Θεσσαλονίκηi της σχέσης b (υποκατάστημα)
θα υπάρχει στο αποτέλεσμα της εξωτερικής σύζευξης, όμως θα έχει τιμές NULL στα γνω-
ρίσματα της σχέσης c (Πελάτες). Επίσης, η πλειάδα hΒάσω, Κοζάνηi Βάσω, θα υπάρχει στο
αποτέλεσμα της εξωτερικής σύζευξης, αλλά με τιμές NULL στα γνωρίσματα της σχέσης b
(Υποκατάστημα).
28 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
Αν r είναι σχέση με σχήμα R = {X, Y } και s είναι μία σχέση με σχήμα S = {Y, Z}, τότε η
εξωτερική σύζευξη t = r ./ s έχει σχήμα T = {X, Y, Z} και κορμό που αποτελείται από τις
πλειάδες:
όπου w1 είναι μία σχέση με σχήμα R − S και μία πλειάδα με τιμές {null, null, . . . , null}, και
w2 είναι μία σχέση με σχήμα S − R και μία πλειάδα με τιμές {null, null, . . . , null}.
r ./ s
• Κορμό τις πλειάδες που προκύπτουν από την ένωση των πλειάδων:
– της φυσικής σύζευξης r ./ s
– όλων των πλειάδων της r (αριστερής σχέσης) που δεν είναι στο αποτέλεσμα της φυσικής
σύζευξης, με NULL τιμές στα γνωρίσματα της s (δεξιάς σχέσης)
name city
id city
Νίκος Πάτρα
1 Αθήνα
Βάσω Κοζάνη
2 Πάτρα
Αγγελική Πάτρα
3 Θεσσαλονίκη
Βασίλης Αθήνα
Υποκαταστήματα (b) Πελάτες (c)
id city name
id city name
1 Αθήνα Βασίλης
1 Αθήνα Βασίλης
2 Πάτρα Νίκος
2 Πάτρα Νίκος
2 Πάτρα Αγγελική
2 Πάτρα Αγγελική
3 Θεσσαλονίκη NULL
Αριστερή σύζευξη b ./ c Φυσική σύζευξη b ./ c
Σχήμα 1.37: Αριστερή εξωτερική σύζευξη ανάμεσα στα υποκαταστήματα (b) και τους
πελάτες (c) μιας εταιρείας.
• Κορμό τις πλειάδες που προκύπτουν από την ένωση των πλειάδων:
– της φυσικής σύζευξης r ./ s
– όλων των πλειάδων της s (δεξιάς σχέσης) που δεν είναι στο αποτέλεσμα της φυσικής
σύζευξης, με NULL τιμές στα γνωρίσματα της r (αριστερής σχέσης)
Η από δεξιά εξωτερική σύζευξη είναι ισοδύναμη με την από αριστερά εξωτερική σύζευξη, αν αλλαχθεί
η σειρά εμφάνισης των σχέσεων. Δηλαδή, η ισχύει:
r ./ s = s ./ r
Το σχήμα 1.38 δείχνει ένα παράδειγμα δεξιάς εξωτερικής σύζευξης. Για λόγους σύγκρισης πα-
ρατίθεται επίσης το αποτέλεσμα της φυσικής σύζευξης των δύο σχέσεων. Παρατηρείστε πως στο
αποτέλεσμα της δεξιάς σύζευξης r ./ s υπάρχουν όλες οι πλειάδες της φυσικής σύζευξης r ./ s.
Υπάρχουν επίσης η πλειάδα της s hΒάσω, Κοζάνηi για την οποία δεν υπάρχει ταιριαστή πλειάδα στην
σχέση r. Το γνώρισμα id συμπληρώνεται με τιμή NULL στο αποτέλεσμα της δεξιάς σύζευξης.
1.6 Διαίρεση
Η διαίρεση είναι μια πολύ ενδιαφέρουσα πράξη. Μοιάζει με τη διαίρεση στην άλγεβρα αριθμών, με
την έννοια πως έχει διαιρετέο και διαιρέτη. Το αποτέλεσμά της είναι μια σχέση με (γενικά) λιγότερα
γνωρίσματα από το διαιρετέο (όσα τα γνωρίσματα του διαιρέτη), και (γενικά) λιγότερες πλειάδες (το
30 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
name city
id city
Νίκος Πάτρα
1 Αθήνα
Βάσω Κοζάνη
2 Πάτρα
Αγγελική Πάτρα
3 Θεσσαλονίκη
Βασίλης Αθήνα
Υποκαταστήματα (b) Πελάτες (c)
id city name
id city name
1 Βασίλης Αθήνα
1 Αθήνα Βασίλης
2 Νίκος Πάτρα
2 Πάτρα Νίκος
2 Αγγελική Πάτρα
2 Πάτρα Αγγελική
NULL Βάσω Κοζάνη
Δεξιά σύζευξη b ./ c Φυσική σύζευξη b ./ c
Σχήμα 1.38: Δεξιά εξωτερική σύζευξη ανάμεσα στα υποκαταστήματα (b) και τους
πελάτες (c) μιας εταιρείας.
πολύ όσες έχει ο διαιρέτης). Από τη σχέση διαιρετέου αφαιρούνται εκείνα τα γνωρίσματα που δεν
υπάρχουν στο διαιρέτη, και εκείνες οι πλειάδες του διαιρετέου που δεν αντιστοιχούν στο διαιρέτη. Ο
διαιρέτης της σχεσιακής πράξης της διαίρεσης με απλά λόγια «οδηγεί» το διαιρετέο σε ένα συνδυασμό
προβολής (λιγότερα γνωρίσματα) και περιορισμού (λιγότερες πλειάδες).
Το πλέον συνηθισμένο πεδίο εφαρμογής της διαίρεσης είναι σε πράξεις αναζήτησης δεδομένων με
τη φράση «όλα», με αναφορά σε δύο σχέσεις (πίνακες). Οι δύο σχέσεις (διαιρετέος και διαιρέτης)
έχουν τουλάχιστον ένα κοινό γνώρισμα, το οποίο δεν εμφανίζεται στο αποτέλεσμα.
Ορισμός της διαίρεσης:
Αν η r είναι σχέση με σχήμα R = {X, Y } και s είναι μια σχέση με σχήμα S = {Y }, δηλαδή
S ⊆ R, τότε, το αποτέλεσμα της διαίρεσης t = r ÷ s, είναι μια σχέση t με σχήμα {X}. Δηλαδή,
η t είναι μια σχέση με σχήμα τη διαφορά R − S = {X}, δηλαδή εκείνα τα γνωρίσματα της r
που δεν ανήκουν στην s.
Ο κορμός της t αποτελείται από εκείνες τις πλειάδες της σχέσης r για οποίες τα (κοινά) γνω-
ρίσματα {X} των σχέσεων r και s έχουν τιμές που ταυτίζονται. Μια πλειάδα t, με γνωρίσματα
R − S = {X}, ανήκει στο αποτέλεσμα όταν:
1. t ∈ ΠR−S (r)
2. ∀ ts ∈ s, ∃ tr ∈ r έτσι ώστε:
• tr [S] = ts [S]
• tr [R − S] = t
• Το αποτέλεσμα έχει σχήμα τη διαφορά των σχημάτων των δύο σχέσεων. Η σχέση Συμμετοχή
έχει στο σχήμα της εκείνα τα γνωρίσματα της σχέσης Αθλούνται, που δεν υπάρχουν στη
σχέση Πρωτάθλημα, δηλαδή αφαιρείται το γνώρισμα ΄Αθλημα και στο αποτέλεσμα μένει μόνο
το γνώρισμα ΄Ονομα.
• Για το κορμό της σχέσης Συμμετοχή, πρέπει να βρεθούν εκείνες οι πλειάδες της σχέσης Αθλο-
ύνται, για τις οποίες το ΄Αθλημα υπάρχει στις πλειάδες που αντιστοιχούν σε όλες τις πλειάδες
της σχέση Πρωτάθλημα. Δηλαδή, θα ληφθούν τα ονόματα των μαθητών που αθλούνται σε
όλα τα αθλήματα τα οποία υπάρχουν στη λίστα αθλημάτων για το πρωτάθλημα.
• Ακόμα πιο απλά, θέλουμε εκείνες τις πλειάδες της σχέσης Π΄Ονομα (΄Αθλούνται) για τις ο-
ποίες υπάρχει πλήρης αντιστοίχηση, μέσω της σχέσης Π΄Αθλημα (΄Αθλούνται), με τις πλειάδες
της σχέσης Π΄Αθλημα (Πρωτάθλημα): τα ονόματα των μαθητών που συμμετέχουν σε όλα τα
αθλήματα.
• Ο Νίκος συμμετέχει στο πρωτάθλημα, γιατί αγωνίζεται και στο ποδόσφαιρο στο στίβο, στα
δύο αθλήματα του πρωταθλήματος.
• Ο Ανδρέας συμμετέχει στο πρωτάθλημα, γιατί δεν αγωνίζεται στο ποδόσφαιρο, το οποίο είναι
στο πρωτάθλημα.
• Ο Βασίλης συμμετέχει στο πρωτάθλημα, γιατί αγωνίζεται και στο ποδόσφαιρο στο στίβο, στα
δύο αθλήματα του πρωταθλήματος.
• Ο Χρήστος δεν συμμετέχει στο πρωτάθλημα, γιατί δεν αγωνίζεται στο στίβο, το οποίο είναι
στο πρωτάθλημα.
• Ο Γιώργος δεν συμμετέχει στο πρωτάθλημα, γιατί δεν αγωνίζεται στο στίβο, το οποίο είναι
στο πρωτάθλημα.
Μπορούμε να κάνουμε κάποιες επιπλέον παρατηρήσεις. Ξεκινήσαμε με το ερώτημα «Να βρεθούν όλα
τα ονόματα που θα λάβουν μέρος στο πρωτάθλημα». Δεδομένα είναι δύο σχέσεις που περιέχουν τα
32 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
αθλήματα του πρωταθλήματος (διαιρέτης) και το άθλημα κάθε μαθητή (διαιρετέος). Δηλαδή έχουμε
δύο σχέσεις με ένα κοινό γνώρισμα. Το αποτέλεσμα είναι μια σχέση (Συμμετοχή) που προέρχεται
από το διαιρετέο (Αθλούνται) χωρίς το κοινό γνώρισμα ΄Αθλημα, δηλαδή το κοινό γνώρισμα διαιρε-
τέου και διαιρέτη. Από τις πλειάδες της σχέσης Αθλούνται μένουν στο αποτέλεσμα μόνο εκείνες για
τις οποίες η αντίστοιχη τιμή στο γνώρισμα ΄Αθλημα ταυτίζεται με όλες τις τιμές που υπάρχουν στη
σχέση Πρωτάθλημα. Ο Χρήστος, για παράδειγμα, που αθλείται μόνο στο κολύμπι, δεν συμμετέχει
στο πρωτάθλημα. Ο Νίκος συμμετέχει στο πρωτάθλημα, γιατί αγωνίζεται σε όλα τα αθλήματα του
πρωταθλήματος. Ο Ανδρέας που αγωνίζεται μόνο στο ποδόσφαιρο, αλλά όχι στο στίβο, δεν συμμε-
τέχει στο πρωτάθλημα. Παρατηρήστε επίσης ότι, ενώ κάποιοι αθλούνται σε δύο αθλήματα, κανείς
δεν έχει διπλή πλειάδα στο πρωτάθλημα.
Η διαίρεση είναι το αντίστροφο του γινομένου στην άλγεβρα των αριθμών, και το ίδιο μπορεί να
ειπωθεί για τη σχεσιακή άλγεβρα. ΄Ετσι, αν t = r ÷ s, τότε η σχέση t × s, έχει συμβατότητα τύπου
με την r.
Η διαίρεση είναι παράγωγη πράξη, και μπορεί να οριστεί με βάση άλλες σχεσιακές πράξεις. ΄Ενας
εναλλακτικός τρόπος να ορίσουμε τη διαίρεση δύο σχέσεων r και s με σχήματα R και S αντίστοιχα,
όταν S ⊂ R, είναι:
Ορισμός της διαίρεσης:
Αν πάρουμε ως R = {΄Ονομα, ΄Αθλημα} και S = {΄Αθλημα} των σχέσεων του σχήματος 1.39,
δηλαδή r = Αθλούνται και s = Πρωτάθλημα τότε ο παραπάνω ορισμός μπορεί να αναλυθεί ως εξής:
που αντιστοιχεί στην προβολή των ονομάτων του πίνακα Αθλούνται του σχήματος 1.39. Ισχύει:
΄Ονομα
Νίκος
Ανδρέας
Βασίλης
Χρήστος
Γιώργος
ή:
Π΄Ονομα ((Π΄Ονομα (Αθλούνται) × Πρωτάθλημα) − Π΄Ονομα, ΄Αθλημα (Αθλούνται)
΄Ονομα ΄Αθλημα
Νίκος Ποδόσφαιρο
΄Ονομα Ανδρέας Ποδόσφαιρο
Βασίλης Ποδόσφαιρο
Νίκος ΄Αθλημα
Χρήστος Ποδόσφαιρο
Ανδρέας
Ποδόσφαιρο Γιώργος Ποδόσφαιρο
Βασίλης
Στίβος Νίκος Στίβος
Χρήστος
Ανδρέας Στίβος
Γιώργος
Βασίλης Στίβος
Χρήστος Στίβος
Γιώργος Στίβος
4. Η σχέση ΠR−S,S (r) είναι ίδια με την r. Αυτό που γίνεται είναι απλά μια πιθανή αναδιάταξη
των γνωρισμάτων της r έχει ώστε να έχει συμβατότητα τύπου με το γινόμενο ΠR−S (r) × s.
Δηλαδή, τοποθετούνται πρώτα τα γνωρίσματα της r που δεν ανήκουν στην s (R − S) και μετά
τα κοινά γνωρίσματα των r και s. Στην περίπτωσή μας αυτό είναι:
Στη συγκεκριμένη περίπτωση η αναδιάταξη είναι περιττή. Το αποτέλεσμα είναι το ίδιο με αυτό
του σχήματος 1.39:
΄Ονομα ΄Αθλημα
Νίκος Ποδόσφαιρο
Ανδρέας Κολύμπι
Βασίλης Στίβος
Ανδρέας Ποδόσφαιρο
Χρήστος Κολύμπι
Βασίλης Ποδόσφαιρο
Νίκος Στίβος
Γιώργος Ποδόσφαιρο
Χρήστος Στίβος
34 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
Ωστόσο, η προβολή ΠR−S,S (r) πρέπει να γίνεται πάντοτε, ώστε να εξασφαλίζεται σίγουρα η
συμβατότητα τύπου για την επόμενη πράξη της αφαίρεσης.
5. Μπορούμε τώρα να κάνουμε την αφαίρεση (ΠR−S (r) × s) − ΠR−S,S (r) που στην περίπτωσή
μας αντιστοιχεί στην αφαίρεση:
Το αποτέλεσμα είναι:
΄Ονομα ΄Αθλημα
΄Ονομα ΄Αθλημα
Νίκος Ποδόσφαιρο
Νίκος Ποδόσφαιρο
Ανδρέας Ποδόσφαιρο
Ανδρέας Κολύμπι
Βασίλης Ποδόσφαιρο ΄Ονομα ΄Αθλημα
Βασίλης Στίβος
Χρήστος Ποδόσφαιρο
Ανδρέας Ποδόσφαιρο Χρήστος Ποδόσφαιρο
Γιώργος Ποδόσφαιρο
Χρήστος Κολύμπι Ανδρέας Στίβος
Νίκος Στίβος
Βασίλης Ποδόσφαιρο Γιώργος Στίβος
Ανδρέας Στίβος
Νίκος Στίβος
Βασίλης Στίβος
Γιώργος Ποδόσφαιρο
Χρήστος Στίβος
Χρήστος Στίβος
Γιώργος Στίβος
6. Η προβολή ΠR−S ((ΠR−S (r) × s) − ΠR−S,S (r)) που στην περίπτωσή μας είναι:
θα δώσει το αποτέλεσμα:
΄Ονομα
Χρήστος
Ανδρέας
Γιώργος
και στην ουσία πρόκειται για τους μαθητές που δεν συμμετέχουν στο πρωτάθλημα.
΄Ονομα
΄Ονομα
Νίκος ΄Ονομα
Ανδρέας Χρήστος
Νίκος
Βασίλης Ανδρέας
Βασίλης
Χρήστος Γιώργος
Γιώργος
Αθλούνται ÷ Πρωτάθλημα
Θεωρείστε για παράδειγμα τη σχέση sales = {area, employee, amount} που κρατά στοιχεία για το
ύψος πωλήσεων που πετυχαίνουν εμπορικοί αντιπρόσωποι μιας εταιρείας. Δείγμα των δεδομένων
της σχέσης φαίνεται στο σχήμα 1.40. Εύκολα μπορεί να εξαχθεί το συμπέρασμα πως (τουλάχιστον
στο δείγμα) υπάρχουν 4 υπάλληλοι που δραστηριοποιούνται σε 5 νομούς.
2. Ποιο είναι το άθροισμα των πωλήσεων ανά εμπορικό αντιπρόσωπο (υπάλληλο) της εταιρείας;
Τέτοιες, και άλλες πολλές (αλλά παρόμοιες) ερωτήσεις μπορούν να απαντήσουν τα ερωτήματα με τις
συναρτήσεις συνάθροισης, με ή χωρίς ομαδοποίηση.
Υπάρχουν 5 κύριες συναρτήσεις συνάθροισης:
Gsum(amount) (sales)
1 SELECT SUM(amount)
2 FROM sales
Η τιμή που λαμβάνεται από το προηγούμενο ερώτημα είναι μία, και αντιστοιχεί στην απλή άθροιση των
τιμών του γνωρίσματος amount. Η χρήση της συναθροιστικής συνάρτησης SUM(), σε συνδυασμό
με την ομαδοποίηση ως προς κάποιο γνώρισμα, πχ το employees, μπορεί να δώσει απάντηση σε
περισσότερο πολύπλοκα ερωτήματα, όπως το να βρεθεί το σύνολο των πωλήσεων ανά υπάλληλο:
΄Η στην SQL:
4. Ο δεξιός δείκτης sum(amount) από το G (καλλιγραφικό G), σημαίνει πως στο σύνολο των
πλειάδων της sales θα υπολογιστεί το άθροισμα. Αφού έχει προηγηθεί διάσπαση σε 4 υπο-
σύνολα, το άθροισμα θα υπολογιστεί μία φορά για κάθε ένα υποσύνολο ξεχωριστά. Δηλαδή
θα υπολογιστούν 4 υπο-αθροίσματα: ένα για κάθε ξεχωριστό υπάλληλο.
employee sum(amount)
Ευθυμίου 33390
Αλεξανρίδης 3180
Πετρίδης 6220
Σταθόπουλος 19500
1.8 Ενημέρωση
Εκτός από τις πράξεις επιλογής, η σχεσιακή άλγεβρα έχει ανάγκη από τις πράξεις ενημέρωσης της
βάσης δεδομένων. Με αυτές υπάρχει η δυνατότητα:
• Διαγραφής δεδομένων από τις σχέσεις, δηλαδή απαλοιφή μιας ή περισσότερων πλειάδων
της σχέσης. Η πληθικότητα της σχέσης μειώνεται μετά την διαγραφή.
• Τροποποίησης δεδομένων στις σχέσεις, δηλαδή αλλαγή στις τιμές των γνωρισμάτων μιας
σχέσης. Η πληθικότητα της σχέσης δεν μεταβάλλεται μετά την τροποποίηση.
Να έχετε πάντα υπ΄ όψη σας πως οι πράξεις ενημέρωσης είναι πράξεις συνόλων. Αυτό το οποίο
εισάγεται, διαγράφεται ή τροποποιείται είναι μια πλειάδα, δηλαδή ένα σύνολο από τιμές που αντιστοι-
χούν στα γνωρίσματα της σχέσης.
Δείτε για παράδειγμα το σχήμα 1.42, το οποίο παρουσιάζει ένα δείγμα δεδομένων από τη σχέση
movies = {Κωδικός, Τίτλος, ΄Ετος}. Με άλλα λόγια, έχουμε μια σχέση όπου αποθηκεύονται
στοιχεία για τον τίτλο και το έτος παραγωγής ταινιών. Μια συγκεκριμένη ταινία, σύμφωνα με το
σχεσιακό μοντέλο δεδομένων της σχέσης movies, είναι ένα σύνολο από τρεις τιμές, που αντιστοιχούν
στα τρία γνωρίσματα της σχέσης. ΄Ετσι κάθε ταινία, δηλαδή κάθε πλειάδα που αντιστοιχεί σε μία
ταινία, είναι ένα σύνολο τιμών. Η σχέση movies έχει ως σώμα ένα σύνολο από πλειάδες: όλες τις
ταινίες που περιέχει. Δηλαδή κάθε ταινία είναι ένα σύνολο τιμών, αλλά είναι και μέλος ενός συνόλου:
είναι μέλος όλων των πλειάδων της σχέσης movies.
Κάθε πράξη ενημέρωσης της βάσης (εισαγωγή, διαγραφή, τροποποίηση) αφορά πλειάδες μιας σχέσης
και όχι μεμονωμένες τιμές κάποιου γνωρίσματος. Επίσης οι πράξεις ενημέρωσης δεν μεταβάλλουν
το σχεσιακό σχήμα. Δεν προστίθενται, αφαιρούνται ή τροποποιούνται γνωρίσματα κάποιας σχέσης,
αλλά πλειάδες της σχέσης. Δηλαδή οι πράξεις ενημέρωσης αφορούν το σώμα μιας σχέσης, εδώ είναι
που γίνεται η ενημέρωση.
38 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
1.8.1 Εισαγωγή
Η εισαγωγή δεδομένων στη βάση σημαίνει την εισαγωγή μιας πλειάδας σε κάποια σχέση. Θυμηθείτε
ότι η πλειάδα είναι ένα σύνολο τιμών που αντιστοιχούν στα γνωρίσματα μιας σχέσης. Επομένως
υπάρχει πάντα ο περιορισμός της σωστής αντιστοίχισης, καθώς επίσης και της σχεσιακής ακεραι-
ότητας δεδομένων: κάθε τιμή της πλειάδας πρέπει να ανήκει στο πεδίο ορισμού του γνωρίσματος. Η
πλειάδα προς εισαγωγή μπορεί να προκύψει είτε από νέα δεδομένα που εισάγει ο χρήστης της βάσης,
είτε από το αποτέλεσμα ενός ερωτήματος.
Γενικά, η εισαγωγή των E (σχεσιακής έκφρασης) στη σχέση r, γράφετε ως:
r ←r∪E
Για παράδειγμα η εισαγωγή της ταινίας Blade Runner του 1982 με κωδικό 0083658 γίνεται με
σχεσιακή πράξη:
movies ← movies ∪ {0083658, ’Blade Runner’, 1982}
Που σημαίνει πως η σχέση movies αποκτά μια νέα πλειάδα και η πληθικότητά της αυξάνεται κατά
μία μονάδα. Σε περίπτωση που υπάρξει κάποιο λάθος, όπως για παράδειγμα παραβίαση του κανόνα
πρωτεύοντος κλειδιού, τότε η εισαγωγή αποτυγχάνει συνολικά. Αυτό σημαίνει πως αποτυγχάνει
η εισαγωγή μιας πλειάδας στη σχέση, ή μιας εγγραφής στον πίνακα, και όχι η εισαγωγή κάποιας
τιμής ενός γνωρίσματος.
Στην SQL η εισαγωγή δεδομένων γίνεται με την εντολή INSERT. Για παράδειγμα:
1 INSERT
2 INTO movies (code, title, year)
3 VALUES (0083658, 'Blade Runner', 1982);
Σχήμα 1.43: Πινακοποιημένη μορφή της σχέσης movies με δείγμα δεδομένων, όπως
θα ήταν μετά την προσπάθεια εισαγωγής δεδομένων που παραβιάζουν κάποιο κανόνα
ακεραιότητας δεδομένων, εδώ τον κανόνα πρωτεύοντος κλειδιού.
Για παράδειγμα θεωρείστε την πλειάδα h0053779, ’The Pink Panther’, 1963i που αντιστοιχεί στην
εισαγωγή της διάσημης (και πολύ αγαπημένης) κωμωδίας στη σχέση movies. Η απόπειρα εκτέλεσης
της πράξης:
movies ← movies ∪ {053779, ’The Pink Panther’, 1963}
1.8. Ενημέρωση 39
θα αποτύχει γιατί η τιμή 053779 που αντιστοιχεί στο πρωτεύον κλειδί, υπάρχει ήδη σε άλλη πλειάδα
της σχέσης movies. Αυτό που θα προκύψει είναι ένα μήνυμα λάθους από το Σύστημα Διαχείρισης
Βάσεων Δεδομένων, και όχι μια σχέση στο σώμα της οποίας υπάρχει μια πλειάδα χωρίς πρωτεύον
κλειδί. Το σχήμα 1.43 δεν θα προκύψει ως πίνακας μιας σχεσιακής βάσης ποτέ, και αναπαριστά με
εσφαλμένο τρόπο το αποτέλεσμα της εισαγωγής. ΄Ετσι λοιπόν, μετά από μια αποτυχημένη εισαγωγή
πλειάδων σε σχέση, δεν μεταβάλλεται η πληθικότητά της και η σχέση παραμένει όπως και πριν.
Αυτό είναι ένα πολύ συχνό λάθος των αρχάριων χρηστών των βάσεων δεδομένων: η εισαγωγή
δεδομένων δεν γίνεται ποτέ τιμή προς τιμή, όπως για παράδειγμα σε ένα λογιστικό φύλλο ή σε
έναν επεξεργαστή κειμένου, όπως φαίνεται στο σχήμα 1.44. Οι βάσεις δεδομένων λειτουργούν με
διαφορετικό τρόπο. ΄Οπως φαίνεται στο σχήμα 1.44, σε αυτά τα προγράμματα υπάρχει η δυνατότητα
καταχώρισης δεδομένων χωρίς τους ελέγχους του σχεσιακού μοντέλου. Πιθανότατα, όσοι από
εσάς έχετε δουλέψει σε αντίστοιχα περιβάλλοντα επεξεργασίας κειμένου, θα θυμάστε επίσης τη
διαδικασία αποθήκευσης των αλλαγών που κάνετε στο κείμενο, π.χ. με την εισαγωγή μίας επιπλέον
ταινίας. Στις βάσεις δεδομένων τίποτα τέτοιο δεν ισχύει. Αν μια πλειάδα εισαχθεί με επιτυχία, τότε
δεν χρειάζεται καμία επιπλέον ενέργεια, η έννοια της αποθήκευσης δεν υπάρχει! Αν αποτύχει η
εισαγωγή της πλειάδας, τότε καμία από τις τιμές δεν εισέρχεται στη βάση. Είτε θα εισαχθεί το
σύνολο των τιμών της πλειάδας, είτε τίποτα.
1.8.2 Διαγραφή
Η διαγραφή δεδομένων από τη βάση σημαίνει διαγραφή μιας (ή περισσότερων) πλειάδας σε κάποια
σχέση. ΄Οπως έχει ειπωθεί και στην προηγούμενη ενότητα για την Εισαγωγή δεδομένων, η πλειάδα
είναι σύνολο τιμών που αντιστοιχούν στα γνωρίσματα μιας σχέσης. Αυτό που διαγράφεται είναι το
σύνολο των τιμών που απαρτίζουν την πλειάδα, και όχι κάποια τιμή από την πλειάδα.
Γενικά, η διαγραφή των δεδομένων που προκύπτουν από μια σχεσιακή παράσταση E στη σχέση r,
γράφετε ως:
r ←r−E
40 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
Εδώ εννοείται πως η σχεσιακή παράσταση E έχει συμβατότητα τύπου με τη σχέση r. Η διαγραφή
δεδομένων, όπως είναι φανερό, εμπλέκει τη σχεσιακή πράξη της αφαίρεσης.
Για παράδειγμα η διαγραφή της ταινίας Blade Runner του 1982 με κωδικό 0083658 γίνεται με
σχεσιακή πράξη:
movies ← movies − σΚωδικός=0083658 (movies)
Η SQL χρησιμοποιεί την εντολή DELETE για να διαγράψει εγγραφές από πίνακες:
1 DELETE
2 FROM movies;
Αυτό χρειάζεται προσοχή, επειδή η παραπάνω εντολή διαγράφει όλες τις εγγραφές του πίνακα!
Η παρακάτω εντολή διαγράφει την ταινία Blade Runner του 1982 με κωδικό 0083658 αφήνοντας
ανέπαφες τις υπόλοιπες:
1 DELETE
2 FROM movies
3 WHERE code = 0083658;
΄Οπως και σε άλλες σχεσιακές πράξεις, η παράσταση E δεν είναι υποχρεωτικό να βασίζεται στο
πρωτεύον κλειδί. Για παράδειγμα, να διαγραφούν οι ταινίες με έτος παραγωγής μέχρι και το 1970:
΄Η με την SQL:
1 DELETE
2 FROM movies
3 WHERE year <= 1970;
Η επιτυχής διαγραφή πλειάδων από τη σχέση έχει ως αποτέλεσμα τη μείωση της πληθικότητάς της.
Σε περίπτωση που σχεσιακή παράσταση E επιστρέψει κενό σύνολο, τότε η εφαρμογή της διαγραφής
δεν επηρεάζει καμία από τις πλειάδες της σχέσης. Αυτό σημαίνει πως η πληθικότητα της σχέσης θα
μείνει αμετάβλητη.
1.8.3 Τροποποίηση
Η τροποποίηση (UPDATE) αφορά την αλλαγή κάποιων τιμών μιας πλειάδας (ή και περισσότερων
πλειάδων). Μετά από κάθε πράξη τροποποίησης η πληθικότητα της σχέσης μένει αμετάβλητη: η
τροποποίηση ούτε αυξάνει, ούτε μειώνει τις πλειάδες μιας σχέσης. Απλά αλλάζει (τροποποιεί)
κάποιες τιμές σε κάποια από τα γνωρίσματα μιας σχέσης.
Για την τροποποίηση χρησιμοποιείται ο τελεστής γενικευμένης προβολής:
όπου Fi , είναι είτε η τιμή ενός γνωρίσματος, αν δεν είναι στη λίστα τροποποίησης ή μια σχεσιακή
παράσταση που τροποποιεί τα δεδομένα της σχέσης.
1.8. Ενημέρωση 41
Αυτό βέβαια θα αλλάζει τα δεδομένα σε όλες τις πλειάδες μιας σχέσης, κάτι που γενικά δεν είναι
επιθυμητό. Είναι εξαιρετικά σπάνιο να επιβληθεί η ίδια τιμή σε κάποιο γνώρισμα, σε όλες τις πλειάδες
μιας σχέσης. Αν γνωρίζετε λεπτομέρειες από την ιστορία του σινεμά, θα έχετε παρατηρήσει πως
το σχήμα 1.42 εσφαλμένα δείχνει ως έτος παραγωγής της ταινίας Casablanca το 1952 (το σωστό
είναι 1942). Για να αλλάξει μια (εδώ λανθασμένη) τιμή σε κάποια άλλη χρειάζεται η πράξη της
τροποποίησης. Για παράδειγμα, η τροποποίηση:
θα αλλάξει την χρονολογία παραγωγής στην τιμή 1942 σε όλες τις πλειάδες, δηλαδή για όλες τις
ταινίες. Στην SQL η τροποποίηση δεδομένων σε πίνακες της βάσης, γίνεται με την εντολή UPDATE:
1 UPDATE movies
2 SET year = 1942;
Η εφαρμογή αυτής της εντολής (ή της αντίστοιχης σχεσιακής πράξης) έχει ως αποτέλεσμα την ορθή
τροποποίηση της χρονολογίας παραγωγής της ταινίας Casablanca. Ωστόσο, έχει και ένα σοβαρό
μειονέκτημα: τη λανθασμένη τροποποίηση όλων των υπόλοιπων χρονολογιών, όπως φαίνεται στη
σχήμα 1.45.
Σχήμα 1.45: Πινακοποιημένη μορφή της σχέσης movies, μετά την εφαρμογή της κα-
θολικής τροποποίησης της χρονολογίας.
Συνήθως η τροποποίηση αφορά ένα υποσύνολο των πλειάδων μιας σχέσης. Αυτό σημαίνει πως
πρέπει να προηγηθεί κάποιος περιορισμός στις πλειάδες, πριν εφαρμοστεί η τροποποίηση. ΄Ετσι, για
να τροποποιηθεί το έτος παραγωγής της ταινίας Casablanca στο 1942 (το σχήμα 1.42 εσφαλμένα
δείχνει το έτος 1952) θα πρέπει να γράψουμε:
΄Η με την SQL:
1 UPDATE movies
2 SET year = 1942
3 WHERE code = 0034583;
Προσοχή λοιπόν στην τροποποίηση δεδομένων! Σχεδόν πάντα θα πρέπει να συνοδεύεται με περιο-
ρισμό των πλειάδων.
42 Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr
Τροποποίηση υπάρχει και εκεί όπου πολλές φορές μοιάζει με εισαγωγή δεδομένων. Θεωρείστε πως
η σχέση movies επιτρέπει τιμές NULL στην χρονολογία. Αυτό σημαίνει πως, για παράδειγμα είναι
έγκυρη η σχεσιακή παράσταση, που αφορά την εισαγωγή της ταινίας La Dolce Vita:
΄Οπως έχει αναφερθεί, NULL τιμή σημαίνει είτε πως κάποια άλλη τιμή δεν έχει κάποια εφαρμογή,
είτε (όπως θεωρούμε πως συμβαίνει εδώ) δεν είναι γνωστή η τιμή. ΄Ετσι λοιπόν, τα δεδομένα της
σχέσης movies θα είναι όπως φαίνεται στο σχήμα 1.46.
Σχήμα 1.46: Πινακοποιημένη μορφή της σχέσης movies χωρίς την χρονολογία της
ταινίας Paris Texas.
Στην περίπτωση που εξετάζουμε, το έτος παραγωγής προσωρινά ήταν άγνωστο και η καταχώρηση
της ταινίας έγινε χωρίς κάποια τιμή, δηλαδή NULL. ΄Οταν κάποια στιγμή γίνει γνωστή αυτή η
τιμή (1984), τότε μπορεί να εισαχθεί στη βάση. Θα πρέπει ωστόσο να γίνει κατανοητό πως, σε
όρους σχεσιακού μοντέλου, αυτό αποτελεί τροποποίηση των δεδομένων της βάσης και όχι εισαγωγή
δεδομένων. ΄Οπως επεξηγήθηκε στην παράγραφο 1.8.1, εισαγωγή δεδομένων στη βάση σημαίνει
εισαγωγή πλειάδων σε κάποια σχέση και αύξηση της πληθικότητάς της. Αντίθετα, στην περίπτωση
που εξετάζουμε, η εισαγωγή της χρονολογίας παραγωγής της ταινίας Paris Texas, δηλαδή της τιμής
1984 στο γνώρισμα year , δεν σημαίνει εισαγωγή πλειάδας στη σχέση (επομένως ούτε και αύξηση
της πληθικότητάς της), αλλά τροποποίηση πλειάδας. Η τιμή NULL θα αλλάξει σε 1984. Αυτό δεν
μεταβάλει την πληθικότητα της σχέσης, απλά τροποποιεί κάποιες τιμές σε ένα γνώρισμα της σχέσης.
Η πράξη που γίνεται είναι η τροποποίηση και όχι η εισαγωγή. Στη σχεσιακή άλγεβρα θα γράψουμε:
΄Η με την SQL:
1 UPDATE movies
2 SET year = 1984
3 WHERE code = 0087884;
΄Η με την SQL:
1 INSERT
2 INTO movies (code, title, year)
3 VALUES (884, 'Paris Texas', 1984);
Αυτό δεν μπορεί να συμβεί γιατί η ταινία Paris Texas με κωδικό (πρωτεύον κλειδί) 0087884, υπάρχει
ως πλειάδα της σχέσης movies, και δεν μπορεί να γίνει διπλότυπη εισαγωγή (παραβίαση του κανόνα
ακεραιότητας των οντοτήτων και του πρωτεύοντος κλειδιού).
Τα πρώτα ερωτήματα SQL
Περιεχόμενα
1 Εισαγωγικά σχόλια και παρατηρήσεις
2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα
πίνακα δεδομένων
3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα
πίνακα δεδομένων
4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής
5 Αναζήτηση ημερολογιακών δεδομένων
6 Αναζήτηση κειμένου σε πίνακα δεδομένων
7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές
παραστάσεις κατά την προβολή δεδομένων
8 Ταξινόμηση
2 / 97
Δυο λόγια για την SQL
Υλοποίηση του σχεσιακού μοντέλου δεδομένων του E.F.
Codd, αρχικά ως DSl/Alpha, αργότερα ως SQUARE και
SEQUEL.
3 / 97
4 / 97
Δυο λόγια για την SQL
Υλοποίηση του σχεσιακού μοντέλου δεδομένων του E.F.
Codd, αρχικά ως DSl/Alpha, αργότερα ως SQUARE και
SEQUEL.
Είναι μια διαδικαστική γλώσσα δεδομένων με δύο μέρη:
α) DDL: γλώσσα ορισμού δεδομένων
β) DML: γλώσσα χειρισμού δεδομένων.
Πρώτη εμπορική υλοποίηση ως System R από την IBM
(1970s).
5 / 97
6 / 97
Δυο λόγια για την SQL
Υλοποίηση του σχεσιακού μοντέλου δεδομένων του E.F.
Codd, αρχικά ως DSl/Alpha, αργότερα ως SQUARE και
SEQUEL.
Είναι μια διαδικαστική γλώσσα δεδομένων με δύο μέρη:
α) DDL: γλώσσα ορισμού δεδομένων
β) DML: γλώσσα χειρισμού δεδομένων.
Πρώτη εμπορική υλοποίηση ως System R από την IBM
(1970s).
Η εταιρεία Relational Software Inc. κατασκευάζει το
λογισμικό που αργότερα θα γίνει γνωστό ως Oracle
πόλεμος πάντων μὲν πατήρ ἐστι (Ηράκλειτος)
7 / 97
8 / 97
Δυο λόγια για την SQL
Υλοποίηση του σχεσιακού μοντέλου δεδομένων του E.F.
Codd, αρχικά ως DSl/Alpha, αργότερα ως SQUARE και
SEQUEL.
Είναι μια διαδικαστική γλώσσα δεδομένων με δύο μέρη:
α) DDL: γλώσσα ορισμού δεδομένων
β) DML: γλώσσα χειρισμού δεδομένων.
Πρώτη εμπορική υλοποίηση ως System R από την IBM
(1970s).
Η εταιρεία Relational Software Inc. κατασκευάζει το
λογισμικό που αργότερα θα γίνει γνωστό ως Oracle
πόλεμος πάντων μὲν πατήρ ἐστι (Ηράκλειτος)
Dialects: SQL-86, SQL-89, SQL-99, ..., SQL-2011, ...
NoSQL : Not only SQL
9 / 97
Η βάση company
Μια εταιρεία μελετών έχει πολλούς υπαλλήλους.
Η υπάλληλοι εργάζονται σε διάφορα τμήματα της εταιρείας.
Κάθε τμήμα διοικείται από έναν υπάλληλο.
Οι υπάλληλοι απασχολούνται σε διάφορα έργα μελετών.
Σε κάθε έργο απασχολούνται πιθανά πολλοί υπάλληλοι
από διάφορα τμήματα.
10 / 97
Ο πίνακας employees από τη βάση company
΄Εστω η σχέση employees με σχήμα:
11 / 97
Ονόματα πινάκων
Σε αντίθεση με έναν απλό κειμενογράφο ή ένα λογιστικό
φύλλο, οι πίνακες των βάσεων δεδομένων έχουν πάντα
όνομα
Δεν υπάρχει πίνακας σε βάση δεδομένων που να μην έχει
όνομα
Κάθε πίνακας έχει ένα μοναδικό όνομα σε μια βάση
δεδομένων: δεν υπάρχουν δύο πίνακες με το ίδιο όνομα στην
ίδια βάση δεδομένων
Ο πίνακας που έχουμε δει έχει το όνομα: employees
12 / 97
Πρόσβαση στη βάση company
13 / 97
Περιεχόμενα
1 Εισαγωγικά σχόλια και παρατηρήσεις
2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα
πίνακα δεδομένων
3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα
πίνακα δεδομένων
4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής
5 Αναζήτηση ημερολογιακών δεδομένων
6 Αναζήτηση κειμένου σε πίνακα δεδομένων
7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές
παραστάσεις κατά την προβολή δεδομένων
8 Ταξινόμηση
14 / 97
Το πιο απλό ερώτημα
16 / 97
Επιλογή περισσότερων πεδίων από πίνακα
firstname lastname
Νικηφόρος Διαμαντίδης
Μαρία Αθανασίου
Μαρία Αλεβιζάτου
Χρήστος Βλάσσης
Θεόδωρος Αγγελίνας
Ηλίας Μακρής
17 / 97
18 / 97
Μετονομασία πεδίου στο αποτέλεσμα
19 / 97
20 / 97
Μετονομασία πεδίου στο αποτέλεσμα
FamilyName
Αθανασίου
Μαροπούλου
Ρούσσης
........
21 / 97
22 / 97
Περιεχόμενα
1 Εισαγωγικά σχόλια και παρατηρήσεις
2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα
πίνακα δεδομένων
3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα
πίνακα δεδομένων
4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής
5 Αναζήτηση ημερολογιακών δεδομένων
6 Αναζήτηση κειμένου σε πίνακα δεδομένων
7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές
παραστάσεις κατά την προβολή δεδομένων
8 Ταξινόμηση
23 / 97
Περιορισμός
24 / 97
Περιορισμός
25 / 97
Περιορισμός
26 / 97
Περιορισμός
27 / 97
28 / 97
Τελεστές σύγκρισης
29 / 97
Περιεχόμενα
1 Εισαγωγικά σχόλια και παρατηρήσεις
2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα
πίνακα δεδομένων
3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα
πίνακα δεδομένων
4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής
5 Αναζήτηση ημερολογιακών δεδομένων
6 Αναζήτηση κειμένου σε πίνακα δεδομένων
7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές
παραστάσεις κατά την προβολή δεδομένων
8 Ταξινόμηση
30 / 97
Απλές σχεσιακές πράξεις
Προβολή
Επιλογή μέρους από το σύνολο των γνωρισμάτων της
σχέσης, πχ:
Πlastname,salary (employees)
Περιορισμός
Επιλογή μέρους από τις πλειάδες της σχέσης, πχ:
σempid=243 (employees)
Συνδυασμός
Πlastname,salary (σempid=243 (employees))
31 / 97
32 / 97
Συνδυασμός προβολής και περιορισμού
33 / 97
34 / 97
Συνδυασμός προβολής και περιορισμού
35 / 97
Περιεχόμενα
1 Εισαγωγικά σχόλια και παρατηρήσεις
2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα
πίνακα δεδομένων
3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα
πίνακα δεδομένων
4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής
5 Αναζήτηση ημερολογιακών δεδομένων
6 Αναζήτηση κειμένου σε πίνακα δεδομένων
7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές
παραστάσεις κατά την προβολή δεδομένων
8 Ταξινόμηση
36 / 97
Αναζήτηση με ημερομηνίες
37 / 97
Αναζήτηση με ημερομηνίες
38 / 97
Αναζήτηση με ημερομηνίες
39 / 97
Αναζήτηση με ημερομηνίες
40 / 97
Περιεχόμενα
1 Εισαγωγικά σχόλια και παρατηρήσεις
2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα
πίνακα δεδομένων
3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα
πίνακα δεδομένων
4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής
5 Αναζήτηση ημερολογιακών δεδομένων
6 Αναζήτηση κειμένου σε πίνακα δεδομένων
7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές
παραστάσεις κατά την προβολή δεδομένων
8 Ταξινόμηση
41 / 97
Μαρία – Μαρία
42 / 97
Μαρία – Μαρία
43 / 97
Μαρία – Μαρία
1 SELECT *
2 FROM employees
3 WHERE firstname = ΄Μαρία΄;
44 / 97
Μαρία – Μαρία
1 SELECT *
2 FROM employees
3 WHERE firstname = ΄Μαρία΄;
empid firstname lastname depid salary hiredate
109 Μαρία Αθανασίου 1 2787.69 2003-08-29
153 Μαρία Αλεβιζάτου 2 1321.92 2001-05-15
45 / 97
Σύγκριση με κείμενο
46 / 97
Σύγκριση με κείμενο
47 / 97
Σύγκριση με κείμενο
1 SELECT *
2 FROM employees
3 WHERE lastname >= ΄Παπαδοπούλου΄
48 / 97
Σύγκριση με κείμενο
1 SELECT *
2 FROM employees
3 WHERE lastname >= ΄Παπαδοπούλου΄
empid firstname lastname depid salary hiredate
243 Δέσποινα Παπαδοπούλου 2 1609.52 1999-03-05
412 Αριστείδης Περρής 3 1320.83 1999-11-12
435 Αντώνης Παύλου 3 1231.62 2005-02-05
835 Αθανάσιος Πετράκης 6 1322.01 2001-02-23
901 Κυριάκος Ρούσσης 1 1852.99 2006-11-01
302 Νίκος Στεργιόπουλος 4 1386.05 2002-02-01 49 / 97
431 Κώστας Παπαδόπουλος 3 1100.23 2002-09-16
Αθανάσιος Σταυρακούδης
http://stavrakoudis.econ.uoi.gr
΄Ανοιξη 2014
50 / 97
Περιεχόμενα
1 Εισαγωγικά σχόλια και παρατηρήσεις
2 Απλά ερωτήματα προβολής, επιλέγοντας στήλες από ένα
πίνακα δεδομένων
3 Απλά ερωτήματα περιορισμού, επιλέγοντας εγγραφές από ένα
πίνακα δεδομένων
4 Σχεσιακή άλγεβρα και απλά ερωτήματα επιλογής
5 Αναζήτηση ημερολογιακών δεδομένων
6 Αναζήτηση κειμένου σε πίνακα δεδομένων
7 Επεκτάσεις της προβολής, πράξεις και αλγεβρικές
παραστάσεις κατά την προβολή δεδομένων
8 Ταξινόμηση
51 / 97
Γενικευμένη προβολή
52 / 97
Γενικευμένη προβολή
Εφαρμογή συναρτήσεων
Αριθμητικές, πχ SQRT(salary)
Κειμένου, πχ LEFT(firstname, 1)
Ημερομηνίας πχ YEAR(hiredate)
53 / 97
55 / 97
56 / 97
Παράδειγμα γενικευμένης προβολής – 1
57 / 97
59 / 97
60 / 97
Παράδειγμα γενικευμένης προβολής – 2
1 SELECT *
2 FROM employees
3 WHERE salary*0.04 > 80;
firstname lastname salary
Δέσποινα Παπαδοπούλου 1609.52
Αδαμαντία Αθανασίου 2787.69
Θεόδωρος Αγγελίνας 1908.28
... ... ...
61 / 97
Υπολογισμοί με ποσοστά
Αν:
s1 είναι η αρχική τιμή του
μισθού, όπως είναι
αποθηκευμένη στο πεδίο salary
του πίνακα employees,
s2 είναι η νέα τιμή, αυτή που
προκύπτει μετά την μεταβολή,
v είναι το ποσό της μεταβολής,
σ είναι η σχετική μεταβολή, και
π είναι η σχετική ποσοστιαία
μεταβολή
62 / 97
Υπολογισμοί με ποσοστά
Αν: τότε ισχύουν οι σχέσεις:
s1 είναι η αρχική τιμή του
μισθού, όπως είναι s2 = s1 + v
αποθηκευμένη στο πεδίο salary s 2 − s1
σ=
του πίνακα employees, s1
(s2 − s1 )
s2 είναι η νέα τιμή, αυτή που π= 100
s1
προκύπτει μετά την μεταβολή,
s2 = (1 + σ)s1
v είναι το ποσό της μεταβολής, π
s2 = (1 + )s1
σ είναι η σχετική μεταβολή, και 100
π είναι η σχετική ποσοστιαία
μεταβολή
63 / 97
64 / 97
Παράδειγμα γενικευμένης προβολής – 3
65 / 97
68 / 97
Ταξινόμηση
69 / 97
Ταξινόμηση
70 / 97
Ταξινόμηση
71 / 97
Ταξινόμηση
72 / 97
Ταξινόμηση
73 / 97
Ταξινόμηση
75 / 97
Ταξινόμηση ως προς το τμήμα
76 / 97
78 / 97
79 / 97
Ταξινόμηση ως προς το μισθό
81 / 97
Φθίνουσα ταξινόμηση ημερομηνιών
82 / 97
84 / 97
85 / 97
Διπλή ταξινόμηση: τμήμα και μισθός
87 / 97
Διπλή ταξινόμηση: μισθός και τμήμα
88 / 97
90 / 97
Περίληψη μαθήματος
1 SELECT .. FROM .. WHERE : ανάσυρση δεδομένων.
2 Ο όρος SELECT πρέπει να ακολουθείται από τουλάχιστον
ένα πεδίο.
91 / 97
Περίληψη μαθήματος
1 SELECT .. FROM .. WHERE : ανάσυρση δεδομένων.
2 Ο όρος SELECT πρέπει να ακολουθείται από τουλάχιστον
ένα πεδίο.
3 Το * υποδηλώνει την επιλογή όλων των πεδίων των πινάκων
που δηλώνονται στον όρο FROM.
92 / 97
Περίληψη μαθήματος
1 SELECT .. FROM .. WHERE : ανάσυρση δεδομένων.
2 Ο όρος SELECT πρέπει να ακολουθείται από τουλάχιστον
ένα πεδίο.
3 Το * υποδηλώνει την επιλογή όλων των πεδίων των πινάκων
που δηλώνονται στον όρο FROM.
4 Ο όρος WHERE τοποθετείται μετά το FROM, στην
περίπτωση όπου είναι επιθυμητό να γίνει περιορισμός των
εγγραφών του αποτελέσματος.
93 / 97
Περίληψη μαθήματος
1 SELECT .. FROM .. WHERE : ανάσυρση δεδομένων.
2 Ο όρος SELECT πρέπει να ακολουθείται από τουλάχιστον
ένα πεδίο.
3 Το * υποδηλώνει την επιλογή όλων των πεδίων των πινάκων
που δηλώνονται στον όρο FROM.
4 Ο όρος WHERE τοποθετείται μετά το FROM, στην
περίπτωση όπου είναι επιθυμητό να γίνει περιορισμός των
εγγραφών του αποτελέσματος.
5 Αν υπάρχει όρος WHERE, τότε μόνο οι εγγραφές για τις
οποίες η παράσταση δίνει τιμή TRUE εμφανίζονται στο
αποτέλεσμα του ερωτήματος.
94 / 97
Περίληψη μαθήματος
1 SELECT .. FROM .. WHERE : ανάσυρση δεδομένων.
2 Ο όρος SELECT πρέπει να ακολουθείται από τουλάχιστον
ένα πεδίο.
3 Το * υποδηλώνει την επιλογή όλων των πεδίων των πινάκων
που δηλώνονται στον όρο FROM.
4 Ο όρος WHERE τοποθετείται μετά το FROM, στην
περίπτωση όπου είναι επιθυμητό να γίνει περιορισμός των
εγγραφών του αποτελέσματος.
5 Αν υπάρχει όρος WHERE, τότε μόνο οι εγγραφές για τις
οποίες η παράσταση δίνει τιμή TRUE εμφανίζονται στο
αποτέλεσμα του ερωτήματος.
6 Οι ημερομηνίες ή το κείμενο σε παραστάσεις σύγκρισης
απαιτούν τη χρήση εισαγωγικών.
95 / 97
Περίληψη μαθήματος
1 SELECT .. FROM .. WHERE : ανάσυρση δεδομένων.
2 Ο όρος SELECT πρέπει να ακολουθείται από τουλάχιστον
ένα πεδίο.
3 Το * υποδηλώνει την επιλογή όλων των πεδίων των πινάκων
που δηλώνονται στον όρο FROM.
4 Ο όρος WHERE τοποθετείται μετά το FROM, στην
περίπτωση όπου είναι επιθυμητό να γίνει περιορισμός των
εγγραφών του αποτελέσματος.
5 Αν υπάρχει όρος WHERE, τότε μόνο οι εγγραφές για τις
οποίες η παράσταση δίνει τιμή TRUE εμφανίζονται στο
αποτέλεσμα του ερωτήματος.
6 Οι ημερομηνίες ή το κείμενο σε παραστάσεις σύγκρισης
απαιτούν τη χρήση εισαγωγικών.
7 Τα αποτελέσματα ενός ερωτήματος μπορούν να
ταξινομηθούν με τον όρο ORDER BY.
96 / 97
( 1 / 21
(stavrakoudis.econ.uoi.gr) 1 / 21
Απαλοιφή διπλοεγγραφών
(stavrakoudis.econ.uoi.gr) 2 / 21
Συνδυασμός πεδίων
SELECT DISTINCT d e p i d , s a l a r y
FROM e m p l o y e e s ;
(stavrakoudis.econ.uoi.gr) 3 / 21
DISTINCT και προβολή στη σχεσιακή άλγεβρα
Η σχεσιακή πράξη της προβολής, πχ:
Πdepid (employees)
SELECT DISTINCT d e p i d
FROM e m p l o y e e s ;
SELECT d e p i d
FROM e m p l o y e e s ;
SELECT DISTINCT d e p i d
FROM e m p l o y e e s
WHERE s a l a r y ∗ 0 . 0 3 5 > 8 0 ;
(stavrakoudis.econ.uoi.gr) 6 / 21
Παραδείγματα με NULL
SELECT ∗
FROM e m p l o y e e s
WHERE s a l a r y I S NULL;
SELECT ∗
FROM e m p l o y e e s
WHERE s a l a r y I S NOT NULL;
(stavrakoudis.econ.uoi.gr) 7 / 21
Ταίριασμα κειμένου
SELECT ∗
FROM e m p l o y e e s
WHERE f i r s t n a m e = ’ NIKH ’ ;
(stavrakoudis.econ.uoi.gr) 8 / 21
SELECT ∗
FROM e m p l o y e e s
WHERE f i r s t n a m e LIKE ’N%’ ;
SELECT ∗
FROM e m p l o y e e s
WHERE f i r s t n a m e LIKE ’A%A ’ ;
(stavrakoudis.econ.uoi.gr) 9 / 21
LIKE: χαρακτήρες υποκατάστασης
SELECT ∗
FROM e m p l o y e e s
WHERE f i r s t n a m e LIKE ’ A ’;
(stavrakoudis.econ.uoi.gr) 10 / 21
Ο τελεστής AND
SELECT ∗
FROM employees
WHERE depid = 4
AND s a l a r y >= 1 0 0 0 ;
(stavrakoudis.econ.uoi.gr) 12 / 21
Ο τελεστής OR
SELECT ∗
FROM e m p l o y e e s
WHERE d e p i d = 4
OR s a l a r y >= 1 0 0 0 ;
Σωστή απάντηση
(stavrakoudis.econ.uoi.gr) 15 / 21
Σύνθετες παραστάσεις και παρενθέσεις
Να βρεθούν όλες οι λεπτομέρειες των υπαλλήλων που δεν
προσλήφθηκαν το 2002 και εργάζονται στο τμήμα 3
Λάθος απάντηση
SELECT ∗
FROM employees
WHERE depid = 3
AND h i r e d a t e < ’ 2002−01−01 ’
OR h i r e d a t e > ’ 2002−12−31 ’ ;
Σωστή απάντηση
SELECT ∗
FROM employees
WHERE depid = 3
AND ( h i r e d a t e < ’ 2002−01−01 ’
OR h i r e d a t e > ’ 2002−12−31 ’ ) ;
(stavrakoudis.econ.uoi.gr) 16 / 21
Ο τελεστής συνόλου IN
SELECT ∗
FROM employees
WHERE depid = 2
OR depid = 3
OR depid = 4;
(stavrakoudis.econ.uoi.gr) 17 / 21
΄Αρνηση του IN
SELECT ∗
FROM e m p l o y e e s
WHERE d e p i d NOT IN ( 2 , 3 , 4 ) ;
SELECT ∗
FROM employees
WHERE d e p i d != 2
AND d e p i d != 3
AND d e p i d != 4 ;
(stavrakoudis.econ.uoi.gr) 18 / 21
SELECT ∗
FROM e m p l o y e e s
WHERE s a l a r y BETWEEN 1100 AND 1 2 0 0 ;
(stavrakoudis.econ.uoi.gr) 19 / 21
Ο τελεστής περιοχής τιμών για ημερομηνίες
SELECT DISTINCT d e p i d
FROM e m p l o y e e s
WHERE h i r e d a t e BETWEEN ’ 2004−01−01 ’ AND ’ 2004−12−31
depid
4
3
(stavrakoudis.econ.uoi.gr) 20 / 21
Περιεχόμενα
2 Συναρτήσεις συνάθροισης
4 Ομαδοποίηση εγγραφών
2 / 56
Σκοπός του μαθήματος
Συναρτήσεις συνάθροισης
Υπάρχουν πέντε βασικές συναρτήσεις συνάθροισης, που
υποστηρίζονται από όλα τα συστήματα SQL
COUNT για την καταμέτρηση πλήθους
SUM για το άθροισμα
AVG για το μέσο όρο
MIN για την ελάχιστη τιμή
MAX για την μέγιστη τιμή
Υπάρχουν αρκετές άλλες συναρτήσεις (πχ STDEV, VAR),
αλλά η υποστήριξή τους ποικίλει από σύστημα σε σύστημα.
4 / 56
Διάγραμμα σύνταξης των συναρτήσεων
συνάθροισης
COUNT(*)
DISTINCT
MIN(έκφραση)
MAX(έκφραση)
AVG( έκφραση )
SUM( έκφραση )
5 / 56
6 / 56
Περιεχόμενα
2 Συναρτήσεις συνάθροισης
4 Ομαδοποίηση εγγραφών
7 / 56
8 / 56
Παράδειγμα αθροίσματος στήλης
Να βρεθεί το άθροισμα των μισθών όλων των
υπαλλήλων
Gsum(salary ) (employees)
1 SELECT SUM(salary)
2 FROM employees;
3
4 | SUM(salary) |
5 |-------------|
6 | 38232.03 |
9 / 56
1 SELECT SUM(salary)
2 FROM employees;
3
4 | SUM(salary) |
5 |-------------|
6 | 38232.03 |
10 / 56
Παράδειγμα αθροίσματος υπό συνθήκη
11 / 56
1 SELECT SUM(salary)
2 FROM employees
3 WHERE depid = 4;
4
5 | SUM(salary) |
6 |-------------|
7 | 3542.80 |
12 / 56
Παράδειγμα αθροίσματος γενικευμένης προβολής
13 / 56
14 / 56
Παράδειγμα αθροίσματος γενικευμένης προβολής
16 / 56
Παράδειγμα υπολογισμού μέσου όρου
1 SELECT AVG(salary)
2 FROM employees;
3
4 | AVG(salary) |
5 ---------------
6 | 1416.001111 |
17 / 56
18 / 56
Μέσος όρος με περιορισμό εγγραφών
1 SELECT AVG(salary)
2 FROM employees
3 WHERE depid = 3;
4
5 | AVG(salary) |
6 ---------------
7 | 1311.651250 |
19 / 56
Ελάχιστη τιμή
20 / 56
Ελάχιστη τιμή
1 SELECT MIN(salary)
2 FROM employees
3 WHERE depid = 3;
4
5 | MIN(salary) |
6 ---------------
7 | 1050.96 |
21 / 56
Μέγιστη τιμή
1 SELECT MAX(hiredate)
2 FROM employees;
3
4 | MAX(hiredate) |
5 -----------------
6 | 2004-10-05 |
22 / 56
Καταμέτρηση πλήθους
23 / 56
Καταμέτρηση πλήθους
1 SELECT COUNT(empid)
2 FROM employees
3 WHERE depid = 4;
4
5 | COUNT(empid) |
6 ----------------
7 | 5 |
24 / 56
COUNT(*)
5 | COUNT(*) |
6 ----------------
7 | 5 |
26 / 56
Δύο συναρτήσεις στο ίδιο ερώτημα
1 SELECT MAX(salary)-MIN(salary)
2 FROM employees
3 WHERE depid = 4;
4
5 | MAX(salary)-MIN(salary) |
6 ---------------------------
7 | 331.34 |
27 / 56
Περιεχόμενα
2 Συναρτήσεις συνάθροισης
4 Ομαδοποίηση εγγραφών
28 / 56
Πλήθος μισθοδοτούμενων υπαλλήλων
Τιμές NULL
5 | COUNT(salary) | 5 | count(empid) |
6 ----------------- 6 ----------------
7 | 0 | 7 | 3 |
4 | COUNT(depid) |
5 ----------------
6 | 30 |
31 / 56
4 | COUNT(DISTINCT depid) |
5 -------------------------
6 | 6 |
32 / 56
Περιεχόμενα
2 Συναρτήσεις συνάθροισης
4 Ομαδοποίηση εγγραφών
33 / 56
Ομαδοποίηση
Μέχρι τώρα είδαμε απλά ερωτήματα, η απάντηση των
οποίων ήταν μία τιμή.
Πολλές φορές το ζητούμενο είναι μια λίστα τιμών, μία
τιμή ανά κατηγορία.
Πχ ο μέσος μισθός ανά τμήμα, ή ο αρχαιότερος
υπάλληλος ανά τμήμα
Για αυτές τις περιπτώσεις θα χρειαστούμε μια νέα
φράση: GROUP BY
34 / 56
Πλήθος υπαλλήλων ανά τμήμα
Πλήθος υπαλλήλων ανά τμήμα
depid Gcount(∗) (employees)
35 / 56
depid COUNT(*)
1 3
2 4
3 9
4 5
5 2
6 7
36 / 56
Πλήθος υπαλλήλων ανά τμήμα
Πλήθος υπαλλήλων ανά τμήμα
depid Gcount(∗) (employees)
38 / 56
Μικρότερο ανά ...
5 depid MIN(salary)
6 -------------------
7 1 1754.67
8 2 1105.04
9 3 1050.96
10 4 1054.71
11 5 1051.92
12 6 1100.13
39 / 56
depid Gsum(salary )
(σhiredate≥′ 2004−01−01′ ∧hiredate≤′ 2004−12−31′ (employees))
40 / 56
Περιορισμός και ομαδοποίηση
depid Gsum(salary )
(σhiredate≥′ 2004−01−01′ ∧hiredate≤′ 2004−12−31′ (employees))
41 / 56
42 / 56
Ομαδοποίηση και ταξινόμηση
Να βρεθεί το άθροισμα των μισθών των
υπαλλήλων ανά τμήμα με φθίνουσα ταξινόμηση
ως προς το άθροισμα των μισθών
1 SELECT depid, SUM(salary)
2 FROM employees
3 GROUP BY depid
4 ORDER BY SUM(salary) DESC;
5 | depid | SUM(salary) |
6 |-------|-------------|
7 | 3 | 10493.21 |
8 | 6 | 9853.82 |
9 | 1 | 6395.35 |
10 | 2 | 5360.28 |
11 | 4 | 3542.80 |
12 | 5 | 2586.57 |
43 / 56
Περιεχόμενα
2 Συναρτήσεις συνάθροισης
4 Ομαδοποίηση εγγραφών
44 / 56
Περιορισμός μετά την ομαδοποίηση
Τμήματα με περισσότερους από 4 υπαλλήλους
σcount(depid)>4 depid Gcount(empid) (employees)
45 / 56
46 / 56
Περιορισμός μετά την ομαδοποίηση
Τμήματα με περισσότερους από 4 υπαλλήλους
σcount(depid)>4 depid Gcount(empid) (employees)
48 / 56
Περιορισμός πριν και μετά την ομαδοποίηση
1 SELECT depid
2 FROM employees
3 WHERE salary > 1200
4 GROUP BY depid
5 HAVING COUNT(depid) > 3;
6
7 | depid |
8 |-------|
9 | 3 |
10 | 6 |
49 / 56
Περιεχόμενα
2 Συναρτήσεις συνάθροισης
4 Ομαδοποίηση εγγραφών
50 / 56
ROLLUP (μερικά αθροίσματα)
Πλήθος των υπαλλήλων ανά τμήμα και το
συνολικό πλήθος των υπαλλήλων της εταιρείας
51 / 56
52 / 56
ROLLUP (μερικά αθροίσματα)
Πλήθος των υπαλλήλων ανά τμήμα και το
συνολικό πλήθος των υπαλλήλων της εταιρείας
1 SELECT depid, COUNT(*)
2 FROM employees
3 GROUP BY depid WITH ROLLUP;
depid COUNT(*)
1 3 WITH ROLLUP : μετά το
2 4 πεδίο που ακολουθεί τον όρο
3 9 GROUP BY.
4 5 Προσοχή την τιμή NULL στο
5 2 τέλος που αντιστοιχεί στο
6 7 σύνολο των εγγραφών.
NULL 30
53 / 56
54 / 56
Αναστροφή της λίστας πεδίων
Ο μέσος μισθός των υπαλλήλων ανά έτος πρόσληψης και
τμήμα για τμήματα με κωδικό 2 και 6
ΜΗ ΕΙΝΑΙ ΒΑΣΙΛΙΚΗΝ
ΑΤΡΑΠΟΝ ΕΠΙ
ΓΕΩΜΕΤΡΙΑΝ
2 / 30
Το σχήμα της βάσης company
3 / 30
departments, τα
τμήματα της εταιρείας
employees, οι υπάλληλοι
της εταιρείας
projects, τα έργα που
εκτελεί η εταιρεία
workson, η απασχόληση
των υπαλλήλων στα
έργα
4 / 30
Πρωτεύοντα και ξένα κλειδιά
5 / 30
departments.depid = employees.depid
6 / 30
Συσχέτιση employees και projects
7 / 30
8 / 30
Το σχήμα της βάσης company
departments, τα
τμήματα της εταιρείας
employees, οι υπάλληλοι
της εταιρείας
projects, τα έργα που
εκτελεί η εταιρεία
workson, η απασχόληση
των υπαλλήλων στα
έργα
9 / 30
departments × employees
10 / 30
Καρτεσιανό γινόμενο, στην SQL
departments × employees
SELECT ∗
FROM d e p a r t m e n t s , e m p l o y e e s ;
11 / 30
departments ⊲⊳ employees
SELECT ∗
FROM d e p a r t m e n t s NATURAL JOIN e m p l o y e e s ;
12 / 30
Σύζευξη θήτα στην SQL
SELECT ∗
FROM d e p a r t m e n t s , e m p l o y e e s
WHERE d e p a r t m e n t s . d e p i d = e m p l o y e e s . d e p i d ;
SELECT ∗
FROM d e p a r t m e n t s INNER JOIN e m p l o y e e s
ON d e p a r t m e n t s . d e p i d = e m p l o y e e s . d e p i d ;
14 / 30
Παράδειγμα INNER JOIN – 1
Να δοθεί το επώνυμο των υπαλλήλων και το όνομα του τμήματος στο
οποίο εργάζονται
Πfirstname,lastname,depname
(departments ⊲⊳departments.depid=employees.depid employees)
SELECT e m p l o y e e s . l a s t n a m e , d e p a r t m e n t s . depname
FROM d e p a r t m e n t s INNER JOIN e m p l o y e e s
ON e m p l o y e e s . d e p i d = d e p a r t m e n t s . d e p i d ;
Μετονομασία πινάκων
Με χρήση του AS
FROM e m p l o y e e s AS e
FROM e m p l o y e e s e
Στη σύζευξη
16 / 30
Παράδειγμα INNER JOIN – 2
SELECT e . f i r s t n a m e , e . l a s t n a m e , d . depname , e . s a l a r y
FROM e m p l o y e e s e INNER JOIN d e p a r t m e n t s d
ON e . d e p i d = d . d e p i d ;
SELECT e . f i r s t n a m e , e . l a s t n a m e , d . depname , e . s a l a r y
FROM e m p l o y e e s e INNER JOIN d e p a r t m e n t s d
ON e . d e p i d = d . d e p i d
WHERE e . s a l a r y BETWEEN 1050 AND 1 3 0 0 ;
SELECT e . empid , e . f i r s t n a m e , e . l a s t n a m e
FROM e m p l o y e e s e INNER JOIN workson w
ON e . empid = w . empid
WHERE w . p r o i d = 38
ORDER BY e . l a s t n a m e ASC;
SELECT e . f i r s t n a m e , e . l a s t n a m e , p . p r o i d , p . b u d g e t
FROM ( e m p l o y e e s e INNER JOIN workson w
ON e . empid = w . empid )
INNER JOIN p r o j e c t s p
ON p . p r o i d = w . p r o i d
WHERE e . s a l a r y > 1 7 0 0 ;
20 / 30
Πολλά προς πολλά – Εναλλακτικός τρόπος
21 / 30
Ερώτημα με 4 πίνακες
Να βρεθεί το όνομα των υπαλλήλων και του τμήματος των υπαλλήλων
για όλους τους υπαλλήλους που προσλήφθηκαν μετά τις 1/1/2005 και
απασχολούνται σε έργα με προϋπολογισμό πάνω από 300,000 €
Πfirstname,lastname,depname (σhiredate>′ 2004−01−01′ ∧budget>100000
(̺d (departments) ⊲⊳d.depid=e.depid ̺e (employees)
⊲⊳e.empid=w .empid ̺w (workson) ⊲⊳w .proid=p.proid ̺p (projects))
SELECT e . f i r s t n a m e , e . l a s t n a m e , d . depname
FROM ( ( d e p a r t m e n t s d INNER JOIN e m p l o y e e s e
ON d . d e p i d = e . d e p i d )
INNER JOIN workson w
ON e . empid = w . empid )
INNER JOIN p r o j e c t s p
ON p . p r o i d = w . p r o i d
WHERE e . h i r e d a t e > ’ 2004−01−01 ’
AND p . b u d g e t > 3 0 0 0 0 0 ;
22 / 30
Παράδειγμα εξωτερικής σύζευξης – το πρόβλημα
SELECT e . f i r s t n a m e , e . l a s t n a m e , w . p r o i d
FROM e m p l o y e e s e INNER JOIN workson w
ON e . empid = w . empid
WHERE e . d e p i d = 4 ;
23 / 30
SELECT e . f i r s t n a m e , e . l a s t n a m e , w . p r o i d
FROM e m p l o y e e s e LEFT JOIN workson w
ON e . empid = w . empid
WHERE e . d e p i d = 4 ;
SELECT e . f i r s t n a m e , e . l a s t n a m e , w . p r o i d
FROM e m p l o y e e s e LEFT JOIN workson w
ON e . empid = w . empid
WHERE e . d e p i d = 4 ;
Δεξιά σύζευξη
Πe.firstname,e.lastname,w .proid (σe.depid=4
(̺w (workson) ⊲⊳ w .empid=e.empid ̺e (employees)))
SELECT e . f i r s t n a m e , e . l a s t n a m e , w . p r o i d
FROM workson w RIGHT JOIN e m p l o y e e s e
ON w . empid = e . empid
WHERE e . d e p i d = 4 ;
25 / 30
26 / 30
Εξωτερική σύζευξη και διαφορά
Ποιοι υπάλληλοι δεν απασχολούνται σε κανένα έργο;
Πe.∗ (σw .empid IS NULL
(̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)))
SELECT e . ∗
FROM e m p l o y e e s e LEFT JOIN workson w
ON e . empid = w . empid
WHERE w . empid I S NULL;
29 / 30
Περιεχόμενα
6 Ασκήσεις επανάληψης
2 / 128
Ομαδοποίηση 1:Ν
3 / 128
Ομαδοποίηση 1:Ν
4 / 128
Ομαδοποίηση 1:Ν
6 / 128
΄Εχουμε ξαναδεί παρόμοιο παράδειγμα
7 / 128
Τρόπος σκέψης
Χρειαζόμαστε το όνομα τμήματος, δηλαδή το πεδίο
depname του πίνακα departments.
Οι υπάλληλοι αποθηκεύονται στον πίνακα employees, και
γνωρίζουμε ότι το πεδίο depid του πίνακα αυτού μας
πληροφορεί για το τμήμα όπου απασχολείται κάθε
υπάλληλος.
8 / 128
Ομαδοποίηση 1:Ν – βήμα 2
Οι πίνακες departments και employees έχουν συσχέτιση ένα
προς πολλά, το πεδίο employees.depid είναι ξένο κλειδί.
9 / 128
Σύνδεση πινάκων:
departments ⊲⊳departments.depid=employees.depid employees
10 / 128
Ομαδοποίηση 1:Ν – βήμα 2
Οι πίνακες departments και employees έχουν συσχέτιση ένα
προς πολλά, το πεδίο employees.depid είναι ξένο κλειδί.
Σύνδεση πινάκων:
departments ⊲⊳departments.depid=employees.depid employees
Περιορισμός εγγραφών
Υπάρχει ο περιορισμός για τον μισθό των υπαλλήλων στο
ερώτημα. Επομένως πρέπει να συμπληρωθεί ο όρος WHERE:
σe.salary >1300 (̺d (departments) ⊲⊳d.depid=e.depid ̺e (employees))
12 / 128
Ομαδοποίηση 1:Ν – βήμα 3
Περιορισμός εγγραφών
Υπάρχει ο περιορισμός για τον μισθό των υπαλλήλων στο
ερώτημα. Επομένως πρέπει να συμπληρωθεί ο όρος WHERE:
σe.salary >1300 (̺d (departments) ⊲⊳d.depid=e.depid ̺e (employees))
13 / 128
14 / 128
Ομαδοποίηση 1:Ν – βήμα 4
15 / 128
Προβολή πεδίων
Από το σύνολο των πεδίων που διατίθενται μετά τη σύζευξη
των πινάκων employees και departments μας ζητούνται
μόνο το όνομα του τμήματος (άρα
departments.depname) και το πλήθος εργαζομένων ανά
τμήμα, δηλαδή COUNT(employees.depid):
d.depname Gcount(∗) (σe.salary >1300
(̺d (departments) ⊲⊳d.depid=e.depid ̺e (employees)))
16 / 128
Ομαδοποίηση 1:Ν – βήμα 5
Προβολή πεδίων
Από το σύνολο των πεδίων που διατίθενται μετά τη σύζευξη
των πινάκων employees και departments μας ζητούνται
μόνο το όνομα του τμήματος (άρα
departments.depname) και το πλήθος εργαζομένων ανά
τμήμα, δηλαδή COUNT(employees.depid):
d.depname Gcount(∗) (σe.salary >1300
(̺d (departments) ⊲⊳d.depid=e.depid ̺e (employees)))
18 / 128
Ομαδοποίηση 1:Ν – βήμα 6
19 / 128
20 / 128
Ομαδοποίηση 1:Ν – βήμα 6
21 / 128
22 / 128
Ομαδοποίηση 1:Ν – Τελική διατύπωση
23 / 128
24 / 128
Ομαδοποίηση 1:Ν – Τελική διατύπωση
25 / 128
26 / 128
Ομαδοποίηση 1:Ν – Τελική διατύπωση
Να βρεθεί το πλήθος των εργαζομένων με μισθό
μεγαλύτερο των 1300 € ανά όνομα τμήματος
1 SELECT d.depname, COUNT(e.depid)
2 FROM employees e INNER JOIN departments d
3 ON e.depid = d.depid
4 WHERE e.salary > 1300
5 GROUP BY d.depname
6
27 / 128
7 depname COUNT(*)
8 ------------------------------------------
9 Γραμματείας 1
10 Διοίκησης/Επίβλεψης 3
11 Εξωτερικών συνεργατών 1
12 Επιστημόνων/Μηχανικών 3
13 Μάνατζμεντ/Πωλήσεων 5
14 Οικονομολόγων/Λογιστών 3
28 / 128
Περιεχόμενα
6 Ασκήσεις επανάληψης
29 / 128
30 / 128
Ομαδοποίηση 1:Ν με 3 πίνακες
31 / 128
32 / 128
Ομαδοποίηση 1:Ν με 3 πίνακες – Ανάλυση
33 / 128
34 / 128
Ομαδοποίηση 1:Ν με 3 πίνακες – Ανάλυση
35 / 128
37 / 128
Ομαδοποίηση εγγραφών
Στο ερώτημα υπάρχει ο περιορισμός για υπαλλήλους που
εργάζονται σε 2 ακριβώς έργα. Απαιτείται η ομαδοποίηση
ως προς τα πεδία που ζητούνται στο ερώτημα
e.empid, e.firstname, e.lastname, d.depname:
e.empid,e.firstname,e.lastname,d.depname Gcount(∗)
(̺d (departments) ⊲⊳d.depid=e.depid ̺e (employees)
⊲⊳e.empid=w .empid ̺w (workson))
39 / 128
Ομαδοποίηση εγγραφών
Στο ερώτημα υπάρχει ο περιορισμός για υπαλλήλους που
εργάζονται σε 2 ακριβώς έργα. Απαιτείται η ομαδοποίηση
ως προς τα πεδία που ζητούνται στο ερώτημα
e.empid, e.firstname, e.lastname, d.depname:
e.empid,e.firstname,e.lastname,d.depname Gcount(∗)
(̺d (departments) ⊲⊳d.depid=e.depid ̺e (employees)
⊲⊳e.empid=w .empid ̺w (workson))
41 / 128
43 / 128
44 / 128
Περιεχόμενα
6 Ασκήσεις επανάληψης
45 / 128
46 / 128
Σύζευξη 3 πινάκων, πολλά προς πολλά
Να βρεθεί ο κωδικός και ο τίτλος των έργων στα
οποία απασχολούνται ακριβώς 3 υπάλληλοι του
τμήματος 2
1 proid title
2 --------------------------------------
3 21 Παροχή συμβουλευτικών υπηρεσιών...
4 38 Μελέτη εναλλακτικών λύσεων για...
47 / 128
48 / 128
Σύζευξη 3 πινάκων, πολλά προς πολλά
Να βρεθεί ο κωδικός και ο τίτλος των έργων στα
οποία απασχολούνται ακριβώς 3 υπάλληλοι του
τμήματος 2
1 proid title
2 --------------------------------------
3 21 Παροχή συμβουλευτικών υπηρεσιών...
4 38 Μελέτη εναλλακτικών λύσεων για...
49 / 128
50 / 128
Σύζευξη 3 πινάκων, πολλά προς πολλά
Να βρεθεί ο κωδικός και ο τίτλος των έργων στα
οποία απασχολούνται ακριβώς 3 υπάλληλοι του
τμήματος 2
1 proid title
2 --------------------------------------
3 21 Παροχή συμβουλευτικών υπηρεσιών...
4 38 Μελέτη εναλλακτικών λύσεων για...
51 / 128
52 / 128
Πολλά προς πολλά – πίνακες
53 / 128
54 / 128
Πολλά προς πολλά – πίνακες
55 / 128
57 / 128
58 / 128
Πολλά προς πολλά – βήμα 1
Σύζευξη employees, workson, projects
̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)
⊲⊳w .proid=p.proid ̺p (projects)
59 / 128
60 / 128
Πολλά προς πολλά – βήμα 2
Περιορισμός εγγραφών e.depid=2
Υπάρχει ο περιορισμός που αφορά τους υπαλλήλους του
τμήματος 2:
σe.depid=2 (
̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)
⊲⊳w .proid=p.proid ̺p (projects))
1 FROM (employees e INNER JOIN workson w
2 ON e.empid = w.empid)
3 INNER JOIN projects p
4 ON w.proid = p.proid
5 WHERE e.depid = 2
61 / 128
62 / 128
Πολλά προς πολλά – βήμα 3
Ομαδοποίηση εγγραφών
Στο ερώτημα υπάρχει ο περιορισμός για ακριβώς 3
συμμετοχές υπαλλήλων σε έργα. Απαιτείται η εφαρμογή
ομαδοποίησης εγγραφών ως προς τα ζητούμενα του
ερωτήματος:
p.proid,p.title Gcount(∗) (σe.depid=2 (
̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)
⊲⊳w .proid=p.proid ̺p (projects)))
63 / 128
65 / 128
67 / 128
68 / 128
Περιεχόμενα
6 Ασκήσεις επανάληψης
69 / 128
70 / 128
Πλήθος υπαλλήλων ανά έργο
Να βρεθεί το πλήθος των των συμμετοχών σε έργα
των υπαλλήλων του τμήματος 4, ανά κωδικό και
τίτλο έργου στα οποία απασχολούνται
1 proid title COUNT(*)
2 ------------------------------------------------
3 12 Επίβλεψη κατασκευής σταθμού... 2
4 14 Μελέτη και επίβλεψη κατασκευής... 1
5 38 Μελέτη εναλλακτικών λύσεων για... 1
6 43 Μελέτη οικονομικής βιωσιμότητας... 1
71 / 128
72 / 128
Πλήθος υπαλλήλων ανά έργο
Να βρεθεί το πλήθος των των συμμετοχών σε έργα
των υπαλλήλων του τμήματος 4, ανά κωδικό και
τίτλο έργου στα οποία απασχολούνται
1 proid title COUNT(*)
2 ------------------------------------------------
3 12 Επίβλεψη κατασκευής σταθμού... 2
4 14 Μελέτη και επίβλεψη κατασκευής... 1
5 38 Μελέτη εναλλακτικών λύσεων για... 1
6 43 Μελέτη οικονομικής βιωσιμότητας... 1
73 / 128
74 / 128
Πλήθος υπαλλήλων ανά έργο
Να βρεθεί το πλήθος των των συμμετοχών σε έργα
των υπαλλήλων του τμήματος 4, ανά κωδικό και
τίτλο έργου στα οποία απασχολούνται
1 proid title COUNT(*)
2 ------------------------------------------------
3 12 Επίβλεψη κατασκευής σταθμού... 2
4 14 Μελέτη και επίβλεψη κατασκευής... 1
5 38 Μελέτη εναλλακτικών λύσεων για... 1
6 43 Μελέτη οικονομικής βιωσιμότητας... 1
76 / 128
Πλήθος υπαλλήλων ανά έργο
77 / 128
78 / 128
Πλήθος υπαλλήλων ανά έργο
79 / 128
80 / 128
Πλήθος υπαλλήλων ανά έργο – βήμα 1
Σύζευξη πινάκων
̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)
⊲⊳w .proid=p.proid ̺p (projects)
81 / 128
82 / 128
Πλήθος υπαλλήλων ανά έργο – βήμα 2
Περιορισμός εγγραφών e.depid=4
Υπάρχει ο περιορισμός που αφορά τους υπαλλήλους του
τμήματος 4:
σe.depid=4 (
̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)
⊲⊳w .proid=p.proid ̺p (projects))
83 / 128
84 / 128
Πλήθος υπαλλήλων ανά έργο – βήμα 3
Ομαδοποίηση
«πλήθος των υπαλλήλων ανά έργο», δηλαδή
ομαδοποίηση:
p.proid,p.title Gcount(∗) (σe.depid=4 (
̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)
⊲⊳w .proid=p.proid ̺p (projects)))
85 / 128
86 / 128
Πλήθος υπαλλήλων ανά έργο – βήμα 4
Τελική διατύπωση
p.proid,p.title Gcount(∗) (σe.depid=2 (
̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)
⊲⊳w .proid=p.proid ̺p (projects)))
87 / 128
88 / 128
Περιεχόμενα
6 Ασκήσεις επανάληψης
89 / 128
Πρόσληψη το 2002
Να βρεθεί το πλήθος των υπαλλήλων που
προσλήφθηκαν μέσα στο 2002 και απασχολούνται
σε έργα με βαθμό προόδου μικρότερο του 75%
90 / 128
Πρόσληψη το 2002
Να βρεθεί το πλήθος των υπαλλήλων που
προσλήφθηκαν μέσα στο 2002 και απασχολούνται
σε έργα με βαθμό προόδου μικρότερο του 75%
1 COUNT(DISTINCT e.empid)
2 ------------------------
3 3
91 / 128
Πρόσληψη το 2002
Να βρεθεί το πλήθος των υπαλλήλων που
προσλήφθηκαν μέσα στο 2002 και απασχολούνται
σε έργα με βαθμό προόδου μικρότερο του 75%
1 COUNT(DISTINCT e.empid)
2 ------------------------
3 3
92 / 128
Πρόσληψη το 2002
Να βρεθεί το πλήθος των υπαλλήλων που
προσλήφθηκαν μέσα στο 2002 και απασχολούνται
σε έργα με βαθμό προόδου μικρότερο του 75%
1 COUNT(DISTINCT e.empid)
2 ------------------------
3 3
93 / 128
Πρόσληψη το 2002
Να βρεθεί το πλήθος των υπαλλήλων που
προσλήφθηκαν μέσα στο 2002 και απασχολούνται
σε έργα με βαθμό προόδου μικρότερο του 75%
1 COUNT(DISTINCT e.empid)
2 ------------------------
3 3
94 / 128
Πρόσληψη το 2002
Να βρεθεί το πλήθος των υπαλλήλων που
προσλήφθηκαν μέσα στο 2002 και απασχολούνται
σε έργα με βαθμό προόδου μικρότερο του 75%
1 COUNT(DISTINCT e.empid)
2 ------------------------
3 3
95 / 128
Πρόσληψη το 2002
Να βρεθεί το πλήθος των υπαλλήλων που
προσλήφθηκαν μέσα στο 2002 και απασχολούνται
σε έργα με βαθμό προόδου μικρότερο του 75%
1 COUNT(DISTINCT e.empid)
2 ------------------------
3 3
96 / 128
Πρόσληψη το 2002
97 / 128
Πρόσληψη το 2002
98 / 128
Πρόσληψη το 2002
99 / 128
Πρόσληψη το 2002
100 / 128
Πρόσληψη το 2002 – βήμα 1
Σύζευξη πινάκων
̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)
⊲⊳w .proid=p.proid ̺p (projects)
101 / 128
102 / 128
Πρόσληψη το 2002 – βήμα 1
Σύζευξη πινάκων
̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)
⊲⊳w .proid=p.proid ̺p (projects)
103 / 128
104 / 128
Πρόσληψη το 2002 – βήμα 2
Περιορισμός εγγραφών
Περιορισμός με βάση την ημερομηνία πρόσληψης και την
πρόοδο έργου:
σσe.hiredate≥′ 2002−01−01′ ∧e.hiredate≤′ 2002−12−31′ ∧p.progress>75 (
̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)
⊲⊳w .proid=p.proid ̺p (projects))
1 FROM (employees e INNER JOIN workson w
2 ON e.empid = w.empid)
3 INNER JOIN projects p
4 ON w.proid = p.proid
5 WHERE e.hiredate BETWEEN ’2002-01-01’ AND ’2002-12-31’
6 AND p.progress < 75
105 / 128
106 / 128
Πρόσληψη το 2002 – τελική διατύπωση
Καταμέτρηση πλήθους
Gcount(e.empid) σσe.hiredate≥′ 2002−01−01′ ∧e.hiredate≤′ 2002−12−31′ ∧p.progress>75 (
̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)
⊲⊳w .proid=p.proid ̺p (projects))
1 SELECT COUNT(DISTINCT e.empid)
2 FROM (employees e INNER JOIN workson w
3 ON e.empid = w.empid)
4 INNER JOIN projects p
5 ON p.proid = w.proid
6 WHERE e.hiredate BETWEEN ’2002-01-01’ AND ’2002-12-31’
7 AND p.progress < 75;
8
9 COUNT(DISTINCT e.empid)
10 ------------------------
11 3 107 / 128
108 / 128
Πρόσληψη το 2002 – λάθος διατύπωση
Χωρίς απαλοιφή διπλοεγγραφών
Gcount(e.empid) σσe.hiredate≥′ 2002−01−01′ ∧e.hiredate≤′ 2002−12−31′ ∧p.progress>75 (
̺e (employees) ⊲⊳e.empid=w .empid ̺w (workson)
⊲⊳w .proid=p.proid ̺p (projects))
1 SELECT COUNT(e.empid)
2 FROM (employees e INNER JOIN workson w
3 ON e.empid = w.empid)
4 INNER JOIN projects p
5 ON p.proid = w.proid
6 WHERE e.hiredate BETWEEN ’2002-01-01’ AND ’2002-12-31’
7 AND p.progress < 75;
8
9 COUNT(e.empid)
10 ---------------
11 5 109 / 128
111 / 128
112 / 128
Διαχωρισμός δύο εννοιών
Πλήθος συμμετοχών υπαλλήλων σε έργα
1 SELECT COUNT(e.empid)
2 FROM (employees e INNER JOIN workson w
3 ON e.empid = w.empid)
4 INNER JOIN projects p
5 ON w.proid = p.proid
6 WHERE e.hiredate BETWEEN ’2002-01-01’ AND ’2002-12-31’
7 AND p.progress < 75;
Περιεχόμενα
6 Ασκήσεις επανάληψης
114 / 128
Πλήθος υπαλλήλων ανά έργο ...
Να βρεθεί το πλήθος των εργαζομένων με μισθό μικρότερο του
1500, ανά κωδικό και τίτλο έργου, με αύξουσα ταξινόμηση ως
προς το πλήθος εργαζομένων, για έργα που απασχολούν λιγότερο
από 5 υπαλλήλους.
115 / 128
116 / 128
Πλήθος υπαλλήλων ανά έργο ...
Να βρεθεί το πλήθος των εργαζομένων με μισθό μικρότερο του
1500, ανά κωδικό και τίτλο έργου, με αύξουσα ταξινόμηση ως
προς το πλήθος εργαζομένων, για έργα που απασχολούν λιγότερο
από 5 υπαλλήλους.
1 SELECT p.proid, p.title, COUNT(*)
2 FROM (employees e INNER JOIN workson w
3 ON e.empid = w.empid)
4 INNER JOIN projects p
5 ON p.proid = w.proid
6 WHERE e.salary < 1500
117 / 128
118 / 128
Πλήθος υπαλλήλων ανά έργο ...
Να βρεθεί το πλήθος των εργαζομένων με μισθό μικρότερο του
1500, ανά κωδικό και τίτλο έργου, με αύξουσα ταξινόμηση ως
προς το πλήθος εργαζομένων, για έργα που απασχολούν λιγότερο
από 5 υπαλλήλους.
1 SELECT p.proid, p.title, COUNT(*)
2 FROM (employees e INNER JOIN workson w
3 ON e.empid = w.empid)
4 INNER JOIN projects p
5 ON p.proid = w.proid
6 WHERE e.salary < 1500
7 GROUP BY p.proid, p.title
8 HAVING COUNT(*) < 5
119 / 128
120 / 128
Μισθοδοσία ανά τμήμα ...
Να βρεθεί ο κωδικός και το όνομα των τμημάτων, καθώς και το
άθροισμα μισθοδοσίας των υπαλλήλων ανά τμήμα, που
απασχολούνται σε όλα τα έργα με πρόοδο πάνω από 50%, και
που απασχολούν (τα έργα) περισσότερους από έναν υπαλλήλους.
121 / 128
122 / 128
Μισθοδοσία ανά τμήμα ...
Να βρεθεί ο κωδικός και το όνομα των τμημάτων, καθώς και το
άθροισμα μισθοδοσίας των υπαλλήλων ανά τμήμα, που
απασχολούνται σε όλα τα έργα με πρόοδο πάνω από 50%, και
που απασχολούν (τα έργα) περισσότερους από έναν υπαλλήλους.
1 SELECT d.depid, d.depname, SUM(DISTINCT e.salary)
2 FROM ((employees e INNER JOIN departments d
3 ON e.depid = d.depid)
4 INNER JOIN workson w
5 ON e.empid = w.empid)
6 INNER JOIN projects p
7 ON p.proid = w.proid
8 WHERE p.progress > 50
123 / 128
124 / 128
Μισθοδοσία ανά τμήμα ...
Να βρεθεί ο κωδικός και το όνομα των τμημάτων, καθώς και το
άθροισμα μισθοδοσίας των υπαλλήλων ανά τμήμα, που
απασχολούνται σε όλα τα έργα με πρόοδο πάνω από 50%, και
που απασχολούν (τα έργα) περισσότερους από έναν υπαλλήλους.
1 SELECT d.depid, d.depname, SUM(DISTINCT e.salary)
2 FROM ((employees e INNER JOIN departments d
3 ON e.depid = d.depid)
4 INNER JOIN workson w
5 ON e.empid = w.empid)
6 INNER JOIN projects p
7 ON p.proid = w.proid
8 WHERE p.progress > 50
9 GROUP BY d.depid, d.depname
10 HAVING COUNT(*) > 1;
125 / 128
126 / 128
Διευθυντές και έργα
Να βρεθεί το όνομα του τμήματος, το επώνυμο και ο κωδικός του
διευθυντή και το πλήθος των έργων στα οποία απασχολείται ο
κάθε διευθυντής.
1 SELECT d.depname, e.lastname, w.empid, COUNT(*)
2 FROM (departments d INNER JOIN employees e
3 ON d.manager = e.empid)
4 LEFT JOIN workson w
5 ON e.empid = w.empid
6 GROUP BY d.depname, e.lastname, w.empid;
127 / 128
Υποερωτήματα SQL
Η ανάγκη για υποερώτημα
Ποιος υπάλληλος παίρνει το μεγαλύτερο μισθό;
Αν ξέραμε το μεγαλύτερο μισθό, πχ 2000, θα γράφαμε:
SELECT ∗
FROM e m p l o y e e s
WHERE s a l a r y = 2 0 0 0 ;
SELECT MAX( s a l a r y )
FROM e m p o l y e e s ;
2 / 31
3 / 31
΄Ενα απλό υποερώτημα
SELECT ∗
FROM e m p l o y e e s
WHERE s a l a r y = (SELECT MAX( s a l a r y )
FROM e m p l o y e e s ) ;
4 / 31
5 / 31
Υποερώτημα ή αυτοσύζευξη;
Να βρεθούν οι υπάλληλοι που εργάζονται στο ίδιο τμήμα με αυτό που
εργάζεται ο υπάλληλος με κωδικό 102
Με αυτοσύζευξη
SELECT e1 . ∗
FROM e m p l o y e e s e1 , e m p l o y e e s e2
WHERE e1 . d e p i d = e2 . d e p i d
AND e2 . empid =102;
Με υποερώτημα
SELECT ∗
FROM e m p l o y e e s
WHERE d e p i d = (SELECT d e p i d
FROM e m p l o y e e s
WHERE empid = 1 0 2 ) ;
6 / 31
SELECT ∗
FROM e m p l o y e e s
WHERE h i r e d a t e BETWEEN ( SELECT MIN( s t a r t d a t e )
FROM projects )
AND ( SELECT MAX( s t a r t d a t e )
FROM projects )
AND d e p i d != 6 ;
8 / 31
SELECT depname
FROM d e p a r t m e n t s
WHERE d e p i d IN (SELECT DISTINCT d e p i d
FROM e m p l o y e e s
WHERE s a l a r y ∗ 0 . 0 5 > 1 0 0 ) ;
10 / 31
SELECT ∗
FROM e m p l o y e e s
WHERE h i r e d a t e > ALL (SELECT DISTINCT s t a r t d a t e
FROM p r o j e c t s ) ;
11 / 31
Ισοδυναμία λόγω βέλους του χρόνου
SELECT ∗
FROM e m p l o y e e s
WHERE h i r e d a t e > (SELECT MAX( s t a r t d a t e )
FROM p r o j e c t s ) ;
12 / 31
WHERE X θ ALL Y
13 / 31
Τεστ σύγκρισης με ANY
SELECT ∗
FROM employees
WHERE h i r e d a t e <= ’ 2003−12−31 ’
AND s a l a r y < ANY (SELECT DISTINCT s a l a r y
FROM e m p l o y e e s
WHERE h i r e d a t e > ’ 2004−01−01 ’ ) ;
WHERE X θ ANY Y
15 / 31
Τεστ σύγκρισης με EXISTS
SELECT ∗
FROM e m p l o y e e s e
WHERE EXISTS (SELECT empid
FROM workson w
WHERE e . empid = w . empid ) ;
16 / 31
SELECT DISTINCT e . ∗
FROM e m p l o y e e s e INNER JOIN workson w
ON e . empid = w . empid
18 / 31
depid perEmp
1 10.0000
2 13.3333
3 30.0000
4 16.6667
5 6.6667
6 23.3333
NULL 100.0000
19 / 31
Υποερωτήματα στη φράση FROM
΄Ενα οποιοδήποτε ερώτημα
SELECT d e p i d , sum( s a l a r y )
FROM e m p l o y e e s
GROUP BY d e p i d
SELECT ∗
FROM ( SELECT d e p i d , sum( s a l a r y )
FROM e m p l o y e e s
GROUP BY d e p i d ) e s ;
Με φυσική σύζευξη
21 / 31
Να βρεθεί όνομα του τμήματος με το μεγαλύτερο ποσό
μισθοδοσίας
SELECT depname
FROM d e p a r t m e n t s NATURAL JOIN e m p l o y e e s
GROUP BY depname
HAVING sum( s a l a r y )=
(
SELECT sumSal
FROM (
SELECT d e p i d , SUM( s a l a r y ) AS sumSal
FROM e m p l o y e e s
GROUP BY d e p i d
) es
WHERE sumSal >= ALL (
SELECT SUM( s a l a r y )
FROM e m p l o y e e s
GROUP BY d e p i d )
)
22 / 31
SELECT depname
FROM d e p a r t m e n t s NATURAL JOIN e m p l o y e e s
GROUP BY depname
ORDER BY SUM( s a l a r y ) DESC
LIMIT 0 , 1
23 / 31
Να βρεθεί το όνομα του τμήματος και ο μέσος μισθός των
υπαλλήλων του, για το τμήμα με το μικρότερη μέση τιμή
στους μισθούς
Διπλή χρήση του υποερωτήματος στη φράση FROM και WHERE
SELECT d . depname , e1 . m s a l
FROM ( SELECT d e p i d , AVG( s a l a r y ) AS m s a l
FROM e m p l o y e e s
GROUP BY d e p i d
) e1
INNER JOIN d e p a r t m e n t s d ON e1 . d e p i d=d . d e p i d
WHERE e1 . m s a l =
( SELECT MIN( e2 . m s a l )
FROM ( SELECT d e p i d , AVG( s a l a r y )
AS m s a l
FROM e m p l o y e e s
GROUP BY d e p i d
) e2
);
24 / 31
SELECT proid
FROM workson
GROUP BY proid
HAVING count ( empid ) <= ALL
( SELECT c n t
FROM
(
SELECT p r o i d , count ( empid ) AS c n t
FROM workson
GROUP BY p r o i d
) w2
);
25 / 31
Να βρεθούν οι κωδικοί των έργων με τη μικρότερη
απασχόληση εργαζομένων, άλλος τρόπος με χρήση της
συνάρτησης min
Διπλή εμφώλευση υποερωτήματος στη φράση HAVING
SELECT proid
FROM workson
GROUP BY proid
HAVING count ( empid ) =
( SELECT min ( c n t )
FROM
(
SELECT p r o i d , count ( empid ) AS c n t
FROM workson
GROUP BY p r o i d
) w2
);
26 / 31
΄Ενωση
Γενική μορφή ερωτημάτων ένωσης
SELECT . . .
UNION [ ALL | DISTINCT ]
SELECT . . .
27 / 31
Παράδειγμα ένωσης - 1
SELECT ∗
FROM employees
WHERE depid = 3
UNION
SELECT ∗
FROM employees
WHERE depid = 4;
Ισοδύναμο με:
SELECT ∗
FROM e m p l o y e e s
WHERE d e p i d IN ( 3 , 4 ) ;
28 / 31
Παράδειγμα ένωσης - 2
Να βρεθεί ο κωδικός και το όνομα των υπαλλήλων που είτε ανήκουν στο
τμήμα με κωδικό 1, είτε δεν απασχολούνται σε κανένα έργο
SELECT empid , f i r s t n a m e , l a s t n a m e
FROM e m p l o y e e s e1
WHERE depid = 1
UNION
SELECT empid , f i r s t n a m e , l a s t n a m e
FROM e m p l o y e e s e2
WHERE NOT EXISTS (SELECT empid
FROM workson w
WHERE e2 . empid = w . empid ) ;
Ισοδύναμο με:
SELECT e . empid , e . f i r s t n a m e , e . l a s t n a m e
FROM e m p l o y e e s e LEFT JOIN workson w ON e . empid = w . empid
WHERE e . depid = 1
OR w . empid I S NULL;
29 / 31
Παράδειγμα ένωσης - 3
΄Οπως το προηγούμενο, αλλά με ένα επιπλέον πεδίο που να περιγράφει αν ο
υπάλληλος είναι στη μία ή άλλη περίπτωση, πχ με το προσδιοριστικό
«ΤΜΗΜΑ 1» ή «ΚΑΝΕΝΑ ΕΡΓΟ»
Περιεχόμενα
1 Πράξεις αριθμομηχανής
2 / 106
Ο πίνακας DUAL
SQL ως αριθμομηχανή
1 SELECT 1
2 FROM DUAL;
3
4 1
5 ---
6 1
4 / 106
Ο πίνακας DUAL
SQL ως αριθμομηχανή
1 SELECT 1
2 FROM DUAL;
3
4 1
5 ---
6 1
1 SELECT 1+1
2 FROM DUAL;
3
4 1+1
5 ----
6 2
5 / 106
Πράξεις με συναρτήσεις
6 / 106
Πράξεις με συναρτήσεις
4 sqrt(2)
5 ----------------
6 1.4142135623731
7 / 106
Πράξεις με συναρτήσεις
4 sqrt(2)
5 ----------------
6 1.4142135623731
1 SELECT cos(pi()/4)
2 FROM DUAL;
3
4 cos(pi()/4)
5 ------------------
6 0.707106781186548
8 / 106
9 / 106
Πολλές παραστάσεις μαζί
10 / 106
4 2 log(2)/sqrt(2)
5 ---------------------
6 2 0.490129071734274
11 / 106
Ερωτήματα χωρίς FROM;
12 / 106
4 CURRENT_DATE
5 -------------
6 2014-03-31
13 / 106
Ερωτήματα χωρίς FROM;
4 CURRENT_DATE
5 -------------
6 2014-03-31
1 SELECT CURRENT_DATE;
2
3 CURRENT_DATE
4 -------------
5 2014-03-31
14 / 106
Περιεχόμενα
1 Πράξεις αριθμομηχανής
15 / 106
Αριθμητικές συναρτήσεις
1 Υπάρχουν πολλές διαθέσιμες συναρτήσεις για αριθμούς
ή αλγεβρικές παραστάσεις, παρόμοιες με αυτές που
έχουμε εξετάσει στα λογιστικά φύλλα.
16 / 106
Αριθμητικές συναρτήσεις
1 Υπάρχουν πολλές διαθέσιμες συναρτήσεις για αριθμούς
ή αλγεβρικές παραστάσεις, παρόμοιες με αυτές που
έχουμε εξετάσει στα λογιστικά φύλλα.
2 Για παράδειγμα, log για τον υπολογισμό λογαρίθμου,
pow για ύψωση σε δύναμη ή cos για υπολογισμό
συνημιτόνου.
17 / 106
Αριθμητικές συναρτήσεις
1 Υπάρχουν πολλές διαθέσιμες συναρτήσεις για αριθμούς
ή αλγεβρικές παραστάσεις, παρόμοιες με αυτές που
έχουμε εξετάσει στα λογιστικά φύλλα.
2 Για παράδειγμα, log για τον υπολογισμό λογαρίθμου,
pow για ύψωση σε δύναμη ή cos για υπολογισμό
συνημιτόνου.
3 Επιτρέπεται η εμφώλευση συναρτήσεων.
18 / 106
Αριθμητικές συναρτήσεις
1 Υπάρχουν πολλές διαθέσιμες συναρτήσεις για αριθμούς
ή αλγεβρικές παραστάσεις, παρόμοιες με αυτές που
έχουμε εξετάσει στα λογιστικά φύλλα.
2 Για παράδειγμα, log για τον υπολογισμό λογαρίθμου,
pow για ύψωση σε δύναμη ή cos για υπολογισμό
συνημιτόνου.
3 Επιτρέπεται η εμφώλευση συναρτήσεων.
4 Προσοχή, το όρισμα πρέπει να είναι έγκυρο.
19 / 106
Αριθμητικές συναρτήσεις
1 Υπάρχουν πολλές διαθέσιμες συναρτήσεις για αριθμούς
ή αλγεβρικές παραστάσεις, παρόμοιες με αυτές που
έχουμε εξετάσει στα λογιστικά φύλλα.
2 Για παράδειγμα, log για τον υπολογισμό λογαρίθμου,
pow για ύψωση σε δύναμη ή cos για υπολογισμό
συνημιτόνου.
3 Επιτρέπεται η εμφώλευση συναρτήσεων.
4 Προσοχή, το όρισμα πρέπει να είναι έγκυρο.
5 Ακολουθούν παραδείγματα.
20 / 106
Στρογγυλοποίηση με τη ROUND
21 / 106
Στρογγυλοποίηση με τη ROUND
22 / 106
Στρογγυλοποίηση με τη ROUND
23 / 106
Ομαδοποίηση μετά από στρογγυλοποίηση
Να βρεθεί το πλήθος των υπαλλήλων ανά εκατοντάδα μισθού.
24 / 106
25 / 106
Ομαδοποίηση μετά από στρογγυλοποίηση
Να βρεθεί το πλήθος των υπαλλήλων ανά εκατοντάδα μισθού.
1 SELECT ROUND(salary, -2) AS SalCat, COUNT(*) AS cntSC
2 FROM employees
3 GROUP BY ROUND(salary, -2);
4
5 SalCat cntSC
6 --------------
7 NULL 3
8 1100 9
9 1200 2
10 1300 6
11 1400 2
12 1500 1
13 1600 2
14 1800 1
15 1900 2
16 2300 1 26 / 106
2800 1
Στρογγυλοποίηση στο 250
Να βρεθεί το πλήθος των υπαλλήλων ανά εκατοντάδα μισθού.
27 / 106
Στρογγυλοποίηση στο 250
Να βρεθεί το πλήθος των υπαλλήλων ανά εκατοντάδα μισθού.
1 SELECT ROUND(salary, -2) AS SalCat, COUNT(*) AS cntSC
2 FROM employees
3 GROUP BY ROUND(salary, -2);
4
28 / 106
5 SalCat cntSC
6 --------------
7 NULL 3
8 1100 9
9 1200 2
10 1300 6
11 1400 2
12 1500 1
13 1600 2
14 1800 1
15 1900 2
16 2300 1 29 / 106
2800 1
Στρογγυλοποίηση με τη FLOOR
30 / 106
Στρογγυλοποίηση με τη FLOOR
31 / 106
Στρογγυλοποίηση με τη FLOOR
32 / 106
33 / 106
Στρογγυλοποίηση με τη FLOOR σε εκατοντάδα
34 / 106
35 / 106
Στρογγυλοποίηση με FLOOR x 250
36 / 106
37 / 106
Στρογγυλοποίηση με FLOOR x 250
38 / 106
Περιεχόμενα
1 Πράξεις αριθμομηχανής
39 / 106
Συναρτήσεις κειμένου και αλφαριθμητικών
1 Συναρτήσεις που επεξεργάζονται κείμενο και
συμβολοσειρές.
40 / 106
41 / 106
Συναρτήσεις κειμένου και αλφαριθμητικών
1 Συναρτήσεις που επεξεργάζονται κείμενο και
συμβολοσειρές.
2 Για παράδειγμα, left για τη λήψη αριστερού
μέρους ενός αλφαριθμητικού, length για την
καταμέτρηση χαρακτήρων, ή replace για την
αντικατάσταση κειμένου από κείμενο.
3 Επιτρέπεται η εμφώλευση συναρτήσεων.
42 / 106
43 / 106
Συναρτήσεις κειμένου και αλφαριθμητικών
1 Συναρτήσεις που επεξεργάζονται κείμενο και
συμβολοσειρές.
2 Για παράδειγμα, left για τη λήψη αριστερού
μέρους ενός αλφαριθμητικού, length για την
καταμέτρηση χαρακτήρων, ή replace για την
αντικατάσταση κειμένου από κείμενο.
3 Επιτρέπεται η εμφώλευση συναρτήσεων.
4 Προσοχή, το όρισμα πρέπει να είναι έγκυρο.
5 Ακολουθούν παραδείγματα.
44 / 106
Ενοποίηση κειμένου
Να δώσετε το όνομα και το επώνυμο των υπαλλήλων του
τμήματος 4 σε μία στήλη, ως ονοματεπώνυμο.
45 / 106
Ενοποίηση κειμένου
Να δώσετε το όνομα και το επώνυμο των υπαλλήλων του
τμήματος 4 σε μία στήλη, ως ονοματεπώνυμο.
1 SELECT CONCAT(firstname, ’ ’, lastname)
2 FROM employees
3 WHERE depid = 4;
4
46 / 106
Ενοποίηση κειμένου
Να δώσετε το όνομα και το επώνυμο των υπαλλήλων του
τμήματος 4 σε μία στήλη, ως ονοματεπώνυμο.
1 SELECT CONCAT(firstname, ’ ’, lastname)
2 FROM employees
3 WHERE depid = 4;
4
5 CONCAT(firstname, ’ ’, lastname)
6 ---------------------------------
7 Νίκος Βλάχος
8 Βαγγέλης Χριστόπουλος
9 Νίκος Στεργιόπουλος
10 Παύλος Περίδης
11 Ευθαλεία Μικράκη
47 / 106
Ενοποίηση και αποκοπή κειμένου
Να δώσετε το αρχικό του ονόματος και το επώνυμο των
υπαλλήλων του τμήματος 4 σε μία στήλη, ως ονοματεπώνυμο.
48 / 106
49 / 106
Ενοποίηση και αποκοπή κειμένου
Να δώσετε το αρχικό του ονόματος και το επώνυμο των
υπαλλήλων του τμήματος 4 σε μία στήλη, ως ονοματεπώνυμο.
1 SELECT CONCAT(LEFT(firstname, 1), ’. ’, lastname)
2 FROM employees
3 WHERE depid = 4;
4
50 / 106
51 / 106
Ενοποίηση και αποκοπή κειμένου
Να δώσετε ονοματεπώνυμο και το μήκος της συμβολοσειράς του
των υπαλλήλων του τμήματος 4.
1 SELECT CONCAT(firstname, ’ ’, lastname)
2 AS name,
3 LENGTH(CONCAT(firstname, lastname))
4 AS cnt
5 FROM employees
6 WHERE depid = 4;
7
52 / 106
8 name cnt
9 ------------------------------
10 Βαγγέλης Χριστόπουλος 40
11 Ευθαλεία Μικράκη 30
12 Νίκος Βλάχος 22
13 Νίκος Στεργιόπουλος 36
14 Παύλος Περίδης 26
53 / 106
Προσοχή! utf-8
Να δώσετε ονοματεπώνυμο και το μήκος της συμβολοσειράς του
των υπαλλήλων του τμήματος 4.
1 SELECT CONCAT(firstname, ’ ’, lastname)
2 AS name,
3 LENGTH(CONCAT(firstname, lastname))/2
4 AS cnt
5 FROM employees
6 WHERE depid = 4;
7
8 name cnt
9 ------------------------------
10 Βαγγέλης Χριστόπουλος 20
11 Ευθαλεία Μικράκη 15
12 Νίκος Βλάχος 11
13 Νίκος Στεργιόπουλος 18
14 Παύλος Περίδης 13
54 / 106
8 name cnt
9 ------------------------------
10 Βαγγέλης Χριστόπουλος 20
11 Ευθαλεία Μικράκη 15
12 Νίκος Βλάχος 11
13 Νίκος Στεργιόπουλος 18
14 Παύλος Περίδης 13
55 / 106
Αλλαγή σε κεφαλαία
Να δώσετε τον κωδικό και το όνομα των τμημάτων με κεφαλαία
γράμματα.
56 / 106
Αλλαγή σε κεφαλαία
Να δώσετε τον κωδικό και το όνομα των τμημάτων με κεφαλαία
γράμματα.
1 SELECT depid, UPPER(depname)
2 FROM departments;
3
57 / 106
Αλλαγή σε κεφαλαία
Να δώσετε τον κωδικό και το όνομα των τμημάτων με κεφαλαία
γράμματα.
1 SELECT depid, UPPER(depname)
2 FROM departments;
3
4 depid UPPER(depname)
5 ------------------------------
6 1 ΔΙΟ΄ΙΚΗΣΗΣ/ΕΠ΄ΙΒΛΕΨΗΣ
7 2 ΟΙΚΟΝΟΜΟΛ΄ΟΓΩΝ/ΛΟΓΙΣΤ΄ΩΝ
8 3 ΕΠΙΣΤΗΜ΄ΟΝΩΝ/ΜΗΧΑΝΙΚ΄ΩΝ
9 4 ΕΞΩΤΕΡΙΚ΄ΩΝ ΣΥΝΕΡΓΑΤ΄ΩΝ
10 5 ΓΡΑΜΜΑΤΕ΄ΙΑΣ
11 6 ΠΩΛ΄ΗΣΕΩΝ
58 / 106
Αντικατάσταση κειμένου
Να δώσετε τον κωδικό και το όνομα των τμημάτων με κεφαλαία
γράμματα, χωρίς τόνους.
59 / 106
Αντικατάσταση κειμένου
Να δώσετε τον κωδικό και το όνομα των τμημάτων με κεφαλαία
γράμματα, χωρίς τόνους.
1 SELECT depid, REPLACE(UPPER(depname), ’´’, ’’)
2 FROM departments;
3
60 / 106
Αντικατάσταση κειμένου
Να δώσετε τον κωδικό και το όνομα των τμημάτων με κεφαλαία
γράμματα, χωρίς τόνους.
1 SELECT depid, REPLACE(UPPER(depname), ’´’, ’’)
2 FROM departments;
3
61 / 106
Μέρος συμβολοσειράς
Χαρακτήρες 1 – 3
62 / 106
Μέρος συμβολοσειράς
Χαρακτήρες 1 – 3
1 SELECT lastname, SUBSTR(lastname, 1, 3)
2 FROM employees
3 WHERE empid = 419;
4
63 / 106
Μέρος συμβολοσειράς
Χαρακτήρες 1 – 3
1 SELECT lastname, SUBSTR(lastname, 1, 3)
2 FROM employees
3 WHERE empid = 419;
4
5 lastname SUBSTR(lastname, 1, 3)
6 ------------------------------------
7 Αρβανιτάκης Αρβ
64 / 106
Μέρος συμβολοσειράς
Χαρακτήρες 1 – 3
1 SELECT lastname, SUBSTR(lastname, 1, 3)
2 FROM employees
3 WHERE empid = 419;
4
5 lastname SUBSTR(lastname, 1, 3)
6 ------------------------------------
7 Αρβανιτάκης Αρβ
Χαρακτήρες -6 – 3
65 / 106
Μέρος συμβολοσειράς
Χαρακτήρες 1 – 3
1 SELECT lastname, SUBSTR(lastname, 1, 3)
2 FROM employees
3 WHERE empid = 419;
4
5 lastname SUBSTR(lastname, 1, 3)
6 ------------------------------------
7 Αρβανιτάκης Αρβ
Χαρακτήρες -6 – 3
1 SELECT lastname, SUBSTR(lastname, -6, 3)
2 FROM employees
3 WHERE empid = 419;
4
66 / 106
Μέρος συμβολοσειράς
Χαρακτήρες 1 – 3
1 SELECT lastname, SUBSTR(lastname, 1, 3)
2 FROM employees
3 WHERE empid = 419;
4
5 lastname SUBSTR(lastname, 1, 3)
6 ------------------------------------
7 Αρβανιτάκης Αρβ
Χαρακτήρες -6 – 3
1 SELECT lastname, SUBSTR(lastname, -6, 3)
2 FROM employees
3 WHERE empid = 419;
4
68 / 106
69 / 106
Θέση αλφαριθμητικού σε κείμενο
Να βρεθεί το όνομα και η θέση του λ στο όνομα των υπαλλήλων
του τμήματος 4.
1 SELECT firstname, LOCATE(’λ’, firstname)
2 FROM emloyees
3 WHERE depid = 4;
4
70 / 106
Περιεχόμενα
1 Πράξεις αριθμομηχανής
71 / 106
Συναρτήσεις ημερομηνίας και ώρας
1 Συναρτήσεις που επεξεργάζονται
ημερολογιακά δεδομένα.
72 / 106
73 / 106
Συναρτήσεις ημερομηνίας και ώρας
1 Συναρτήσεις που επεξεργάζονται
ημερολογιακά δεδομένα.
2 Για παράδειγμα, year για τη λήψη έτους μιας
ημερομηνίας, hour για τη ώρας, ή datediff για
τον υπολογισμό διαφοράς δύο ημερομηνιών.
3 Επιτρέπεται η εμφώλευση συναρτήσεων.
74 / 106
75 / 106
Συναρτήσεις ημερομηνίας και ώρας
1 Συναρτήσεις που επεξεργάζονται
ημερολογιακά δεδομένα.
2 Για παράδειγμα, year για τη λήψη έτους μιας
ημερομηνίας, hour για τη ώρας, ή datediff για
τον υπολογισμό διαφοράς δύο ημερομηνιών.
3 Επιτρέπεται η εμφώλευση συναρτήσεων.
4 Προσοχή, το όρισμα πρέπει να είναι έγκυρο.
5 Ακολουθούν παραδείγματα.
76 / 106
4 CURDATE() CURTIME()
5 ----------------------
6 2014-03-24 11:24:43
77 / 106
Ημερομηνία και ώρα τώρα
Ημερομηνία και ώρα:
1 SELECT CURDATE(), CURTIME()
2 FROM DUAL;
3
4 CURDATE() CURTIME()
5 ----------------------
6 2014-03-24 11:24:43
΄Ολα μαζί:
1 SELECT NOW()
2 FROM DUAL;
3
4 NOW()
5 --------------------
6 2014-03-24 11:24:43
78 / 106
Χρονοσφραγίδα
Εδώ:
1 SELECT LOCALTIMESTAMP()
2 FROM DUAL;
3
4 LOCALTIMESTAMP()
5 --------------------
6 2014-03-24 11:24:43
79 / 106
Χρονοσφραγίδα
Εδώ:
1 SELECT LOCALTIMESTAMP()
2 FROM DUAL;
3
4 LOCALTIMESTAMP()
5 --------------------
6 2014-03-24 11:24:43
UTC:
1 SELECT UTC_TIMESTAMP()
2 FROM DUAL;
3
4 UTC_TIMESTAMP()
5 --------------------
6 2014-03-24 09:24:43
80 / 106
΄Ετος πρόσληψης
Να βρεθεί το πλήθος των προσλήψεων το 2003
1 SELECT COUNT(*)
2 FROM employees
3 WHERE hiredate BETWEEN ’2003-01-01’ AND ’2003-12-31’;
4
5 COUNT(*)
6 ---------
7 3
81 / 106
΄Ετος πρόσληψης
Να βρεθεί το πλήθος των προσλήψεων το 2003
1 SELECT COUNT(*)
2 FROM employees
3 WHERE hiredate BETWEEN ’2003-01-01’ AND ’2003-12-31’;
4
5 COUNT(*)
6 ---------
7 3
5 COUNT(*)
6 ---------
7 3 82 / 106
Μορφοποίηση ημερομηνίας
Να δοθεί ο τίτλος και η ημερομηνία έναρξης όλων τον έργων με
τη μορφή mm/yy (μήνας/έτος)
1 SELECT title, DATE_FORMAT(startdate, ’%b/%y’)
2 AS StartMonth
3 FROM projects;
4
5 title startMonth
6 -------------------------------------
7 Επίβλεψη έρευνας για ... Jun/05
8 Επίβλεψη κατασκευής ... Jun/06
9 Μελέτη και επίβλεψη ... Apr/06
10 Παροχή συμβουλευτικών ... Jun/03
11 Μελέτη εναλλακτικών ... Aug/07
12 Μελέτη οικονομικής ... Apr/03
83 / 106
Ημέρα της εβδομάδος
Να βρεθεί το πλήθος των προσλήψεων υπαλλήλων ανά ημέρα
της εβδομάδας.
1 SELECT DATE_FORMAT(hiredate, ’%W’) AS wDay,
2 COUNT(*) AS cnt
3 FROM employees
4 GROUP BY DATE_FORMAT(hiredate, ’%w’)
5 ORDER BY DATE_FORMAT(hiredate, ’%w’);
6
7 wDay cnt
8 ---------------
9 Monday 6
10 Tuesday 8
11 Wednesday 4
12 Thursday 4
13 Friday 8
84 / 106
Διάρκεια σε μήνες
Να βρεθεί ο κωδικός και η διάρκεια σε μήνες εκτέλεσης όλων των
έργων στα οποία απασχολούνται υπάλληλοι του τμήματος 5 με
μισθό πάνω από 1500 €.
1 SELECT DISTINCT p.proid,
2 (YEAR(p.enddate)-YEAR(p.startdate))*12
3 +(MONTH(p.enddate)-MONTH(p.startdate)) AS period
4 FROM (projects p INNER JOIN workson w
5 ON p.proid = w.proid)
6 INNER JOIN employees e
7 ON e.empid = w.empid
8 WHERE e.depid = 5
9 AND e.salary > 1500;
10
11 proid period
12 --------------
13 14 49
14 38 23 85 / 106
Πρόσθεση με ημερομηνίες
Να βρεθεί η ημερομηνία λήξης του έργου 21 μετά από παράταση
2 μηνών.
1 SELECT DATE_ADD(enddate, INTERVAL 2 month)
2 AS NewEnddate
3 FROM projects
4 WHERE proid = 21;
5
6 NewEnddate
7 -----------
8 2005-07-31
86 / 106
Πρόσθεση με ημερομηνίες
Να βρεθεί η ημερομηνία λήξης του έργου 21 μετά από παράταση
60 ημερών.
1 SELECT DATE_ADD(enddate, INTERVAL 60 day)
2 AS NewEnddate
3 FROM projects
4 WHERE proid = 21;
5
6 NewEnddate
7 -----------
8 2005-07-30
87 / 106
Περιεχόμενα
1 Πράξεις αριθμομηχανής
88 / 106
89 / 106
Συναρτήσεις ελέγχου ροής
1 Εισάγουν στοιχεία προγραμματισμού και
δομών ελέγχου.
2 Για παράδειγμα, if για τη απόδοση τιμής υπό
συνθήκη, case για την απόδοση τιμής σε
διάφορες υπο-περιπτώσεις.
90 / 106
91 / 106
Συναρτήσεις ελέγχου ροής
1 Εισάγουν στοιχεία προγραμματισμού και
δομών ελέγχου.
2 Για παράδειγμα, if για τη απόδοση τιμής υπό
συνθήκη, case για την απόδοση τιμής σε
διάφορες υπο-περιπτώσεις.
3 Επιτρέπεται η εμφώλευση συναρτήσεων.
4 Προσοχή, το όρισμα πρέπει να είναι έγκυρο.
92 / 106
93 / 106
η συνάρτηση IF
1η απλή περίπτωση
1 SELECT IF(5>3, ’T’, ’F’)
2 FROM DUAL;
3
94 / 106
η συνάρτηση IF
1η απλή περίπτωση
1 SELECT IF(5>3, ’T’, ’F’)
2 FROM DUAL;
3
1η απλή περίπτωση
1 SELECT IF(3>5, 1, -1)
2 FROM DUAL;
3
4 IF(3>5, 1, -1)
5 ---------------
6 -1
95 / 106
Η συνάρτηση IF
Να βρεθεί το ονοματεπώνυμο των υπαλλήλων του τμήματος 2
καθώς και η έκφραση Ναι/΄Οχι ανάλογα με το αν παίρνουν
μισθό άνω του 1500.
96 / 106
Η συνάρτηση IF
Να βρεθεί το ονοματεπώνυμο των υπαλλήλων του τμήματος 2
καθώς και η έκφραση Ναι/΄Οχι ανάλογα με το αν παίρνουν
μισθό άνω του 1500.
1 SELECT firstname, lastname,
2 IF(salary>1500, ’Ναι’, ’΄Οχι’) AS sLevel
3 FROM employees
4 WHERE depid = 2;
5
97 / 106
Απασχόληση; Ναί ή ΄Οχι
Να βρεθεί το ονοματεπώνυμο των υπαλλήλων του τμήματος 1
καθώς και η έκφραση Ναι/΄Οχι ανάλογα με το αν
απασχολούνται σε κάποιο έργο.
98 / 106
99 / 106
Απασχόληση; Ναί ή ΄Οχι
Να βρεθεί το ονοματεπώνυμο των υπαλλήλων του τμήματος 1
καθώς και η έκφραση Ναι/΄Οχι ανάλογα με το αν
απασχολούνται σε κάποιο έργο.
100 / 106
101 / 106
Ροή ελέγχου: CASE
Να βρεθεί το ονοματεπώνυμο των υπαλλήλων του τμήματος 2
καθώς και η έκφραση Μικρό/Μεγάλο (επίπεδο μισθού) ανάλογα
με το αν παίρνουν μισθό άνω του 1500.
102 / 106
104 / 106
Περιεχόμενα
1 Γενικά για την αποθήκευση δεδομένων και την ενημέρωση της βάσης
δεδομένων
2 / 88
Σκοπός του μαθήματος
Ενημέρωση είναι η τροποποίηση του περιεχομένου της βάσης
δεδομένων.
3 / 88
4 / 88
Σκοπός του μαθήματος
Ενημέρωση είναι η τροποποίηση του περιεχομένου της βάσης
δεδομένων.
Η γλώσσα SQL διαθέτει τρεις εντολές για το σκοπό αυτό:
DELETE για τη διαγραφή εγγραφών από πίνακες,
5 / 88
6 / 88
Σκοπός του μαθήματος
Ενημέρωση είναι η τροποποίηση του περιεχομένου της βάσης
δεδομένων.
Η γλώσσα SQL διαθέτει τρεις εντολές για το σκοπό αυτό:
DELETE για τη διαγραφή εγγραφών από πίνακες,
UPDATE για την τροποποίηση εγγραφών σε πίνακες,
INSERT για την εισαγωγή εγγραφών σε πίνακες.
7 / 88
8 / 88
Σκοπός του μαθήματος
Ενημέρωση είναι η τροποποίηση του περιεχομένου της βάσης
δεδομένων.
Η γλώσσα SQL διαθέτει τρεις εντολές για το σκοπό αυτό:
DELETE για τη διαγραφή εγγραφών από πίνακες,
UPDATE για την τροποποίηση εγγραφών σε πίνακες,
INSERT για την εισαγωγή εγγραφών σε πίνακες.
9 / 88
10 / 88
Διαρκής μεταβολή του περιεχομένου
Τι μεταβάλλεται
Το πλήθος των εγγραφών ενός ή περισσότερων
πινάκων.
Οι τιμές ενός ή περισσότερων πεδίων σε έναν η
περισσότερους πίνακες.
11 / 88
Τι δεν μεταβάλλεται
Το πλήθος των πινάκων της βάσης δεδομένων
(σχήμα).
Η δομή των πινάκων της βάσης δεδομένων
(σχήμα).
12 / 88
Σε μια απόδειξη πώλησης;
Που καταγράφεται;
16 / 88
Στο facebook;
Στο facebook;
Που καταγράφονται τα μηνύματα του facebook;
18 / 88
Στο facebook;
Που καταγράφονται τα μηνύματα του facebook;
19 / 88
Στο facebook;
Που καταγράφονται τα μηνύματα του facebook;
20 / 88
Στο facebook;
Που καταγράφονται τα μηνύματα του facebook;
Περιεχόμενα
1 Γενικά για την αποθήκευση δεδομένων και την ενημέρωση της βάσης
δεδομένων
22 / 88
Διαγραφή εγγραφών με την εντολή DELETE
DELETE FROM πίνακας
WHERE παράσταση
23 / 88
24 / 88
Διαγραφή εγγραφών με την εντολή DELETE
DELETE FROM πίνακας
WHERE παράσταση
25 / 88
26 / 88
Διαγραφή εγγραφών με την εντολή DELETE
DELETE FROM πίνακας
WHERE παράσταση
27 / 88
28 / 88
Διαγραφή δεδομένων ενός πίνακα
Προσοχή:
Θα διαγραφούν όλες οι εγγραφές του πίνακα. ΄Ολες.
29 / 88
Προσοχή:
Θα διαγραφούν όλες οι εγγραφές του πίνακα. ΄Ολες.
Σφάλμα:
1 DELETE *
2 FROM projects;
30 / 88
Επιλεκτική διαγραφή δεδομένων
31 / 88
32 / 88
Επιλεκτική διαγραφή δεδομένων
33 / 88
34 / 88
Διαγραφή δεδομένων με υποερώτημα
35 / 88
36 / 88
Διαγραφή δεδομένων με υποερώτημα σύζευξης
37 / 88
38 / 88
Διαγραφή δεδομένων με υποερώτημα σύζευξης
39 / 88
Περιεχόμενα
1 Γενικά για την αποθήκευση δεδομένων και την ενημέρωση της βάσης
δεδομένων
40 / 88
Ενημέρωση εγγραφών με την εντολή UPDATE
UPDATE πίνακας
SET πεδίο=τιμή
WHERE παράσταση
41 / 88
42 / 88
Ενημέρωση εγγραφών με την εντολή UPDATE
UPDATE πίνακας
SET πεδίο=τιμή
WHERE παράσταση
43 / 88
44 / 88
Ενημέρωση εγγραφών με την εντολή UPDATE
UPDATE πίνακας
SET πεδίο=τιμή
WHERE παράσταση
45 / 88
46 / 88
Ενημέρωση εγγραφών με την εντολή UPDATE
UPDATE πίνακας
SET πεδίο=τιμή
WHERE παράσταση
Παράδειγμα ενημέρωσης
Αύξηση μισθού κατά 100 € του υπαλλήλου με κωδικό 153
48 / 88
Παράδειγμα ενημέρωσης
Αύξηση μισθού κατά 100 € του υπαλλήλου με κωδικό 153
1 UPDATE employees
2 SET salary = salary + 100
3 WHERE empid = 153;
49 / 88
Παράδειγμα ενημέρωσης
Αύξηση μισθού κατά 100 € του υπαλλήλου με κωδικό 153
1 UPDATE employees
2 SET salary = salary + 100
3 WHERE empid = 153;
5 empid salary
6 ---------------
7 153 1321.92
50 / 88
Παράδειγμα ενημέρωσης
Αύξηση μισθού κατά 100 € του υπαλλήλου με κωδικό 153
1 UPDATE employees
2 SET salary = salary + 100
3 WHERE empid = 153;
51 / 88
52 / 88
Τροποποίηση δεδομένων με υποερώτημα
53 / 88
54 / 88
Τροποποίηση δεδομένων με υποερώτημα
56 / 88
Ενημέρωση σύνθετου κλειδιού
Μετάθεση υπαλλήλου 419 από το έργο 43 στο έργο 5
1 UPDATE workson
2 SET proid = 5
3 WHERE proid = 43 AND empid = 419;
57 / 88
1 Γενικά για την αποθήκευση δεδομένων και την ενημέρωση της βάσης
δεδομένων
59 / 88
60 / 88
Η εντολή INSERT για την εισαγωγή δεδομένων
Γενική μορφή της εντολής INSERT
1 INSERT INTO tablename(column1, column2, ..., columnN)
2 VALUES (value1, value2, ..., valueN);
61 / 88
62 / 88
Η εντολή INSERT για την εισαγωγή δεδομένων
Γενική μορφή της εντολής INSERT
1 INSERT INTO tablename(column1, column2, ..., columnN)
2 VALUES (value1, value2, ..., valueN);
63 / 88
64 / 88
Η εντολή INSERT για την εισαγωγή δεδομένων
Γενική μορφή της εντολής INSERT
1 INSERT INTO tablename(column1, column2, ..., columnN)
2 VALUES (value1, value2, ..., valueN);
65 / 88
67 / 88
68 / 88
Τι ισχύει για την εντολή INSERT - συνέχεια
1 Αν πρέπει να δηλωθεί η τιμή NULL κατά την εισαγωγή
δεδομένων πληκτρολογείται ως NULL και όχι με εισαγωγικά
“NULL”.
2 Αν ένα πεδίο παραληφθεί από τη λίστα πεδίων, τότε σε αυτό
το πεδίο εισάγεται η προκαθορισμένη (DEFAULT) από τη
δημιουργία του πίνακα τιμή.
3 Σε συσχετιζόμενους πίνακες, η εισαγωγή δεδομένων στον
πατρικό πίνακα δεν έχει καμία επίδραση στον θυγατρικό
πίνακα.
4 Σε συσχετιζόμενους πίνακες, η εισαγωγή δεδομένων στο
θυγατρικό πίνακα, επηρεάζεται από την ακεραιότητα
αναφορών.
5 Αν για οποιοδήποτε λόγο, αποτύχει η εκτέλεση μιας εντολής 69 / 88
INSERT η αποτυχία ισχύει συνολικά για την εγγραφή και
Αποτυχία INSERT
70 / 88
Αποτυχία INSERT
71 / 88
Αποτυχία INSERT
72 / 88
Αποτυχία INSERT
73 / 88
74 / 88
Εναλλακτικός τρόπος για την εντολή INSERT
75 / 88
76 / 88
Εναλλακτικός τρόπος για την εντολή INSERT
77 / 88
NULL
1 Γενικά για την αποθήκευση δεδομένων και την ενημέρωση της βάσης
δεδομένων
81 / 88
Διπλή εισαγωγή
Εισαγωγή επιπλέον εγγραφής για τον ίδιο υπάλληλο
1 INSERT INTO employees(empid, lastname, depid)
2 VALUES (781, ’Μικράκη’, 4);
82 / 88
Διπλή εισαγωγή
Εισαγωγή επιπλέον εγγραφής για τον ίδιο υπάλληλο
1 INSERT INTO employees(empid, lastname, depid)
2 VALUES (781, ’Μικράκη’, 4);
84 / 88
Λανθασμένη διόρθωση του προβλήματος
Διαγραφή της υπαλλήλου με επώνυμου ΜΙΚΡΑΚΗ
1 DELETE FROM employees
2 WHERE lastname = ’Μικράκη’;
3
86 / 88
Πιο προσεκτική διόρθωση του προβλήματος
Διαγραφή της υπαλλήλου με κωδικό υπαλλήλου 781
1 DELETE FROM employees
2 WHERE empid=781;
3
87 / 88
Περιεχόμενα
4 Ενημέρωση όψεων
2 / 55
Σκοπός του μαθήματος
Δημιουργείτε όψεις με βάση ερωτήματα επιλογής
SELECT.
3 / 55
4 / 55
Σκοπός του μαθήματος
Δημιουργείτε όψεις με βάση ερωτήματα επιλογής
SELECT.
Χρησιμοποιήσετε την εντολή CREATE VIEW.
Χρησιμοποιήσετε όψεις ως πίνακες σε νέα ερωτήματα.
5 / 55
6 / 55
Σκοπός του μαθήματος
Δημιουργείτε όψεις με βάση ερωτήματα επιλογής
SELECT.
Χρησιμοποιήσετε την εντολή CREATE VIEW.
Χρησιμοποιήσετε όψεις ως πίνακες σε νέα ερωτήματα.
Χρησιμοποιήσετε όψεις σε ερωτήματα σύνοψης.
Δημιουργείτε όψεις για προσαρμοζόμενη
αλληλεπίδραση του χρήστη με τη βάση δεδομένων.
7 / 55
8 / 55
Δημιουργία όψης
9 / 55
10 / 55
Παράδειγμα δημιουργίας/χρήσης μιας όψης
Δημιουργία της όψης «Τμήμα 3»
1 CREATE VIEW dep3 AS
2 SELECT *
3 FROM employees
4 WHERE depid = 3;
5 empid salary
6 ---------------
7 412 1320.83
8 543 1321.77
9 801 2312.56
11 / 55
12 / 55
Παράδειγμα δημιουργίας μιας όψης σύνοψης
«Πλήθος υπαλλήλων ανά τμήμα»
1 CREATE VIEW depcount AS
2 SELECT depid, COUNT(depid) as nemp
3 FROM employees
4 GROUP BY depid;
Παρατηρήσεις:
Η όψη μπορεί να χρησιμοποιηθεί ως πίνακας σε
ερωτήματα ή υποερώτημα SELECT.
14 / 55
΄Οψεις και πίνακες
Παρατηρήσεις:
Η όψη μπορεί να χρησιμοποιηθεί ως πίνακας σε
ερωτήματα ή υποερώτημα SELECT.
Το όνομα μιας όψης πρέπει να είναι διαφορετικό από
τα ονόματα των πινάκων και άλλων όψεων της βάσης
δεδομένων.
15 / 55
Παρατηρήσεις:
Η όψη μπορεί να χρησιμοποιηθεί ως πίνακας σε
ερωτήματα ή υποερώτημα SELECT.
Το όνομα μιας όψης πρέπει να είναι διαφορετικό από
τα ονόματα των πινάκων και άλλων όψεων της βάσης
δεδομένων.
Οι πίνακες αντιστοιχούν σε βασικές σχέσεις, οι όψεις
αντιστοιχούν σε παράγωγες σχέσεις.
16 / 55
΄Οψεις και πίνακες
Παρατηρήσεις:
Η όψη μπορεί να χρησιμοποιηθεί ως πίνακας σε
ερωτήματα ή υποερώτημα SELECT.
Το όνομα μιας όψης πρέπει να είναι διαφορετικό από
τα ονόματα των πινάκων και άλλων όψεων της βάσης
δεδομένων.
Οι πίνακες αντιστοιχούν σε βασικές σχέσεις, οι όψεις
αντιστοιχούν σε παράγωγες σχέσεις.
Οι όψεις δεν αποθηκεύουν δεδομένα.
17 / 55
Παρατηρήσεις:
Η όψη μπορεί να χρησιμοποιηθεί ως πίνακας σε
ερωτήματα ή υποερώτημα SELECT.
Το όνομα μιας όψης πρέπει να είναι διαφορετικό από
τα ονόματα των πινάκων και άλλων όψεων της βάσης
δεδομένων.
Οι πίνακες αντιστοιχούν σε βασικές σχέσεις, οι όψεις
αντιστοιχούν σε παράγωγες σχέσεις.
Οι όψεις δεν αποθηκεύουν δεδομένα.
Τα δεδομένα αποθηκεύονται σε πίνακες.
18 / 55
΄Οψεις και πίνακες
Παρατηρήσεις:
Η όψη μπορεί να χρησιμοποιηθεί ως πίνακας σε
ερωτήματα ή υποερώτημα SELECT.
Το όνομα μιας όψης πρέπει να είναι διαφορετικό από
τα ονόματα των πινάκων και άλλων όψεων της βάσης
δεδομένων.
Οι πίνακες αντιστοιχούν σε βασικές σχέσεις, οι όψεις
αντιστοιχούν σε παράγωγες σχέσεις.
Οι όψεις δεν αποθηκεύουν δεδομένα.
Τα δεδομένα αποθηκεύονται σε πίνακες.
Η διαγραφή μιας όψης δε σημαίνει διαγραφή
δεδομένων από τη βάση δεδομένων.
19 / 55
20 / 55
΄Οψη με προβολή πεδίων σε ένα πίνακα
21 / 55
22 / 55
Πλεονεκτήματα στη χρήση των όψεων
23 / 55
24 / 55
Πλεονεκτήματα στη χρήση των όψεων
1 Κάθε χρήστης μπορεί να έχει διαφορετική
εξουσιοδότηση για το χειρισμό δεδομένων
(χρηστικότητα, ασφάλεια).
2 Η χρήση των όψεων στα ερωτήματα μπορεί να
απλοποιήσει μερικά σύνθετα ερωτήματα.
25 / 55
26 / 55
Πλεονεκτήματα στη χρήση των όψεων
1 Κάθε χρήστης μπορεί να έχει διαφορετική
εξουσιοδότηση για το χειρισμό δεδομένων
(χρηστικότητα, ασφάλεια).
2 Η χρήση των όψεων στα ερωτήματα μπορεί να
απλοποιήσει μερικά σύνθετα ερωτήματα.
3 Δεν υπάρχει ανάγκη ο κάθε χρήστης να γνωρίζει το
πλήρες σχήμα της βάσης δεδομένων.
4 Με μικρές μόνο τροποποιήσεις, οι όψεις μπορεί να
παραμείνουν αναλλοίωτες, σε πιθανές αλλαγές
του σχήματος της βάσης δεδομένων.
27 / 55
29 / 55
30 / 55
Μειονεκτήματα στη χρήση των όψεων
1 Το μεγαλύτερο μειονέκτημα στη χρήση όψεων είναι η
μικρότερη απόδοση των ερωτημάτων, η μειωμένη
ταχύτητα με την οποία εκτελούνται
2 Οι όψεις μπορούν να δεχτούν ενημέρωση (INSERT,
DELETE ή UPDATE), αλλά κάτω από περιορισμούς.
Πολλές φορές, είναι αδύνατη η ενημέρωση όψεων (Read
only iews).
31 / 55
Περιεχόμενα
4 Ενημέρωση όψεων
33 / 55
΄Οψη προβολής μετά από σύζευξη πινάκων
Ονόματα τμημάτων και υπαλλήλων
1 CREATE VIEW depemps AS
2 SELECT d.depname, e.lastname, e.firstname
3 FROM departments d INNER JOIN employees e
4 ON d.depid=e.depid
5 ORDER BY d.depid ASC, e.lastname ASC;
35 / 55
Σύγκριση με υποερώτημα στη φράση HAVING
Περιεχόμενα
4 Ενημέρωση όψεων
38 / 55
Ορισμός όψης με βάση άλλη όψη
39 / 55
40 / 55
Διαγραφή όψης
41 / 55
Διαγραφή όψης
42 / 55
Διαγραφή όψης
43 / 55
Περιεχόμενα
4 Ενημέρωση όψεων
45 / 55
Ενημέρωση όψεων
1 Οι όψεις μπορούν να ενημερωθούν με τις εντολές
INSERT, DELETE, UPDATE, όπως και οι πίνακες
μιας βάσης δεδομένων.
47 / 55
Ενημέρωση όψεων
1 Οι όψεις μπορούν να ενημερωθούν με τις εντολές
INSERT, DELETE, UPDATE, όπως και οι πίνακες
μιας βάσης δεδομένων.
2 Ενημέρωση γίνεται σε όψεις που έχουν δημιουργηθεί με
βάση ένα μόνο πίνακα, όχι περισσότερους.
48 / 55
Ενημέρωση όψεων
1 Οι όψεις μπορούν να ενημερωθούν με τις εντολές
INSERT, DELETE, UPDATE, όπως και οι πίνακες
μιας βάσης δεδομένων.
2 Ενημέρωση γίνεται σε όψεις που έχουν δημιουργηθεί με
βάση ένα μόνο πίνακα, όχι περισσότερους.
3 Δεν μπορεί να γίνει ενημέρωση μιας όψης που έχει
δημιουργηθεί με ερώτημα ομαδοποίησης GROUP BY.
49 / 55
Ενημέρωση όψεων
1 Οι όψεις μπορούν να ενημερωθούν με τις εντολές
INSERT, DELETE, UPDATE, όπως και οι πίνακες
μιας βάσης δεδομένων.
2 Ενημέρωση γίνεται σε όψεις που έχουν δημιουργηθεί με
βάση ένα μόνο πίνακα, όχι περισσότερους.
3 Δεν μπορεί να γίνει ενημέρωση μιας όψης που έχει
δημιουργηθεί με ερώτημα ομαδοποίησης GROUP BY.
4 Οι εντολές INSERT, DELETE, UPDATE σε μια όψη
υπόκεινται στους ίδιους περιορισμούς ενημέρωσης της
βάσης δεδομένων όπως αν εκτελούνταν στους βασικούς
πίνακες.
50 / 55
Ενημέρωση όψεων
1 Οι όψεις μπορούν να ενημερωθούν με τις εντολές
INSERT, DELETE, UPDATE, όπως και οι πίνακες
μιας βάσης δεδομένων.
2 Ενημέρωση γίνεται σε όψεις που έχουν δημιουργηθεί με
βάση ένα μόνο πίνακα, όχι περισσότερους.
3 Δεν μπορεί να γίνει ενημέρωση μιας όψης που έχει
δημιουργηθεί με ερώτημα ομαδοποίησης GROUP BY.
4 Οι εντολές INSERT, DELETE, UPDATE σε μια όψη
υπόκεινται στους ίδιους περιορισμούς ενημέρωσης της
βάσης δεδομένων όπως αν εκτελούνταν στους βασικούς
πίνακες.
5 ΄Ολες οι πράξεις ενημέρωσης εκτελούνται στην ουσία
στους πίνακες που ορίζουν την όψη.
51 / 55
52 / 55
Παράδειγμα ενημέρωσης όψης
53 / 55
θα αποτύχει γιατί:
1 Το πεδίο depid του πίνακα employees έχει οριστεί ως
NOT NULL και λείπει από τον ορισμό της όψης, οπότε
η εισαγωγή δεδομένων στον πίνακα employees μέσω
της όψης emp3 θα αποτύχει.
2 Το πεδίο depid του πίνακα employees έχει οριστεί ως
ξένο κλειδί με αναφορική ακεραιότητα στον πίνακα
departments, πρέπει οπωσδήποτε να δοθεί μια έγκυρη
τιμή του.
54 / 55
Εντολές ορισμού δεδομένων (DDL) στην
SQL
2 / 40
Η εντολή CREATE TABLE
Γενική μορφή
1 CREATE TABLE πίνακας
2 (
3 λίστα πεδίων,
4 λίστα περιορισμών,
5 άλλες επιλογές,
6 );
3 / 40
Παράδειγμα
1 CREATE TABLE friends
2 (
3 id INTEGER NOT NULL PRIMARY KEY,
4 name CHAR(20) NOT NULL,
5 age INTEGER,
6 phone CHAR(10)
7 );
4 / 40
Λίστα περιορισμών
Περιορισμοί
1 Περιορισμοί ως προς το πρωτεύον κλειδί (PRIMARY KEY)
2 Περιορισμοί ως προς τα ξένα κλειδιά (FOREIGN KEY)
3 Περιορισμοί για έλεγχο μοναδικότητας (UNIQUE)
4 Περιορισμοί για έλεγχο των εισαγόμενων τιμών (CHECK)
5 / 40
Λίστα περιορισμών
Περιορισμοί
1 Περιορισμοί ως προς το πρωτεύον κλειδί (PRIMARY KEY)
2 Περιορισμοί ως προς τα ξένα κλειδιά (FOREIGN KEY)
3 Περιορισμοί για έλεγχο μοναδικότητας (UNIQUE)
4 Περιορισμοί για έλεγχο των εισαγόμενων τιμών (CHECK)
6 / 40
Λίστα περιορισμών
Περιορισμοί
1 Περιορισμοί ως προς το πρωτεύον κλειδί (PRIMARY KEY)
2 Περιορισμοί ως προς τα ξένα κλειδιά (FOREIGN KEY)
3 Περιορισμοί για έλεγχο μοναδικότητας (UNIQUE)
4 Περιορισμοί για έλεγχο των εισαγόμενων τιμών (CHECK)
7 / 40
8 / 40
Σύνθετο πρωτεύον κλειδί
Προσοχή
Ο πίνακας έχει ένα πρωτεύον κλειδί.
Το πρωτεύον κλειδί αποτελείται από δύο πεδία του
πίνακα.
Είναι λάθος να πούμε πως «δύο πεδία είναι
πρωτεύοντα κλειδιά».
Δεν υπάρχει πίνακας με δύο πρωτεύοντα κλειδιά. 9 / 40
Ξένο κλειδί
departments
employees
Εισαγωγή τμήματος
1 INSERT INTO departments (depid, depname)
2 VALUES (1, ΄Διοίκησης΄);
13 / 40
Επίδραση ξένου κλειδιού
Εισαγωγή τμήματος
1 INSERT INTO departments (depid, depname)
2 VALUES (1, ΄Διοίκησης΄);
Εισαγωγή υπαλλήλου
1 INSERT INTO employees (empid, firstname, lastname, depid)
2 VALUES (101, ΄Μαρία΄, ΄Αθανασίου΄, 1);
14 / 40
Εισαγωγή τμήματος
1 INSERT INTO departments (depid, depname)
2 VALUES (1, ΄Διοίκησης΄);
Εισαγωγή υπαλλήλου
1 INSERT INTO employees (empid, firstname, lastname, depid)
2 VALUES (101, ΄Μαρία΄, ΄Αθανασίου΄, 1);
Αποτυχία
1 INSERT INTO employees (empid, firstname, lastname, depid)
2 VALUES (201, ΄Κρινιώ΄, ΄Παπαδοπούλου΄, 2);
15 / 40
Συσχέτιση πολλά προς πολλά
projects
1 CREATE TABLE projects (
2 proid INTEGER NOT NULL,
3 title VARCHAR(120) NOT NULL,
4 budget NUMERIC(9,2) NOT NULL DEFAULT 0,
5 startdate DATE,
6 enddate DATE,
7 progress NUMERIC(3,1) NOT NULL DEFAULT 0,
8 CONSTRAINT pk_projects PRIMARY KEY (proid) );
workson
1 CREATE TABLE workson (
2 empid INTEGER NOT NULL,
3 proid INTEGER NOT NULL,
4 CONSTRAINT pk_workson PRIMARY KEY (empid, proid),
5 CONSTRAINT fk_emp FOREIGN KEY (empid)
6 REFERENCES employees(empid),
7 CONSTRAINT fk_pro FOREIGN KEY (proid)
8 REFERENCES projects(proid) ); 16 / 40
Μοναδικές τιμές
UNIQUE index
1 CREATE TABLE employees
2 (
3 empid INTEGER NOT NULL,
4 firstname CHAR(50) NOT NULL,
5 lastname CHAR(50) NOT NULL,
6 amka CHAR(12) NOT NULL,
7 depid INTEGER NOT NULL,
8 salary NUMERIC(6,2),
9 hiredate DATE,
10 CONSTRAINT pk_employees PRIMARY KEY (empid),
11 INDEX i_depid (depid),
12 UNIQUE u_amka (amka),
13 CONSTRAINT fk_depid FOREIGN KEY (depid)
14 REFERENCES departments(depid)
15 );
17 / 40
Πυροδοτήσεις ενημέρωσης
Διαγραφή
ON DELETE [CASCADE | RESTRICT | SET NULL | SET DEFAULT]
Τροποποίηση
ON UPDATE [CASCADE | RESTRICT | SET NULL | SET DEFAULT]
18 / 40
ON DELETE CASCADE
workson
1 CREATE TABLE workson
2 (
3 empid INTEGER NOT NULL,
4 proid INTEGER NOT NULL,
5 CONSTRAINT pk_workson PRIMARY KEY (empid, proid),
6 INDEX i_empid (empid),
7 INDEX i_proid (proid),
8 CONSTRAINT fk_empid FOREIGN KEY (empid)
9 REFERENCES employees(empid)
10 ON DELETE CASCADE,
11 CONSTRAINT fk_proid FOREIGN KEY (proid)
12 REFERENCES projects(proid)
13 );
19 / 40
Πυροδότηση διαδοχικής διαγραφής
1 SELECT *
2 FROM workson
3 WHERE empid = 419;
4
5 empid proid
6 --------------
7 419 12
8 419 21
9 419 43
20 / 40
1 SELECT *
2 FROM workson
3 WHERE empid = 419;
4
1 DELETE FROM employees
5 empid proid 2 WHERE empid = 419;
6 --------------
7 419 12
8 419 21
9 419 43
21 / 40
Πυροδότηση διαδοχικής διαγραφής
1 SELECT *
2 FROM workson
3 WHERE empid = 419;
4
1 DELETE FROM employees
5 empid proid 2 WHERE empid = 419;
6 --------------
7 419 12
8 419 21
9 419 43
1 SELECT *
2 FROM employees
3 WHERE empid = 419;
4
5 Empty set (0.00 sec)
22 / 40
1 SELECT *
2 FROM workson
3 WHERE empid = 419;
4
1 DELETE FROM employees
5 empid proid 2 WHERE empid = 419;
6 --------------
7 419 12
8 419 21
9 419 43
1 SELECT * 1 SELECT *
2 FROM employees 2 FROM workson
3 WHERE empid = 419; 3 WHERE empid = 419;
4 4
5 Empty set (0.00 sec) 5 Empty set (0.00 sec)
23 / 40
ON UPDATE CASCADE
workson
1 CREATE TABLE workson
2 (
3 empid INTEGER NOT NULL,
4 proid INTEGER NOT NULL,
5 CONSTRAINT pk_workson PRIMARY KEY (empid, proid),
6 INDEX i_empid (empid),
7 INDEX i_proid (proid),
8 CONSTRAINT fk_empid FOREIGN KEY (empid)
9 REFERENCES employees(empid)
10 ON DELETE CASCADE
11 ON UPDATE CASCADE,
12 CONSTRAINT fk_proid FOREIGN KEY (proid)
13 REFERENCES projects(proid)
14 );
24 / 40
ON UPDATE CASCADE
Υπάλληλος με κωδικό 419
1 SELECT *
2 FROM employees
3 WHERE empid = 419;
4
5 empid firstname lastname depid salary hiredate
6 -----------------------------------------------------------
7 419 Πέτρος Αρβανιτάκης 2 1323.80 2000-07-17
Νέος κωδικός
1 SELECT *
2 FROM employees
3 WHERE empid = 406;
4
5 empid firstname lastname depid salary hiredate
6 -----------------------------------------------------------
7 419 Πέτρος Αρβανιτάκης 2 1323.80 2000-07-17
26 / 40
Τροποποίηση κωδικού
419
1 SELECT *
2 FROM workson
3 WHERE empid = 419;
4
5 Empty set (0.00 sec)
406
1 SELECT *
2 FROM workson
3 WHERE empid = 406;
4
5 empid proid
6 -------------
7 419 12
8 419 21
9 419 43
27 / 40
Αυτοματοποίηση ενημέρωσης
UPDATE workson
1 UPDATE workson
2 SET empid = 406
3 WHERE empid = 419;
28 / 40
Αλυσίδα διαγραφής -1
Το τμήμα 2
1 SELECT *
2 FROM departments
3 WHERE depid = 2;
4
5 depid depname manager
6 -------------------------------------------
7 2 Οικονομολόγων/Λογιστών 153
29 / 40
Αλυσίδα διαγραφής -2
30 / 40
Αλυσίδα διαγραφής -1
Επιβεβαίωση
1 SELECT *
2 FROM departments
3 WHERE depid = 2;
4
5 Empty set (0.00 sec)
32 / 40
Υπάλληλοι
1 SELECT *
2 FROM employees
3 WHERE depid = 2;
4
5 Empty set (0.00 sec)
Απασχόληση σε έργα
1 SELECT w.*
2 FROM employees e INNER JOIN workson w
3 ON e.empid=w.empid
4 WHERE e.depid = 2;
5
6 Empty set (0.00 sec)
33 / 40
ON DELETE RESTRICT
employees
1 CREATE TABLE employees
2 (
3 empid INTEGER NOT NULL,
4 firstname CHAR(30) NOT NULL,
5 lastname CHAR(30) NOT NULL,
6 depid INTEGER NOT NULL,
7 salary NUMERIC(6,2),
8 hiredate DATE,
9 CONSTRAINT pk_employees PRIMARY KEY (empid),
10 INDEX i_depid (depid),
11 CONSTRAINT fk_depid FOREIGN KEY (depid)
12 REFERENCES departments(depid)
13 ON DELETE RESTRICT
14 ON UPDATE CASCADE
15 );
34 / 40
ON DELETE RESTRICT
Αποτυχία διαγραφής
1 DELETE
2 FROM departments
3 WHERE depid = 2;
4
5 ERROR 1451 (23000): Cannot delete or update a parent row:
6 a foreign key constraint fails
7 (employees, CONSTRAINT fk_depid FOREIGN KEY (depid)
8 REFERENCES departments (depid) ON UPDATE CASCADE)
35 / 40
Σειρά διαγραφής
36 / 40
ON UPDATE RESTRICT
workson
1 CREATE TABLE workson
2 (
3 empid INTEGER NOT NULL,
4 proid INTEGER NOT NULL,
5 CONSTRAINT pk_workson PRIMARY KEY (empid, proid),
6 INDEX i_empid (empid),
7 INDEX i_proid (proid),
8 CONSTRAINT fk_empid FOREIGN KEY (empid)
9 REFERENCES employees(empid)
10 ON DELETE RESTRICT
11 ON UPDATE RESTRICT,
12 CONSTRAINT fk_proid FOREIGN KEY (proid)
13 REFERENCES projects(proid)
14 ON DELETE RESTRICT
15 ON UPDATE RESTRICT
16 );
37 / 40
Αποτυχία ενημέρωσης
UPDATE workson
1 UPDATE projects
2 SET proid = 50
3 WHERE proid = 43;
4
5 ERROR 1451 (23000): Cannot delete or update a parent row:
6 a foreign key constraint fails
7 (workson, CONSTRAINT fk_proid FOREIGN KEY (proid)
8 REFERENCES projects (proid))
38 / 40
Υπενθύμιση
UPDATE projects
1 UPDATE projects
2 SET budget = 150000
3 WHERE proid = 43;
4
5 Query OK, 1 row affected (0.03 sec)
6 Rows matched: 1 Changed: 1 Warnings: 0
SELECT workson
1 SELECT *
2 FROM workson
3 WHERE proid = 43;
4
5 empid proid
6 -------------
7 189 43
8 419 43
9 593 43
10 901 43
39 / 40
Περίληψη διάλεξης
1 Η εντολή CREATE TABLE δημιουργεί πίνακες.
2 Ο όρος CONSTRAINT ... PRIMARY KEY ... ορίζει
το πρωτεύον κλειδί.
3 Ο όρος CONSTRAINT ... FOREIGN KEY ... ορίζει το
πρωτεύον κλειδί.
4 Η διαδοχική διαγραφή ενεργοποιείται με τον όρο ON
DELETE CASCADE.
5 Η αποτροπή διαδοχικής διαγραφής ενεργοποιείται με
τον όρο ON DELETE RESTRICT.
6 Ο ορισμός ξένου κλειδιού δεν επηρεάζει την εισαγωγή
δεδομένων στον γονικό πίνακα, επηρεάζει την
εισαγωγή δεδομένων στο θυγατρικό πίνακα.
7 Ο όρος ON DELETE [CASCADE—RESTRICT]
καθορίζει τον τρόπο με τον οποίο το ΣΔΒΔ χειρίζεται
εγγραφές του θυγατρικού πίνακα όταν εκτελείται
διαγραφή αντίστοιχων εγγραφών στον γονικό πίνακα. 40 / 40