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

Η Microsoft Access είναι ένα από τα λιγότερο χρησιμοποιημένα προϊόντα της οικογένειας του Office. Αλλά είναι επίσης το πιο ισχυρό. Δείτε πώς μπορείτε να τα χρησιμοποιήσετε με τη γλώσσα αναζήτησης SQL.

Η Microsoft Access είναι ένα από τα λιγότερο χρησιμοποιημένα προϊόντα της οικογένειας του Office.  Αλλά είναι επίσης το πιο ισχυρό.  Δείτε πώς μπορείτε να τα χρησιμοποιήσετε με τη γλώσσα αναζήτησης SQL.
Διαφήμιση

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

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

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

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

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

Έχετε κάποια συμβουλή;

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

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

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

Αφετηρία

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

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

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

Βάσεις Δεδομένων και Κανονικοποίηση

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

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

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

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

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

ομαλοποίηση

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

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

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

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

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

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

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

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

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

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

access-table-defs

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

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

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

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

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

νέο ερώτημα

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

design_view

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

join_properties

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

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

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

σχέδιο-άποψη-2

Όταν εκτελούμε το ερώτημα (το κόκκινο θαυμαστικό στη κορδέλα), θα εμφανιστεί το πεδίο Όνομα_ προϊόντος από και τους δύο πίνακες με την τιμή από τον πίνακα 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; 

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

left_outer_join

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

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

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

Δοκιμάστε το ίδιο πράγμα με τον τρίτο τύπο σύνδεσης (RIGHT OUTER).

right_outer_join

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

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

Χρήση λειτουργιών σε ένα ερώτημα

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

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

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

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

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

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

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

δεξιά-εξωτερικά-aliased-αποτελέσματα-σχεδιασμό

Ο ισοδύναμος κώδικας 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; 

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

right_outer_with_aliased_results

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

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

In this article