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

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

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

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

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

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

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

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

Βάσεις Δεδομένων Ι Ευρετήρια/Indexes. (...και επιδόσεις ΣΔΒΔ) Views (Όψεις) Φώτης Κόκκορας (MSc/PhD) Τμήμα Τεχνολογίας Πληροφορικής & Τηλεπ/νιών

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

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

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

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

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

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

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

SQL Data Manipulation Language

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Λογαριασμοί & Δικαιώματα

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

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

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

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

1 / 97

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

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

1 / 87

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

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

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. Βάσεις Δεδομένων

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

Οδηγίες Χρήσης της MySQL

Βασικές Εντολές SQL. Θεωρία & Εντολές SQL. Γραμμή Εντολών MS-DOS (MySQL)

Η SQL ως γλώσσα τροποποίησης Δεδομένων

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

Εργαστήριο 6 ο 7 ο / Ερωτήματα Ι

Οδηγίες Χρήσης της MySQL

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

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

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

Εργαστήριο Βάσεων Δεδομένων. Δικαιώματα Χρηστών Προβολές

DISTINCT, LIKE, NULL, AND, OR, BETWEEN

A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 5 η ΕΝΟΤΗΤΑ: ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ

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

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

PostgreSQL. Oracle. Εαρινό Εξάμηνο


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

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

DELETE, UPDATE, INSERT

Ακαδημαϊκό Έτος , Χειμερινό Εξάμηνο Μάθημα: Εργαστήριο «Πληροφορική Υγείας» ΕΙΣΑΓΩΓΗ ΣΤΗΝ ACCESS

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

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

«Εισαγωγή στις ΒΔ - SQL»

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

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

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

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων

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

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

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

DELETE, UPDATE, INSERT.

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

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

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

Σύβακας Σταύρος ΠΕ19,MSc. IT ΣΥΒΑΚΑΣ ΣΤΑΥΡΟΣ ΕΡΩΤΗΜΑΤΑ

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

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

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

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

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

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

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

Σχεσιακό Πρότυπο Δεδομένων

ΕΝΗΜΕΡΩΣΗ ΔΕΔΟΜΕΝΩΝ. UPDATE products SET prod_fpa=19 WHERE prod_fpa=23; SELECT prod_descr,purchase,purchase_date FROM products WHERE prod_fpa=9;

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

9η Εργαστηριακή Άσκηση: Stored Procedures - Triggers. Αποθηκευμένες Διαδικασίες (Stored Procedures):

Κεφάλαιο 5. Δημιουργία φορμών για τη βάση δεδομένων DVDclub

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

Προγραμματισμός Παγκόσμιου Ιστού

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

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

Transcript:

Βάσεις Δεδομένων Ι - 03 SQL Μέρος 1 ο Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ ΤΕΙ Θεσσαλίας

Γιατί SQL; Η SQL είναι γλώσσα πολύ υψηλού επιπέδου Επιτρέπει να λέμε εύκολα τι θέλουμε να κάνουμε και όχι πώς θα το κάνουμε. Αποφεύγουμε τις πολλές λεπτομέρειες που υπεισέρχονται στη διαχείριση δεδομένων με γλώσσες προγραμματισμού όπως C++ ή Java. Είναι σχετικά απλή γλώσσα, απόρροια του ότι το σύνολο των πράξεων που προβλέπει το Σχεσιακό Πρότυπο Δεδομένων είναι μικρό (βλ. slides 2 ου μαθήματος). Το ΣΔΒΣ μετασχηματίζει τα SQL ερωτήματα σε πιο χαμηλού επιπέδου εντολές και τις οργανώνει με τέτοιο τρόπο ώστε να εκτελούνται βέλτιστα. Η διαδικασία ονομάζεται βελτιστοποίηση ερωτημάτων (query optimization) και είναι όπως λέμε "διάφανη" διαδικασία (transparent), δηλ. ο χρήστης δεν το αντιλαμβάνεται! H γλώσσα SQL είναι ISO standard και, έστω και με μικρές παραλλαγές, χρησιμοποιείται σε όλα τα ΣΔΒΔ (MySQL, Oracle, MS SQL, DB2, Postgres, κτλ). Γιατί τώρα SQL; 1. Το επιτρέπει η απλότητα της γλώσσας! 2. Η γρήγορη εξοικείωση με την SQL θα επιτρέψει τη γρηγορότερη κατανόηση των "πολύ θεωρητικών" των Βάσεων Δεδομένων. 3. Θα είναι πιο ενδιαφέροντα τα πρώτα εργαστήρια. Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 2 - Βάσεις Δεδομένων Ι

First things first... H SQL δεν είναι case sensitive. π.χ. είτε πείτε SELECT ή select είναι το ίδιο. Προσοχή! αφορά στο λεξιλόγιο της γλώσσας - σε τυχόν αλφαριθμητικά δεν ισχύει πάντα! Μια εντολή SQL τερματίζει συνήθως με το χαρακτήρα ; (ελληνικό ερωτηματικό). Κάποια ΣΔΒΔ δεν το απαιτούν (πχ MS SQL Server, Access). Όπως έχουμε ήδη πει, η SQL χωρίζεται σε δύο ομάδες εντολών: DQL (Data Query Language) ή DML (Data Manipulation Language). Περιλαμβάνει τις εντολές διαχείρισης των δεδομένων και τις σχετικές με αυτές παραμέτρους. Οι κυριότερες είναι: SELECT για υποβολή ερωτήσεων, INSERT για εισαγωγή δεδομένων στην database, UPDATE για μεταβολή δεδομένων, DELETE για διαγραφή δεδομένων πολλές παράμετροι στις παραπάνω εντολές - θα δούμε τις περισσότερες αναλυτικά DDL (Data Definition Language) Περιλαμβάνει τις εντολές διαχείρισης των βάσεων δεδομένων και τις σχετικές με αυτές παραμέτρους. Οι κυριότερες είναι: CREATE DATABASE για δημιουργία μιας νέας βάσης δεδομένων, ALTER DATABASE για τροποποίηση μιας ΒΔ, DROP DATABASE για διαγραφή μιας ΒΔ CREATE TABLE για δημιουργία πίνακα, ALTER TABLE για τροποποίηση πίνακα και DROP TABLE για διαγραφή πίνακα CREATE INDEX για δημιουργία ευρετηρίου, DROP INDEX για διαγραφή ευρετηρίου Τα αλφαριθμητικά μπαίνουν πάντα μέσα σε ' και '. Οι αριθμοί όχι. Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 3 - Βάσεις Δεδομένων Ι

Δεδομένα Παραδειγμάτων Τα παραδείγματα εντολών που παρατίθενται στη συνέχεια αφορούν στην database mybeersdb που έχει το ακόλουθο schema: Beers(name, manf) Bars(name, license, city, phone, addr) Drinkers(name, city, phone, addr) Likes(drinker, beer) Sells(bar, beer, price) Frequents(drinker, bar) Τα υπογραμμισμένα πεδία σε κάθε σχέση ορίζουν το πρωτεύον κλειδί. Το σχήμα στο Workbench έχει όπως στην εικόνα. Οι γραμμές που ενώνουν τους πίνακες είναι τα ξένα κλειδιά. πχ το πεδίο bar στη σχέση Sells παίρνει τιμές όπως το πεδίο name που είναι το πρωτεύον κλειδί στη σχέση Bars. Τα αρχεία της database (schema σε MySQL Workbench file, SQL κώδικας για δημιουργία της database, SQL κώδικας για εισαγωγή δεδομένων) βρίσκονται στο URL: https://dl.dropboxusercontent.com/u/2690181/keep/mybeersdb.zip Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 4 - Βάσεις Δεδομένων Ι

SELECT... FROM... WHERE Αυτή είναι η δομή μια τυπικής εντολής SELECT: SELECT <επιθυμητά γνωρίσματα> FROM <ένας ή περισσότεροι πίνακες> WHERE <περιορισμοί επιλογής πλειάδων> Παραδείγματα (δοκιμάστε τα στο Workbench, αφού φτιάξετε την database): SELECT name FROM Beers WHERE manf='anheuser-busch'; Επιλογή του γνωρίσματος name από τη σχέση Beers για όσες πλειάδες της σχέσης Beers έχουν στο γνώρισμα manf τιμή 'Anheuser-Busch'. σε απλά Ελληνικά: ποιες μπύρες φτιάχνει ο Anheuser-Busch; Η απάντηση είναι μια σχέση (relation) με ένα μοναδικό γνώρισμα (το name) και πλειάδες με το όνομα κάθε μπύρας που φτιάχνει ο κατασκευαστής Anheuser-Busch, όπως Budweiser, κτλ. (βλ. πίνακα με αποτελέσματα δεξιά). Γενική Ερμηνεία Ερωτήματος: από τη σχέση στη δήλωση FROM... εφαρμόζουμε το κριτήριο επιλογής που ορίζει η δήλωση WHERE... και συλλέγουμε τα δεδομένα που ορίζει η δήλωση SELECT Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 5 - Βάσεις Δεδομένων Ι

Λειτουργική Επεξήγηση Ερωτήματος SELECT Φανταστείτε μια πλειάδα-μεταβλητή (t) να επισκέπτεται κάθε πλειάδα της σχέσης που μνημονεύεται στη δήλωση FROM. Γίνεται έλεγχος αν η τρέχουσα πλειάδα ικανοποιεί τις απαιτήσεις που ορίζει η δήλωση WHERE. Αν τις ικανοποιεί, υπολογίζονται οι τιμές για τα γνωρίσματα (ή εκφράσεις) που βρίσκονται μετά το SELECT, χρησιμοποιώντας τα δεδομένα της τρέχουσας πλειάδας. Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 6 - Βάσεις Δεδομένων Ι

Το * στις δηλώσεις SELECT Αν στη δήλωση FROM υπάρχει μόνο μια σχέση τότε το * στη δήλωση SELECT σημαίνει "όλα τα γνωρίσματα αυτής της σχέσης". SELECT * FROM Beers WHERE manf = 'Anheuser-Busch'; Τώρα στο αποτέλεσμα εμπεριέχονται όλα τα γνωρίσματα της σχέσης Beers. AS: Ορισμός ονόματος σε γνώρισμα αποτελεσμάτων Μπορούμε να αλλάξουμε όνομα σε γνώρισμα στον πίνακα αποτελεσμάτων χρησιμοποιώντας τη δήλωση: AS <νέο όνομα> (χωρίς τα < και > ) SELECT name AS beer, manf FROM Beers WHERE manf = 'Anheuser-Busch' Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 7 - Βάσεις Δεδομένων Ι

Υπολογιζόμενα (Calculated) & Σταθερά Πεδία Μπορούμε να ενσωματώσουμε υπολογισμούς ως στοιχεία (calculated elements) στις δηλώσεις SELECT: SELECT bar, beer, price*340.75 AS priceindrachmas FROM Sells; το πεδίο priceindrachmas υπολογίζεται δυναμικά με βάση το πεδίο price Προσθήκη σταθερών εκφράσεων: απλά παραθέτουμε την σταθερή τιμή, πιθανώς ορίζοντας και κάποιο τίτλο (με χρήση του AS): SELECT drinker,'likes Bud' AS wholikesbud FROM Likes WHERE beer = 'Budweiser'; Πιο Πολύπλοκες Συνθήκες στο WHERE Επιτρέπεται η χρήση των λογικών τελεστών AND, OR, NOT Επιτρέπεται η χρήση τελεστών που παράγουν λογικό αποτέλεσμα όπως π.χ. οι τελεστές σύγκρισης: =, <>, <, >, <=, >= SELECT price FROM Sells WHERE bar = 'Gecko Grill' AND beer = 'Budweiser'; Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 8 - Βάσεις Δεδομένων Ι

Patterns στο WHERE (ισχύουν σε MySQL Server και σε MS SQL Server) Τι είναι ένα pattern: αλφαριθμητικό που περιέχει τα σύμβολα % ή/και _ % (οποιοδήποτε αλφαριθμητικό μηδέν ή περισσότεροι χαρακτήρες) _ (οποιοσδήποτε (ένας) χαρακτήρας) Σε μια συνθήκη (δήλωση WHERE) μπορούμε να συγκρίνουμε αλφαριθμητικά με κάποιο pattern ως εξής: <γνώρισμα> LIKE <pattern> <γνώρισμα> NOT LIKE <pattern> Παράδειγμα: στις πλειάδες της σχέσης Drinkers(name, addr, phone) θέλουμε να βρούμε πελάτες με 234 στον αριθμό τηλεφώνου. Σημείωση: παράδειγμα τηλεφώνου στην database: 415-234-6789 SELECT name, phone FROM Drinkers WHERE phone LIKE '%234%'; Με δεδομένη τη δομή των αριθμών τηλεφώνων, η επόμενη έκφραση είναι ισοδύναμη (γιατι;): SELECT name, phone FROM Drinkers WHERE phone LIKE '%234- '; Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 9 - Βάσεις Δεδομένων Ι

Τιμές NULL σε Στήλες (1/2) Το NULL ως τιμή σε μια στήλη προκύπτει όταν αυτή δεν έχει τιμή. Η ερμηνία του NULL εξαρτάται από εμάς και πρέπει να γίνεται με συνέπεια (όχι μια "έτσι" και μια "αλλιώς"!). Συνήθεις περιπτώσεις: ελλιπής τιμή (missing value) Ξέρουμε ότι το bar Caravan (στην mybeersdb) έχει κάποια διεύθυνση αλλά δεν την γνωρίζουμε μη εφαρμόσιμο (inapplicable) πχ το γνώρισμα spouse (σύζυγος) δεν έχει νόημα για κάποιον(-α) που δεν είναι παντρεμένος(-η) Στην SQL δεν μπορούμε να εμπλέξουμε το NULL σε ελέγχους και συνθήκες στο WHERE τμήμα εκφράσεων, καθώς το αποτέλεσμα θα είναι πάντα UKNOWN. Η λογική των WHERE συνθηκών στην SQL είναι τρί-τιμη: TRUE, FALSE, UNKNOWN Μια πλειάδα είναι στα αποτελέσματα ερωτήματος μόνο αν δίνει TRUE για τις συνθήκες του WHERE και όχι για FALSE ή UNKNOWN Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 10 - Βάσεις Δεδομένων Ι

Τιμές NULL σε Στήλες (2/2) Μπορούμε να ελέγξουμε για την τιμή NULL με τη βοήθεια των εκφράσεων IS NULL και IS NOT NULL Ποια bar στον πίνακα Bars δεν έχουν διεύθυνση; SELECT name, addr FROM Bars WHERE addr IS NULL; Ποια bar στον πίνακα Bars δεν έχουν NULL για διεύθυνση; SELECT name, addr FROM Bars WHERE addr IS ΝΟΤ NULL; Προσέξτε τα αποτελέσματα δεξιά! Υπάρχουν bar (2 η, 4 η, κτλ πλειάδες) που δεν έχουν διεύθυνση αλλά είναι στα αποτελέσματα. Τι συμβαίνει; NULL vs Zero Length String: έχει δοθεί ως τιμή το αλφαριθμητικό μηδενικού μήκους (το οποίο ΔΕΝ είναι NULL) IFNULL() και ISNULL() Πρόκειται για συνάρτηση της SQL (MySQL: ifnull(), MS SQL Server: isnull()) μέσω της οποίας ελέγχουμε αν η τιμή μιας στήλης είναι NULL και εφόσον είναι την αντικαθιστούμε με κάτι άλλο, δίνοντας έτσι την ερμηνεία που θέλουμε στο NULL. SELECT name, ifnull(addr,'άγνωστη') AS address FROM Bars WHERE addr IS NULL; Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 11 - Βάσεις Δεδομένων Ι

Ταξινόμηση Αποτελεσμάτων - ORDER BY Το ORDER BY χρησιμοποιείται στο τέλος μιας SELECT ερώτησης για να ταξινομήσουμε τα αποτελέσματα με βάση τις τιμές μιας ή περισσότερων στηλών. Η ταξινόμηση εξ ορισμού είναι αύξουσα (ASC ascending=αύξουσα) αλλά μπορούμε να την κάνουμε και φθίνουσα με το DESC (descending=φθίνουσα). SELECT name FROM Bars ORDER BY name ASC; Στην αύξουσα ταξινόμηση, τα NULL προηγούνται των αλφαριθμητικών μηδενικού μήκους και αυτά των μη μηδενικών αλφαριθμητικών (βλ. αποτελέσματα δεξιά). SELECT name, addr FROM Bars ORDER BY addr; SELECT TOP (ή LIMIT) Μπορούμε να επιλέξουμε τις πρώτες Ν πλειάδες από το σύνολο των αποτελεσμάτων, ως εξής: MySQL: SELECT name FROM Bars LIMIT 4; MS SQL Server: SELECT TOP 4 name FROM Bars; με ποσοστό: SELECT TOP 50% name FROM Bars; Oracle: SELECT name FROM Bars WHERE ROWNUM<=4; Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 12 - Βάσεις Δεδομένων Ι

Επιλογή Υποσυνόλου Αποτελεσμάτων (Πλειάδων) Σε MySQL, μπορούμε να επιλέξουμε πλειάδες με χρήση του τελεστή LIMIT N,K ο οποίος από το αρχικό σύνολο αποτελεσμάτων επιστρέφει τις πρώτες Κ εγγραφές, αρχίζοντας από την εγγραφή με δείκτη Ν. SELECT name FROM Bars LIMIT 0,4; επιστρέφει τις εγγραφές 1 η, 2 η, 3 η και 4 η (δηλαδή 4 στο πλήθος), αρχίζοντας από αυτή με δείκτη 0 (δηλ. την 1 η ) ) SELECT name FROM Bars LIMIT 19,10; επιστρέφει 10 εγγραφές αρχίζοντας από την εγγραφή με δείκτη 19, δηλαδή την 20 η, 21 η,..., 29 η Τελεστής ΙΝ Επιτρέπει να ορίσουμε πολλαπλές τιμές στο WHERE. SELECT name, city FROM Bars WHERE city IN ('Chicago', 'New York'); στα αποτελέσματα, το city θα είναι είτε Chicago ή New York Τελεστής DISTINCT Αφαιρεί από τα αποτελέσματα τις πολλαπλές απαντήσεις! χωρίς DISTINCT: SELECT city FROM Bars; με DISTINCT: SELECT DISTINCT city FROM Bars; Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 13 - Βάσεις Δεδομένων Ι

INSERT INTO (εισαγωγή πλειάδας) Το χρησιμοποιούμε για εισαγωγή πλειάδων. Έχει δύο τρόπους σύνταξης: με απαρίθμηση πεδίων INSERT INTO beers (name, manf) VALUES ('Mythos', 'AZ AE'); Χρησιμοποιείται όταν δεν δίνουμε τιμές σε όλα τα πεδία της σχέσης, οπότε πρέπει να πούμε για ποιες στήλες δίνουμε. Υπενθυμίζεται ότι επιτρέπεται να μην δώσουμε τιμή αν κάποιο γνώρισμα, σε επίπεδο σχεδίασης της σχέσης, έχει δηλωμένη default τιμή ή επιτρέπεται να πάρει τιμή NULL. Μπορούμε να βάλουμε τα πεδία με όποια σειρά θέλουμε, αρκεί να την τηρήσουμε στο VALUES χωρίς απαρίθμηση πεδίων INSERT INTO beers VALUES ('Mythos', 'Αθηναϊκή AE'); ο δεύτερος τρόπος είναι εφικτός μόνο εάν παρέχουμε τιμή σε όλες τις στήλες της πλειάδας Σε κάθε περίπτωση, αν το επιθυμούμε, μπορούμε να δώσουμε και τιμή NULL ως εξής: INSERT INTO beers VALUES ('Amstel', 'Αθηναϊκή AE', NULL, NULL); Αν κατά την εκτέλεση μιας εντολής INSERT προκύψει ότι η πλειάδα που πάει να δημιουργηθεί έχει ίδιο πρωτεύων κλειδί με άλλη υπάρχουσα πλειάδα, η εντολή αποτυγχάνει με σχετικό μήνυμα (primary key violation). Επιτρέπεται να καταχωρήσουμε ταυτόχρονα πολλαπλές πλειάδες: INSERT INTO beers VALUES ('Amstel','xyzw'), ('Amstel Black','abcd'); Σε στήλες με ρύθμιση auto incremental δεν δίνουμε τιμή. Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 14 - Βάσεις Δεδομένων Ι

DELETE FROM (διαγραφή πλειάδας) Το χρησιμοποιούμε για διαγραφή πλειάδων. DELETE FROM Beers WHERE Name='Mythos' ΠΡΟΣΟΧΗ: το WHERE τμήμα είναι βασικό καθώς προσδιορίζει (μέσω κάποιας συνθήκης) ποια ή ποιες πλειάδες διαγράφουμε. Δεν είναι όμως υποχρεωτικό εξαρτάται τι θέλουμε να διαγράψουμε! Μπορούμε να διαγράψουμε όλες τις εγγραφές ως εξής (ο πίνακας θα απομείνει άδειος): DELETE FROM <όνομα πίνακα> ή DELETE * FROM <όνομα πίνακα> UPDATE (ενημέρωση/μεταβολή πλειάδας) Χρησιμοποιείται για να μεταβάλουμε την τιμή σε κάποιο ή κάποια πεδία σε μία ή περισσότερες εγγραφές. Οι εγγραφές προσδιορίζονται μέσω συνθήκης WHERE. UPDATE bars SET city='chicago', addr='106st Addison' WHERE name='the Blank Club'; ΠΡΟΣΟΧΗ: το WHERE τμήμα είναι βασικό καθώς προσδιορίζει (μέσω κάποιας συνθήκης) ποια ή ποιες πλειάδες διαγράφουμε. Δεν είναι όμως υποχρεωτικό εξαρτάται τι θέλουμε να μεταβάλουμε! Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 15 - Βάσεις Δεδομένων Ι

Γενική Παρατήρηση Οι ενέργειες εισαγωγή/insert, ενημέρωση/update και διαγραφή/delete δεν επιστρέφουν κάποιο αποτέλεσμα (όπως για παράδειγμα η επιλογή/select) αλλά τροποποιούν με κάποιο τρόπο τα δεδομένα της database. Η επιτυχής εκτέλεση εντολών INSERT, DELETE και UPDATE προϋποθέτει ότι δεν παραβιάζεται κάποιος άλλος περιορισμός που τυχόν υπάρχει, όπως πχ περιορισμοί ξένου κλειδιού. Στην πράξη, μετά την εκτέλεση τέτοιων εντολών, οφείλουμε να ελέγξουμε τυχόν σφάλματα που καταγράφηκαν στον database server. το MySQL Workbench ανακοινώνει εξ ορισμού τέτοια σφάλματα αν η πρόσβαση στην database γίνεται προγραμματιστικά, οι γλώσσες προγραμματισμού παρέχουν κατάλληλες δομές και εντολές για έλεγχο του τι συνέβη. Φ. Κόκκορας / Τμ. Μηχανικών Πληροφορικής ΤΕ / ΤΕΙ Θεσσαλίας - 16 - Βάσεις Δεδομένων Ι...