Η εντολή SELECT σε συνδυασμό με την DESCRIBE, DISTINCT, και ALIAS
Στο σημερινό μάθημα θα ασχοληθούμε με την εντολή SELECT η οποία μας δίνει την δυνατότητα εξερεύνησης των δεδομένων που είναι αποθηκευμένα στους πίνακες μιας βάσης χωρίς να τα επηρεάζει ή να τα αλλοιώνει από την αρχική τους μορφή. Συνήθως αυτή η εντολή χρησιμοποιείται για την οργανωμένη παρουσίαση reports ανάλογα με τις παραμέτρους και το είδος των πληροφοριών που ζητάμε.
Σαν πρώτο βήμα θα πρέπει να βεβαιωθούμε ότι η Oracle Database Express Edition έχει ξεκινήσει. Εάν χρησιμοποιείτε Linux λειτουργικό σύστημα (όπως Fedora) θα χρειαστεί ίσως να κάνετε εσείς την εκκίνηση της βάσης εάν κατά την εγκατάστασή της είχατε επιλέξει να μην ξεκινάει αυτόματα κάθε φορά που ξεκινάτε το λειτουργικό σύστημα. Στα Windows αυτή η διαδικασία είναι πολύ απλή, ενώ στο Fedora θα χρειαστεί να τρέξετε το ακόλουθο script αφότου συνδεθείτε σαν root χρήστης:
Το επόμενο βήμα είναι να ξεκινήσουμε τον SQL Developer και να συνδεθούμε σαν χρήστης hr με κωδικό πρόσβασης hr. Μετά από την επιτυχημένη ένωση του χρήστη στην βάση, θα έχουμε την δυνατότητα να δούμε όλα τα αντικείμενα που ανήκουν στο schema του χρήστη hr. Πατώντας επάνω στο σύμβολο ( + ) δίπλα από το εικονίδιο tables, θα μπορέσουμε να δούμε όλους τους πίνακες μέσα στους οποίους βρίσκονται τα δεδομένα που ανήκουν στον χρήστη hr.
Η πιο εύκολη μορφή δήλωσης της εντολής SELECT με την οποία μπορούμε να ανακτήσουμε στην οθόνη μας όλα τα δεδομένα που είναι αποθηκευμένα σε έναν πίνακα είναι σε συνδυασμό με το σύμβολο ( * ) το οποίο απαιτεί την εμφάνιση όλων των δεδομένων από όλες τις στήλες. Για να ολοκληρωθεί μια SELECT εντολή, θα πρέπει να δηλώσουμε και το όνομα του πίνακα από τον οποίο θα ανακτήσουμε τα δεδομένα. Στο πιο κάτω παράδειγμα ζητάμε να δούμε όλα τα δεδομένα από όλες τις στήλες του πίνακα employees. Μην ξεχάσετε να κλείσετε επίσημα την δήλωση του SELECT με το σύμβολο semicolon ( ; ) που απαιτείται για την ολοκλήρωση ενός SQL αιτήματος.
Πριν προχωρήσουμε βαθύτερα στην ανάλυση της SELECT εντολής, ας αναφέρουμε και την δυνατότητα που έχουμε μέσα από την χρήση του SQL Developer θα πάρουμε ακριβώς το ίδιο αποτέλεσμα χωρίς την χρήση SQL εντολών. Αυτό που πρέπει να κάνουμε είναι να κάνουμε κλικ με το ποντίκι μας μια φορά επάνω στον πίνακα employees και να επιλέξουμε από τις εμφανιζόμενες καρτέλες εκείνη με την ονομασία Data. Για τις υπόλοιπες καρτέλες και τις πληροφορίες που παρουσιάζουν θα μιλήσουμε σε μελλοντικά μαθήματα.
Αν παρατηρήσατε την μορφή της SELECT εντολής, θα ανακαλύψετε την εξής δομή:
Δηλώνουμε τις στήλες από τις οποίες ενδιαφερόμαστε να ανακτήσουμε δεδομένα.
Δηλώνουμε τον πίνακα στον οποίο ανήκουν οι στήλες
Αυτό σημαίνει ότι αντί για την χρήση του συμβόλου ( * ), θα μπορούσαμε να δηλώσουμε ονομαστικά μόνο εκείνες τις στήλες από τις οποίες ενδιαφερόμαστε να δούμε τις πληροφορίες. Για παράδειγμα, ο πίνακας employees έχει αρκετές πληροφορίες για κάθε εργαζόμενο. Για να δούμε μόνο εκείνες τις στήλες που αντιστοιχούν στα στοιχεία του employee_id, first_name και last_name θα γράφαμε το εξής SELECT αίτημα:
Η απορία που συνήθως δημιουργείται σε αυτό το σημείο της θεωρίας είναι ποιος είναι ο πιο εύκολος τρόπος να γνωρίζουμε με την μορφή λίστας τα ονόματα των στηλών από τις οποίες αποτελείται ο πίνακας. Το να χρησιμοποιούμε το σύμβολο ( * ) κάθε φορά δεν είναι σίγουρα και ο πιο αποδοτικός και γρήγορος τρόπος. Η εντολή DESCRIBE έχει την δυνατότητα να μας δίνει πληροφορίες για την δομή του πίνακα. Με άλλα λόγια θα πάρουμε μια λίστα με τα ονόματα όλων των στηλών που ανήκουν στον πίνακα μαζί με το είδος των τιμών που δέχονται και αν είναι επιτρεπτό να αφήσουμε κενό για τυχόν τιμές που δεν γνωρίζουμε.
Την λίστα με τα ονόματα των στηλών μπορούμε κάλλιστα να την δούμε εάν κάνουμε κλικ μια φορά στο σύμβολο ( + ) δίπλα από τον πίνακα employees.
Επίσης, θα μπορούμε να δούμε την δομή κάποιου πίνακα που δεν ανήκει στο δικό μας schema αρκεί να προσθέταμε μπροστά από το όνομα του πίνακα το όνομα του schema του χρήστη όπως δείχνει και το πιο κάτω παράδειγμα.
Θα έχετε παρατηρήσει από τις εντολές που έχουμε παρουσιάσει στο σημερινό μάθημα, ότι άλλες τις παρουσιάζω με πεζά γράμματα και άλλες και κεφαλαία. Ο λόγος που ακολουθώ τον τρόπο εγγραφής είναι για να σας δείξω ότι οι SQL εντολές γενικότερα δεν παρουσιάζουν ευαισθησία στον τρόπο εγγραφής τους. Ο τρόπος δήλωσης των εντολών αφήνεται εντελώς επάνω σας και στο στυλ που σας αρμόζει καλύτερα. Ας συνεχίσουμε όμως με την αναφορά μας στην SELECT εντολή και σε μερικά ακόμα ενδιαφέροντα στοιχεία που έχει να παρουσιάσει.
Εάν προσέξουμε το αποτέλεσμα του QUERY (είναι το σετ των SQL εντολών που εκφράζουν μια ολοκληρωμένη λειτουργία) από την δήλωση της εντολής “SELECT * from employees;” θα παρατηρήσουμε ότι υπάρχουν στοιχεία που παρουσιάζονται περισσότερο από δύο φορές στην στήλη JOB_ID.
Η στήλη αυτή αναθέτει έναν κωδικό εργασίας σε κάθε εργαζόμενο ανάλογα με το τμήμα στο οποίο απασχολείται. Εάν θέλαμε να πάρουμε μια λίστα η οποία να μας δείχνει μόνο από μια φορά κάθε πιθανό κωδικό που ανήκει στην συγκεκριμένη στήλη, τότε θα πρέπει να χρησιμοποιήσουμε την εντολή DISTINCT σε συνδυασμό με την SELECT. Η συγκεκριμένη εντολή εξασφαλίζει την μοναδικότητα των στοιχείων μόνο για την εμφάνιση τους στην οθόνη μας. Προσοχή εδώ – αυτή η σιγουριά της μοναδικότητας είναι μόνο για την παρουσίαση των στοιχείων και όχι για την αποθήκευσή τους.
Ενώ η στήλη JOB_ID του πίνακα employees βολεύει με την μικρή ονομασία του στην προγραμματιστική καταχώρηση δεδομένων, ίσως θα επιθυμούσαμε έναν πιο επεξηγηματικό τίτλο όταν την εμφανίζουμε στην οθόνη. Αυτή την δυνατότητα την έχουμε μέσα από την χρήση του alias. Σαν alias ορίζουμε ένα ψευδώνυμο ή ένα δεύτερο όνομα μιας στήλης μόνο για τις ανάγκες εκτύπωσης ή εμφάνισή της στην οθόνη μας. Καμία απολύτως αλλαγή δεν γίνεται στο πραγματικό όνομα της στήλης. Στο πιο κάτω παράδειγμα, δίνουμε στην στήλη JOB_ID το alias όνομα Occupation.
Στους αρχάριους μαθητές που κάνουν τα πρώτα τους βήματα στις SQL εντολές, θα ήταν φρόνιμο να χρησιμοποιούν μπροστά από το alias όνομα την προαιρετική λέξη as για να δίνει μεγαλύτερη έμφαση στο διαχωρισμό ανάμεσα στο πραγματικό όνομα της στήλης και το alias. Επίσης έχουμε την δυνατότητα να ορίσουμε σαν alias της στήλης και περισσότερες από μια λέξεις αρκεί να περικλείονται από τα διπλά σύμβολα ( “ “ ). Στο πιο κάτω παράδειγμα δείχνουμε πως να μετονομάσουμε, για τις ανάγκες του report που χρειαζόμαστε, την στήλη JOB_ID σε JOB OCCUPATION.
Με αυτή την σύντομη αλλά απαραίτητη εισαγωγή στην εντολή SELECT, νομίζω ότι έχετε αποκτήσει μια μικρή ευχέρεια στην χρήση των εντολών SQL. Αλλά ποιος είναι όμως ο ορισμός της γλώσσας SQL που έχουμε αναφέρει ήδη αρκετές φορές μέσα στο μάθημά μας? Η δομημένη γλώσσα SQL είναι μια γλώσσα ειδικά σχεδιασμένη να μπορεί να έχει πρόσβαση σε δεδομένα που είναι αποθηκευμένα σε βάσεις δεδομένων. Χρησιμοποιεί μια αρκετά εύκολη σύνταξη για την εκτέλεση των εντολών από τις οποίες αποτελείται και είναι διεθνής αναγνωρισμένη ως ο στάνταρντ τρόπος για την ανάκτηση δεδομένων. Η Oracle προσφέρει μαζί με κάθε εγκατάσταση της βάσης της και ένα ενσωματωμένο εργαλείο με το όνομα SQL*PLUS με το οποίο μπορούμε να εκτελούμε τις SQL εντολές και όχι μόνο. Εκτός από την διαχείριση των δεδομένων, συνήθως είμαστε υπεύθυνοι και για την συντήρηση όσο και την σωστή λειτουργία της ίδιας της βάσης.
Υπάρχουν εντολές, όπως η startup που ξεκινάει το instance μιας βάσης, που δεν μπορούν να τρέξουν από τον SQL Developer παρά μόνο από τον SQL*PLUS. Για να ξεκινήσουμε το SQL*PLUS περιβάλλον δεν έχουμε παρά να πάμε στο κύριο μενού της Oracle Express Edition και να επιλέξουμε το Run SQL Command Line όπως δείχνει και η ποιο κάτω εικόνα.
Για επιτύχουμε την σύνδεση θα πρέπει να γράψουμε την εντολή connect η οποία θα μας ζητήσει τον λογαριασμό του χρήστη κάτω από τον οποίο θα γίνει η σύνδεση στην βάση. Αφού δηλώσουμε το username και το password για τον χρήστη, μπορούμε να γράψουμε τις SQL εντολές μας.
Με εκτίμηση και σεβασμό
Μιχάλης Κασάπογλου
Michail.Kassapoglou@free-lessons.org




















