ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Τμήμα Διοίκησης Επιχειρήσεων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ.

Πανεπιστήµιο Ιωαννίνων Τµήµα Μαθηµατικών Μάθηµα: Βάσεις εδοµένων (741) Εργαστηριακό Τεστ Οµάδα: Α 18/11/2004

ΕΠΛ 342 Βάσεις εδοµένων

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

Σχεδιασμός Βάσεων Δεδομένων

H SQL είναι η γλώσσα για όλα τα εμπορικά σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ.


Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

Βάσεις Δεδομένων Ι SQL Μέρος 3 ο. (Constraints & Joins) Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

Εργαστήριο βάσεων δεδομένων. Εισαγωγή στη MySQL (2)

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

2 ο Σύνολο Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Βάσεις Δεδομένων 5η εργαστηριακή άσκηση

Εισαγωγή στην πληροφορική

ΗΓλώσσαSQL. Εισαγωγή Βασικές Έννοιες Τύποι Δεδομένων Ορισμός Δεδομένων Χειρισμός Δεδομένων

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Επιλέγει όλες τις πλειάδες, από μια σχέση R, που ικανοποιούν τη συνθήκη επιλογής.

Ορισμοί Σχεσιακού Μοντέλου και (απλές)τροποποιήσεις Σχέσεων στην SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Τμήμα Πληροφορικής ΑΠΘ

Βάσεις Δεδομένων (Ε) Εισαγωγή στην υλοποίηση σχεσιακών βάσεων δεδομένων

Ηλεκτρονικοί Υπολογιστές II

Διαχείριση Πολιτισμικών Δεδομένων

Ηλεκτρονικοί Υπολογιστές II

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

Εργαστήριο βάσεων δεδομένων. Εισαγωγή στη MySQL (2)

Βάσεις Δεδομένων Ι [Σημειώσεις Εργαστηρίου]


SQL Τύποι Δεδομένων Δημιουργία Πίνακα Παράδειγμα.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (1)

Διάλεξη 16: SQL DML IV, SQL DCL, SQL TCL. Διδάσκων: Παναγιώτης Ανδρέου

Βάσεις Δεδομένων Ι [Σημειώσεις Εργαστηρίου]

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

Το Μοντέλο των Οντοτήτων Συσχετίσεων Entity Relationship Model. Νικόλαος Ζ. Ζάχαρης

Σχεδίαση και λειτουργία βάσης δεδομένων Το παράδειγμα της μαιευτικής κλινικής Ευάγγελος Καρβούνης

Βάσεις Δεδομένων (Databases)

Η SQL ως γλώσσα ερωτημάτων. Υπενθυμίζουμε: Σχέση = Πίνακας Πλειάδα = Εγγραφή = Γραμμή (Πίνακα) Πεδίο = Γνώρισμα (Σχέσης) = Στήλη (Πίνακα)

(Μέρος 3:Γλώσσα Ορισµού, Γλώσσα Τροποποίησης, Ενσωµατωµένη SQL) Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

Certified Data Base Designer (CDBD)

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ - SQL

Έχουµε την βάση της σχολής που αποτελείται από τους παρακάτω πίνακες.

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ Relational Model. SQL Μαθ. #11

Τεχνολογία Πολιτισμικού Λογισμικού

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο. Εργαστηριακή Άσκηση 4 7/02/2012

ΣΧΕΔΙΑΣΜΟΣ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ ΕΡΓΑΣΤΗΡΙΟ 3

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 4ο Μάθημα: SQL - Παράδειγμα. Δρ. Κωνσταντίνος Χ.

MOCϦϣΎϬϴϠϋϝϮμΤϟϢΗϊΟήϤϟ. USE northwind SELECT employeeid, lastname, firstname, title FROM employees GO

Βάσεις Δεδομένων. Βασίλειος Βεσκούκης Εισαγωγή στη γλώσσα SQL (Structured Query Language) Η γλώσσα SQL

ΚΕΦΑΛΑΙΟ ΤΡΙΤΟ ΕΝΤΟΛΕΣ SQL

Παράδειγμα Insert Update Delete Alter.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (2)

Ανοικτά Ακαδημαϊκά Μαθήματα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #6

Σχεδιασμός Πληροφοριακών Συστημάτων. Σημειώσεις

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #3

Εργαστήριο Βάσεων Δεδομένων

Βάσεις Δεδομένων. Εισαγωγή για το Εργαστήριο. Δρ. Τιάκας Ελευθέριος. Τμήμα Πληροφορικής ΑΠΘ

Τμήμα Πληροφορικής ΑΠΘ

Παράδειγμα Select Introduction Group By Join Aliases.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (3)

1. ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΤΗΣ MySQL

Η Γλώσσα SQL. Εισαγωγή Βασικές Έννοιες Τύποι Δεδομένων Ορισμός Δεδομένων Χειρισμός Δεδομένων

Βάσεις δεδομένων. (7 ο μάθημα) Ηρακλής Βαρλάμης

Σχεδίαση Βάσεων Δεδομένων

Postgress ΣΤΟΧΟΣ ΣΧΕΤΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ ΥΛΙΚΟ. ΠΕΡΙΒΑΛΛΟΝ ΓΙΑ ΕΞΑΣΚΗΣΗ pgadmin ΥΠΟΒΑΘΡΟ. Συναρτήσεις στην PostgreSQL. 1. Γενικά

ΘΕΜΑΤΑ. Ερώτηση 1 Κατά τη Φυσική Αποθήκευση (Physical storage) μιας ΒΔ αποθηκεύονται στον δίσκο τα:

Ενεργές ΒΔ. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Βάσεις Δεδομένων Ενεργές ΒΔ 1

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Βάσεις Δεδομένων. Ενότητα 7.1: Structured Query Language - 1 ο Μέρος. Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 9β: SQL (Διαχείριση εγγραφών, Όψεις, Περιορισμοί, Εναύσματα) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής

SQL Data Manipulation Language

DELETE, UPDATE, INSERT.

DELETE, UPDATE, INSERT

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples Ξένου Ρουμπίνη

Εργαστήριο Βάσεων Δεδομένων. Triggers


Βάσεις Δεδομένων ΗγλώσσαSQL (Structured Query Language)

Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

Ακεραιότητα και Ασφάλεια Μέρος 1 Σχεδιασμός Βάσεων Δεδομένων

SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Το σχεσιακό μοντέλο βάσεων δεδομένων

Βάσεις Δεδομένων (Databases)

Τεχνολογία Πολιτισμικού Λογισμικού

Βάσεις Δεδομένων Η γλώσσα SQL (Structured Query Language) Εισαγωγή στην SQL (2) Ιστορικά Στοιχεία. SQL - Structured Query Language (1)

Διάλεξη 12: SQL Data Definition Language. Διδάσκων: Παναγιώτης Ανδρέου

Σύνολα Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

SQL Server 2005 Tutorial Αςκήςεισ. Γεράσιμος Μαρκέτος InfoLab, Τμήμα Ρληροφορικήσ, Ρανεπιςτήμιο Ρειραιϊσ (

ΔΟΜΕΣ ΚΑΙ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ

Βάσεις Δεδομένων. Εργαστήριο ΙV. Τμήμα Πληροφορικής ΑΠΘ

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΤΡΙΤΟ Foreign key, Index, DML Ερωτήµατα Γιώργος Μαρκοµανώλης

Περιεχόµενα Foreign Key... 1 Index... 4 DML Ερωτήµατα... 6 INSERT... 6 SELECT... 6 Συναρτήσεις... 9

Foreign Key Foreign Key Ένα foreign key είναι µια στήλη ή ένα σύνολο στηλών σε ένα πίνακα το οποίο αντιστοιχεί µε την ίδια σειρά σε µια στήλη ή σε ένα σύνολο στηλών αντίστοιχα που είναι ορισµένες σαν primary key ή unique. Για να οριστεί τέτοιου είδους περιορισµός πρέπει να έχετε δηµιουργήσει δύο πίνακες που στον έναν θα έχετε δηλωµένες τις στήλες που θέλετε σαν primary key ή unique και στον άλλον πίνακα που θα είναι το foreign key θα υπάρχουν στήλες που θα αντιστοιχούν στις στήλες του πρώτου πίνακα. Αν θεωρήσουµε λοιπόν το αυτό το µοντέλο, δηλαδή ότι έχουµε δύο πίνακες που τον έναν τον ονοµάζουµε parent και τον άλλον child, τότε οι γραµµές που είναι foreign key στον πίνακα child εξαρτώνται από τις γραµµές του parent. Το foreign key έχει τους ακόλουθους περιορισµούς: Απαιτεί ότι οι τιµές που είναι στις στήλες του πίνακα child που αποτελούν το foreign key, πρέπει να υπάρχουν στις στήλες του primary key που αποτελούν το primary key ή unique. Απαγορεύεται να διαγράψετε µια στήλη από τον πίνακα parent ή να αλλάξετε την τιµή από µια εγγραφή της οποίας το γνώρισµα είναι συνδεµένο µε foreign key και υπάρχει και η αντίστοιχη τιµή στον πίνακα child. Για να δηµιουργήσετε έναν περιορισµό πρέπει να δηµιουργήσετε πρώτα τον πίνακα parent. Σε αυτό τον πίνακα θα ορίσετε το primary key και αν υπάρχει και περιορισµός unique για την σύνδεση των πινάκων. Εµείς θα κάνουµε ένα παράδειγµα µε τους πίνακες υπάλληλοι και τµήµατα. CREATE TABLE EMPLOYEE ( EMPLOYEE_ID BIGINT NOT NULL, NAME VARCHAR(20), SURNAME VARCHAR(40), CONSTRAINT PK_EMPLOYEE PRIMARY KEY(EMPLOYEE_ID)); CREATE TABLE DEPARTMENTS ( DEPARTMENT_ID BIGINT NOT NULL, NAME CHAR(30) NOT NULL, DIRECTOR_ID BIGINT NOT NULL, CONSTRAINT PK_DEPARTMENTS PRIMARY KEY(DEPARTMENT_ID)); 1

Foreign Key Για να ορίσετε ένα Foreign Key στον πίνακα DEPARTMENTS πρέπει να πληκτρολογήσετε την ακόλουθη εντολή: ALTER TABLE DEPARTMENTS ADD CONSTRAINT FK_DEPARTMENTS_EMPLOYEE FOREIGN KEY (DIRECTOR_ID) REFERENCES EMPLOYEE(EMPLOYEE_ID); Η σύνταξη της εντολής για foreign key είναι η εξής: FOREIGN KEY(Όνοµα_στήλης) REFERENCES όνοµα_πίνακα_parent(όνοµα_στήλης) [ON DELETE {NO ACTION CASCADE SET NULL DEFAULT}] [ON UPDATE {NO ACTION CASCADE SET NULL DEFAULT}] Με την παραπάνω εντολή δηµιουργείται ένα foreign key µε την στήλη που είναι µέσα στην παρένθεση και αναφέρετε στην στήλη που είναι στον πίνακα µετά την λέξη REFERENCES. Επίσης αν θέλετε ορίζεται και τις λειτουργίες που θα γίνονται όταν διαγράφετε ή ενηµερώνετε κάποια τιµή της στήλης του πίνακα στον οποίο αναφέρετε ο περιορισµός. ηλαδή: Με την εντολή: ON DELETE CASCADE ορίζουµε ότι αν διαγράψουµε µια τιµή από την στήλη EMPLOYEE_ID του πίνακα EMPLOYEE και υπάρχει η ίδια τιµή σε στήλη του DIRECTOR στον πίνακα DEPARTMENTS, τότε θα διαγραφούν όλες οι εγγραφές από τον πίνακα DEPARTMENTS που έχουν την συγκεκριµένη τιµή. Αν αντί για ON DELETE CASCADE βάλετε ON DELETE NO ACTION τότε δηλώνετε ότι όταν διαγράφετε εγγραφές από τον πίνακα EMPLOYEE, δεν γίνονται αλλαγές στον πίνακα DEPARTMENTS. Αν δηλώσετε ON DELETE SET NULL τότε όταν διαγράφετε εγγραφές από τον πίνακα EMPLOYEE, καταχωρείται η τιµή NULL στις αντίστοιχες τιµές της στήλης DIRECTOR. Αν δηλώσετε ON DELETE DEFAULT τότε όταν διαγράφετε εγγραφές από τον πίνακα EMPLOYEE, καταχωρείται η DEFAULT τιµή στις αντίστοιχες τιµές της στήλης DIRECTOR. Οµοίως για το ON UPDATE απλώς αυτή η εντολή αφορά την ενηµέρωση και όχι την διαγραφή εγγραφών. Προσοχή: Το αν θα επιλέξετε CASCADE ή κάποια άλλη εντολή εξαρτάται πάντα από το νόηµα που έχουν οι στήλες, δηλαδή στο συγκεκριµένο παράδειγµα αν δηλώσουµε την εντολή ON DELETE CASCADE τότε αν διαγράψουµε έναν υπάλληλο από τον πίνακα 2

Foreign Key EMPLOYEE που είναι διευθυντής σε ένα τµήµα, τότε θα διαγραφεί και ο διευθυντής αλλά και ολόκληρο το τµήµα µε αποτέλεσµα να δηµιουργηθεί σφάλµα στην βάση. Παρατηρήστε ότι ο τρόπος σύνδεσης των πίνακα των υπαλλήλων µε τον πίνακα των τµηµάτων είναι ένα προς πολλά γιατί µπορείτε να βάλετε τον ίδιο διευθυντή σε πολλά τµήµατα. Αν όµως θέλουµε να έχουµε έναν διευθυντή ανά τµήµα (το πιο λογικό) θα πρέπει να δηλώσετε την στήλη DIRECTOR σαν unique constraint. ώστε την εντολή: ALTER TABLE DEPARTMENTS ADD CONSTRAINT DIRECTOR_UNIQ UNIQUE(DIRECTOR_ID); Τώρα πλέον γίνεται να βάλετε µόνο έναν διευθυντή ανά τµήµα, άρα η σχέση των υπαλλήλων µε τα τµήµατα είναι ένα προς ένα. 3

Index Index Το index είναι µια ιδιότητα του πίνακα η οποία µπορεί να δηλωθεί σε µια στήλη ή σε ένα σύνολο στηλών ώστε να επιταχυνθεί η εύρεση σειρών από τον πίνακα. Το index είναι σαν ένας σελιδοδείκτης όπου βρίσκει κατευθείαν την σελίδα που ψάχνετε χωρίς να πρέπει να διαβάσετε όλο το βιβλίο. Μπορείτε να φτιάξετε µέχρι 256 index για κάθε πίνακα. Όταν δηλώνετε έναν περιορισµό όπως primary key, foreign key, unique, τότε αυτόµατα δηµιουργείται ένα index για τις στήλες που δηλώνεται τους περιορισµούς. Επίσης στο index έχετε την δυνατότητα να ορίσετε Ascending ώστε τα δεδοµένα του index να µπαίνουν σε σειρά από την µικρότερη τιµή προς την µεγαλύτερη και Descending για να µπαίνουν οι τιµές σε σειρά από το µεγαλύτερο προς το µικρότερο. Ποιες στήλες να κάνετε index Συνήθως θα κάνετε index µια στήλη στις ακόλουθες περιπτώσεις: Όταν υπάρχουν συνθήκες αναζήτησης που αναφέρονται στην στήλη, όπως BETWEEN, STARTING WITH, CONTAINING. εν είναι χρήσιµο το index σε στήλη που αναζητάτε τιµή µε το LIKE. Είναι χρήσιµο όταν έχουµε πολλά ερωτήµατα µε την εντολή ORDER BY (θα την δούµε αργότερα) αφού µε αυτή την εντολή κάνουµε ταξινόµηση των γραµµών που γίνεται και µε το index. Μπορείτε να προσθέσετε την δυνατότητα index στις στήλες που πιστεύετε ότι απαιτείται (συνήθως σε αυτές που γίνονται πολλά ερωτήµατα και κάνετε συχνή αναζήτηση). εν πρέπει να βάζετε index όταν: Ανανεώνονται συχνά οι τιµές της στήλης. Είναι προκαθορισµένες οι πιθανές απαντήσεις. Προσοχή: εν είναι σωστό να δηµιουργείτε πολλά index σε έναν πίνακα γιατί αντί να βοηθάνε για την πιο γρήγορη εύρεση δεδοµένων θα κάνουν την βάση πιο αργή. Να γίνετε χρήση των index µε προσοχή. ηµιουργία Index Η σύνταξη για την δηµιουργία index είναι η ακόλουθη: CREATE [UNIQUE] [ASC DESC] INDEX όνοµα_του_index ON όνοµα_πίνακα (όνοµα στήλης ή ονόµατα στηλών) 4

Index Παράδειγµα Για να δηµιουργήσετε ένα Index µε το όνοµα EMP για την στήλη SURNAME του πίνακα EMPLOYEE δώστε την εντολή: CREATE INDEX EMP ON EMPLOYEE(SURNAME); Για να δηµιουργήσετε Index για το NAME και SURNAME δώστε την εντολή: CREATE INDEX EMP ON EMPLOYEE(NAME,SURNAME); Αν θέλετε να δηµιουργήσετε ένα unique index, τότε θα δώσετε την εντολή: CREATE UNIQUE INDEX EMP ON EMPLOYEE(SURNAME); Απενεργοποίηση και ενεργοποίηση index Για να απενεργοποιήσετε το index EMP δώστε την εντολή: ALTER INDEX EMP INACTIVE; Για να το ενεργοποιήσετε: ALTER INDEX EMP ACTIVE; ιαγραφή Index Για να διαγράψετε ένα index δώστε την εντολή: DROP INDEX EMP; 5

DML Ερωτήµατα DML Ερωτήµατα Τα αρχικά DML σηµαίνουν data manipulation language και εννοούµε την γλώσσα που διαχειρίζεται τα δεδοµένα σε µια βάση (εύρεση, εισαγωγή, ενηµέρωση και διαγραφή). INSERT Για να µπορέσετε να καταχωρήσετε µερικά δεδοµένα για να δείτε καλύτερα τα παραδείγµατα µε την εντολή select θα πούµε για την εντολή Insert. Σύνταξη εντολής: INSERT INTO <όνοµα πίνακα ή όνοµα όψης> (ονόµατα στηλών για τα οποία θα εισάγετε δεδοµένα) VALUES (δεδοµένα που θα εισάγετε για κάθε στήλη χωρισµένα µε κόµµα) Παράδειγµα Για να καταχωρήσετε έναν υπάλληλο στον πίνακα EMPLOYEE δώστε την εντολή: INSERT INTO EMPLOYEE (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, FATHER_NAME, POLICE_ID, BIRTH_DATE, TELEPHONE, GENDER, DEPARTMENT_ID, ADDRESS, EMAIL) VALUES (1, JOHN, JELIOS, PETER, Σ063748, 5.3.1975, 2651012345, M, 4, ΠΑΝΕΠΙΣΤ ΗΜΙΟΥ 12, john@company.gr ); SELECT Με την εντολή SELECT επιλέγουµε κάποια δεδοµένα από πίνακες ανάλογα µε τα κριτήρια που δηλώνεται µέσα στην εντολή SELECT. Η γενική σύνταξη της εντολής SELECT είναι η ακόλουθη: SELECT [FIRST(m)][SKIP(n)][[ALL] DISTINCT] <λίστα στηλών> [,[όνοµα στήλης] expression constant] AS όνοµα FROM <πίνακας ή stored procedure ή view> [{[[INNER] [{LEFT RIGHT FULL} [OUTER]] JOIN}] <πίνακας ή stored procedure ή view> ON <συνθήκες ένωσης> [{JOIN..]] [WHERE <συνθήκη>] [GROUP BY <ονόµατα στηλών για οµαδοποίηση>] 6

DML Ερωτήµατα [HAVING <συνθήκη αναζήτησης>] [UNION <εντολή select> [ALL]] [PLAN <έκφραση plan>] [ORDER BY <λίστα στηλών>] [FOR UPDATE [OF <ονόµατα στηλών>] [WITH LOCK] Όλες οι εντολές του select που χρειάζονται άµεσα θα εξηγηθούν στα ακόλουθα µαθήµατα. Παραδείγµατα Για να δείτε όλα τα δεδοµένα του πίνακα των υπαλλήλων, αφού έχετε συνδεθεί φυσικά µε την βάση, πληκτρολογήστε την εντολή: SELECT * FROM EMPLOYEE; Για να δείτε όλους τους αριθµούς µητρώων των υπαλλήλων δώστε την εντολή: SELECT EMPLOYEE_ID FROM EMPLOYEE; Αν θέλουµε να δούµε τους αριθµούς µητρώων µαζί µε το όνοµα και το επώνυµο των υπαλλήλων δώστε την εντολή: SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME FROM EMPLOYEE; Αν θέλετε κατά την εµφάνιση των αποτελεσµάτων να έχει διαφορετικό όνοµα κάποια στήλη τότε χρησιµοποιείτε την εντολή AS. ηλαδή αν θέλετε το FIRST_NAME να το βλέπετε σαν NAME και το LAST_NAME σαν SURNAME τότε δώστε την εντολή: SELECT EMPLOYEE_ID, FIRST_NAME AS NAME, LAST_NAME AS SURNAME FROM EMPLOYEE; Προσοχή: Μετά την εντολή AS πρέπει να υπάρχει µια συνεχόµενη πρόταση, δηλαδή αν θέλετε µετά το AS να βάλετε τις λέξεις FULL NAME τότε πρέπει να την γράψετε FULL_NAME, δηλαδή να µην υπάρχουν κενά ανάµεσα στις λέξεις. Επίσης µπορείτε να κάνετε select τις στήλες µε όποια σειρά θέλετε. Αν θέλετε να βρείτε κάποιες εγγραφές αλλά να µην εµφανιστούν δύο ίδιες αλλά κάθε εγγραφή να είναι µοναδική, τότε πληκτρολογήστε την εντολή: SELECT DISTINCT BIRTH_DATE FROM EMPLOYEE; Για να βρείτε τα στοιχεία ενός υπαλλήλου που ξέρετε τον αριθµό µητρώου του (έστω ο αριθµός µητρώου είναι 4), πληκτρολογήστε την εντολή: SELECT * FROM EMPLOYEE WHERE EMPLOYEE_ID=4; 7

DML Ερωτήµατα ηλαδή αν ψάχνετε συγκεκριµένες εγγραφές γράφετε µετά το SELECT τις στήλες που θέλετε να βρείτε ή * για να εµφανιστούν όλες οι στήλες, έπειτα γράφετε from τον πίνακα που θα βρει τις στήλες, γράφεται where και µετά το όνοµα της στήλης και κάποιον τελεστή. Θα µπορούσαµε παραπάνω να είχαµε EMPLOYEE_ID>4,!=4 ή θα µπορούσαµε να είχαµε DIRTH_DATE= 11/18/2004 AND NAME= JOHN Προσοχή µε τις ηµεροµηνίες: Στο παραπάνω ερώτηµα µε την στήλη BIRTH_DATE η ηµεροµηνία που έχει καταγραφεί στην βάση είναι 18/11/2004 αλλά όταν θέλετε να βρείτε εγγραφές και έχετε ως κριτήριο την ηµεροµηνία θα βάζετε πρώτα τον µήνα και µετά την µέρα. Όµως για λόγους ευκολίας µπορείτε να γράφετε την ηµεροµηνία µε. αντί για /, δηλαδή 18.11.2004 όπου µε αυτή την µορφή η ηµεροµηνία γράφεται κανονικά όπως γνωρίζουµε. Αν θέλετε µετά το where να βάλετε πολλές συνθήκες µπορείτε αναλόγως αν θέλετε να ισχύουν όλες να χωρίζονται µε AND ή αν θέλετε να ισχύουν κάποιες από αυτές να χωρίζονται µε OR. Για να διαλέξετε κάποιες εγγραφές µε βάση τον αριθµό των εγγραφών, δώστε την εντολή: SELECT FIRST 2 SKIP 1 EMPLOYEE_ID FROM EMPLOYEE; Με την παραπάνω εντολή θα εµφανιστούν δύο αριθµοί µητρώων αλλά θα είναι ο δεύτερος και ο τρίτος στον πίνακα αφού δηλώσαµε να µην εµφανίσει έναν αριθµό µητρώου. Αυτή η εντολή έχει σηµασία όταν οι εγγραφές είναι ταξινοµηµένες. Θα δούµε αργότερα την ταξινόµηση. Έστω ότι θέλετε να βρείτε τους υπαλλήλους που έχουν γεννηθεί από 10/1/1960 µέχρι 10/1/1970, τότε πληκτρολογήστε την εντολή: SELECT * FROM EMPLOYEE WHERE BIRTH DATE BETWEEN 1/10/1960 AND 1/10/1970 ; Μετά το where µπορείτε να χρησιµοποιήσετε: BETWEEN AND CONTAINING IN LIKE STARTING WITH 8

Συναρτήσεις Συναρτήσεις Η SQL έχει συναρτήσεις για την διευκόλυνση κάποιων διαδικασιών. ΜΑΧ Με την MAX µπορείτε να βρείτε την µέγιστη τιµή µιας στήλης αλλά και στηλών µε κάποια πράξη. Παράδειγµα Για να βρείτε την µέγιστη τιµή από µια στήλη µε το όνοµα Price που έχει πωλήσεις ενός προϊόντος από τον πίνακα που λέγεται SALES, τότε δώστε την εντολή: SELECT MAX(PRICE) FROM SALES; Αν οι τιµές δεν έχουν ΦΠΑ και θέλετε να βρείτε την µέγιστη τιµή µε ΦΠΑ, δώστε την εντολή: SELECT MAX(1.18*PRICE) FROM SALES; ΜΙΝ Οµοίως µε την ΜΑΧ απλώς βρίσκει την µικρότερη τιµή. SUM Αυτή η συνάρτηση υπολογίζει το άθροισµα των τιµών µιας στήλης. Αν θέλετε να υπολογίσετε το άθροισµα των τιµών της στήλης PRICE, τότε πληκτρολογήστε την εντολή: SELECT SUM(PRICES) FROM SALES; COUNT Αυτή η συνάρτηση υπολογίζει τον αριθµό των γραµµών που ικανοποιούν τις συνθήκες. Αν θέλετε να βρείτε πόσοι υπάλληλοι έχουν γεννηθεί πριν το 1970, τότε δώστε την εντολή: SELECT COUNT(EMPLOYEE_ID) FROM EMPLOYEE WHERE BIRTH_DATE< 1.1.1970 ; 9

Συναρτήσεις AVG Η συνάρτηση AVG υπολογίζει τον µέσο όρο της στήλης. Για να βρείτε τον µέσο όρο των τιµών, δώστε την εντολή: SELECT AVG(PRICE) FROM SALES; EXTRACT Η συνάρτηση EXTRACT είναι πολύ σηµαντική γιατί µε την χρήση της µπορείτε να πάρετε ένα µέρος από DATE, TIME, TIMESTAMP. Αν θέλετε να δείτε τις χρονιές που γεννήθηκαν οι υπάλληλοι, δώστε την εντολή: SELECT EXTRACT(YEAR FROM BIRTH_DATE) FROM EMPLOYEE; Οµοίως µπορείτε να αντί για year να βρείτε day, month και άλλα αναλόγως αν είναι DATE, TIME, TIMESTAMP. SUBSTRING Με αυτή την συνάρτηση µπορείτε να πάρετε µόνο ένα µέρος µιας συµβολοσειράς. Για παράδειγµα αν ξέρετε ότι τα τρία πρώτα γράµµατα του DEPARTMENT_ID συµβολίζουν κάτι και θέλετε να τα βρείτε, τότε δώστε την εντολή: SELECT SUSTRING(DEPARTMENT_ID FROM 1 FOR 3) FROM EMPLOYEE; UPPER Όπως θα γνωρίζετε ήδη αυτή η συνάρτηση µετατρέπει τα γράµµατα µιας συµβολοσειράς σε κεφαλαία. Για να δείτε το επώνυµο των υπαλλήλων µε κεφαλαία γράµµατα δώστε την εντολή: SELECT UPPER(LAST_NAME) FROM EMPLOYEE; 10