אחד היתרונות הגדולים ביותר בשימוש במאגרי מידע יחסיים כמו MySQL הוא שמבנה ההתייחסות שלו מאפשר לך לאחסן ולשאול מידע בקלות במספר טבלאות.
בואו לחקור כיצד לאחזר בדיוק את הנתונים הרצויים ממספר טבלאות מסדי נתונים ואת הצירופים השונים הזמינים המאפשרים לכם להשיג את התוצאות המדויקות הרצויות לכם.
אתחל את מסד הנתונים לדוגמה
זה לא נדרש, אך אם ברצונך לעקוב אחר הדוגמאות במאמר זה, תוכל לאתחל מסד נתונים לדוגמה באופן מקומי באמצעות פקודות המסוף שלהלן:
שיבוט גיט https://github.com/mdizak/sample-select-db.git
cd-sample-select-db
sudo mysql sudo mysql sampledb
mysql> בחר מספר (*) מלקוחות;
אתה אמור לקבל תוצאה לפיה יש 2000 שורות בתוך ה- לקוחות שולחן.
ברירת מחדל / INNER הצטרף
ברירת המחדל של ההצטרפות משמשת בתוך מסדי נתונים של MySQL נקרא ה- INNER join, והוא הנפוץ ביותר וישר קדימה. צירוף זה מחזיר את כל הרשומות שיש רשומות תואמות בשתי הטבלאות ומבטל את כל הרשומות האחרות.
Java מספקת JDBC כחלק מ- SDK Java. במאמר זה, בואו נסתכל על הפרטים של התחברות למסד נתונים של MySQL וביצוע איתו שאילתות.
לדוגמא, אם ברצונך לראות את שמות המשפחה והמשפחה של הלקוח, בתוספת סכום ההזמנה ותאריך עבור כל ההזמנות העולות על $ 1000, תוכל להשתמש בהצהרת SQL הבאה:
בחר
c.id, c. first_name, c.last_name, o.mount, o.created_at
מ
לקוחות ג, הזמנות o
איפה
o.customer_id = c.id AND o.mount> = 1000;
כמה הערות לגבי השאילתה הנ"ל:
- נבחרים חמש עמודות שונות, שלוש משולחן הלקוחות ושניים מטבלת ההזמנות.
- בתוך סעיף FROM מוגדרים שתי הטבלאות, אך סופיות באותיות "c" ו- "o". אלה פשוט מציינים כינויים בתוך SQL, יכולים להיות כל מה שתרצה, ומשמשים לקיצור שאילתת SQL.
- ה o.customer_id = c.id הוא היבט ההצטרפות של השאילתה, ומבטיח מתאם נכון בין לקוחות להזמנות.
להלן דרך אחרת ונכונה יותר מבחינה טכנית לכתוב את אותה שאילתה:
בחר
c.id, c. first_name, c.last_name, o.mount, o.created_at
מ
לקוחות ג הזמנות הצטרפות פנימית o
עַל
customer_id = c.id
איפה
o.mount> = 1000;
השאילתה שלעיל נוטה להיות קלה יותר לקריאה מכיוון שאתה יכול לראות בקלות את ההצטרפות בין טבלת הלקוחות להזמנות. לכל דבר ועניין, שתי השאילתות הללו זהות, והן יפיקו בדיוק את אותן רשומות.
שמאל מצטרף
הצטרפות שמאלית תחזיר את כל הרשומות מהטבלה השמאלית שתואמות גם רשומות מהטבלה הימנית ותבטל את כל הרשומות האחרות. לדוגמא, אולי ברצונך להציג את כמות המכירות הכוללת עבור כל מוצר במסד הנתונים, תוכל לנסות להשתמש בשאילתה כגון:
בחר
p.name, sum (item.amount) כמו סכום
מ
פריט orders_items LEFT JOIN מוצרים עמ
עַל
item.product_id = p.id
GROUP BY item.product_id סדר לפי גודל DESC
התוצאה היא תצוגה יפה של שתי עמודות המציגה את שם המוצר עם סכום המכירה הכולל, ועובדת כצפוי. השאילתה עברה על כל המוצרים בטבלת orders_items, הצטרפה אליהם לרשומות בטבלת המוצרים והחזירה את סכום המכירה הכולל של כל אחד מהם.
ימין מצטרף
בעזרת הדוגמה שלעיל, שים לב לעובדה שהשאילתה לעיל החזירה רק 19 רשומות בעוד שיש בסך הכל 22 מוצרים במסד הנתונים. הסיבה לכך היא שהשאילתה התחילה בטבלת orders_items והשאירה הצטרפה אליה לטבלת המוצרים, ו- מכיוון שמוצרים מסוימים מעולם לא הוזמנו, לא קיימים רשומות של מוצרים אלה במסגרת ההזמנות_פריטים שולחן.
מה קורה אם ברצונך לקבל רשימה של כל המוצרים עם סכומי המכירה, כולל מוצרים שלא הוזמנו? נסה להצטרף ימינה עם השאילתה הבאה:
בחר
p.name, sum (item.amount) כמו סכום
מ
פריטים orders_items RIGHT JOIN מוצרים עמ
עַל
item.product_id = p.id
קבוצה לפי p.id סדר לפי DESC
זה טוב יותר, והשאילתה מחזירה כעת את 22 המוצרים המלאים, כאשר לשלושה מהם יש סכום של ריק. הסיבה לכך היא שבמקום להשתמש ב- orders_items כטבלה הראשית שמצטרפת לטבלת המוצרים, ה- join הימני מעביר את ההזמנה ומצטרף לטבלת המוצרים לטבלת orders_items.
הצטרפות מרובה בשאילתה
לפעמים יש לך צורך להצטרף לשלושה טבלאות או יותר יחד כדי לקבל קבוצה ספציפית של תוצאות.
לדוגמה, אולי תרצה רשימה של כל הלקוחות שרכשו את המיקרוגל (מזהה מוצר מס '1), כולל שמם ותאריך ההזמנה. זה דורש בחירה בין שלוש טבלאות שניתן לעשות באמצעות שתי צירופים עם השאילתה הבאה:
בחר
c.first_name, c.last_name, o.mount, o.created_at
מ
לקוחות ג הזמנות הצטרפות פנימית o
עַל
c.id = o.customer_id הצטרף פריט הזמנות_פריטים
עַל
item.order_id = o.id
איפה
item.product_id = 1 סדר לפי o.created_at;
שאילתה זו מחזירה את כל 426 הזמנות המיקרוגל, ועובדת כצפוי. תחילה הוא תואם את כל הלקוחות להזמנות שלהם, ואז שאילתות נוספות שהתוצאה נקבעה על ידי התאמת כל ההזמנות לאלה בלבד בטבלת orders_items המכילה את מוצר המיקרוגל (מזהה # 1).
לעולם אל תשתמש בשאילתות משנה עם סעיפי IN
כתמצית מהירה, בכל מחיר אתה תמיד צריך להימנע משימוש בשאילתות משנה בתוך שאילתות ה- SQL שלך כגון:
בחר שם פרטי, שם משפחה מלקוחות WHERE id IN (בחר customer_id FROM orders WHERE status = 'אושר' וסכום <100);
שאילתות כמו לעיל אינן יעילות מאוד, משתמשות במספר רב של משאבים, ויש להימנע ככל האפשר. במקום זאת, השתמש בצירופים מתאימים כמתואר בסעיפים לעיל. לדוגמה, יש לכתוב מחדש את השאילתה לעיל כ:
בחר c.first_name, c.last_name מלקוחות c הזמנות הצטרפות שמאלית
חסוך זמן עם הצטרפות SQL
מאמר זה מקווה לעזור לך להראות לך את כוחם של מאגרי מידע יחסיים כגון MySQL וכיצד לבנות שאילתות SQL המאחזר רשומות ממספר טבלאות בתוך שאילתה אחת באמצעות צירופים, ומאפשר לך לאחזר את התוצאות המדויקות הרצויות.
למדתם שלוש צירופים שונים בתוך SQL, כיצד לכינוי שמות עמודות וטבלאות, להשתמש בצירופים מרובים בשאילתה אחת ולמה עליכם להימנע משאילתות משנה. לעולם אל תסתובב שוב בניסיון לקבץ קבוצות נתונים שונות באופן ידני לאחד, והתחל להשתמש בצירופים כדי להרשים את עמיתים לעבודה שלך ולחסוך זמן.
Google Docs היא כעת תחנת כוח משרדית. בעזרת תוספות אלה, אתה יכול לגרום ל- Google Docs שלך להיראות יפה ומסוגנן.
- תִכנוּת
- SQL
- מאגר מידע
הירשם לניוזלטר שלנו
הצטרף לניוזלטר שלנו לקבלת טיפים טכניים, ביקורות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!
צעד אחד נוסף !!!
אנא אשר את כתובת הדוא"ל שלך בדוא"ל ששלחנו לך זה עתה.