Διάλεξη 15: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) III. Διδάσκων: Παναγιώτης Ανδρέου

Σχετικά έγγραφα
Lecture 15: SQL DML II

Διάλεξη 10: Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός (Relational Algebra/Calculus) ΙI

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

Διάλεξη 13: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) I. Διδάσκων: Παναγιώτης Ανδρέου

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ342: Βάσεις Δεδομένων. Χειμερινό Εξάμηνο Φροντιστήριο 10 ΛΥΣΕΙΣ. Επερωτήσεις SQL

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

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

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

Lecture 14: SQL DML I

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

Βάσεις Δεδομένων Προχωρημένα Ερωτήματα SQL

Περιεχόμενα. Βάσεις Δεδομένων Προχωρημένα Ερωτήματα SQL. Συνένωση Σχέσεων στην SQL2 (3) Συνένωση Σχέσεων στην SQL2. (Join Relations Feature in SQL)


Lecture 16: SQL DML III

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

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

Διάλεξη 14: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) II. Διδάσκων: Παναγιώτης Ανδρέου

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

SQL Data Manipulation Language

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

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


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

( Boats)) ( Tempsids, bid. sname. Boats. Boats. Boats. (Reserves)/ > Reserves. Interlake' Sailors) ...

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

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ Σχεσιακός Ορισµός. Μαθ. #12

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

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

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

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

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

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

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

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

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

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

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

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

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

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

S Q Q L L -- SQL (Structured Query Language) select insert update delete 2.47

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

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

Lecture 15: SQL DML II

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

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

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

SQL: Αιτήματα. Κεφάλαιο 5. Database Management Systems, R. Ramakrishnan and J. Gehrke

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

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

DELETE, UPDATE, INSERT

DISTINCT, LIKE, NULL, AND, OR, BETWEEN

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

DELETE, UPDATE, INSERT.

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

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

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

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

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

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

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

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

Εισαγωγή στις Βάσεις Δεδομζνων II

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

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

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

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

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

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

GROUP BY, HAVING, COUNT, MIN, MAX, SUM, AVG, ROLLUP.

Η αναλυτική περιγραφή της γλώσσας SQL αποτελεί αντικείµενο των σελίδων που ακολουθούν. Η ΓΛΩΣΣΑ ΟΡΙΣΜΟΥ Ε ΟΜΕΝΩΝ

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

Διάλεξη 17: Προγραμματισμός Βάσης Δεδομένων Ι. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο Διδάσκων Καθ.: Νίκος Τσαπατσούλης

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

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

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

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

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

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

SQL Data Manipulation Language

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

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


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

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

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

Η Γλώσσα SQL. Μέρος α. Η Γλώσσα SQL Σελίδα 1

2. Να τροποποιηθεί κατάλληλα η παραπάνω παράσταση ώστε στο αποτέλεσµα να προκύπτουν τα ονοµατα των προµηθευτών και όχι οι κωδικοί τους (Μονάδες 1,0)

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

Transcript:

Διάλεξη 15: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) III Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: Προχωρημένες Συνθήκες (LIKE, IS, Συναρτήσεις, κα.) Εμφωλευμένες Επερωτήσεις (ΙΝ, EXISTS) Διαίρεση Διδάσκων: Παναγιώτης Ανδρέου EPL342: Databases 2013 1

Προχωρημένες συνθήκες επιλογής/ελέγχου Οι συνθήκες επιλογής/ελέγχου Θ δεν συμπεριλαμβάνουν πάντα ισότητες ή ανισότητες WHERE NAME LIKE Beer% ADD CONSTRAINT C_TEST CHECK (NAME LIKE Beer% ) Μπορούν να είναι αρκετά περίπλοκές και να κάνουν χρήση συναρτήσεων Σημαντικοί τελεστές/συναρτήσεις LIKE: Σύγκριση συμβολοσειρών Συναρτήσεις: SUBSTRING, SOUNDEX, DATEDIFF Σημαντικό να γνωρίζουμε τι υποστηρίζει η ΒΔ IS: Σύγκριση με NULL, ISNULL IN: Σύγκριση με σύνολα EPL342: Databases 2013 2

Σύγκριση Συμβολοσειρών με LIKE Για την σύγκριση συμβολοσειρών (substring matching) σε SQL γίνεται χρήση του LIKE. WHERE Attribute [ NOT ] LIKE Pattern Attribute: Γνώρισμα ή οποιαδήποτε έγκυρη έκφραση. Pattern: Συμβολοσειρά (υπό μορφή «Κανονικής Έκφρασης») η οποία θα αναζητηθεί στο attribute. To Pattern μπορεί να περιέχει χαρακτήρες wildcard Το pattern μπορεί να είναι μέχρι 8,000 bytes στην TSQL Παράδειγμα SELECT FirstName, LastName, Phone FROM Person.Contact WHERE phone LIKE '415%' EPL342: Databases 2013 3

Σύγκριση Συμβολοσειρών με LIKE Wildcard character Περιγραφή Παράδειγμα % _ (underscore) Συμβολοσειρά 0 ή περισσοτέρων χαρακτήρων Οποιοσδήποτε Χαρακτήρας WHERE title LIKE '%computer%' finds all book titles with the word 'computer' anywhere in the book title. WHERE name LIKE '_ean finds all four-letter first names that end with ean (Dean, Sean, and so on). [ ] Οποιοσδήποτε χαρακτήρας σε εύρος ([a-f]) ή σύνολο([abcdef]). WHERE name LIKE '[C-P]arsen' finds author last names ending with arsen and starting with any single character between C and P, for example Carsen, Larsen, Karsen, and so on.. [^] Οποιοσδήποτε χαρακτήρας που ΕΝ είναι σε ευρος ([^a-f]) ή σύνολο ([^abcdef]). WHERE name LIKE 'de[^l]%' all author last names starting with de and where the following letter is not l. EPL342: Databases 2013 4

Σύγκριση Συμβολοσειρών με LIKE Παράδειγμα: Βρες τους υπαλλήλους που γεννήθηκαν κατά την δεκαετία του 1950s. Θεωρήστε ότι η ημερομηνία έχει την μορφοποίηση: MMDDYYYY Συνεπώς, ψάχνουμε το BDATE με τιμή 1 9 5_', όπου το underscore υποδηλώνει ένα αυθαίρετο χαρακτήρα. SELECT FNAME, LNAME FROM EMPLOYEE WHERE BDATE LIKE 1 9 5_ Παράδειγμα: Βρες τα προϊόντα που το όνομα τους είναι Πανάκια για + 1 ή 2 ή 3 χρόνια. SELECT * FROM PRODUCTS WHERE PNAME LIKE Πανάκια για [123] χρόνια EPL342: Databases 2013 5

Παραδείγματα Συναρτήσεων SELECT LastName, SUBSTRING(FirstName, 1, 1) AS Initial SELECT FNAME, LNAME, 1.1*SALARY AS T_SALARY SELECT SOUNDEX(Name) Επιστρέφει ένα κωδικό 4 χαρακτήρων που μπορεί να αξιοποιηθεί για να αποτιμηθεί εάν 2 strings ακούγονται το ίδιο Π.χ., SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe'); Επιστρέφει S530 S530 SELECT DIFFERENCE(Name, Surname) Βρίσκει την ομοιότητα δυο γνωρισμάτων βάσει του SOUNDEX code. Λαμβάνει υπόψη τα πρώτα 8000 bytes των char, varchar ή text Παίρνει τιμές από 0 (καμία ομοιότητα).. 4 (ίδια) και πολλές άλλες EPL342: Databases 2013 6

Συγκρίσεις με NULL Σε τυπικές γλώσσες προγραμματισμού, οι λογικές εκφράσεις αποτιμούνται σε TRUE ή FALSE. Στην SQL ωστόσο, η ύπαρξη NULL τιμών επιβάλει την χρήση της Λογικής Τριών Τιμών (Three value logic 3VL) Συγκεκριμένα, μια λογική έκφραση μπορεί να αποτιμηθεί σε TRUE, FALSE ή UNKNOWN Π.χ., NULL AND TRUE αποτιμάται σε UNKNOWN Η αποτίμηση λογικών εκφράσεων γίνεται με βάσει των ακόλουθων πινάκων αληθείας: EPL342: Databases 2013 7

Συγκρίσεις με NULL Παράδειγμα CREATE TABLE test ( id INTEGER PRIMARY KEY, age INTEGER CHECK (age < 0 AND age = 0 AND age> 0) ) Τι θα γίνει εάν προσπαθήσουμε να εισάγουμε το age=null; Θα απαγορέψει την εισαγωγή οποιασδήποτε τιμής ωστόσο μπορεί να εισαχθεί το NULL Για να αποφύγω και τα NULL πλήρως: CREATE TABLE test (id INTEGER PRIMARY KEY, age INTEGER NOT NULL CHECK (.) ); EPL342: Databases 2013 8

Συγκρίσεις με NULL Μια έκφραση WHERE Attribute=NULL, είναι λάθος Για σύγκριση ενός γνωρίσματος με NULL στην SQL χρησιμοποιείται η έκφραση IS NULL ή NOT IS NULL. Επισημάνσεις ANSI: Δυο NULL τιμές είναι ανεξάρτητες (διαφορετικές) MSSQL: ΔΥΟ NULL τιμές είναι οι ίδιες (εξ ορισμού). Επομένως σε UNIQUE πεδίο δεν μπορούμε να έχουμε δυο εγγραφές με τιμή NULL. Αυτό, επειδή υπάρχει η εξ ορισμού ρύθμιση ANSI_NULLS OFF (στις ρυθμίσεις μιας βάσης) Εάν ενεργοποιηθεί η εν λόγω μεταβλητή, με SET ANSI_NULLS ON, τότε δυο διακριτές NULL τιμές θα θεωρούνται διαφορετικές όπως άλλωστε προβλέπει και το ANSI πρότυπο. Χρήσιμη συνάρτηση: ISNULL(<attr>, <default>) αν το <attr> είναι null τότε επιστρέφει μία default τιμή <default> EPL342: Databases 2013 9

Συγκρίσεις με Σύνολα (ΙΝ) Όταν θέλουμε να συγκρίνουμε με ένα σύνολο διακριτών τιμών τότε μπορούμε να χρησιμοποιήσουμε τον τελεστή σύγκρισης IN (παρόμοια με SQL DDL) Π.χ., SELECT * FROM PERSON WHERE DNO IN (1, 2) Το ΙΝ έχει αντίστοιχη λογική με τον τελεστή συνόλων και μας επιτρέπει να ομαδοποιήσουμε πολλές συνθήκες OR μαζί. Π.χ., SELECT * FROM PERSON WHERE DNO=1 OR DNO=2 Αν είχαμε 100 διαφορετικές συνθήκες; 100 διαφορετικά OR ή μία λίστα (σύνολο) με 100 τιμές και σύγκριση με ΙΝ Τι συμβαίνει αν δεν ξέρουμε εκ των προτέρων το σύνολο με τις διακριτές τιμές; EPL342: Databases 2013 10

Εμφωλευμένες Επερωτήσεις (Nested Queries) Οι εμφωλευμένες επερωτήσεις μας επιτρέπουν να εκφράσουν κάποιο αποτέλεσμα που είναι σύνολο (πίνακας) Π.χ., SELECT * FROM PERSON Outer scope WHERE DNO IN ( SELECT DNO FROM DEPARTMENT WHERE DNAME = ACC OR DNAME = IT ) Inner scope Παρόμοια με τις γλώσσες προγραμματισμού, υπάρχει η έννοια της εμβέλειας (scope) Στο εσωτερικό scope μπορούμε να αναφερθούμε σε πίνακες του εξωτερικού scope EPL342: Databases 2013 11

Εμφωλευμένες Επερωτήσεις (συν.) Με τις εμφωλευμένες επερωτήσεις και τον τελεστή IN μπορούμε να απαντήσουμε και τις επερωτήσεις που παρουσίαζαν πρόβλημα με τη σύγκριση τιμής με σύνολο Παράδειγμα: Βρες τον υπάλληλος με το μέγιστο μισθό SELECT * FROM EMPLOYEE WHERE SALARY = MAX(SALARY) ΛΑΘΟΣ SELECT * FROM EMPLOYEE WHERE SALARY ΙΝ ( SELECT MAX(SALARY) FROM EMPLOYEE ) ΟΡΘΟ EPL342: Databases 2013 12

Εμφωλευμένες Επερωτήσεις (συν.) ΚΑΘΕ Εμφωλευμένη Επερώτηση μπορεί να αναπαρασταθεί από Επερώτηση 1 μπλοκ με χρήση πράξεων συνόλων, συνενώσεις ή συνδυασμό. Δεν είναι αποδοτική πράξη γι αυτό πρέπει να αποφεύγεται όπου είναι δυνατό Μία ΒΔ συνήθως περιορίζει τον αριθμό αναδρομικών εμφωλεύσεων (π.χ., στην TSQL μέχρι 32 επίπεδα). Συνήθως χρησιμοποιούνται για δημιουργία δυναμικών όψεων (views) Μπορούν να εκφράσουν τα ενδιάμεσα αποτελέσματα της ΣΑ SELECT * FROM (SELECT * FROM PARTS WHERE PID>5) Q1 INNER JOIN (SELECT * FROM CATALOG WHERE SID>5) Q2 ON Q1.SID=Q2.SID EPL342: Databases 2013 13

Συσχετιζόμενες Εμφωλευμένες Επερωτήσεις Όταν μια συνθήκη στο WHERE του Outer block αναφέρεται σε κάποιο γνώρισμα του Inner block τότε οι δυο επερωτήσεις λέγεται ότι είναι Συσχετιζόμενες (Correlated) Query: Βρες το όνομα κάθε employee που έχει ένα dependent με το ίδιο όνομα με τον employee. SELECT FROM WHERE E.FNAME, E.LNAME EMPLOYEE E E.SSN IN (SELECT D.ESSN FROM DEPENDENT D WHERE D.ESSN=E.SSN AND E.FNAME=D.DEPENDENT_NAME) EPL342: Databases 2013 14

Εμφωλευμένες Επερωτήσεις (ALL, ANY) Οι τελεστές ANY και ALL, χρησιμοποιούνται σε συνδυασμό με τους αριθμητικούς τελεστές σύγκρισης σε εμφωλευμένες επερωτήσεις Επιτρέπουν την σύγκριση τιμής με όλες τις τιμές κάποιου συνόλου που είναι το αποτέλεσμα μίας εμφ. επερώτησης Παράδειγμα SELECT * FROM EMPLOYEE WHERE SALARY >= ALL ( SELECT SALARY FROM EMPLOYEE ) ALL: οι πλειάδες που επιστρέφονται ικανοποιούν την συνθήκη για όλες τις πλειάδες της εμφ. ερώτησης ΑΝΥ: οι πλειάδες που επιστρέφονται ικανοποιούν την συνθήκη για τουλάχιστον μία πλειάδα της εμφ. ερώτησης Ο τύπος του γνωρίσματος (π.χ., SALARY) πρέπει να συμφωνεί με τον τύπο της εμφωλευμένης ερώτησης EPL342: Databases 2013 15

Εμφωλευμένες Επερωτήσεις (EXISTS) Η εντολή EXISTS επιστρέφει TRUE εάν το αποτέλεσμα μιας εμφωλευμένης επερώτησης υπάρχει (ΔΕΝ είναι κενό/null) WHERE [ΝΟΤ] EXISTS subquery Το EXISTS έχει αντίστοιχη λογική με τον υπαρξιακό ποσοδείκτη x Παρόμοια το NOT EXISTS επιστρέφει TRUE εάν το αποτέλεσμα μιας εμφωλευμένης επερώτησης ΔΕΝ υπάρχει (είναι κενό/null) To EXISTS μπορεί να διατυπωθεί και με άλλους τρόπους (π.χ., IN) Παράδειγμα: Βρες το όνομα κάθε employee που έχει ένα dependent με το ίδιο όνομα με τον employee. SELECT E.FNAME, E.LNAME FROM EMPLOYEE E WHERE EXISTS ( SELECT * FROMDEPENDENT D WHERE E.SSN=D.ESSN AND E.NAME = D.DEPENDENT_NAME) EPL342: Databases 2013 16

Διαίρεση Παρόλο που οι αρχικές εκδόσεις της SQL όριζαν εξειδικευμένη εντολή διαίρεσης, την CONTAINS, μια τέτοια δυνατότητα ΔΕΝ υπάρχει στα νεότερα πρότυπα και υλοποιήσεις: Ενδεχόμενοι Λόγοι Εγκατάλειψης του CONTAINS: Δυσκολία Αποδοτικής Υλοποίησης Μειωμένη Χρήση της εν λόγω εντολής Στα πλαίσια αυτού του μαθήματος θεωρήστε ότι ΔΕΝ υπάρχει η εντολή διαίρεσης CONTAINS Για να διαιρέσουμε δυο σχέσεις θα χρησιμοποιήσουμε την λογική του NOT EXISTS. EXCEPT που ακολουθεί. Σημειώστε ότι σε TSQL, η εντολή CONTAINS χρησιμοποιείται για κάτι διαφορετικό την αναζήτηση σε πεδία κειμένου (όπως η LIKE) Παράδειγμα Διαίρεσης: Βρες τα ονόματα των employees που δουλεύει σε ΚΑΘΕ project που ελέγχεται από το department 5 EPL342: Databases 2013 17

Παράδειγμα Διαίρεσης 1 Βρες τα ονόματα των employees που δουλεύει σε ΚΑΘΕ project που ελέγχεται από το department 5 5 SELECT E.FNAME, E.LNAME FROM EMPLOYEE E WHERE NOT EXISTS ( SELECT P.Pnumber FROM PROJECT P WHERE P.Dnum=5 EXCEPT SELECT W.PNO Συσχέτιση κάθε υπαλλήλου στο FROM WORKS_ON W εξωτερικό block, με τα projects WHERE E.SSN=W.ESSN τα οποία δουλεύει που θέλουμε ) να συσχετίσουμε με το πρώτο εσωτερικό block EPL342: Databases 2013 18

Παράδειγμα Διαίρεσης 2 Suppliers(sid, sname, address) sid sname Address s1 Supplier 1 Address 1 s2 Supplier 2 Address 2 s3 Supplier 3 Address 3 s4 Supplier 4 Address 4 Parts(pid, pname, color) pid pname color p1 Part 1 red p2 Part 2 red p3 Part 3 green p4 Part 4 blue Query: Βρες τoυς suppliers που πουλάνε τα parts p2 και p4 Query: Βρες τoυς suppliers που δεν υπάρχει part (μέσα στη λίστα με τα parts p2 και p4) που να μην τα παρέχουν sid pid cost s1 p1 100 s1 p2 150 s1 p3 100 s1 p4 200 s2 p1 100 s2 p2 150 s3 p2 100 s4 p2 200 s4 p4 250 Διπλή Άρνηση Διπλό NOT EXISTS EPL342: Databases 2013 19

Παράδειγμα Διαίρεσης 2 Query: Βρες τoυς suppliers που δεν υπάρχει part (μέσα στη λίστα με τα parts p2 και p4) που να μην τα παρέχουν A: SELECT s.sid FROM suppliers s WHERE NOT EXISTS ( SELECT p.pid FROM parts p WHERE pid IN ('p2', 'p4') AND NOT EXISTS ( SELECT c.pid from catalog c WHERE s.sid = c.sid AND p.pid=c.pid) ) B: SELECT s.sid FROM suppliers s WHERE NOT EXISTS ( SELECT p.pid FROM parts p WHERE p.pid IN ('p2', 'p4') EXCEPT SELECT c.pid FROM catalog c WHERE s.sid=c.sid) Γ: SELECT s.sid FROM suppliers s WHERE NOT EXISTS ( SELECT p.pid FROM parts p WHERE pid IN ('p2', 'p4') AND pid NOT IN (SELECT pid FROM catalog c WHERE s.sid=c.sid) ) EPL342: Databases 2013 20

Τελεστής Διαίρεσης (Division Operator) R S R/ S= { x (x,y) R y S} Είσοδος: Δύο σχέσεις R και S Έξοδος: Νέα σχέση η οποία περιλαμβάνει τις πλειάδες της R οι οποίες μπορούν να συνενωθούν με κάθε πλειάδα της S σύμφωνα με τα κοινά τους γνωρίσματα. Παράδειγμα: Βρες τους Suppliers (S) που προσφέρουν ΌΛΑ τα Parts (P) Suppliers Parts Δεν είναι βασικός τελεστής: μπορεί να εκφραστεί και σαν Τ 1 π Α (R) T 2 π Α ((T 1 xs) R) T T 2 T 1 Διαιρετέος (nominator) P PID = p1 p2 p3 p4 Διαιρέτης (denominator) S SID s1 EPL342: Databases 2013 21

Τελεστής Διαίρεσης (Division Operator) R=SUPPLIERS_PARTS, S=PARTS 1. Τ 1 π Α (R): Βρες τους μοναδικούς Suppliers 2. T 2 π Α ((T 1 xs) R) Βρες όλους τους συνδυασμούς των μοναδικών Suppliers με τα parts της επερώτησης (όλα τα parts) Αφαίρεσε τους συνδυασμούς που υπάρχουν ώστε να παραμείνουν οι ανεπιθύμητοι συνδυασμοί Επέστρεψε λίστα με SID - = 3. T T 1 T 2 Αφαίρεσε από την αρχική λίστα τους ανεπιθύμητους EPL342: Databases 2013 22

Παράδειγμα Διαίρεσης (από Σχεσ. Αλγ.) Suppliers(sid, sname, address) Parts(pid, pname, color) Catalog(sid, pid, cost) : SELECT sid FROM catalog EXCEPT (π Α (R) x S) R ) Q2 SELECT sid FROM ( SELECT DISTINCT sid, Q1.pid FROM catalog, π Α (R) EXCEPT (SELECT pid FROM parts S WHERE pid IN ('p2', 'p4')) Q1 π Α (R) π Α ((π Α (R) x S) R) SELECT sid, pid FROM catalog R ((π Α (R) x S) R S= π Α (R) π Α ((π Α (R) x S) R) EPL342: Databases 2013 23

Διάφορα Θέματα Συνάρτηση CASE Συνάρτηση/Τελεστής CASE: επιτρέπει την δημιουργία καινούριων γνωρισμάτων εφαρμόζοντας συγκρίσεις σε υπάρχων γνωρίσματα ή μεταβλητές Παράδειγμα PERSON (P) SELECT PID, PNAME, CASE 1 2 Andreas Kostas M M 3 Maria F WHEN GENDER IS NULL THEN 'N/A' 4 Eleni F WHEN GENDER= F THEN Female' 5 Nikos NULL WHEN GENDER= M THEN Male PERSON (P) ELSE Error END AS GENDER (or AS <όνομα>) 1 2 Andreas Kostas Male Male FROM PERSON PID PNAME GENDER PID PNAME GENDER 3 Maria Female 4 Eleni Female 5 Nikos N/A EPL342: Databases 2013 24

Διάφορα Θέματα COUNT(DISTINCT *) Με τις εμφωλευμένες ερωτήσεις μπορούμε να εκφράσουμε το COUNT(DISTINCT *) το οποίο δεν υποστηρίζεται Παράδειγμα SELECT COUNT(*) FROM ( SELECT DISTINCT * FROM ) Q Το DISTINCT * χρειάζεται μόνο εάν ο πίνακας ΔΕΝ έχει Primary Key. Εάν έχει PRIMARY key ο πίνακας τότε εξυπακούεται, δηλ., είναι ισοδύναμο με SELECT COUNT(*) FROM table. EPL342: Databases 2013 25