כל הבעיות לא היו מתחילות אם היינו משתמשים כל הזמן רק בבסיס נתונים
המושתת רק על טבלה אחת. זה הזמן לערוך לכם היכרות עם אחד המאפיינים
המועילים ביותר של הפקודה SELECT של שפת SQL ושאר שפות קרובות.. אנחנו
מדברים על המאפיין , "Join". ההשמה של המאפיין קלה ליישום
למעשה המאפיין "Join" מאחד טבלאות דטה-בייס קרובות בתוכנן,
למשפחה אחת.
המאפיין "Join". מאפשר לך לקשר נתונים משתי טבלאות או יותר בשאילתת SELECT אחת.
אפשר להשתמש במאפיין "Join". בתוך שאילתת ה SQL SELECT אם יש צורך ביותר מטבלה
אחת, גם אחרי מילת המפתח FROM .
לדוגמא:
בחר עמודות X , Y .
מתוך טבלה1 , טבלה 2
איפה שהתנאים שלי מתקיימים.
או בשפה שהמחשב מבין:
SELECT "list-of-columns"
FROM table1,table2
WHERE "search-condition(s)"
את הפקודה "Join". ניתן להבין ביתר קלות עם הדוגמא שלהן מה היה קורה אלו היינו עובדים רק
עם טבלה אחת, ולא הייתה לנו האפשרות לקשר טבלאות.
לפעמים יוצא שאנחנו יוצרים " טבלה שטוחה" , נניח לדוגמא שיש לנו טבלה אשר עוקבת אחרי
קניות הלקוחות שלך בחנות. והטבלה נראית ככה :
| id |
first |
last |
address |
city |
state |
zip |
date |
item |
Price |
בכל פעם נוספת שורה חדשה לטבלה וכל העמודות מתעדכנות. כך, שאנחנו יוצרים למעשה
המון רשומות כפולות בטבלה שלנו. לדוגמא: בכל פעם ש "חמציצי זלמנוביץ" קונה משהו בחנות
תכנס שורה חדשה בצורה הזאת.:
| id |
first |
last |
address |
city |
state |
zip |
date |
item |
Price |
| 10982 |
זלמן |
שושו |
300 N. 1st Ave |
Yuma |
AZ |
85002 |
032299 |
snowboard |
45.00 |
| 10982 |
זלמן |
שושו |
300 N. 1st Ave |
Yuma |
AZ |
85002 |
082899 |
snow shovel |
30.00 |
| 10982 |
זלמן |
שושו |
300 N. 1st Ave |
Yuma |
AZ |
85002 |
090199 |
gloves |
90.00 |
| 10982 |
זלמן |
שושו |
300 N. 1st Ave |
Yuma |
AZ |
85002 |
090199 |
lantern |
15.00 |
הדבר האידאלי במצב כזה שיהיו לנו שתי טבלאות.:
האחת שעוקבת אחרי הלקוחות שלנו.
והשניה שעוקבת אחר הקניות של הלקוחות שלנו
לטבלה אחת נקרא :
"Customer_info"
ובה יהיו הפרטים הבאים :
| customer_number |
firstname |
lastname |
address |
city |
state |
zip |
ולשניה נקרא:
"Purchases"
ובה יהיו הפרטים הבאים:
| customer_number |
date |
item |
price |
כעת כל קניה שהיא שתעשה בידי "לקוח חוזר" נצטרך לעדכן רק את הטבלה השניה של הקניות.
בצורה כזו אנו משמטים הרבה מידע מיותר מבסיס הנותנים שלנו. כל מה שיש לנו כעת זה רק בסיס
נתונים "נורמלי" .
שים לב איך לכל טבלה יש עמודה זהה (customer_number) עמודה זו מכילה מספר ייחודי ללקוח
אשר משמש לאיחוד(To Join) שתי הטבלאות. בואו נניח לדוגמא שאנו רוצים לבחור את השם הלקוח והמוצרים שהוא קנה. התחביר למקרה זה יהיה כזה:
SELECT customer_info.firstname, customer_info.lastname, purchases.item
FROM customer_info, purchases
WHERE customer_info.customer_number = purchases.customer_number;
הסוג הזה של המאפיין "Join". ידוע כ - "Inner Join" או כ - "Equijoin". וזה השיטה הנפוצה
להשתמש במאפיין זה.
שים לב שכל עמודה בשאילתה באה במבנה הבא: שם הטבלה , נקודה , ושם העמודה
לא תמיד זה הכרחי אבל זה טוב להתרגל לכתוב בשיטה הזו למקרה
ואתה רוצה לדעת איזו עמודה שייכת לאיזו טבלה. , התחביר הזה הכרחי מתי ששינם עמודות זהות בשתי טבלאות. ההמלצה
היא לעבוד בתחביר מלא גם כאשר השמות אינם זהים.
התחביר שיש בדוגמא אמור לעבוד עם רוב סוגי הדטה-בייס ואם זה לא עובד אצלכם , בדקו את
המאפיינים המדוייקים של הדטהבייס שאתם משתמשים בו.
למרות שהדוגמא למעלה אמורה לעבוד.. הנה לפניכם התחביר של : ANSI SQL-92 עבור
המאפיין Inner Join לאותה פעולה שתיארנו קודם.:
SELECT customer_info.firstname, customer_info.lastname, purchases.item
FROM customer_info INNER JOIN purchases
ON customer_info.customer_number = purchases.customer_number;
דוגמא נוספת לתחביר:
SELECT employee_info.employeeid, employee_info.lastname, employee_sales.comissio
FROM employee_info, employee_sales
WHERE employee_info.employeeid = employee_sales.employeeid;
הדוגמא הנ"ל בוחרת את העמודה employeeid וגם את העמודה lastname מתוך טבלת
employee_info וגם את העמודה comission מתוך טבלת employee_sales עבור כל
השורות בהן המספר של employeeid בשתי הטבלאות זהה.
בהצלחה
לחצו כאן למאמר המקורי
|