ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ Η συνθήκη WHERE βάζει περιορισμούς στις εγγραφές που επιστρέφονται. Ο όρος ORDER BY ταξινομεί τις εγγραφές που επιστρέφονται. Παράδειγμα: SELECT * FROM table_name ORDER BY column_name; By default η σειρά ταξινόμησης είναι αύξουσα. (ASC) Η βάση ταξινομεί ως προς το κλειδί. Εάν θέλουμε η σειρά να είναι φθίνουσα τότε μετά το όνομα στήλης χρησιμοποιούμε τον όρο DESC. Παράδειγμα: SELECT * FROM table_name ORDER BY column_name DESC; Σειρά εμφάνισης ΣΕΙΡΑ ΑΡΙΘΜΟΙ ΚΕΙΜΕΝΟ ΗΜΕΡΟΜΗΝΙΕΣ NULL Αύξουσα ASC Από το Α στο Ζ φθίνουσα DESC Από το μικρότερο στο μεγαλύτερο Από το μεγαλύτερο στο μικρότερο Από το Ζ στο Α Από την παλαιότερη στην πιο πρόσφατη Από την πιο πρόσφατη στην παλαιότερη Εμφανίζονται πρώτες Εμφανίζονται τελευταίες Όταν έχουμε σύνθετα ερωτήματα με συνθήκες where, ενώσεις ή και άλλους όρους η ταξινόμηση χρησιμοποιείται στο τέλος του ερωτήματος. Περιορισμός αποτελεσμάτων με τον όρο LIMIT. Δηλώνει πόσες εγγραφές θα επιστραφούν. 1
Χρησιμοποιείται με δύο τρόπους. SELECT στήλες FROM πίνακας LIMIT πλήθος_εγγραφών; SELECT στήλες FROM πίνακας LIMIT σημείο_εκκίνησης, πλήθος_εγγραφών; Παράδειγμα: SELECT * FROM πίνακας LIMIT 5; Επιστρέφει τις 5 πρώτες πλειάδες του πίνακα. SELECT * FROM πίνακας LIMIT 5, 12; Επιστρέφει 12 πλειάδες του πίνακα ξεκινώντας από την 5. Εν κατακλείδι WHERE ORDER BY LIMIT ποιες εγγραφές θα επιστραφούν πως θα επιστραφούν πόσες εγγραφές θα επιστραφούν 2
ΣΥΖΕΥΞΗ (ΕΝΩΣΗ) ΠΙΝΑΚΩΝ Οι συζεύξεις πινάκων χρησιμοποιούνται για να εξαχθούν από τη ΒΔ πληροφορίες που βρίσκονται σε περισσότερους πίνακες. Υπάρχουν οι εσωτερικές και οι εξωτερικές ενώσεις πινάκων. Παράδειγμα: Εσωτερική σύζευξη SELECT * FROM table1 INNER JOIN table2 ON table1.column1 = table2.column1; SELECT * FROM paragelies INNER JOIN pelates ON paragelies.pel_id =pelates.pel_id ; Το ερώτημα αυτό θα φέρει τις πλειάδες από τους δύο πίνακες όπου οι τιμές στις στήλες pelates.pel_id, paragelies.pel_id είναι κοινές. Με άλλα λόγια θα αντικαταστήσει το κλειδί pel_id στον πίνακα paragelies με όλες τις πληροφορίες από τον πίνακα πελάτες που αντιστοιχούν στο κλειδί. Διάγραμμα Venn εσωτερικής ένωσης πινάκων. Στην επιλογή πληροφοριών με ένωση πινάκων πρέπει στην σύνταξη να χρησιμοποιούμε τελείες αν υπάρχουν στήλες στους πίνακες με το ίδιο όνομα. Εξωτερική σύζευξη 3
Οι εξωτερικές ενώσεις επιστρέφουν εγγραφές που δεν ικανοποιούν κάποια συνθήκη. Υπάρχουν δύο τέτοιες ενώσεις, η αριστερή και η δεξιά. Αριστερή εξωτερική σύζευξη SELECT * FROM pelates LEFT JOIN paragelies Δεξιά εξωτερική σύζευξη ON paragelies.pel_id =pelates.pel_id ; SELECT * FROM paragelies RIGHT JOIN pelates ON paragelies.pel_id =pelates.pel_id ; Αυτά τα ερωτήματα επιστρέφουν τις ίδιες εγγραφές, επιστρέφουν δηλαδή όλους τους πελάτες που έχουν παραγγελίες αλλά και αυτούς που δεν εμφανίζονται στον πίνακα παραγγελίες. Διάγραμμα Venn εσωτερικής ένωσης πινάκων. Όταν δύο πίνακες έχουν το ίδιο όνομα κοινής στήλης μπορούμε πιο απλά να χρησιμοποιήσουμε τον όρο USING(όνομα κοινής στήλης). Δηλ. SELECT * FROM paragelies RIGHT JOIN pelates USING(pel_id); 4
ΣΥΝΑΡΤΗΣΕΙΣ ΤΗΣ mysql Συναρτήσεις κειμένου. Για να χρησιμοποιήσουμε μια συνάρτηση πρέπει να καθορίσουμε σε ποιες στήλες θα την εφαρμόσουμε. SELECT FUNCTION(στήλη) FROM πίνακας; Για να καθορίσουμε πολλές στήλες γράφουμε: SELECT στήλη1, FUNCTION(στήλη2), στήλη3 FROM πίνακας; Μερικές συναρτήσεις κειμένου: SUBSTRING(στήλη ή string, αρχή, μήκος) επιστρέφει ένα τμήμα ενός αλφαριθμητικού ή μιας στήλης, με χαρακτήρα αρχής και το πλήθος των επιστρεφομένων χαρακτήρων. LENGTH(στήλη ή string) επιστρέφει το μήκος του αλφαριθμητικού που είναι αποθηκευμένο στην στήλη. UPPER(στήλη ή string) μετατρέπει τους χαρακτήρες του αλφαριθμητικού σε κεφαλαία. LOWER(στήλη ή string) μετατρέπει τους χαρακτήρες του αλφαριθμητικού σε πεζά. Συνένωση και ψευδώνυμα Συνένωση τιμών κάνουμε με την συνάρτηση CONCAT() η οποία συνοδεύεται με το ψευδώνυμο (alias). Η CONCAT() συνενώνει τιμές στηλών άρα εφαρμόζεται σε πάνω από δύο στήλες με κόμματα ανάμεσα τους. Την συνάρτηση ακολουθεί ο όρος AS και το ψευδώνυμο. SELECT CONCAT(στήλη1,, στήλη2) AS ψευδώνυμο FROM πίνακας; Εναλλακτικά μπορούμε να δώσουμε ψευδώνυμο αι στον πίνακα. 5
SELECT CONCAT(στήλη1,, στήλη2) AS ψευδώνυμο FROM πίνακας AS ψευδώνυμο_πίνακα; Αριθμητικές συναρτήσεις FORMAT(αριθμός ή στήλη, x) επιστρέφει το ποσό ή το περιεχόμενο μιας στήλης αριθμών μορφοποιημένο με x δεκαδικές θέσεις και κόμματα ανά 3 ψηφία. ROUND(αριθμός ή στήλη,x) επιστρέφει το ποσό ή το περιεχόμενο μιας στήλης αριθμών στρογγυλοποιημένο σε x δεκαδικές θέσεις. MOD(x, y) επιστρέφει το υπόλοιπο της διαίρεσης του x με το y. Το x και το y μπορεί να είναι στήλες ή αριθμοί ή και τα δύο. POW(x, y) επιστρέφει την τιμή του x υψωμένη στην δύναμη του y. Συναρτήσεις ημερομηνίας και ώρας. MONTH(στήλη) επιστρέφει μόνο τον αριθμό του μήνα. DATE(στήλη) επιστρέφει μόνο τον αριθμό της ημερομηνίας. DATE_ADD(στήλη, INTERVAL x type) προσθέτει στις ημερομηνίες της στήλης ένα διάστημα x μονάδες τύπου ημέρας ή μήνα ή έτους. Πρόσθεσε στην ημερομηνία 2 ώρες. DATE_ADD(date, INTERVAL 2 HOUR) Αφαίρεσε από την ημερομηνία 3 μέρες. DATE_SUB(date, INTERVAL 3 DAY) DATE_SUB(στήλη, INTERVAL x type) αφαιρεί στις ημερομηνίες της στήλης ένα διάστημα x μονάδες τύπου ημέρας ή μήνα ή έτους. CURDATE() επιστρέφει την τρέχουσα ημερομηνία. CUETIME() επιστρέφει την τρέχουσα ώρα. 6
Μορφοποίηση ημερομηνίας και ώρας Μορφοποίηση ημερομηνίας και ώρας γίνεται με την συνάρτηση DATE_FORMAT(στήλη, μορφοποίηση ) Μορφοποίηση μόνο της ώρας γίνεται με την συνάρτηση TIME_FORMAT(στήλη, μορφοποίηση ) Μορφοποιούμε με την χρήση του συμβόλου % και διάφορους τελεστές. Π.χ %e ημέρα του μήνα 1-31 %a σύντμηση ονόματος ημέρας Κυρ-Σαβ %b σύντμηση ονόματος μήνα Ιαν-Δεκ %W όνομα ημέρας %d ημέρα του μήνα διψήφια 01-31 %D ημέρα με επίθεμα 1 st 31 st %m αριθμός μήνα διψήφιος 01-12 %M όνομα μήνα Ιανουάριος-Δεκέμβριος %Y έτος τετραψήφιο %y έτος διψήφιο. Συναρτήσεις ομαδοποίησης MIN(στήλη) επιστρέφει την μικρότερη τιμή από μια στήλη. MAX(στήλη) επιστρέφει την μεγαλύτερη τιμή από μια στήλη. 7
COUNT(στήλη) υπολογίζει τον αριθμό των γραμμών. SUM(στήλη) επιστρέφει το άθροισμα όλων των τιμών μιας στήλης. DISTINCT(στήλη) χρησιμοποιείται με τον όρο GROUP BY για να επιστρέψει ο αριθμός των μοναδικών εγγραφών ανά κατηγορία. SELECT DATABASE() μας επιστρέφει το όνομα της βάσης που χρησιμοποιείται εκείνη την στιγμή. SELECT USER() επιστρέφει το όνομα του χρήστη. 8
ΠΡΟΒΟΛΕΣ (views) Μια προβολή είναι απλώς ένας ειδικός τύπος πίνακα, που συνήθως βασίζεται στη δομή και τα δεδομένα των τυπικών πινάκων. Για παράδειγμα, στη βάση δεδομένων timologisi, συχνά πρέπει να βλέπετε το συνολικό ποσό με το οποίο έχει τιμολογηθεί κάθε πελάτης. Έχετε τη δυνατότητα να δημιουργήσετε μια προβολή που να απεικονίζει μόνο αυτές τις πληροφορίες. Αυτό ίσως σας κάνει να σκεφτείτε ότι η προβολή είναι μια στατική εμφάνιση μερικών δεδομένων: ένα στιγμιότυπο που λαμβάνεται κατά το χρόνο δημιουργίας της προβολής. Αυτό όμως δεν ισχύει! Αν ορίσετε μια προβολή που βασίζεται στην επιλογή δεδομένων από άλλους πίνακες, όταν ενημερωθούν αυτοί οι πίνακες θα ενημερωθούν και τα δεδομένα της προβολής. Δημιουργία προβολής Για να δημιουργήσω μια προβολή χρησιμοποιώ τη εντολή CREATE VIEW. Η σύνταξη είναι η εξής: CREATE VIEW όνομα_προβολής AS ερώτημα_επιλογής; Η νέα προβολή δημιουργείται με ονόματα στηλών τα οποία αντιστοιχίζονται με αυτά που ανακτώνται από την εντολή SELECT. Π.χ: CREATE VIEW stoixeia_pelath AS SELECT first name, last_name, phone FROM pelates; Η προβολή stoixeia_pelath θα περιέχει τρεις στήλες, με ονόματα first_name, last_name, και phone του πίνακα pelates. 9
Για να δω πως δημιουργήθηκε μια προβολή εφαρμόζω την εντολή: SHOW CREATE VIEW όνομα_προβολής; Τροποποίηση ή διαγραφή προβολής Όταν δημιουργήσετε μια προβολή, υπάρχουν δύο τρόποι τροποποίησης του ορισμού της. Η πρώτη μέθοδος είναι ή χρήση της σύνταξης CREATE VIEW, με τον προστιθέμενο όρο OR REPLACE: CREATE OR REPLACE VIEW όνομα_προβολής AS ερώτημα_select; Για να εκτελέσετε αυτή την εντολή πρέπει να έχετε προνόμια διαγραφής προβολών DROP VIEW (επειδή διαγράφεται η προβολή και μετά. δημιουργείται μια νέα με το ίδιο όνομα). Η δεύτερη μέθοδος είναι η χρήση μιας εντολής ΑLTER VIEW. Αυτή μοιάζει αρκετά με την εντολή CREATE VIEW: ALTER VIEW όνομα_προβολής AS ερώτημα_select; Αν δεν χρειάζεστε πλέον μια προβολή, μπορείτε να τη διαγράψετε χρησιμοποιώντας την εντολή DROP VIEW όνομα,προβολής; Για να πάρετε πρόσθετα μέτρα ασφαλείας, έχετε τη δυνατότητα προσθήκης του όρου IF EXISTS: DROP VIEW IF EXISTS όνομα_προβολής; Επειδή τα δεδομένα στις περισσότερες προβολές βασίζονται σε δεδομένα που αποθηκεύονται σε πραγματικούς πίνακες, όταν χρειάζεται θα πρέπει να αλλάζετε τα δεδομένα στους υποκείμενους πίνακες και όχι στην προβολή. 10