פרסומת
Access של מיקרוסופט הוא, ככל הנראה, הכלי החזק ביותר בכל חבילת Microsoft Office, ובכל זאת הוא מסתתר (ולפעמים מפחיד) משתמשי כוח של Office. עם עקומת למידה תלולה יותר מ- Word או Excel, איך מישהו אמור לעטוף את הראש סביב השימוש בכלי זה? השבוע, ברוס אפרר יבדוק בכמה מהנושאים שהובילה שאלה זו מאחד מהקוראים שלנו.
קורא שואל:
אני מתקשה לכתוב שאילתה ב- Microsoft Access.
יש לי בסיס נתונים עם שתי טבלאות מוצרים הכוללות עמודה משותפת עם קוד מוצר מספרי ושם מוצר משויך.
אני רוצה לברר אילו מוצרים מלוח A ניתן למצוא בטבלה B. אני רוצה להוסיף טור בשם תוצאות המכיל את שם המוצר מטבלה A אם הוא קיים, ואת שם המוצר מטבלה B כאשר הוא לא קיים בטבלה A.
יש לך איזו עצה?
התשובה של ברוס:
Microsoft Access היא מערכת ניהול מסדי נתונים (DBMS) המיועדת לשימוש גם במחשבי Windows וגם ב- Mac. הוא משתמש במנוע מסד הנתונים Jet של מיקרוסופט לעיבוד נתונים ואחסון. זה גם מספק ממשק גרפי למשתמשים שכמעט מבטל את הצורך להבין שפת שאילתות מובנות (SQL).
SQL היא שפת הפקודה המשמשת להוספה, מחיקה, עדכון והחזרת מידע המאוחסן ב- מסד נתונים כמו גם שינוי רכיבי בסיס נתונים כגון הוספה, מחיקה או שינוי טבלאות או מדדים.
נקודת התחלה
אם אין לך כבר היכרות מסוימת עם Access או RDBMS אחר, אני מציע שתתחיל עם המשאבים האלה לפני שתמשיך:
- אז מה זה בסיס נתונים? אז מה זה בסיס נתונים, בכל מקרה? [MakeUseOf מסביר]עבור מתכנת או חובב טכנולוגיה, הרעיון של בסיס נתונים הוא דבר שאפשר לקחת אותו כמובן מאליו. עם זאת, עבור אנשים רבים הרעיון של בסיס נתונים עצמו הוא קצת זר ... קרא עוד שם ריאן דיבה משתמש ב- Excel כדי להציג את היסודות של מסדי נתונים יחסיים.
- מדריך מהיר לתחילת העבודה עם Microsoft Access 2007 מדריך מהיר לתחילת העבודה עם Microsoft Access 2007 קרא עוד המהווה סקירה כללית ברמה גבוהה של Access והרכיבים הכוללים בסיס נתונים של Access.
- מדריך מהיר לטבלאות ב- Microsoft Access 2007 מדריך מהיר לטבלאות ב- Microsoft Access 2007 קרא עוד מסתכל ביצירת בסיס הנתונים והטבלאות הראשונים שלך לאחסון הנתונים המובנים שלך.
- מדריך מהיר בנושא שאילתות ב- Microsoft Access 2007 מדריך מהיר בנושא שאילתות ב- Microsoft Access 2007 קרא עוד בודק את האמצעים להחזרת חלקים ספציפיים מהנתונים המאוחסנים בטבלאות מסד הנתונים.
הבנה בסיסית של המושגים המסופקים במאמרים אלה תקל על העיכול את הדברים הבאים.
קשרי מסדי נתונים ונורמליזציה
דמיין לעצמך שאתה מנהל חברה שמוכרת 50 סוגים שונים של ווידג'טים בכל רחבי העולם. יש לך בסיס לקוחות של 1,250 ובממוצע בחודש מוכר 10,000 יישומונים ללקוחות אלה. אתה משתמש כרגע בגיליון אלקטרוני יחיד כדי לעקוב אחר כל המכירות הללו - למעשה טבלת מסד נתונים יחידה. וכל שנה מוסיף אלפי שורות לגיליון האלקטרוני שלך.


התמונות לעיל הינן חלק מגיליון האלקטרוני של מעקב אחר ההזמנות בהן אתה משתמש. עכשיו תגיד ששני הלקוחות האלה קונים ממך ווידג'טים כמה פעמים בשנה, כך שיש לך הרבה יותר שורות עבור שניהם.
אם ג'ואן סמית 'מתחתנת עם טד ביינס ולקחת את שם משפחתו, כעת יש לשנות כל שורה אחת המכילה את שמה. הבעיה מורכבת אם יש לך במקרה שני לקוחות שונים עם השם 'ג'ואן סמית'. זה פשוט נעשה הרבה יותר קשה לשמור על נתוני המכירות שלך עקביים בגלל אירוע שכיח למדי.
על ידי שימוש בבסיס נתונים ונורמליזציה של הנתונים, אנו יכולים להפריד פריטים למספר טבלאות כגון מלאי, לקוחות והזמנות.

פשוט מסתכל על החלק של הלקוח בדוגמה שלנו, היינו מסירים את העמודות עבור שם הלקוח וכתובת הלקוח ומכניסים אותם לטבלה חדשה. בתמונה למעלה פירסמתי גם את הדברים בצורה טובה יותר לגישה גרעינית יותר לנתונים. הטבלה החדשה כוללת גם עמודה עבור מפתח ראשי (ClientID) - מספר שישמש לגישה לכל שורה בטבלה זו.
בטבלה המקורית בה הסרנו נתונים אלה, נוסיף עמודה עבור מפתח זר (ClientID) וזה הקישור לשורה המתאימה המכילה את המידע עבור לקוח מסוים זה.
כעת, כאשר ג'ואן סמית משנה את שמה לג'ואן ביינס, השינוי צריך להיעשות רק פעם אחת בטבלת הלקוחות. כל הפניה אחרת מטבלאות שהצטרפו תמשוך את שם הלקוח הראוי ואת הדוח הבוחן את מה שג'ואן רכשה עבורו 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, ניתן לזייף במחיר של יותר מחזורי מעבד ופעולות קלט / פלט.
הפלט של צירוף CROSS מכיל כל שורה בטבלה השמאלית מזווגת עם כל שורה בטבלה הימנית. הפעם היחידה שראיתי אי פעם משתמשים ב- CROSS היא במהלך בדיקת עומס של שרתי בסיסי נתונים.
הבה נבחן כיצד העבודה המצטרפת הבסיסית, ואז נשנה אותם בהתאם לצרכים שלנו.
נתחיל ביצירת שתי טבלאות, ProdA ו- ProdB, עם מאפייני העיצוב הבאים.

המספר האוטומטי הוא מספר שלם ארוך באופן אוטומטי המוקצה לערכים כשהם מתווספים לטבלה. אפשרות הטקסט לא שונתה, כך שהיא תקבל מחרוזת טקסט באורך של עד 255 תווים.
כעת, אכלס אותם בנתונים מסוימים.

כדי להראות את ההבדלים באופן הפעולה של 3 סוגי ההצטרפות, מחקתי את הערכים 1, 5 ו- 8 מ- ProdA.
בשלב הבא, צור שאילתה חדשה על ידי מעבר אל צור> עיצוב שאילתה. בחר בשתי הטבלאות בתיבת הדו-שיח Show Table ו- לחץ על הוסף, לאחר מכן סגור.

לחץ על ProductID בטבלה ProdA, גרור אותו ל- ProductID בטבלה ProdB ושחרר את לחצן העכבר כדי ליצור את הקשר בין הטבלאות.

לחץ באמצעות לחצן העכבר הימני על השורה בין הטבלאות המייצגות את הקשר בין הפריטים ו- בחר הצטרף למאפיינים.

כברירת מחדל, בחר להצטרף מסוג 1 (INNER). אפשרות 2 היא צירוף שמאל חיצוני ו- 3 הוא חיבור RIGHT OUTER.
אנו נסתכל תחילה על ה- INNER להצטרף, אז לחץ על OK כדי לבטל את הדיאלוג.
במעצב השאילתה, בחר את השדות שברצוננו לראות מתוך הרשימות הנפתחות.

כאשר אנו מריצים את השאילתה (נקודת הקריאה האדומה בסרט) היא תציג את השדה ProductName משני הטבלאות עם הערך מטבלה ProdA בעמודה הראשונה ו ProdB בשני.

שימו לב שהתוצאות מציגות רק ערכים שבהם ProductID שווה בשתי הטבלאות. למרות שיש ערך עבור ProductID = 1 בטבלה ProdB, הוא לא מופיע בתוצאות שכן ProductID = 1 אינו קיים בטבלה ProdA. כך גם לגבי ProductID = 11. זה קיים בטבלה ProdA אך לא בטבלה ProdB.

על ידי שימוש בכפתור התצוגה על הסרט והמעבר לתצוגת SQL, אתה יכול לראות את שאילתת SQL שנוצרה על ידי המעצב המשמשת להשגת תוצאות אלה.
בחר ProdA.ProductName, ProdB.ProductName מאת ProdA INNER הצטרף ProdB ב- ProdA.ProductID = ProdB.ProductID;
בחזרה לתצוגת העיצוב, שנה את סוג ההצטרפות ל 2 (LEFT OUTER). הפעל את השאילתה כדי לראות את התוצאות.

כפי שאתה יכול לראות, כל רשומה בטבלה ProdA מיוצגת בתוצאות בעוד שרק אלה ב- ProdB שיש להם רשומת ProductID תואמת בטבלה ProdB מופיעים בתוצאות.
החלל הריק בעמודה ProdB.ProductName הוא ערך מיוחד (NULL) מכיוון שאין ערך תואם בטבלה ProdB. זה יוכיח חשוב בהמשך.
בחר ProdA.ProductName, ProdB.ProductName מאת ProdA שמאל הצטרף ל- ProdB ב- ProdA.ProductID = ProdB.ProductID;
נסה את אותו הדבר עם הסוג השלישי של הצטרפות (RIGHT OUTER).

התוצאות מראות הכל מטבלה ProdB בזמן שהיא מציגה ערכים ריקים (המכונים NULL) שבהם אין לטבלת ProdA ערך התאמה. עד כה זה מקרב אותנו לתוצאות הרצויות בשאלת הקורא שלנו.
בחר ProdA.ProductName, ProdB.ProductName מ- ProdA RIGHT הצטרף ProdB ב- ProdA.ProductID = ProdB.ProductID;
שימוש בפונקציות בשאילתה
תוצאות של פונקציה עשויות להחזיר גם כחלק משאילתה. אנו רוצים שעמודה חדשה בשם 'תוצאות' תופיע במערך התוצאות שלנו. הערך שלו יהיה תוכן העמודה ProductName בטבלה ProdA אם ל- ProdA יש ערך (זה לא NULL), אחרת יש לקחת אותה מטבלה ProdB.
ניתן להשתמש בפונקציה המיידית IF (IIF) כדי לייצר תוצאה זו. הפונקציה אורכת שלושה פרמטרים. הראשון הוא תנאי שצריך להעריך לערך נכון או לא נכון. הפרמטר השני הוא הערך שיש להחזיר אם התנאי הוא נכון, והפרמטר השלישי הוא הערך שיוחזר אם התנאי הוא False.
מבנה הפונקציה המלא למצבנו נראה כך:
IIF (ProdA.ProductID הוא מלא, ProdB.ProductName, ProdA.ProductName)
שימו לב כי פרמטר התנאי אינו בודק שוויון. לערך Null בבסיס נתונים אין ערך שניתן להשוות לערך אחר, כולל Null אחר. במילים אחרות, Null אינו שווה את Null. אי פעם. כדי לעבור על זה, אנו במקום זאת לבדוק את הערך באמצעות מילת המפתח 'האם'.
יכולנו להשתמש גם ב'אסור לגמרי 'ולשנות את הסדר של הפרמטרים האמיתיים והשקריים כדי לקבל את אותה התוצאה.
כשמכניסים את זה למעצב השאילתה, עליך להקליד את כל הפונקציה בשדה: שדה. כדי ליצור את העמודה 'תוצאות', עליך להשתמש בכינוי. לשם כך, הקדים את הפונקציה ל'תוצאות: 'כפי שניתן לראות בתמונת המסך הבאה.

קוד ה- SQL המקביל לשם כך יהיה:
בחר ProdA.ProductName, ProdB.ProductName, IIF (ProdA.ProductID הוא Null, ProdB.ProductName, ProdA.ProductName) כתוצאה מ- ProdA זכות הצטרפות ל- ProdB ב- ProdA.ProductID = ProdB.ProductID;
כעת, כאשר אנו מריצים שאילתה זו, היא תביא לתוצאות אלה.

כאן אנו רואים עבור כל רשומה שבה יש לטבלה ProdA ערך, ערך זה בא לידי ביטוי בעמודה תוצאות. אם אין רשומה בטבלת ה- ProdA, הערך מ- ProdB מופיע בתוצאות וזה בדיוק מה שהקורא שלנו ביקש.
למשאבים נוספים ללימוד Access של מיקרוסופט, עיין במידע של ג'ואל לי כיצד ללמוד גישה של מיקרוסופט: 5 מקורות מקוונים חינם כיצד ללמוד גישה של מיקרוסופט: 5 מקורות מקוונים חינםהאם אתה צריך לנהל כמות גדולה של נתונים? עליך לבדוק את Microsoft Access. משאבי הלימוד החינמיים שלנו יכולים לעזור לכם להתחיל וללמוד מיומנויות לפרויקטים מורכבים יותר. קרא עוד .
ברוס שיחק באלקטרוניקה מאז שנות ה -70, מחשבים מאז שנות ה -80 המוקדמות, ועונה במדויק על שאלות על טכנולוגיה שלא השתמש בהן ולא ראה כל הזמן. הוא גם מרגיז את עצמו בכך שהוא מנסה לנגן בגיטרה.