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



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

Βάσεις Δεδομένων. Ενότητα 5: Σημασιολογικός Σχεδιασμός. Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

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

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

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

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

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

Τεχνοοικονομική Ανάλυση Οργάνωση και Διοίκησης Έργων και Επιχειρήσεων

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

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

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

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

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

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

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

Βάσεις Δεδομένων. Ενότητα 3: Σχεδιασμός και Διαχείριση Βάσεων Δεδομένων. Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ (Relational Model) Μαθ. #10

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

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

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

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

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

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

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

Βάσεις Δεδομένων. Ενότητα 4: Μοντελοποίηση Συσχέτισης Οντοτήτων. Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

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

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

SQL Data Manipulation Language

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

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

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

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

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

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

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

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

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

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


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

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

DELETE, UPDATE, INSERT.

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

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

DELETE, UPDATE, INSERT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Βάσεις Δεδομένων Σύνθετα SQL queries. Ψευδώνυμα (Aliases) (2) Ψευδώνυμα (Aliases) (1) Ασάφεια και Πλήρη Ονόματα. Ερώτημα χωρίς τον όρο WHERE (1)

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη

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

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

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

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

Βάσεις Δεδομένων. Σχεσιακό Μοντέλο Δεδομένων. Βασίλειος Βεσκούκης Ορισμός Βάσης Δεδομένων Δομή Περιορισμοί

Βάσεις Δεδομένων Σύνθετα SQL queries

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

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

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

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

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

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

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

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

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

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

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

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

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

Transcript:

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Βάσεις Δεδομένων Ενότητα 7.2: Structured Query Language - 2 ο Μέρος Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

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

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

Σκοποί Ενότητας Ο φοιτητής που θα παρακολουθήσει με επιτυχία την ενότητα αυτή θα διαθέτει τις απαιτούμενες θεωρητικές και πρακτικές γνώσεις ώστε: Να προστατεύει τις Βάσεις Δεδομένων ώστε τα δεδομένα να είναι ασφαλή τόσο από εξωτερικούς παράγοντες όσο και από αστοχίες του εξοπλισμού. 4

Περιεχόμενα ενότητας Οι συνδέσεις πινάκων στην SQL Διαχείριση Views με την SQL Οι εντολές UPDATE, DELETE Οι εντολές GRANT και REVOKE Παραδείγματα 5

Παράδειγμα 1 6

Παράδειγμα 2 Πανεπιστήμιο Department {deptname, phone, faxno, location, mgrstaffno, mgrstartdate} Primary key: deptname Foreign key: mgrstaffno references Staff (staffno) Staff {staffno, fname, lname, address, phone, officeno, sex, salary, post, computerid, deptname} Primary key: staffno Foreign key: deptname references Department (deptname) Course {ccode, title, duration, leaderstaffno, deptname} Primary key: ccode Foreign key: leaderstaffno references Staff (staffno) Foreign key: deptname reference Department (deptname) Module {mcode, title, startdate, enddate, coursework, exam, coursecode, cordstaffno} Primary key: mcode Foreign key: coursecode references Course (ccode) Foreign key: cordstaffno references Staff (staffno) Student {matericno, fname, lname, town, street, postcode, dob, sex, loan, coursecode} Primary key: matericno Foreign key: coursecode references Course (ccode) 7

Παράδειγμα 2 Πανεπιστήμιο (2) Next-Of-Kin {matericno, name, phone, relationship} Primary key: teachstaffno, modulecode Primary key: matericno, name Foreign key: matericno references Student (matericno) Foreign key: teachstaffno references Staff (staffno) Foreign key: modulecode references Module (mcode) Undertake {stdmatericno, modulecode, performance} Primary key: stdmatericno, modulecode Foreign key: stdmatericno references Student (matericno) Foreign key: modulecode references Module (mcode) Texts {modulecode, text} Primary key: modulecode, text Foreign key: modulecode references Module (mcode) Qualifications {qualstaffno, qualification} Primary key: qualstaffno, qualification Foreign Key: qualstaffno references Staff (staffno) Teaches {teachstaffno, modulecode, hours} 8

Παράδειγμα 2 9

Ερωτήματα με Πολλούς Πίνακες Υλοποιούν αυτό που είναι γνωστό ως join Πράξη στη Σχεσιακή Άλγεβρα Συνδυασμός δεδομένων από πολλούς πίνακες. Οι Πίνακες συνδέονται με τη λογική του master-detail (Πρωτεύον και Ξένο Κλειδί) Πριν προχωρήσουμε στη συγγραφή της εντολής θα πρέπει να διερευνησουμε : Τους πίνακες που επριλαμβανουν τα δεδομένα και τις συνθήκες Τη διασύνδεση μεταξύ των Πινάκων Να έχουμε σχηματίσει το μονοπάτι σε διάγραμμα Συσχέτισης Οντοτήτων 10

Απλή Σύνδεση (join) Κατάλογος όλων των τμημάτων και των μαθημάτων (Εφαρμογή Πανεπιστημίου) SELECT c.ccode, c.title, m.mcode, m.title FROM course c, module m WHERE c.ccode = m.courcecode; Course {ccode, title, duration, leaderstaffno, deptname} Module {mcode, title, startdate, enddate, coursework, exam, coursecode, cordstaffno} Η SQL παρέχει και αυτόν τον τρόπο δήλωσης της σύνδεσης: FROM course c JOIN module m ON c.ccode = m.cursecode 11

Εναλλακτικός Τρόπος για JOIN Κατάλογος όλων των πελατών και των παραγγελιών τους (Εφαρμογή Παραγγελίες) SELECT c.cafm, c.cname, O.OrderNo, o.orderdate m.title FROM Customer c, Orders o WHERE c.cafm = o.cafm; Η SQL παρέχει και αυτούς τους τρόπους δήλωσης της σύνδεσης: FROM Customer c JOIN Orders o ON c.cafm = o.cafm FROM Customer c JOIN Orders o ON CAFM FROM Customer NATURALJOIN Orders 12

Ταξινόμηση και Σύνδεση (ordered join) Κατάλογος όλων των πελατών και των παραγγελιών τους ταξινομημένες με βάση το Όνομα Πελάτη και την ημερομηνία της παραγγελίας (Εφαρμογή Παραγγελίες) SELECT c.cafm, c.cname, O.OrderNo, o.orderdate FROM Customer c, Orders o WHERE c.cafm = o.cafm ORDER BY o.cname, o.orderdate; 13

Σύνδεση (Join) με Τρεις Πίνακες Για κάθε πελάτη, κατάλογο των παραγγελιών του και των πωλήσεων προϊόντων ανά παραγγελία ομαδοποιημένες και ταξινομημένες κατά πελάτη. SELECT c.cafm, C.Cname, o.orderno, o.orderdate, Pcode FROM Customers c, Orders o, Sales s WHERE c.cafm= o.cafm AND o.ordersno = s.ordersno GROUP BY c.cname ORDER BY c.cname; 14

Σύνδεση (Join) με Τέσσερις Πίνακες Για κάθε πελάτη, κατάλογο των παραγγελιών του και των πωλήσεων προϊόντων (με αναλυτικά στοιχεία) ανά παραγγελία ομαδοποιημένες και ταξινομημένες κατά πελάτη. SELECT c.cafm, C.Cname, o.orderno, o.orderdate, Pcode FROM Customers c, Orders o, Sales s, Products p WHERE c.cafm= o.cafm AND o.ordersno = s.ordersno AND p.pcode = s.pcode GROUP BY c.cname ORDER BY c.cname; 15

Παράδειγμα με Ομαδοποίηση Ο αριθμός των μαθημάτων που συντονίζει κάθε μέλος του προσωπικού κάθε σχολής. SELECT s.deptname, s.staffno, COUNT(*) AS countmodule FROM staff s, module m WHERE s.sno = m.cordstaffno GROUP BY s.deptname, s.staffno ORDER BY s.deptname, s.staffno; 16

Πως λειτουργεί η Διασύνδεση (Join) Η διαδικασία που ακολουθείται για τον υπολογισμό της Διασύνδεσης (join) είναι: 1. Βρίσκεται το καρτεσιανό γινόμενο των πινάκων που εμφανίζονται στο FROM. 2. Αν υπάρχει WHERE τότε εφαρμόζονται οι περιορισμοί και περιορίζονται οι εγγραφές του καρτεσιανού γινομένου 3. Για κάθε έγγραφή προσδιορίζονται οι τιμές κάθε στοιχείου που περιλαμβάνονται στη Select και παράγονται οι γραμμές του τελικού πίνακα. Αν υπάρχει SELECT DISTINCT τότε εξαφανίζονται οι διπλοεγγραφές. Αν υπάρχει ORDER BY τότε ταξινομείται ο πίνακας. 17

Εσωτερικό (INNER) Joins Σε ένα join, αν σε μια εγγραφή του ενός πίνακα δεν υπάρχουν συνδέσεις με εγγραφές του άλλου πίνακα τότε παραλείπεται η εγγραφή από τον τελικό πίνακα. Το Εσωτερικό join κρύβει τις εγγραφές που δεν ικανοποιούν τις συνθήκες. Παράδειμα Εμφάνιση των Πελατών και των Παραγγελιών τους SELECT c.cafm, c.cname, ο.orderno, o.orderdate FROM Customer c, Orders o WHERE c.cafm = o.cafm ORDER BY o.cname, o.orderdate; Αν ένας Πελάτης δεν έχει θέσει παραγγελίες τότε δεν εμφανίζεται στον τελικό πίνακα 18

Αριστερή Εξωτερική Σύνδεση (Left Outer Join) Εμφάνιση των όλων των Πελατών και των Παραγγελιών τους SELECT c.cafm, c.cname, ο.orderno, o.orderdate FROM Customer c LEFT JOIN Orders o ON c.cafm = o.cafm; Πελάτες που δεν έχουν θέσει παραγγελίες (ο αριστερός πίνακας) θα εμφανίζονται με κενά (NULL) τα κελιά (πεδία) που αφορούν τις παραγγελίες. 19

Δεξιά (Right) Εξωτερική Σύνδεση (OuterJoin) Εμφάνιση όλων των Παραγγελιών και των Πελατών που έχουν θέσει τις Παραγγελίες SELECT c.cafm, c.cname, ο.orderno, o.orderdate FROM Customer c RIGHT JOIN Orders o ON c.cafm = o.cafm; Παραγγελίες (Δεξιός Πίνακας) που δεν έχουν τεθεί από Πελάτες (ο αριστερός πίνακας) θα εμφανίζονται με κενά (NULL) τα κελιά (πεδία) που αφορούν τους Πελάτες 20

Ολοκληρωμένη Εξωτερική Σύνδεση (Full Outer Join) Εμφάνιση όλων των Παραγγελιών και όλων των Πελατών που έχουν θέσει τις Παραγγελίες SELECT c.cafm, c.cname, ο.orderno, o.orderdate FROM Customer c FULL JOIN Orders o ON c.cafm = o.cafm; Οι Πελάτες (ο αριστερός πίνακας) και οι Παραγγελίες (ο δεξιός Πίνακας) θα εμφανίζονται με κενά (NULL) όταν δεν υπάροχυν Πελάτες και Παραγγελίες αντίστοιχα. 21

EXISTS και NOT EXISTS EXISTS και NOT EXISTS χρησιμοποιούνται σε υπο-ερωτήματα (ερωτήματα μέσα σε ερωτήματα) Το αποτέλεσμα είναι μια λογική τιμή (True/False) Με το EXISTS η τιμή είναι: True μόνο και μόνο όταν υπάρχει μια τουλάχιστον γραμμή στο αποτέλεσμα (πίνακα) του υποερωτήματος και False όταν από το ερώτημα προκύπτει κενός πίνακας Η NOT EXISTS είναι το αντίθετο του EXISTS. Τα EXISTS και NOT EXISTS ελέγχουν μόνο την ύπαρξη ή όχι εγγραφών και για το λόγο αυτό μπορούμε να έχουμε πολλές στήλες στο υποερώτημα. Σύνηθες η μορφή του υπο-ερωτήματος (SELECT * ) 22

Query using EXISTS Να βρεθούν οι πελάτες που έχουν παραγγείλει προϊόντα την ημερομηνία 1/3/2013 SELECT sno, fname, lname, position FROM Customer c WHERE EXISTS (SELECT * FROM Orders o WHERE c.cafm = o.cafm AND OrderDate= #1/3/2013); Είναι το ίδιο με το παρακάτω ερώτημα SELECT sno, fname, lname, position FROM Customer c, Orders o WHERE c.cafm = o.cafm AND OrderDate= #1/3/2013; 23

Ένωση, Τομή και Διαφορά Η Ένωση, η Τομή και η Διαφορά (πράξεις της Σχεσιακής Άλγεβρας) υποστηρίζονται από την SQL. Με την ένωση δημιουργείτάι ένας νέος πίνακας από τους Α και Β που περιλαμβάνει τις εγγραφές και των δυο πινάκων (όχι διπλεγγραφές) Με την τομή δημιουργείται ένας νέος πίνακας από τους πίνακες Α και Β που περιλαμβάνει τις κοινές εγγραφές δυο Πινάκων Η Διαφορά του πίνακα Β από τον Α περιλαμβάνει ολες τις εργγραφές του Α που δεν περιλαμβάνονταιι στον Πίνακα Β. Οι Πίνακες Α και Β πρέπει να είναι συμβατοί (union compatible). 24

Ένωση UNION Οι Επωνυμίες και οι διευθύνσεις όλων των πελατών και προμηθευτών. (SELECT Cname as epon, Address FROM Customers) UNION (SELECT Sname as epon, Address FROM Suppliers); 25

Τομή INTERSECT Να βρεθούν οι προμηθευτές που προμηθεύουν και τα δύο προϊόντα με κωδικούς 10001 και 10002. (SELECT s.safm, s.sname FROM Suppliers s, Provisions p WHERE s.safm=p.safm and p.pcode=10001 ) INTERSECT (SELECT s.safm, s.sname FROM Suppliers s, Provisions p WHERE s.safm=p.safm and p.pcode=10002 ); Μπορείτε να γράψετε αλλιώς το ερώτημα χρησιμοποιόντας DISTINCT και EXIST; 26

Χρήση του EXCEPT Κατάλογος όλων των προμηθευτών που μας προμηθεύουν το προϊον με κωδικό 10001 αλλά όχι το προϊόν με κωδικό 10002. (SELECT s.safm, s.sname FROM Suppliers s, Provisions p WHERE s.safm=p.safm and p.pcode=10001 ) EXCEPT (SELECT s.safm, s.sname FROM Suppliers s, Provisions p WHERE s.safm=p.safm and p.pcode=10002 Μπορείτε να γράψετε αλλιώς το ερώτημα χρησιμοποιόντας DISTINCT και NOT IN; 27

Ασκήσεις Εξάσκησης (B Ενότητας) Δίδεται το παρακάτω τμήμα Βάσης Δεδομένων που αφορά όμιλο Ξενοδοχείων: Hotel Room (hotelno, name, address, mgrstaffno) (roomno, hotelno, type, price) Booking (hotelno, guestno, datefrom, dateto, roomno) Guest Staff (guestno, name, address, sex) (staffno, fname, lname, sex, dob, salary, telno, hotelno) (Υπογραμμισμένα τα πρωτεύοντα κλειδιά και τα ξένα κλειδιά έχουν το ίδιο όνομα με τα πρωτεύοντα κλειδιά) Γράψτε τις εντολές SQL για τα παρακάτω ερωτήματα: a) Εμφανίστε την τιμή και το είδος όλων των δωματίων στο Ξενοδοχείο ΦΙΛΟΞΕΝΕΙΑ. b) Εμφανίστε όλους τους επισκέπτες που διαμένουν σήμερα στο Ξενοδοχείο ΦΙΛΟΞΕΝΕΙΑ. c) Για κάθε ξενοδοχείο εμφανίστε το όνομα του ξενοδοχείου και τον αριθμό του προσωπικού (υπό την κατάλληλη κεφαλίδα) που εργάζονται εκεί. d) Για κάθε ξενοδοχείο εμφανίστε το όνομα του ξενοδοχείου και το όνομα και το φύλο του υπαλλήλου που διευθύνει το ξενοδοχείο. 28

Ασκήσεις Εξάσκησης (Β ΕΝότητας) (2) Δίδεται το παρακάτω τμήμα Βάσης Δεδομένων που αφορά όμιλο Ξενοδοχείων: Hotel Room Booking Guest Staff (hotelno, name, address, mgrstaffno) (roomno, hotelno, type, price) (hotelno, guestno, datefrom, dateto, roomno) (guestno, name, address, sex) (staffno, fname, lname, sex, dob, salary, telno, hotelno) (Υπογραμμισμένα τα πρωτεύοντα κλειδιά και τα ξένα κλειδιά έχουν το ίδιο όνομα με τα πρωτεύοντα κλειδιά) Γράψτε τις εντολές SQL για τα παρακάτω ερωτήματα: e) Εμφανίστε λίστα με όσους είχαν διαμονή στο δωμάτιο 101 του Ξενοδοχείου ΧΕΝΙΑ απο την 1/2/2013 εως 31/5/2013. Στη λίστα θα συμπεριλαμβάνεται το όνομα και ο ημερομηνίες διαμονής (από.. έως) f) Εμφανίστε τα στοιχεία όλων των κρατήσεων δωματίων για την ημερομηνία 1/1/2014. θα συμπεριλαμβάνετια το όνομα του Ξενοδοχείου, ο αριθμός του δωματίου και το όνομα του ενοίκου. g) Εμφανίστε τη λίστα των Ξενοδοχείων (όνομα, Διεύθυνση) που έχει διαμείνει ο Επισκέπτης με όνομα Γεωργίου Γεώργιος. h) Ποιά είναι η πληρότητα (αριθμος δωματίων που έχουν κρατηθεί, σύνολο αριθμού δωματίων) στο ξενοδοχείο XENIA την 1/1/2013. 29

Ασκήσεις Εξάσκησης (B Ενότητας) Επίλυση a) α) Εμφανίστε την τιμή και το είδος όλων των δωματίων στο Ξενοδοχείο ΦΙΛΟΞΕΝΕΙΑ. Select r.roomno, r.price, r.type From Room r, Hotel h Where h.hotelno=r.hotelno and h.name= ΦΙΛΟΞΕΝΕΙΑ ; b) Εμφανίστε όλους τους επισκέπτες (όλα τα στοιχεία) που διαμένουν σήμερα στο Ξενοδοχείο ΦΙΛΟΞΕΝΕΙΑ. Select g.name, g.address, g.sex From quest g, booking b, hotel h Where g.hotelno=b.hotelno AND g.guestno=b.guestno AND h.name= ΦΙΛΕΧΕΝΕΙΑ AND ToDay BETWEEN b.datefrom AND DateTo; 30

Ασκήσεις Εξάσκησης (B Ενότητας) Επίλυση (2) c) Για κάθε ξενοδοχείο εμφανίστε το όνομα του ξενοδοχείου και τον αριθμό του προσωπικού (υπό την κατάλληλη κεφαλίδα) που εργάζονται εκεί. Select h.name, Count(StaffNo) From Staff s, Hotel h Where h.hotelno=s.hotelno Group by HotelNo; d) Για κάθε ξενοδοχείο εμφανίστε το όνομα του ξενοδοχείου και το όνομα και το φύλο του υπαλλήλου που διευθύνει το ξενοδοχείο Select h.name, s.fname, s.lname, s.sex From Hotel h, Staff s Where h.mgrstaffno=s.staffno; 31

Ασκήσεις Εξάσκησης (B Ενότητας) Επίλυση (3) e) Εμφανίστε λίστα με όσους είχαν διαμονή στο δωμάτιο 101 του Ξενοδοχείου ΧΕΝΙΑ απο την 1/2/2013 εως 31/5/2013. Στη λίστα θα συμπεριλαμβάνεται το όνομα και ο ημερομηνίες διαμονής (από.. έως) Select g.name From Guest g, Booking b, Hotel h Where h.hotelno=b.hotelno AND g.guestno=b.guestno and (datefrom BETWEEN {1/2/2013 } AND {31/5/2013} OR DateTo between {1/2/2013 } AND {31/5/2013} ) AND h.name= XENIA AND roomno=101; f) Εμφανίστε τα στοιχεία όλων των κρατήσεων δωματίων για την ημερομηνία 1/1/2014. Θα συμπεριλαμβάνετια το όνομα του Ξενοδοχείου, ο αριθμός του δωματίου και το όνομα του ενοίκου. Select h.hotelno, h.name, g.name, b. roomno From Guest g, Hotel h, Booking b Where h.hotelno=b.hotelno AND b.guestno=b.guestno and {1/1/2014} Between DataFrom AND DateTo; 32

Εισαγωγή Δεδομένων (ΙNSERT) Για την εισαγωγή δεδομένων εκτελούμε την εντολή Insert Γενικός τρόπος σύνταξης INSERT INTO όνομα πίνακα [ (κατάλογος χαρακτηριστικών)] VALUES (τιμές των χαρακτηριστικών); Η λίστα των χαρακτηριστικών μπορεί να παραλείπεται. Στην περίπτωση αυτή θεωρείται ότι η σειρά των κχαρακτηριστικών συμπίπτει με την σειρά που έχουν δημιουργηθεί με την εντολή CREATE TABLE. Εαν σε κάποιο χαρακτηριστικό δεν έχουμε τιμή τότε θα πρεπει να το δηλώσουμε κενό (NULL) εκτός αν έχει εξ ορισμού τιμές (DEFAULT) που έχουν ορισθεί στη δημιουργία του χαρακτηριστικού. Τα δεδομένα που περιλαμβάνονται στη VALUES θα πρεπει να δίδονται με την ίδια σειρά που έχουν δοθεί στον κατάλογο των χαρακτηριστικών ή εφόσον δεν έχει δοθεί κατάλογος χαρακτηριστικών με τη σειρά που εχουν δοθεί στη δημιουργία του πίνακα. Ο τύπος των δεδομένων των χαρακτηριστικών στην VALUES θα πρεπει να είναι του ίδιου τύπου με βάση τη δημιουργία των πινάκων (αριθμητικά, αλφαριθμητικά, ημερομηνία ) 33

Παράδειγμα - INSERT VALUES Εισαγωγή μιας νέας εγγραφής πελάτη INSERT INTO Customers VALUES ( 1234, Φιλίππος Πέτρου, Π. Ράλλη 220, Αιγάλεω, 210222222, Πέτρου Στάθης, NULL); Αλλιώς INSERT INTO Customers (CAFM, Cname, Address, zip, Telephone, Contact_Person, e_mail) VALUES ( 1234, Φιλίππος Πέτρου, Π. Ράλλη 220, Αιγάλεω, 210222222, Πέτρου Στάθης, NULL); 34

INSERT SELECT Μπορούμε να εισάγουμε δεδομένα σε πίνακα από άλλον πίνακα με το συνδυασμό της εντολής INSERT με την εντολή SELECT: INSERT INTO όνομα πίνακα [ (κατάλογος χαρακτηριστικών) ] SELECT 35

INSERT SELECT (2) Θέλουμε σε έναν πίνακα να διατηρούμε τα στατιστικά στοιχεία για τις βαθμολογίες των φοιτητών ανά τμήμα. Ο πίνακας θα ονομάζεται stat_students και θα τον έχουμε δημιουργήσει εκ των προτέρων. INSERT INTO stat_students (SELECT ModuleCode, COUNT(*), AVERAGE(Performance) FROM Student s, UnderTake u WHERE s.matericno = u.stdmatericno GROUP BY s.coursecode, u.modulecode); 36

Η εντολή UPDATE Χρησιμοποιείται για την μεταβολή των δεδομένων σε πίνακες. UPDATE όνομα πίνακα (βασικού πίνακα ή όψης) SET χαρακτηριστικό1 = τιμή 1 [, χαρακτηριστικό2 = τιμή 2 ] [WHERE συνθήκη]; SET Δίνουμε τιμές στα χαρακτηριστικά WHERE Δίνουμε τη συνθήκη με την ίδια λογική όπως και στις εντολές SELECT. 37

UPDATE Αύξηση του Μισθού του προσωπικού κατά 4% UPDATE staff SET salary = salary*1.04; Αύξηση του Μισθού του Γεωργίου Γεώργιου κατά 10% UPDATE staff SET salary = salary*1.1 WHERE fname= Γεώργιος AND lname = Γεωργίου ; 38

UPDATE (2) Αύξηση του Μισθού του Γεωργίου Γεώργιου κατά 10% και μεταβολή της Διεύθυνσής του UPDATE staff SET salary = salary*1.1, Address = Νέα Διεύθυνση WHERE fname= Γεώργιος AND lname = Γεωργίου ; 39

Διαγραφή Εγγραφών DELETE DELETE FROM όνομα πίνακα [WHERE συνθήκη αναζήτησης] Όνομα Πίνακα: Βασικός Πίνακας ή όψη που επιδέχεται μεταβολές. Συνθήκη Αναζήτησης. Αν παραλείπται τότε διαγράφονται όλες οι εγγραφές. Αλλιώς, διαγράφονται οι εγγραφές που προκύπτον από την συνθήκη αναζήτησης (συντάσσεται όπως και στην εντολή SELECT) 40

DELETE Συγκεκριμένες Εγγραφές Διαγραφή της παραγγελίας 1001 DELETE FROM Sales WHERE OrderNo=1001 ; DELETE FROM Orders WHERE OrderNo=1001 ; Χρειάζεται προσοχή δίοτι γίνεται ελεγχος της ακεραιότητας αναφοράς από το ΣΔΣΒΔ. 41

DELETE All Rows Διαγραφή όλων των φοιτητών DELETE FROM Students; 42

Ασκήσεις Εξάσκησης (Γ Ενότητας) Δίδεται το παρακάτω τμήμα Βάσης Δεδομένων που αφορά όμιλο Ξενοδοχείων: Hotel Room (hotelno, name, address, mgrstaffno) (roomno, hotelno, type, price) Booking (hotelno, guestno, datefrom, dateto, roomno) Guest Staff (guestno, name, address, sex) (staffno, fname, lname, sex, dob, salary, telno, hotelno) (Υπογραμμισμένα τα πρωτεύοντα κλειδιά και τα ξένα κλειδιά έχουν το ίδιο όνομα με τα πρωτεύοντα κλειδιά) Γράψτε τις εντολές SQL για τα παρακάτω ερωτήματα: a) α) Να εισαχθούν τα στοιχεία ενός ακόμη μέλους του προσωπικού στο ξενοδοχείο ΧΕΝΙΑ (2001, Παναγιώτου, Νικόλαος, Αρρεν, 22/4/1992, 1500, 2103334422, 201) b) β) Να αυξηθούν οι τιμές των δωματίων του Ξενοδοχείου ΧΕΝΙΑ κατά 5%. c) γ) Να μεταβληθεί η Διεύθυνση του Πελάτη Γεωργίου Γεώργιου. (Νέα Διεύθυνση Ανθέων 23, Πάτρα, 10101 ) d) δ) Να διαγραφεί κράτηση του Γεωργίου Γεώργιου στο Ξενοδοχείου ΧΕΝΙΑ με ημερομηνία άφιξης 1/3/2013. 43

Ασκήσεις Εξάσκησης (Γ Ενότητας) - Επίλυση a) Να εισαχθούν τα στοιχεία ενός ακόμη μέλους του προσωπικού στο ξενοδοχείο ΧΕΝΙΑ (2001, Παναγιώτου, Νικόλαος, Αρρεν, 22/4/1992, 1500, 2103334422, 201) INSERT INTO Staff VALUES ( 1111, Νικόλαος, Παναγιώτου, Αρρεν, {22/4/1992}, 1500, 2103334422, 201) b) Να αυξηθούν οι τιμές των δωματίων του Ξενοδοχείου ΧΕΝΙΑ κατά 5%. UPDATE Room SET price= price*0.01 WHERE HotelNo = (SELECT Hotelno FROM Hotel WHERE name= XENIA ); 44

Ασκήσεις Εξάσκησης (Γ Ενότητας) Επίλυση (2) c) Να μεταβληθεί η Διεύθυνση του Πελάτη Γεωργίου Γεώργιου. (Νέα Διεύθυνση Ανθέων 23, Πάτρα, 10101 ) UPDATE Guest SET Address= Ανθέων 23, Πάτρα, 10101 WHERE name = Γεωργίου Γεώργιος ; d) Να διαγραφεί κράτηση του Γεωργίου Γεώργιου στο Ξενοδοχείου ΧΕΝΙΑ με ημερομηνία άφιξης 1/3/2013. DELETE FROM Booking WHERE DateFrom= {1/3/2013} AND Guestno = (Select Guestno from Guest WHERE name = Γεωργίου Γεώργιος ); 45

Δημιουργία Βάσης Δεδομένων CREATE SCHEMA [όνομα Β.Δ. AUTHORIZATION Όνομα Διαχειριστή Β.Δ.] Δημιουργείται μια νέα Β.Δ. DROP SCHEMA Όνομα Β.Δ.[RESTRICT CASCADE ] RESTRICT (default), Θα πρέπει η Β.Δ. να είναι κενή. Σε αντίθετη περίπτωση δεν γίνεται η διαγραφή. CASCADE, Διαγράφονται όλα τα αντικείμενα που είναι συσχετισμένα στη Β.Δ. Σε οποιοδήποτε σφάλμα σταματά η διαγραφή. 46

Δημιουργία Πίνακα Βάσης CREATE TABLE Όνομα Πίνακα (Όνομα Χαρακτηριστικού τύπος Δεδομένων [NULL NOT NULL] [, ] ) [CONSTRAINT constraint_name] { [NOT NULL] NULL] UNIQUE PRIMARY KEY CHECK (condition) REFERENCE clause } Δημιουργούμε έναν νέο πίνακα στη Βάση Δεδομένων. Ορίζουμε τα χαρακτηριστικά και τον τύπο δεδομένων τους. NULL (default) Καθορίζουμε αν επιτρέπονται κενά στο χαρακτηριστικό. Με NOT NULL, απορρίπτεται κάθε διαδικασία εισαγωγής κενού στο χαρακτηριστικό (Πρωτευοντα κλειδιά και σε ορισμένες περιπτωσεις τα Ξένα Κλειδιά). Με τις Συνθήκες (που τίθενται σε επίπεδο γραμμής ορίζουμε κλειδιά, Ξένα Κλειδιά, ) 47

Δημιουργία Πίνακα Βάσης (2) CREATE TABLE Staff (sno CHAR(6), fname VARCHAR(25) NOT NULL, lname VARCHAR(30) NOT NULL, address VARCHAR(50) NOT NULL, teleno VARCHAR(20) CONSTRAINT phonenumber UNIQUE, sex CHAR CONSTRAINT staffsex check (sex IN ('M', 'F')), dob DATE, salary NUMBER(7,2) CONSTRAINT staffsalary CHECK (salary between 20000 and 60000), nin VARCHAR(12), bno CHAR(4), CONSTRAINT staff_pk PRIMARY KEY(sno), CONSTRAINT staff_nin UNIQUE (nin), CONSTRAINT staff_branchno FOREIGN KEY (bno) REFERENCES Branch (bno) ON DELETE SET NULL ON UPDATE CASCADE 48

Διαγραφή Πίνακα Drop Table Drop Table Όνομα Πίνακα [RESTRICT CASCADE] Παρ. DROP TABLE undertake; Διαγραφή του Πίνακα και των εγγραφών του. RESTRICT, Αν υπάρχουν πίνακες που είναι συνδεδεμένοι με τις εγγραφές του πίνακα (ακεραιότητα αναφοράς) τότε σεν πραγματοποιείται η διαγραφή. CASCADE, Διαγράφονται και οι εξαρτημένες εγγραφές των εγγραφών του πίνακα που διαγράφεται. 49

Μεταβολή Δομής Πίνακα ALTER TABLE Όνομα Πίνακα [ADD [COLUMN] Όνομα Χαρακτηριστικού Τύπος Δεδομένων [DEFAULT Έκφραση] [Περιορισμοί] [DROP [COLUMN] Χαρακτηριστικό [RESTRICT CASCADE]] [ADD [CONTSRAINT Όνομα Συνθήκης] Ορισμός της Συνθήκης] [DROP [CONSTRAINT Όνομα Συνθήκης [RESTRICT CASCADE]] [ALTER [COLUMN] SET DEFAULT Έκφραση] [ALTER [COLUMN] DROP DEFAULT] 50

Μεταβολή Δομής Πινάκων Παραδείγματα ALTER TABLE Staff ADD position VARCHAR(30); ALTER TABLE Staff ALTER position SET DEFAULT 'Assistant'; ALTER TABLE Staff DROP CONSTRAINT staffsex; ALTER TABLE Staff ALTER sex SET DEFAULT 'F' 51

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