Βάσεις Δεδομένων ΗγλώσσαSQL (Structured Query Language) Παύλος Εφραιμίδης Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 1
SQL - Structured Query Language (1) Ένας από τους βασικούς λόγους της απόλυτης επικράτησης των Σχεσιακών ΒΔ Εξασφαλίζει μεταφερσιμότητα μεταξύ των Σχεσιακών ΣΔΣΒΔ Υπάρχουν βέβαια διαφοροποιήσεις μεταξύ των υλοποιήσεων της SQL στα εμπορικά ΣΔΣΒΔ, όμως με λίγο προσοχή αυτά ξεπερνιούνται Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 2
SQL - Structured Query Language (2) Επίσης μπορούμε να γράφουμε SQL εντολές (προγράμματα) και αυτές να εκτελούνται σε πολλές και διαφορετικές μεταξύ τους πλατφόρμες ΗγλώσσαSQL σχετίζεται με τη σχεσιακή άλγεβρα Είδαμε στο προηγούμενο κεφάλαιο το Σχεσιακό Μοντέλο Δεδομένων, και τη Σχεσιακή Άλγεβρα. Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 3
Εισαγωγή στην SQL (1) ΟιπράξειςτηςΣχεσιακήςΆλγεβραςπαίζουν σημαντικόρόλογιατηνκατανόησητων διαφόρων αιτημάτων προς το Σχεσιακό ΣΔΒΔ αλλά επιπλέον και για την επεξεργασία και τη βελτιστοποίηση ερωτήσεων σε ένα Σχεσιακό ΣΔΒΔ ΤΑ ΚΑΛΑ ΝΕΑ είναι ότι οι διατυπώσεις σχεσιακών πράξεων στην SQL είναι πιο απλή υπόθεση από ότι στην σχεσιακή άλγεβρα Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 4
Εισαγωγή στην SQL (2) Στη σχεσιακή άλγεβρα πρέπει να ορίσουμε ακριβώς με ποια σειρά θα εκτελεστούν οι πράξεις μιας σύνθετης έκφρασης, ενώ στην SQL μπορούμε να περιγράψουμε σεπιοψηλόεπίπεδοτηνερώτηση/πράξη και αναλαμβάνει το ΣΔΒΔ να την εκτέλεση με αποδοτικό τρόπο Στην SQL δηλώνουμε απλά ΤΙ θέλουμε να κάνουμε. Η SQL βασίζεται στο ΣΧΕΣΙΑΚΟ ΛΟΓΙΣΜΟ ΠΛΕΙΑΔΩΝ, μιαάλλητυπικήγλώσσαπουίσωςδούμε εν συντομία σε επόμενο μάθημα Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 5
Ιστορικά Στοιχεία SEQUEL: H SQL σχεδιάστηκε από την IBM και αρχικά ονομαζόταν SEQUEL (Structured English Query Language) SQL: Σήμερα το SQL σημαίνει Structured Query Language και αποτελεί την κοινή γλώσσα όλως των Σχεσιακών ΣΔΒΔ Προφορά: Τα αρχικά SQL διαβάζονται διεθνώς SEQUEL... και στην Ελλάδα S-Q-L. Υλοποιήσεις της SQL SQL-1 SQL-86 SQL-2 SQL-92 SQL-3 SQL-99 Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 6
Δυνατότητες της SQL Η SQL είναι μια πλήρης γλώσσα βάσεων δεδομένων που περιλαμβάνει εντολές για ορισμό δεδομένων (ΓΟΔ DDL Data Definition Language) ενημέρωση (ΓΧΔ DML Data Manipulation Language) ερωτήσεις (ΓΧΔ Query Language) Επιπλέον υποστηρίζει τον ορισμό όψεων (views) προσδιορισμό ασφάλειας, δικαιωμάτων κτλ. ορισμό περιορισμών ακεραιότητας (integrity constraints) έλεγχο δοσοληψιών (transactions) Επίσης σε πολλές γλώσσες προγραμματισμού γενικού σκοπού επιτρέπεται η εμφύτευση εντολών SQL, όπως είναι η Java, C/C++, C#, Pascal/Delphi, Visual Basic, php,... Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 7
SQL - ΟΡΙΣΜΟΣ ΔΕΔΟΜΕΝΩΝ Ορολογία πίνακας (table) - σχέση γραμμή (row) - πλειάδα στήλη (column) - γνώρισμα Επιπλέον έννοιες: ΣΧΗΜΑ (schema): Ομαδοποιούνται πίνακες και άλλα δομικά στοιχεία που αναφέρονται στην ίδια βάση δεδομένων, όπως όψεις, δικαιώματα,... Κάθε σχήμα έχει ένα όνομα και κάποια ταυτότητα εξουσιοδότησης. Στην ORACLE: Για κάθε λογαριασμό ομάδας ορίζεται αυτόματα και ένα δικό της σχήμα Κάθε ομάδα δουλεύει σε ένα δικό της σχήμα, ώστε να δουλεύει σε μια δικιά της ΒΔ. Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 8
Κατάλογος (Catalog) Το Σύστημα Διαχείρισης Βάσεων Δεδομένων ένα σύνολο από μηχανισμούς και δεδομένα για τη διαχείριση των βάσεων δεδομένων Μία κεντρική δομή είναι ο ΚΑΤΑΛΟΓΟΣ (catalog) που περιλαμβάνει μια συλλογή σχημάτων Αφορούν τον διαχειριστή της βάσης δεδομένων (DBA Database Administrator) Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 9
Αλλαγή Κωδικού (Password) Εντολή SQL για την αλλαγή password (στην oracle): ALTER USER team20 IDENTIFIED BY dj1c2a; Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 10
Βασικές εντολές της SQL Διαχείριση Σχήματος ΒΔ CREATE ALTER DROP Διαχείριση Δεδομένων INSERT UPDATE DELETE Ερωτήματα (Queries) SELECT Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 11
DDL: CREATE TABLE CREATE TABLE STUDENTS ( NAME VARCHAR(15) ); Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 12
DDL: DROP TABLE CREATE TABLE STUDENTS ( NAME VARCHAR(15) ); DROP TABLE STUDENTS; DROP TABLE STUDENTS CASCADE CONSTRAINTS; Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 13
DDL: ALTER TABLE CREATE TABLE STUDENTS ( ID INTEGER, NAME VARCHAR(15) ); ALTER TABLE STUDENTS ADD AGE INTEGER; ALTER TABLE STUDENTS DROP COLUMN AGE; Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 14
CONSTRAINTS CREATE TABLE STUDENTS ( ID INTEGER PRIMARY KEY, NAME VARCHAR(15) NOT NULL ); ALTER TABLE ADD AGE; DROP TABLE STUDENTS CASCADE CONSTRAINTS; Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 15
Δημιουργία/Διαγραφή Πίνακα CREATE TABLE STUDENTS ( NAME VARCHAR(15) ); DROP TABLE STUDENTS; DROP TABLE STUDENTS CASCADE CONSTRAINTS; Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 16
Περιορισμοί Οι περιορισμοί του σχεσιακού μοντέλου δεδομένων:: Πεδίο Ορισμού Κλειδί Ακεραιότητα Οντοτήτων Αναφορική Ακεραιτότητα Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 17
Περιορισμοί και SQL Πεδίο Ορισμού: Οτύποςδεδομένωντου πεδίου/στήλης του πίνακα Κλειδί: Primary Key Unique Ακεραιότητα Οντοτήτων Αναφορική Ακεραιότητα: ALTER TABLE ergazomenos ADD CONSTRAINT FK_PROIST FOREIGN KEY(proistamenos) References ergazomenos(ar_tayt); Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 18
Αναφορική Ακεραιότητα στην SQL Παράδειγμα προσθήκης ενός περιορισμού αναφορικής ακεραιότητας σε έναν πίνακα: Το όνομα του πίνακα ALTER TABLE ergazomenos ADD CONSTRAINT FK_PROIST FOREIGN KEY(proistamenos) REFERENCES ergazomenos(ar_tayt); Ο πίνακας και το όνομα του πεδίου/στήλης στο οποίο αναφέρεται το τοπικό πεδίο Ένα όνομα για τον περιορισμό Το όνομα του πεδίου/στήλης Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 19
Πίνακες CREATE TABLE ΤΕΑΜ00.STUDENTS ( NAME VARCHAR(15) ); CREATE TABLE ΤΕΑΜ05.STUDENTS ( NAME VARCHAR(15) ); Για να δει ένας χρήστης όλους τους πίνακές του: SELECT TABLE_NAME FROM USER_TABLES; ΓιαναδειοDBA όλους τους πίνακες ενός χρήστη: SELECT * FROM DBA_TABLES WHERE OWNER = TEAM04'; Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 20
DML: Insert (1) Στην απλή της μορφή, χρησιμοποιείται για την εισαγωγή μιας η περισσοτέρων πλειάδων (γραμμών/εγγραφών) σε μια σχέση/πίνακα Η σειρά των γνωρισμάτων πρέπει να είναι ίδια με τη σειρά των γνωρισμάτων/πεδίων/στηλών του πίνακα Παράδειγμα: INSERT INTO EMPLOYEE VALUES ('Richard','K','Marini', '653298653', '30-DEC-52', '98 Oak Forest,Katy,TX', 'M', 37000,'987654321', 4 ) Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 21
DML: Insert (2) Εναλλακτικά η Insert μπορεί να χρησιμοποιηθεί δηλώνοντας ρητά τα γνωρίσματα τα οποία αντιστοιχούν στις τιμές της νέας πλειάδας: Γνωρίσματα με τιμή NULL μπορούν να παραλειφθούν Παράδειγμα: Εισαγωγή πλειάδας για έναν νέο εργαζόμενο EMPLOYEE για τον οποίο γνωρίζουμε μόνο το μικρό όνομα, το επίθετο και τον ΑΤ. INSERT INTO EMPLOYEE (FNAME, LNAME, SSN) VALUES ('Richard', 'Marini', '653298653'); Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 22
DML: DELETE Διαγράφει πλειάδες από μια σχέση Με χρήση του όρου WHERE μπορούμε να προσδιορίζουμε τις πλειάδες που θα διαγραφούν Μια εντολή delete διαγράφει πλειάδες από έναν πίνακα (εκτός εάν υπάρχουν περιορισμοί αναφορικής ακεραιότητας και η δοθεί συνθήκη CASCADE) Το πλήθος των γραμμών που διαγράφει η εντολή delete εξαρτάται από τη συνθήκη where Εάν δεν οριστεί συνθήκη WHERE-clause τότε η εντολή διαγράφει όλες τις γραμμές του πίνακα Σε αυτή την περίπτωση ο πίνακας θα δεν θα περιέχει καμία γραμμή μετά την εντολή delete (ο πίνακας όμως δεν θα έχει διαγραφεί!) Προσοχή στους περιορισμούς αναφορικής ακεραιότητας Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 23
Παραδείγματα: DML: DELETE (2) DELETE FROM EMPLOYEE WHERE LNAME='Brown ; DELETE FROM EMPLOYEE WHERE SSN='123456789 ; DELETE FROM EMPLOYEE WHERE DNO IN (SELECT DNUMBER FROM DEPARTMENT WHEREDNAME='Research'); DELETE FROM EMPLOYEE; Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 24
DML: UPDATE Μεταβολή των τιμών των πεδίων σε μία ή περισσότερες γραμμές του πίνακα where: Μια συνθήκη where καθορίζει ποιες γραμμές θα τροποποιηθούν set: Το τμήμα SET ορίζει ποια γνωρίσματα θα ενημερωθούν και ποιες θα είναι οι νέες τιμές τους Κάθε εντολή ενημερώνει πλειάδες που ανήκουν στην ίδια σχέση Η αναφορική ακεραιότητα θα πρέπει να τηρηθεί Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 25
DML: UPDATE (2) Παράδειγμα: Αλλαγή του πεδίου location και του υπεύθυνου τμήματος του project με αριθμό: UPDATE PROJECT SET PLOCATION = Bellaire', DNUM = 5 WHERE PNUMBER=10; Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 26
DML: UPDATE (3) Παράδειγμα: Αύξηση 10% σε όλους τους εργαζόμενους του τμήματος 'Research : U6: UPDATE EMPLOYEE SET SALARY = SALARY *1.1 WHERE DNO IN (SELECT DNUMBER FROM DEPARTMENT WHERE DNAME='Research') Παρατήρηση: Η νέα τιμή του πεδίου μισθός εξαρτάται από την αρχική τιμή του πεδίου Η αναφορά στο πεδίο SALARY δεξιά από το = αναφέρεται στην αρχική τιμή αριστερά από το = αναφέρεται στην νέα τιμή Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 27
DML: UPDATE (4) Παράδειγμα: Αύξηση 10% σε όλους τους εργαζόμενους όμως το ποσοστό αύξησης εξαρτάται από το μισθό του κάθε εργαζόμενου: update ergazomenos set misthos = case when misthos < 1000 then 1.1 * misthos when misthos < 2000 then 1.05 * misthos else misthos * 1.02 end; Ερώτηση κρίσης: Μπορεί η εντολή να αντικατασταθεί με τρία απλά updates; Πρέπει να προσέξουμε κάτι; Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 28
Ερωτήματα SQL (Queries) Απλά ερωτήματα SQL Σύνθετα SQL Queries Εμφωλιασμένα SQL Queries Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 29
Απλά SQL Queries Τα βασικά ερωτήματα SQL αντιστοιχούν στις πράξεις SELECT, PROJECT, και JOIN της σχεσιακής άλγεβρας Ένα απλό παράδειγμα ερωτήματος σε έναν πίνακα: Query 0: Ανάκτηση της ημερομηνίας γέννησης και της διεύθυνσης του εργαζόμενου με όνομα: 'John B. Smith'. Q0: SELECT BDATE, ADDRESS FROM EMPLOYEE WHERE FNAME='John' AND MINIT='B AND LNAME='Smith Μοιάζει με το ζευγάρι των πράξεων SELECT-PROJECT της σχεσιακής άλγεβρας. Το SELECT καθορίζει τα γνωρίσματα για το projection και το WHERE καθορίζει τη συνθήκη για το selection Σημείωση: Στην Σ:Λ το αποτέλεσμα επιτρέπεται να έχει πολλαπλές πλειάδες Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 30
Απλά SQL Queries (2) Query 1: Ανάκτηση του ονόματος και της διεύθυνσης όλων των εργαζομένων του τμήματος 'Research : SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DNAME='Research' AND DNUMBER=DNO; Μοιάζει με τις πράξεις SELECT-PROJECT-JOIN της σχεσιακής άλγεβρας (DNAME='Research') είναι η συνθήκη επιλογής (selection condition) (DNUMBER=DNO) είναι η συνθήκη join condition Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 31
Απλά SQL Queries (3) Query 2: Για κάθε έργο με τοποθεσία in 'Stafford', να βρεθούν ο κωδικός του έργου, το υπεύθυνο τμήμα, το όνομα, διεύθυνση, ημερ γέννησης του διευθυντή του υπεύθυνου τμήματος. SELECT PNUMBER, DNUM, LNAME, BDATE, ADDRESS FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND PLOCATION= Stafford ; Στο ερώτημα υπάρχουν 2 συνθήκες συνένωσης Η συνθήκη συνένωσης DNUM=DNUMBER σχετίζει το έργο με το υπεύθυνο τμήμα Η συνθήκη συνένωσης MGRSSN=SSN σχετίζει το υπεύθυνο τμήμα με τον εργαζόμενο που διευθύνει το τμήμα Βάσεις Δεδομένων Η Γλώσσα SQL - Μέρος Πρώτο 32