Χειρισμός δεδομένων με 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 παρέχει δυνατότητες για:

Η 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
Ο αστερίσκος ως ορισμός πεδίου επιλέγει όλα τα πεδία.

Τα κριτήρια αναζήτησης είναι εκφράσεις πάνω στα πεδία. Ορισμένοι βασικοί τελεστές είναι οι:

Παράδειγμα:
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 ακολουθούμε την παρακάτω διαδικασία: Τα αποτελέσματα της εντολής μπορούμε να τα δούμε στην περιοχή Tables.

Βιβλιογραφία

Ασκήσεις

Άσκηση 8 (προαιρετική)

  1. Ορίστε με βάση SQL έναν τηλεφωνικό κατάλογο με τους φίλους σας.
  2. Εισάγετε μερικά ονόματα και τα τηλέφωνα
  3. Ανακτήστε ένα τηλέφωνο με τον τελεστή LIKE
  4. Μετρήστε τον αριθμό των φίλων σας με την έκφραση Count