פיתוח מאגרי מידע של משאבי אינטרנטכמעט אינו שונה ממאגרי מידע סטנדרטיים שפותחו במערכת MS SQL SERVER. ככלל, שפת ה- MY SQL משמשת למשאבים מסוג זה, אם כי ניתן ליישם אותה גם בפיתוח מוצרי תוכנה סטנדרטיים לשימוש מקומי. אך מאמר זה אינו עוסק בכך.
לעתים קרובות כשעובדים עם מאגרי מידע בכל אחד מהםבשפות, המשימה היא להכין מדגם נתונים להפקה למגוון דוחות, גרפים וכו '. ככלל, בעת יישום משימות כאלה, עליך להשתמש לא בטבלה אחת, אלא במספר טבלאות, המשלבות אותן לשאילתה אחת, מה שמקשה על עיצובו באופן משמעותי. במקרה זה, יש לקחת בחשבון כיצד הנתונים יוצגו, כיצד יושלכו הטבלאות ואיזו תוצאה תהיה המקובלת ביותר עבור המתכנת. אחד מבני השפה הסטנדרטיים של MySQL, הצטרפות, משמש לפתרון בעיות כאלה.
המושג של המילה הצטרף
שפות פיתוח מסדי נתונים, לא משנה איזוזו השפה, מילים סטנדרטיות ממילונים בשפה האנגלית נלקחות כבסיס (לכן, בתנאי שאתה יודע אנגלית, יהיה לך הרבה יותר קל לעבוד עם טבלאות). כדי ליישם את חיבור הטבלאות לבחירה, לוקחים אותה מילה - הצטרף. בשפת תכנות מסד הנתונים נעשה שימוש ב- SQL שלי. התרגום של מילת שירות זו זהה לחלוטין לשפה עצמה - "איחוד".
פרשנות לבניית MySQL - הצטרף, ו-כל אחד מהם יהיה זהה לחלוטין. אם אנו מפענחים את מטרת המבנה, כלומר את תכנית פעולתו, נקבל את המשמעות הבאה: המבנים יאפשרו איסוף השדות הדרושים מטבלאות שונות או שאילתות מקוננות לבחירה אחת.
סוגי מבנים לשילוב
אם מתכנת צריך לאסוף מדגם ממספר טבלאות והוא יודע אילו שדות מפתח נמצאים בהם ואיזה סוג נתונים דרושים לדוח, ואז תוכלו להשתמש באחת מבני ההצטרפות הבסיסיים כדי להשיג את התוצאה הרצויה. ישנם ארבעה קונסטרוקציות בסיסיות (להצטרפות לטבלאות):
- הצטרפות פנימית.
- צלב הצטרף.
- שמאל מצטרף.
- הצטרף נכון.
בהתאם למשימה העומדת על הפרק, כל אחד מהעיצובים הסטנדרטיים יתנו תוצאות שונות, שיאפשרו לכם לקבל דוחות על פרמטרים שונים תוך זמן קצר.
יצירה ומילוי של שולחנות לשימוש נוסף
לפני שתתחיל, למשל, שקולמנגנונים לעבודה עם מבני איחוד נתונים, כדאי להכין כמה טבלאות איתן נעבוד בעתיד. זה יעזור להציג חזותית את כל עקרונות הפעולה של המפעילים, בנוסף, בדרך זו קל יותר למתחילים ללמוד את כל היסודות של טבלאות תכנות.
הטבלה הראשונה תתאר כמה מהאובייקטים שאדם נתקל בהם כל הזמן במהלך חייו.
בטבלה השנייה נתאר כמה מאפיינים של אובייקטים מהטבלה הראשונה, כך שתוכלו לעבוד איתם בעתיד.
באופן כללי, שתי טבלאות יספיקו כדי להמחיש את עבודתן בדוגמה. כעת תוכלו להתחיל בבדיקה מעשית של העיצובים שלנו.
שימוש בהצטרפות פנימית
כאשר משתמשים ב- MySQL build - הצטרפו לאינרכדאי לשקול כמה מהתכונות שלו. עיצוב זה יאפשר לך לבחור משני הטבלאות רק את הרשומות שנמצאות בטבלאות הראשונה והשנייה. איך זה עובד? בטבלה הראשונה יש לנו מפתח ראשי - ID, המציין את המספר הרגיל של הרשומות בטבלה.
בעת יצירת טבלה שנייה, אותו מפתחמשמש כמספר סידורי, ניתן לראות דוגמה באיורים. בעת בחירת נתונים, המשפט Select יקבע כתוצאה רק את הרשומות שמספרי הרצף שלהם חופפים, מה שאומר שהם נמצאים בטבלאות הראשונה והשנייה.
בעת השימוש בבנייה, עליכם להביןאיזה סוג נתונים אתה צריך לקבל. הטעות הנפוצה ביותר, במיוחד עבור מתכנת בסיסי נתונים מתחיל, היא השימוש הבלתי הגיוני והלא נכון במבנה ה- Inner Join. כדוגמה, MySQL Inner Join, תוכלו לשקול סקריפט שיחזיר אותנו מהטבלאות שתוארו ומלאו מידע על אובייקטים ותכונותיהם. אך גם כאן יכולות להיות מספר דרכים להשתמש במבנה. בהקשר זה, ה- SQL שלי הוא שפה מאוד גמישה. אז אתה יכול להסתכל על דוגמאות לשימוש ב- MySQL Inner Join.
שרשור טבלאות מבלי לציין פרמטרים כלשהם. במקרה זה נקבל את התוצאה של תוכנית כזו:
אם נציין באמצעות מילת השירות באמצעותחובה לקחת בחשבון את מקשי האב של הרשומות בטבלאות, ואז תוצאת הבחירה תשתנה באופן דרמטי. במקרה זה, נקבל בחירה שתחזיר רק את השורות שיש אותן מקשי אב.
מקרה שימוש שלישי אפשרי גם כן.קונסטרוקציות, כאשר בשאילתה דרך המילה "on" מסומנים השדות שלפיהם צריך לחבר את הטבלאות. במקרה זה, הבחירה תחזיר את הנתונים הבאים:
תכונות השימוש ב- Left Join
אם אתה שוקל דרך אחרת להצטרף לטבלאות באמצעות מבנה MySQL - Join, תוכל להבחין בהבדל בנתונים המוצגים. המבנה השמאלי הוא מנגנון כזה.
השימוש ב- Left Join MySQL כולל כמה מוזרויות, וכמו פנימי, דורש הבנה ברורה של התוצאה שתתקבל.
במקרה זה, כל הרשומות ייבחרו תחילה.מהטבלה הראשונה, ובהמשך יצורפו אליהם רשומות מטבלת המאפיינים השנייה. יחד עם זאת, אם הטבלה הראשונה מכילה רשומה, למשל, "שרפרף", ולטבלה השנייה אין מאפיין אחד בשבילה, אז המפעיל שמאל יציג null מול הרשומה הזו, מה שאומר למתכנת שאין סימנים לאובייקט מסוג זה ...
השימוש בעיצוב זה יאפשר לך לקבוע לפי אילו שדות או, למשל, סחורה בחנות אינם מתומחרים, תקופת האחריות וכו '.
דוגמה לשימוש ב- Left
לשיקול מעשי של המפעילמבני ה- MySQL של Left Left משתמשים בטבלאות שתוארו לעיל. לדוגמא, עליכם לבחור את כל רשימת המוצרים שנמצאים בחנות, ולבדוק למי מהם אין שלטים או מאפיינים. במקרה זה הבחירה תציג את כל המוצרים, וערכים ריקים ייקבעו עבור אלה שאין להם מאפיין.
שימוש איפה בסעיף הצטרפות
כפרמטר, צירוף יכול לכלול לא רק ציון השדות שבאמצעותם לחבר טבלאות, אלא יכול לכלול גם אופרטור סעיף איפה.
לדוגמה, שקול סקריפט שצריךלהחזיר אלינו רק את הרשומות שהשלט לא מודבק עבורן. במקרה זה, עליך להוסיף מפעיל תנאי לבניית הצטרפות ולציין מה בדיוק צריך להחזיר כתוצאה מכך.
כאשר אתה משתמש ב- Join - היכן ב- MySQL, עליך להבין בבירור שרק אותם רשומות יופיעו שהתנאי שצוין חל עליהם, ואז הבחירה תיראה כך:
שאילתות כאלה מאפשרות לך לבחור לפינתונים ספציפיים המתייחסים למצב שנבחר על ידי המתכנת. ניתן לציין כמה תנאים כאלה, תוך מקסימום פרמטרים לבחירת נתונים מהטבלאות המשולבות.
באמצעות הצטרפות לשינוי נתונים בטבלאות
מבנה ההצטרפות הוא למעשה אוניברסלי.זה מאפשר לך לא רק לבצע מגוון אפשרויות, אלא גם לכלול בשאילתות בין טבלה אחת למספר טבלאות, כדי להזין תנאים נוספים בבחירה. המבנה יכול לשמש גם לפעולות נתונים אחרות. לדוגמא, ניתן להשתמש ב- Join לשינוי נתונים בטבלה. במקום זאת, כדי להבהיר את התנאים בטבלה, או במקרים שבהם עליך לעדכן את הנתונים בכמה טבלאות באותם התנאים.
לדוגמה, שקול את הבעיה הבאה.ישנן שלוש טבלאות המכילות נתונים מסוימים. עליך לשנות את הנתונים בשתי הטבלאות באמצעות שאילתה אחת. רק כדי לפתור סוג זה של משימות, אתה יכול להשתמש במבנה הצטרפות בפקודה Update. סוג בניית ה- Join עצמו תלוי, כמו במקרה של דגימת נתונים, בתוצאה שהמתכנת רוצה לקבל.
בואו נסתכל על הדוגמה הפשוטה ביותר.יש צורך לעדכן את הנתונים לאותם תנאים בבקשה אחת. שאילתות מסוג זה נבנו כדי לייעל את העבודה עם מסד הנתונים. מדוע לכתוב שאילתות שונות לכל אחת מהטבלאות כאשר ניתן לבצע את כל מניפולציות הנתונים בשאילתה אחת? דוגמה לעדכון MySQL הצטרפות במקרה שלנו תהיה כזו:
בניית שאילתות מורכבות
לעתים קרובות למדי כאשר עובדים עם בסיס נתוניםיש צורך לבנות שאילתות לא רק באמצעות הצטרפות למספר טבלאות, אלא גם באמצעות שאילתות משנה. משימות כאלה די קלות עבור מתכנת בסיסי נתונים מתחיל להבין. הקושי נעוץ בעובדה שעליך לחשוב דרך כל שלב, לקבוע אילו נתונים מאיזה טבלה או שאילתה אתה צריך לקבל ואיך תצטרך לעבוד איתם בעתיד.
להבנה ספציפית יותר, תוכלו לשקול(ב- MySQL Join) דוגמאות לשאילתות מורכבות. אם אתה מתחיל ורק מתחיל לעבוד עם מאגרי מידע, הכשרה כזו רק תועיל. האפשרות האידיאלית תהיה דוגמאות של MySQL Left Join.
בקשה זו תחזיר לנו 58 רשומות חוזהמכירות שעבורן יתרת מזומנים מתמלאת או קיימת החל מהתאריך שנבחר. במקרה זה, זהו התאריך הנוכחי. כמו כן, נוסף לבחירה תנאי שעל שם החוזה להכיל סמלים - "123". המידע (הנתונים) המוצגים על גבי המסך ימוינו - לפי סדר החוזה.
הדוגמה הבאה תציג נתונים על כל התשלומים, בהם יצוין מספר החוזה.
באמצעות שאילתות משנה
כפי שהוזכר קודם, בעבודה עם מאגרי מידענתונים, אתה יכול לשלב לא רק טבלאות, אלא גם טבלה עם שאילתה. עיצוב זה משמש בעיקר לזרז את השאילתה ולייעל אותה.
לדוגמא, במידת הצורך מטבלה שמכיל כמה מאות שדות, למשל, אלף רשומות, בחר רק שני שדות, ואז עליך להשתמש בשאילתה שתחזיר רק את השדות הנדרשים, ולשלב אותה עם מערך הנתונים הראשי. כדוגמה ל- MySQL Join Select, תוכלו לשקול שאילתה מסוג זה:
לא כל אלה דרכים להשתמש בתקןמבנים של MySQL, אך רק סטנדרטיים. כיצד להשתמש בבניית Join ובאילו צורות זה תלוי במתכנת עצמו, אך כדאי לזכור ולקחת בחשבון איזו תוצאה יש להשיג בעת ביצוע שאילתה.