Πώς να γράψετε ερωτήματα Microsoft Access SQL από το Scratch

Πώς να γράψετε ερωτήματα Microsoft Access SQL από το Scratch

Η Microsoft Access είναι αναμφισβήτητα το πιο ισχυρό εργαλείο σε ολόκληρη τη σουίτα του Microsoft Office, αλλά μυστοποιεί (και μερικές φορές τρομάζει) τους χρήστες ενέργειας του Office. Με μια πιο απότομη καμπύλη εκμάθησης από το Word ή το Excel, πώς υποτίθεται ότι κάποιος πρέπει να τυλίξει το κεφάλι του γύρω από τη χρήση αυτού του εργαλείου; Αυτή την εβδομάδα, ο Bruce Epper θα εξετάσει μερικά από τα ζητήματα που προκάλεσε αυτή η ερώτηση από έναν αναγνώστη μας.





Ένας Αναγνώστης ρωτά:

Δυσκολεύομαι να γράψω ένα ερώτημα στη Microsoft Access. Έχω μια βάση δεδομένων με δύο πίνακες προϊόντων που περιέχουν μια κοινή στήλη με έναν αριθμητικό κωδικό προϊόντος και ένα σχετικό όνομα προϊόντος. Θέλω να μάθω ποια προϊόντα από τον πίνακα Α μπορούν να βρεθούν στον Πίνακα Β. Θέλω να προσθέσω μια στήλη με το όνομα Αποτελέσματα που περιέχει το όνομα προϊόντος από τον Πίνακα Α εάν υπάρχει και το όνομα προϊόντος από τον Πίνακα Β όταν δεν υπάρχει στον Πίνακα Α. Έχετε κάποια συμβουλή;





Η απάντηση του Bruce:

Το Microsoft Access είναι ένα Σύστημα Διαχείρισης Βάσεων Δεδομένων (DBMS) σχεδιασμένο για χρήση τόσο σε Windows όσο και σε Mac. Χρησιμοποιεί τη μηχανή βάσης δεδομένων Jet της Microsoft για επεξεργασία και αποθήκευση δεδομένων. Παρέχει επίσης μια γραφική διεπαφή για τους χρήστες που σχεδόν εξαλείφει την ανάγκη κατανόησης της δομημένης γλώσσας ερωτήματος (SQL).





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

Αφετηρία

Εάν δεν έχετε ήδη κάποια εξοικείωση με την Access ή άλλο RDBMS, θα σας πρότεινα να ξεκινήσετε με αυτούς τους πόρους πριν προχωρήσετε:



  • Τι είναι λοιπόν μια βάση δεδομένων; όπου ο Ryan Dube χρησιμοποιεί το Excel για να δείξει τα βασικά των σχεσιακών βάσεων δεδομένων.
  • Ένας γρήγορος οδηγός για να ξεκινήσετε με τη Microsoft Access 2007 που είναι μια επισκόπηση υψηλού επιπέδου της Access και των στοιχείων που περιλαμβάνουν μια βάση δεδομένων της Access.
  • Ένας γρήγορος οδηγός για πίνακες στη Microsoft Access 2007 ρίχνει μια ματιά στη δημιουργία της πρώτης βάσης δεδομένων και πινάκων για την αποθήκευση των δομημένων δεδομένων σας.
  • Ένα γρήγορο σεμινάριο για ερωτήματα στη Microsoft Access 2007 εξετάζει τα μέσα επιστροφής συγκεκριμένων τμημάτων των δεδομένων που είναι αποθηκευμένα στους πίνακες της βάσης δεδομένων.

Η βασική κατανόηση των εννοιών που παρέχονται σε αυτά τα άρθρα θα κάνει τα παρακάτω πιο εύπεπτα.

Σχέσεις βάσης δεδομένων και ομαλοποίηση

Φανταστείτε ότι έχετε μια εταιρεία που πωλεί 50 διαφορετικούς τύπους widget σε όλο τον κόσμο. Έχετε μια βάση πελατών 1.250 και πωλείτε κατά μέσο όρο 10.000 widget σε αυτούς τους πελάτες. Αυτήν τη στιγμή χρησιμοποιείτε ένα μόνο υπολογιστικό φύλλο για να παρακολουθείτε όλες αυτές τις πωλήσεις - ουσιαστικά έναν πίνακα βάσης δεδομένων. Και κάθε χρόνο προσθέτει χιλιάδες σειρές στο υπολογιστικό φύλλο σας.





Οι παραπάνω εικόνες αποτελούν μέρος του υπολογιστικού φύλλου παρακολούθησης παραγγελιών που χρησιμοποιείτε. Τώρα πείτε ότι και οι δύο αυτοί πελάτες αγοράζουν widget από εσάς αρκετές φορές το χρόνο, ώστε να έχετε πολύ περισσότερες σειρές και για τους δύο.





Εάν η Joan Smith παντρευτεί τον Ted Baines και πάρει το επώνυμό του, κάθε σειρά που περιέχει το όνομά της πρέπει τώρα να αλλάξει. Το πρόβλημα επιδεινώνεται εάν τυχαίνει να έχετε δύο διαφορετικούς πελάτες με το όνομα «Joan Smith». Έχει γίνει πολύ πιο δύσκολο να διατηρήσετε τα δεδομένα πωλήσεών σας συνεπή λόγω ενός αρκετά συνηθισμένου γεγονότος.

Χρησιμοποιώντας μια βάση δεδομένων και ομαλοποιώντας τα δεδομένα, μπορούμε να διαχωρίσουμε τα στοιχεία σε πολλούς πίνακες, όπως απόθεμα, πελάτες και παραγγελίες.

Απλώς κοιτάζοντας το τμήμα πελάτη του παραδείγματος μας, θα αφαιρέσουμε τις στήλες για το όνομα πελάτη και τη διεύθυνση πελάτη και θα τις τοποθετήσουμε σε έναν νέο πίνακα. Στην παραπάνω εικόνα, έχω επίσης σπάσει τα πράγματα καλύτερα για πιο λεπτομερή πρόσβαση στα δεδομένα. Ο νέος πίνακας περιέχει επίσης μια στήλη για ένα κύριο κλειδί (ClientID) - έναν αριθμό που θα χρησιμοποιηθεί για πρόσβαση σε κάθε γραμμή αυτού του πίνακα.

Στον αρχικό πίνακα όπου αφαιρέσαμε αυτά τα δεδομένα, θα προσθέσουμε μια στήλη για ένα ξένο κλειδί (ClientID), το οποίο συνδέεται με τη σωστή σειρά που περιέχει τις πληροφορίες για το συγκεκριμένο πρόγραμμα -πελάτη.

Τώρα, όταν η Joan Smith αλλάζει το όνομά της σε Joan Baines, η αλλαγή χρειάζεται να γίνει μόνο μία φορά στον πίνακα Πελάτη. Κάθε άλλη αναφορά από ενωμένους πίνακες θα φέρει το σωστό όνομα πελάτη και μια αναφορά που εξετάζει τι αγόρασε η Joan τα τελευταία 5 χρόνια θα λαμβάνει όλες τις παραγγελίες τόσο με το παρθενικό όσο και με το παντρεμένο της όνομα χωρίς να χρειάζεται να αλλάξει τον τρόπο δημιουργίας της αναφοράς Το

Ως πρόσθετο όφελος, αυτό μειώνει επίσης τη συνολική ποσότητα αποθήκευσης που καταναλώνεται.

Συμμετοχή σε τύπους

Το SQL ορίζει πέντε διαφορετικούς τύπους συνδέσεων: ΕΣΩΤΕΡΙΚΟ, ΑΡΙΣΤΕΡΟ ΕΞΩΤΕΡΙΚΟ, ΣΩΣΤΟ ΕΞΩΤΕΡΙΚΟ, ΠΛΗΡΩΣ ΕΞΩΤΕΡΙΚΟ και ΣΤΑΥΡΟ. Η λέξη -κλειδί OUTER είναι προαιρετική στη δήλωση SQL.

Η Microsoft Access επιτρέπει τη χρήση των ΕΣΩΤΕΡΙΚΩΝ (προεπιλογή), ΑΡΙΣΤΕΡΗΣ ΕΞΩΤΕΡΙΚΗΣ, ΔΕΞΙΑΣ ΕΞΩΤΕΡΙΚΗΣ και ΣΤΑΥΡΩΣΗΣ. Το FULL OUTER δεν υποστηρίζεται ως τέτοιο, αλλά χρησιμοποιώντας το LEFT OUTER, UNION ALL και το RIGHT OUTER, μπορεί να παραποιηθεί με το κόστος περισσότερων κύκλων CPU και λειτουργιών I/O.

Η έξοδος μιας σύνδεσης CROSS περιέχει κάθε σειρά του αριστερού πίνακα σε συνδυασμό με κάθε σειρά του δεξιού πίνακα. Η μόνη φορά που έχω δει να χρησιμοποιείται CROSS είναι η δοκιμή φόρτωσης διακομιστών βάσης δεδομένων.

Ας ρίξουμε μια ματιά στο πώς λειτουργούν οι βασικές ενώσεις και στη συνέχεια θα τις τροποποιήσουμε ώστε να ταιριάζουν στις ανάγκες μας.

Ας ξεκινήσουμε δημιουργώντας δύο πίνακες, τον ProdA και τον ProdB, με τις ακόλουθες ιδιότητες σχεδιασμού.

Ο Αυτόματος Αριθμός είναι ένας αυτόματα αυξανόμενος ακέραιος ακέραιος αριθμός που εκχωρείται σε καταχωρήσεις καθώς προστίθενται στον πίνακα. Η επιλογή Κείμενο δεν τροποποιήθηκε, επομένως θα δέχεται μια συμβολοσειρά κειμένου έως 255 χαρακτήρες.

Τώρα, συμπληρώστε τα με κάποια δεδομένα.

Για να δείξω τις διαφορές στον τρόπο λειτουργίας των τριών τύπων σύνδεσης, έχω διαγράψει τις καταχωρήσεις 1, 5 και 8 από το ProdA.

Επόμενο, δημιουργήστε ένα νέο ερώτημα πηγαίνοντας στο Δημιουργία> Σχεδιασμός ερωτήματος Το Επιλέξτε και τους δύο πίνακες από το παράθυρο διαλόγου Εμφάνιση πίνακα και κάντε κλικ στο Προσθήκη , τότε Κλείσε Το

Κάντε κλικ στο ProductID στον πίνακα ProdA, σύρετέ το στο ProductID στον πίνακα ProdB και αφήστε το κουμπί του ποντικιού για να δημιουργήσετε τη σχέση μεταξύ των πινάκων.

Κάντε δεξί κλικ στη γραμμή μεταξύ των πινάκων που αντιπροσωπεύουν τη σχέση μεταξύ των στοιχείων και επιλέξτε Join Properties Το

Από προεπιλογή, επιλέγεται ο τύπος συμμετοχής 1 (INNER). Η επιλογή 2 είναι μια ΑΡΙΣΤΕΡΗ ΕΞΩΤΕΡΙΚΗ ένωση και 3 είναι μια ΣΩΣΤΗ ΕΞΩΤΕΡΙΚΗ ένωση.

Θα εξετάσουμε πρώτα την ένταξη INNER, οπότε κάντε κλικ στο κουμπί OK για να παραβλέψετε το παράθυρο διαλόγου.

Στο σχεδιαστή ερωτήματος, επιλέξτε τα πεδία που θέλουμε να δούμε από τις αναπτυσσόμενες λίστες.

Όταν εκτελούμε το ερώτημα (το κόκκινο θαυμαστικό στην κορδέλα), θα εμφανίσει το πεδίο Όνομα προϊόντος και από τους δύο πίνακες με την τιμή από τον πίνακα ProdA στην πρώτη στήλη και ProdB στη δεύτερη.

Παρατηρήστε ότι τα αποτελέσματα εμφανίζουν μόνο τιμές όπου το ProductID είναι ίσο και στους δύο πίνακες. Παρόλο που υπάρχει μια καταχώριση για το ProductID = 1 στον πίνακα ProdB, δεν εμφανίζεται στα αποτελέσματα αφού το ProductID = 1 δεν υπάρχει στον πίνακα ProdA. Το ίδιο ισχύει και για το ProductID = 11. Υπάρχει στον πίνακα ProdA αλλά όχι στον πίνακα ProdB.

Χρησιμοποιώντας το κουμπί Προβολή στην κορδέλα και μεταβαίνοντας στην Προβολή SQL, μπορείτε να δείτε το ερώτημα SQL που δημιουργήθηκε από τον σχεδιαστή που χρησιμοποιήθηκε για να λάβει αυτά τα αποτελέσματα.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA INNER JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Επιστρέφοντας στο Design View, αλλάξτε τον τύπο σύνδεσης σε 2 (LEFT OUTER). Εκτελέστε το ερώτημα για να δείτε τα αποτελέσματα.

Όπως μπορείτε να δείτε, κάθε καταχώριση στον πίνακα ProdA αντιπροσωπεύεται στα αποτελέσματα ενώ μόνο αυτά στο ProdB που έχουν αντίστοιχη καταχώριση ProductID στον πίνακα ProdB εμφανίζονται στα αποτελέσματα.

Ο κενός χώρος στη στήλη ProdB.ProductName είναι μια ειδική τιμή (NULL), δεδομένου ότι δεν υπάρχει τιμή αντιστοίχισης στον πίνακα ProdB. Αυτό θα αποδειχθεί σημαντικό αργότερα.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA LEFT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Δοκιμάστε το ίδιο πράγμα με τον τρίτο τύπο σύνδεσης (ΔΕΞΙΑ ΕΞΩΤΕΡΙΚΗ).

Τα αποτελέσματα δείχνουν τα πάντα από τον πίνακα ProdB ενώ εμφανίζει κενές τιμές (γνωστές ως NULL) όπου ο πίνακας ProdA δεν έχει αντίστοιχη τιμή. Μέχρι στιγμής, αυτό μας φέρνει πιο κοντά στα αποτελέσματα που επιθυμούμε στην ερώτηση του αναγνώστη μας.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Χρήση συναρτήσεων σε ερώτημα

Τα αποτελέσματα μιας συνάρτησης μπορεί επίσης να επιστρέφονται ως μέρος ενός ερωτήματος. Θέλουμε μια νέα στήλη με το όνομα 'Αποτελέσματα' να εμφανίζεται στο σύνολο αποτελεσμάτων μας. Η τιμή του θα είναι το περιεχόμενο της στήλης ProductName του πίνακα ProdA εάν το ProdA έχει τιμή (δεν είναι NULL), διαφορετικά θα πρέπει να ληφθεί από τον πίνακα ProdB.

Η συνάρτηση Immediate IF (IIF) μπορεί να χρησιμοποιηθεί για τη δημιουργία αυτού του αποτελέσματος. Η συνάρτηση λαμβάνει τρεις παραμέτρους. Η πρώτη είναι μια συνθήκη που πρέπει να αξιολογηθεί σε τιμή True ή False. Η δεύτερη παράμετρος είναι η τιμή που πρέπει να επιστραφεί εάν η συνθήκη είναι True και η τρίτη παράμετρος είναι η τιμή που πρέπει να επιστραφεί εάν η συνθήκη είναι False.

Η κατασκευή πλήρους συνάρτησης για την κατάστασή μας μοιάζει με αυτήν:

IIF(ProdA.ProductID Is Null, ProdB.ProductName,ProdA.ProductName)

Παρατηρήστε ότι η παράμετρος συνθήκης δεν ελέγχει την ισότητα. Μια τιμή Null σε μια βάση δεδομένων δεν έχει μια τιμή που μπορεί να συγκριθεί με οποιαδήποτε άλλη τιμή, συμπεριλαμβανομένης μιας άλλης Null. Με άλλα λόγια, το Null δεν ισούται με το Null. Πάντα. Για να ξεπεράσουμε αυτό, ελέγχουμε την τιμή χρησιμοποιώντας τη λέξη -κλειδί 'Είναι'.

Θα μπορούσαμε επίσης να χρησιμοποιήσουμε το «Is Not Null» και να αλλάξουμε τη σειρά των παραμέτρων True και False για να έχουμε το ίδιο αποτέλεσμα.

Όταν το τοποθετείτε στο Query Designer, πρέπει να πληκτρολογήσετε ολόκληρη τη συνάρτηση στην καταχώριση Πεδίο: Για να δημιουργήσετε τη στήλη 'Αποτελέσματα', πρέπει να χρησιμοποιήσετε ένα ψευδώνυμο. Για να το κάνετε αυτό, προλογίστε τη συνάρτηση με 'Αποτελέσματα:' όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης.

Ο ισοδύναμος κώδικας SQL για να γίνει αυτό θα ήταν:

SELECT ProdA.ProductName, ProdB.ProductName, IIF(ProdA.ProductID Is Null,ProdB.ProductName,ProdA.ProductName) AS Results FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Τώρα, όταν εκτελούμε αυτό το ερώτημα, θα παράγει αυτά τα αποτελέσματα.

πόσα δεδομένα χρησιμοποιεί η ροή

Εδώ βλέπουμε για κάθε καταχώρηση όπου ο πίνακας ProdA έχει μια τιμή, η τιμή αυτή αντικατοπτρίζεται στη στήλη Αποτελέσματα. Εάν δεν υπάρχει καταχώριση στον πίνακα ProdA, η καταχώριση από το ProdB εμφανίζεται στα Αποτελέσματα που είναι ακριβώς αυτό που ζήτησε ο αναγνώστης μας.

Για περισσότερους πόρους για την εκμάθηση της Microsoft Access, ανατρέξτε στο άρθρο του Joel Lee's How to Learn Microsoft Access: 5 Free Online Resources.

Μερίδιο Μερίδιο Τιτίβισμα ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ Αξίζει την αναβάθμιση σε Windows 11;

Τα Windows έχουν επανασχεδιαστεί. Είναι όμως αυτό αρκετό για να σας πείσει να μεταβείτε από τα Windows 10 στα Windows 11;

Διαβάστε Επόμενο
Σχετικά θέματα
  • Παραγωγικότητα
  • Ρωτήστε τους ειδικούς
Σχετικά με τον Συγγραφέα Μπρους Έπερ(Δημοσιεύθηκαν 13 άρθρα)

Ο Μπρους έπαιζε με τα ηλεκτρονικά από τη δεκαετία του '70, τους υπολογιστές από τις αρχές της δεκαετίας του '80 και απαντούσε με ακρίβεια ερωτήσεις σχετικά με την τεχνολογία που δεν είχε χρησιμοποιήσει ούτε είχε δει όλη την ώρα. Επίσης, ενοχλεί τον εαυτό του προσπαθώντας να παίξει κιθάρα.

Περισσότερα από τον Bruce Epper

Εγγραφείτε στο newsletter μας

Εγγραφείτε στο ενημερωτικό μας δελτίο για τεχνικές συμβουλές, κριτικές, δωρεάν ebooks και αποκλειστικές προσφορές!

Κάντε κλικ εδώ για εγγραφή