Διαφήμιση

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

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

Αντιμετωπίζω πρόβλημα με τη σύνταξη ερωτήματος στη Microsoft Access.

Έχω μια βάση δεδομένων με δύο πίνακες προϊόντων που περιέχουν μια κοινή στήλη με έναν αριθμητικό κωδικό προϊόντος και ένα σχετικό όνομα προϊόντος.

Θέλω να μάθω ποια προϊόντα από τον Πίνακα Α βρίσκονται στον Πίνακα Β. Θέλω να προσθέσω μια στήλη με την ονομασία Αποτελέσματα που περιέχει το όνομα προϊόντος από τον Πίνακα Α εάν υπάρχει και το όνομα προϊόντος από τον Πίνακα Β όταν δεν υπάρχει στον Πίνακα A.

Έχεις συμβουλές;

Απάντηση του Bruce:

instagram viewer

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

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

Αφετηρία

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

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

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

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

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

επίπεδο τραπέζι-1επίπεδο τραπέζι-2

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

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

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

ομαλοποίηση

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

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

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

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

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

Η SQL ορίζει πέντε διαφορετικούς τύπους συνδέσμων: INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER και CROSS. Η λέξη-κλειδί OUTER είναι προαιρετική στη δήλωση SQL.

Η Microsoft Access επιτρέπει τη χρήση INNER (προεπιλογή), LEFT OUTER, RIGHT OUTER και CROSS. Το FULL OUTER δεν υποστηρίζεται ως έχει, αλλά χρησιμοποιώντας το LEFT OUTER, UNION ALL και RIGHT OUTER, μπορεί να παραποιηθεί με το κόστος περισσότερων κύκλων CPU και λειτουργιών I / O.

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

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

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

access-table-defs

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

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

πίνακες πρόσβασης

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

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

νέο ερώτημα

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

design_view

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

join_properties

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

Θα δούμε πρώτα το INNER join, οπότε κάντε κλικ στο OK για να παραβλέψετε το διάλογο.

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

design-view-2

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

εσωτερική σύνδεση

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

σχέδιο-κορδέλα

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

ΕΠΙΛΕΞΤΕ ProdA.ProductName, ProdB.ProductName FROM ProdA INNER JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Επιστρέφοντας στο Design View, αλλάξτε τον τύπο σύνδεσης σε 2 (ΑΡΙΣΤΕΡΑ ΕΞΩ). Εκτελέστε το ερώτημα για να δείτε τα αποτελέσματα.

left_outer_join

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

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

ΕΠΙΛΕΞΤΕ ProdA.ProductName, ProdB.ProductName FROM ProdA LEFT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

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

δεξιά_ δρομολογητής

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

ΕΠΙΛΕΞΤΕ ProdA.ProductName, ProdB.ProductName FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

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

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

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

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

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

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

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

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

δεξί-εξωτερικό-ψευδώνυμο-αποτελέσματα-σχεδιασμός

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

ΕΠΙΛΕΞΤΕ ProdA.ProductName, ProdB.ProductName, IIF (ProdA.ProductID Is Null, ProdB.ProductName, ProdA.ProductName) ΑΠΟΤΕΛΕΣΜΑΤΑ ΑΠΟ ΑΠΟ ΔΕΞΙΑ ΣΥΝΔΕΣΗ ProdB ON ProdA.ProductID = ProdB.ProductID;

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

right_outer_with_aliased_results

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

Για περισσότερους πόρους για την εκμάθηση της Microsoft Access, ρίξτε μια ματιά στο Joel Lee's Πώς να μάθετε τη Microsoft Access: 5 δωρεάν διαδικτυακοί πόροι Πώς να μάθετε τη Microsoft Access: 5 δωρεάν διαδικτυακοί πόροιΠρέπει να διαχειριστείτε μεγάλο όγκο δεδομένων; Θα πρέπει να εξετάσετε τη Microsoft Access. Οι δωρεάν πόροι μελέτης μπορούν να σας βοηθήσουν να ξεκινήσετε και να μάθετε τις δεξιότητες για πιο περίπλοκα έργα. Διαβάστε περισσότερα .

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