Χειρισμός δεδομένων με SQL
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Το σχεσιακό μοντέλο δεδομένων
Ένα σύστημα διαχείρισης βάσης δεδομένων (ΣΔΒΔ) (database management system (DBMS))
αποτελείται από ένα σύνολο δεδομένων και προγράμματα πρόσβασης στα δεδομένα αυτά.
Το σύνολο των δεδομένων καλείται βάση δεδομένων (database).
Στόχος του ΣΔΒΔ είναι η εύκολη και γρήγορη χρήση και ανάκτηση των δεδομένων.
Η διαχείριση των δεδομένων περιλαμβάνει:
- τον ορισμό δομών για τη αποθήκευση των δεδομένων
- τον ορισμό μεθόδων για τη διαχείριση των δεδομένων
Ο ορισμός της δομής της βάσης δεδομένων βασίζεται σε ένα μοντέλο δεδομένων
το οποίο ορίζει τον τρόπο που περιγράφονται τα δεδομένα, οι σχέσεις τους,
η σημασία τους και οι περιορισμοί πάνω στα δεδομένα αυτά.
Το σχεσιακό μοντέλο (relational model) δεδομένων
παριστάνει δεδομένα και τις σχέσεις τους ως ένα σύνολο πινάκων.
Κάθε πίνακας (table)
αποτελείται από στήλες (columns) με μοναδικά ονόματα.
Μια γραμμή (row) του πίνακα παριστάνει μια
σχέση (relationship) ανάμεσα σε ένα σύνολο από τιμές.
Ο πίνακας που ακολουθεί παριστάνει έναν τηλεφωνικό κατάλογο.
Αποτελείται από δύο στήλες και πέντε γραμμές.
Όνομα | Τηλέφωνο |
Γιώργος | 32560 |
Μαρία | 61359 |
Θανάσης | 98756 |
Λίνα | 78999 |
Πέτρος | 12356 |
Η SQL (structured query language) αποτελεί σήμερα την πιο διαδεδομένη γλώσσα
διαχείρισης σχεσιακών βάσεων δεδομένων.
Η SQL παρέχει δυνατότητες για:
- τον ορισμό, τη διαγραφή και τη μεταβολή πινάκων και κλειδιών,
- τη σύνταξη ερωτήσεων (queries),
- την εισαγωγή, διαγραφή και μεταβολή στοιχείων,
- τον ορισμό όψεων (views) πάνω στα δεδομένα,
- τον ορισμό δικαιωμάτων πρόσβασης,
- τον έλεγχο της ακεραιότητας των στοιχείων,
- τον έλεγχο συναλλαγών (transaction)
Η SQL είναι ορισμένη ως διεθνές πρότυπο.
Στις επόμενες ενότητες
θα εξετάσουμε ένα υποσύνολο της SQL όπως υποστηρίζεται από την
εγκατεστημένη στα εργαστήρια βάση δεδομένων Microsoft Access.
Στην περιγραφή της σύνταξης της SQL θα χρησιμοποιήσουμε τα παρακάτω σύμβολα:
- [ έκφραση ]
- η έκφραση εμφανίζεται προαιρετικά
- έκφραση1 | έκφραση2
- μπορεί να γραφεί η έκφραση1 ή η έκφραση2
- έκφραση ...
- η έκφραση μπορεί να επαναληφθεί
Τύποι δεδομένων
Τα δεδομένα κάθε στήλης ενός πίνακα πρέπει να έχουν ένα
συγκεκριμένο τύπο.
Οι βασικοί τύποι που υποστηρίζονται από την SQL είναι οι παρακάτω:
- ΒΙΤ
- Ναι ή Όχι
- CURRENCY
- Τιμή που παριστάνει με ακρίβεια αριθμούς από
922.337.203.685.477,5808 έως 922.337.203.685.477,5807
- DATETIME
- Χρόνος
- SINGLE
- Αριθμός κινητής υποδιαστολή μονής ακρίβειας
- DOUBLE
- Αριθμός κινητής υποδιαστολή διπλής ακρίβειας
- SHORT
- Ακέραιος 2 byte (-32768 έως 32767)
- LONG
- Ακέραιος 4 byte (-2.147.483.648 έως 2.147.483.647)
- TEXT
- Κείμενο μέχρι 255 χαρακτήρες
- LONGTEXT
- Κείμενο μέχρι 1.2GB
Δημιουργία πινάκων
Νέοι πίνακες δημιουργούνται με την εντολή CREATE TABLE.
Αυτή συντάσσεται ως εξής:
CREATE TABLE όνομα_πίνακα (πεδίο1 τύπος [(μέγεθος)] [, πεδίο2 τύπος [(μέγεθος)] [, ...]]
Για παράδειγμα η εντολή
CREATE TABLE Customer (Name TEXT (20), AccountNum SHORT)
δημιουργεί τον πίνακα με όνομα Customer και με δύο στήλες:
την Name και την AccountNum.
Αλλαγές σε πίνακες
Η εντολή ALTER TABLE επιτρέπει την προσθήκη νέων στηλών ή τη διαγραφή
υπαρχόντων.
Η προσθήκη νέων στηλών γίνεται με τη σύνταξη:
ALTER TABLE όνομα_πίνακα ADD COLUMN πεδίο τύπος[(μέγεθος)]
Για παράδειγμα η εντολή:
ALTER TABLE Customer ADD COLUMN Notes TEXT(25)
προσθέτει μια νέα στήλη στον πίνακα Customer.
Η διαγραφή υπαρχόντων στηλών γίνεται με τη σύνταξη:
ALTER TABLE όνομα_πίνακα DROP COLUMN πεδίο
Για παράδειγμα η εντολή:
ALTER TABLE Customer DROP COLUMN Notes
αφαιρεί τη στήλη Notes από τον πίνακα Customer.
Τέλος, η εντολή DROP TABLE επιτρέπει τη διαγραφή πινάκων.
Για παράδειγμα η εντολή
DROP TABLE Customer
θα διαγράψει τον πίνακα Customer
Δείκτες
Η πρόσβαση στα στοιχεία ενός πίνακα γίνεται ταχύτερα όταν αυτά οργανωθούν
με τη βοήθεια δεικτών.
Ένας δείκτης ορίζεται για μια συγκεκριμένη στήλη ή στήλες και επιτρέπει τη
γρήγορη πρόσβαση σε γραμμές με βάση τιμές της συγκεκριμένης στήλης.
Ουσιαστικά όταν ορίζουμε έναν δείκτη το ΣΔΒΔ υλοποιεί μια δομή δεδομένων
(π.χ. ταξινομημένο ή κατακερματισμένο πίνακα ή δένδρο) για γρήγορη πρόσβαση
στα αντίστοιχα δεδομένα.
Δείκτες δημιουργούνται με την εντολή CREATE INDEX.
Η σύνταξή της είναι η παρακάτω:
CREATE [ UNIQUE ] INDEX όνομα_δείκτη
ON όνομα_πίνακα (πεδίο [ASC|DESC][, πεδίο [ASC|DESC], ...])
Η λέξη UNIQUE ορίζει πως δε θα επιτρέπονται διπλές εμφανίσεις μιας τιμής
για το συγκεκριμένο δείκτη.
Οι λέξεις ASC και DESC ορίζουν αύξουσα ή φθίνουσα ταξινόμηση του
πίνακα με βάση το δείκτη.
Παράδειγμα:
CREATE INDEX NameIdx ON Customer (Name)
Δημιουργεί το δείκτη NameIdx για τη στήλη Name στον πίνακα Customer.
Ένας δείκτης μπορεί να διαγραφεί με τη σύνταξη:
DROP INDEX όνομα_δείκτη ON όνομα_πίνακα
Προσθήκη στοιχείων
Προσθήκη δεδομένων σε έναν πίνακα γίνεται με την εντολή
INSERT INTO σύμφωνα με τη σύνταξη:
INSERT INTO όνομα_πίνακα [(πεδίο1[, πεδίο2[, ...]])]
VALUES (τιμή1[, τιμή2[, ...])
Παράδειγμα:
INSERT INTO Customer (Name, AccountNum) VALUES ("Papadopoulos", 1234)
Επιλογή
Επιλογή δεδομένων από έναν ή περισσότερους πίνακες γίνεται με την εντολή
SELECT σύμφωνα με την παρακάτω βασική σύνταξη:
SELECT πεδία
FROM πίνακες
[ WHERE κριτήρια ]
Απλό παράδειγμα:
SELECT Name, AccountNum FROM Customer WHERE Name LIKE "Pap*"
Τα πεδία μπορούν να είναι ονόματα πεδίων ή συγκεντρωτικές συναρτήσεις της
SQL πάνω σε πεδία.
Τέτοιες συναρτήσεις είναι οι παρακάτω:
- Avg
- Μέσος όρος
- Count
- Μέτρηση
- Min
- Ελάχιστο
- Max
- Μέγιστο
- Sum
- Σύνολο
Παράδειγμα:
SELECT Sum(AccountBalance) FROM Customer
Ο αστερίσκος ως ορισμός πεδίου επιλέγει όλα τα πεδία.
Τα κριτήρια αναζήτησης είναι εκφράσεις πάνω στα πεδία.
Ορισμένοι βασικοί τελεστές είναι οι:
- αριθμητικοί + - * / mod
- σύγκρισης < <= > >> = <> like
- λογικοί and or not
Παράδειγμα:
SELECT * FROM Customer WHERE Balance > 10000 AND Name LIKE "Papad*"
Βασικό στοιχείο του σχεσιακού μοντέλου είναι η αποθήκευση δεδομένων
σε πίνακες που σχετίζονται μεταξύ τους.
Έτσι για παράδειγμα ένας πίνακας μπορεί να φυλάει τα στοιχεία των πελατών
και ένας άλλος τους λογαριασμούς.
Με τον τρόπο αυτό τα στοιχεία ενός πελάτη που έχει πολλούς λογαριασμούς
σε μια τράπεζα φυλάσσονται μόνο μια φορά.
Ανάκτηση από δύο τέτοιους πίνακες γίνεται με τον προσδιορισμό τους
στο SELECT μαζί με τη χρήση της κατάλληλης έκφρασης που θα ενώσει τους
πίνακες.
Παράδειγμα:
SELECT Customer, Balance FROM Customers, Accounts WHERE
Customer.AccountId = Accounts.AccountId
Αλλαγή
Αλλαγή σε στοιχεία γίνεται με την εντολή UPDATE σύμφωνα με τη σύνταξη:
UPDATE όνομα_πίνακα
SET πεδίο = νέα_τιμή
WHERE κριτήρια;
Παράδειγμα:
UPDATE Accounts
SET Balance=100000
WHERE AccountId = 12233
Διαγραφή
Διαγραφή γραμμών από έναν πίνακα γίνεται με την εντολή DELETE σύμφωνα με
τη σύνταξη:
DELETE
FROM όνομα_πίνακα
WHERE κριτήρια
Παράδειγμα:
DELETE
FROM Accounts
WHERE
AccountId = 123232
SQL στη Microsoft Access
Για να δώσουμε εντολές SQL στη Microsoft Access ακολουθούμε την
παρακάτω διαδικασία:
- Δημιουργούμε μια κενή βάση δεδομένων
- View - Database objects - Queries
- New - Design view
- Show table - close
- View - SQL
- Γράφουμε την εντολή SQL που θέλουμε
- Query - Run
Τα αποτελέσματα της εντολής μπορούμε να τα δούμε στην περιοχή Tables.
Βιβλιογραφία
- D. D. Chamberlin,
M. M. Astrahan, K. P. Eswaran, P. P. Griffiths, R. A. Lorie, J. W. Mehl,
P. Reisner, and B. W. Wade.
SEQUEL 2: A unified approach to data definition manipulation and control.
IBM Journal of Research and Development, 20(6):560–575, November
1976.
- Peter Pin-Shan Chen.
The entity-relationship model — toward a unified view of data.
ACM Transactions on Database Systems, 1(1):9–36, March 1976.
- International Organization
for Standardization, Geneva, Switzerland.
Information technology — Database languages — SQL, 1992.
ISO/IEC 9075:1992.
- Henry F. Korth
and Abraham Silberschatz.
Database System Concepts.
McGraw-Hill, second edition, 1991.
Ασκήσεις
Άσκηση 10 (προαιρετική)
- Ορίστε με βάση SQL έναν τηλεφωνικό κατάλογο με τους φίλους σας.
- Εισάγετε μερικά ονόματα και τα τηλέφωνα
- Ανακτήστε ένα τηλέφωνο με τον τελεστή LIKE
- Μετρήστε τον αριθμό των φίλων σας με την έκφραση Count