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

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

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

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

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

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 8: SQL (Πρακτική Εξάσκηση 2) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

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

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

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

Βάσεις Περιβαλλοντικών Δεδομένων

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

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

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Βάσεις Δεδομένων Ι. Παραδείγματα. Γεώργιος Ευαγγελίδης, Καθηγητής Τμήμα Εφαρμοσμένης Πληροφορικής

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

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

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


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

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

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

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

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

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

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

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

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

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

Διάλεξη 07: Σχεσιακό Μοντέλο II (Relational Data Model) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Α: Γραμμικά Συστήματα

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

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

Αποθηκευμένες Διαδικασίες Stored Routines (Procedures & Functions)

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

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

Προσοµοίωση τροχιάς σε Oracle Spatial 8i DBMS

ΕΝΑΥΣΜΑΤΑ ΣΤΗΝ POSTGRES

Βάςεισ Δεδομζνων Ι. Ενότητα 7: Ειςαγωγή ςτην γλώςςα_sql. Δρ. Σςιμπίρθσ Αλκιβιάδθσ Σμιμα Μθχανικϊν Πλθροφορικισ ΣΕ

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

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

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

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

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

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

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

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

Βάσεις Δεδομένων. Ενότητα 6: Γλώσσα Structured Query Language -SQL. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

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

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

DELETE, UPDATE, INSERT.

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

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

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

DELETE, UPDATE, INSERT

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

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

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

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

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

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

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

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 1: Ορισμοί βασικών εννοιών: Μια πρώτη μοντελοποίηση. Ευαγγελίδης Γεώργιος Τμήμα Εφαρμοσμένης Πληροφορικής

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

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

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

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

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

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

Το Σχεσιακό μοντέλο και η γλώσσα SQL

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

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

Department of Computer Science University of Cyprus. EPL342 Databases. Lecture 8: RM II. Relational Model. (Chapter )

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

ΒΟΗΘΗΤΙΚΕΣ ΣΗΜΕΙΩΣΕΙΣ

Αρχεία και Βάσεις Δεδομένων

Αρχεία και Βάσεις Δεδομένων

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

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

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

Εξεταστική Περίοδος Ιουνίου 2004

Βάσεις Περιβαλλοντικών Δεδομένων

Φυσική Σχεδίαση Υλοποίηση βάσης

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

PROJECT ΕΡΓΑΣΤΗΡΙΩΝ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Ι. Τμήμα Μηχανικών Πληροφορικής Τ.Ε.

SQL: Συναρτήσεις Συνάθροισης

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

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

Κεφ 4: Προχωρημένες Εντολές SQL

PHP 3. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΑΣΦΑΛΕΙΑ & ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΩΝ(Θ)

Transcript:

Ενότητα 9β: SQL (Διαχείριση εγγραφών, Όψεις, Περιορισμοί, Εναύσματα) Ευαγγελίδης Γεώργιος

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Μακεδονίας» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

Σκοποί ενότητας εισαγωγή-διαγραφή-τροποποίηση εγγραφών, όψεις, περιορισμοί ακεραιότητας (non-null, κλειδιού, αναφορικής ακεραιότητας, πεδίου, εγγραφής, γενικοί ισχυρισμοί), εναύσματα 4

Αιτήματα διαχείρισης δεδομένων -- insert into Table values (VA1, VA2,..., VAn) -- insert into Table Select-Statement -- delete from Table where Condition -- update Table -- set A1 = Expr1, A2 = Expr2,..., An = Exprn -- where Condition 5

Query 01 -- εισαγωγή μιας εγγραφής στον πίνακα cd insert into cd values (100, 'My first album', 2013, 1); 6

Query 02 -- μαζική εισαγωγή από άλλη select insert into performer select pid+1000, concat(name, ' Junior') from performer; 7

Query 03 -- μια πιο περιπετειώδης εισαγωγή insert into cd select 1000+sid, stitle, 2013, 1 from song s join track t using (sid) where pos = 13 8

Query 04 -- διαγραφή εγγραφών βάσει συνθήκης delete from performer where pid not in (select pid from track); 9

Query 05 -- αυτό όμως δεν δουλεύει σε όλα τα DBMS delete from performer where pid in (select pid from performer where name like '%Junior%'); 10

Query 06 -- λύση: δημιουργούμε προσωρινό πίνακα και -- μετά εκτελούμε τη διαγραφή create temporary table tt as select pid from performer where name like '%Junior%'; delete from performer where pid in (select pid from tt); 11

Query 07 -- τροποποίηση πεδίων βάσει συνθήκης - τι -- πετυχαίνει η εντολή αυτή; update track set pid=pid+1000 where pid+1000 in (select pid from performer); 12

Query 08 -- να και μια περίεργη τροποποίηση... update cd set year = 2000+comid, comid = (select min(comid) from company); 13

Όψεις -- View = Query -- σχήμα της όψης είναι το σχήμα του αιτήματος -- θα μπορούσαμε να ορίσουμε την όψη ως -- ιδεατό (virtual) πίνακα 14

Query 09 -- δημιουργία όψης create view 21centurycd as select * from cd where year > 1999; 15

Query 10 -- χρήση όψης select cc.ctitle, count(*) from 21centurycd cc join track t using (cid) group by cc.cid; 16

Query 11 -- ιδεατή εκτέλεση του παραπάνω create temporary table temp as select * from cd where year > 1999; select cc.ctitle, count(*) from temp cc join track t using (cid) group by cc.cid; drop table temp; 17

Query 12 -- στην όμως πράξη το DBMS -- κάνει αυτό (rewritting): select cc.ctitle, count(*) from (select * from cd where year > 1999) cc join track t using (cid) group by cc.cid, cc.ctitle; 18

Query 13 --...ή για την ακρίβεια αυτό! (αν έχει καλό -- βελτιστοποιητή) select cc.ctitle, count(*) from cd cc join track t using (cid) where year > 1999 group by cc.cid, cc.ctitle; 19

Query 14 -- ορισμός όψης πάνω σε όψη create view 21centuryperf as select name from (21centurycd join track using(cid)) join performer using(pid); 20

Query 15 -- τί γίνεται αν διαγράψω την όψη; drop view 21centurycd; 21

Περιορισμοί -- περιορισμοί non-null, -- κλειδιού (primary, unique), ξένου κλειδιού -- καθυστερημένος έλεγχος όταν έχουμε -- μπλοκ εντολών τύπου -- begin...commit ή begin...rollback (συναλλαγή) -- το παρακάτω χρειάζεται στην sqlite γιατί ο -- περιορισμός ξένου κλειδιού δεν ελέγχεται -- by default PRAGMA foreign_keys = ON; 22

Query 16 -- τί σημαίνει unique(year, ctitle); create table cd2 ( cid integer primary key, ctitle varchar(200), year integer not null, comid integer references company2(comid) deferrable initially deferred, unique(year, ctitle)); 23

Query 17 -- έχει ενδιαφέρον η περίπτωση unique όταν το -- name είναι null create table company2 ( comid integer primary key, name varchar(200) unique); 24

Query 18 -- εξαιτίας του "deferrable initially deferred" τα -- παρακάτω είναι ΟΚ begin; insert into cd2 values (1, 'My first cd', 2013, 3); insert into company2 values (3, 'My record company'); commit; 25

Query 19 -- περιορισμός ξένου κλειδιού: αντιμετώπιση -- ενημερώσεων/διαγραφών create table cd2 ( cid integer primary key, ctitle varchar(200), year integer not null, comid integer references company2(comid) on update cascade on delete set null); 26

Query 20 -- περιορισμοί επιπέδου πεδίου/εγγραφής -- ΠΡΟΣΟΧΗ: η MySQL δέχεται τέτοιους -- περιορισμούς, αλλά δεν τους ελέγχει... create table cd2 (cid integer primary key, ctitle varchar(200) check(ctitle not like '0%'), year integer not null check(year > 1900), comid integer references company2(comid) deferrable initially deferred, unique(year, ctitle), check(ctitle like 'a%' or year between 1990 and 2000)); 27

Query 21 -- παρόλο που το standard της SQL προβλέπει -- εμφωλευμένα αιτήματα μέσα σε περιορισμούς -- τύπου check, κανένα DBMS δεν έχει -- υλοποιήσει κάτι τέτοιο 28

Query 21 (συνέχεια) -- Επίσης, κανένα DBMS δεν έχει υλοποιήσει -- γενικούς ισχυρισμούς (general assertions) -- παρόλο που υποστηρίζονται από το standard -- της SQL create assertion cdsize check (not exists (select cid from track join cd using(cid) group by cid having count(*)>99)); 29

Query 22 -- Εναύσματα - δοκιμάστε τα στην MySQL -- τί κάνει αυτό το έναυσμα; create trigger cascade_delete after delete on company2 for each row begin delete from cd2 where comid = old.comid; end; 30

Query 23 -- αυτόματη εισαγωγή νέας εταιρίας create trigger auto_insert_company after insert on cd2 for each row begin insert into company2 values (new.comid, concat('new company for cd: ', new.ctitle); end; 31

Query 24 -- ενημέρωση μετά από εισαγωγή create trigger update_counter after insert on cd2 for each row begin update counter set val=val+1; end; 32

Query 25 -- Εναύσματα - δοκιμάστε τα στην sqlite -- έναυσμα υπό συνθήκη create trigger tracks_less_than_4 after insert on track2 for each row when 3 < (select count(*) from track2 where cid = new.cid) begin delete from track2 where cid=new.cid and pos=new.pos; end; 33

Query 26 -- ή ακόμα καλύτερα χρησιμοποιώντας το -- raise(ignore) της sqlite: create trigger tracks_less_than_4 before insert on track2 for each row when 2 < (select count(*) from track2 where cid = new.cid) begin select raise(ignore); end; 34

Query 27 -- έλεγχος σειριακής αρίθμησης των track create trigger track_numbering before insert on track2 for each row when (new.pos=1 and exists (select cid from track2 where cid=new.cid)) or (new.pos<>1 and new.pos-1 not in (select pos from track2 where cid=new.cid)) begin select raise(ignore); end; 35

Τέλος Ενότητας