• ברוכים הבאים
    לאתר הקורסים שלנו!

  • קורסים בBO,SQL וDWH

    לקטלוג הקורסים המלא, הקישו כאן
  • חומרי לימוד מקוריים ובעברית

    אנו משקיעים משאבים רבים כדי שחומר הלימוד יהיה מובן ומעודכן

    כל חומרי הלימוד מפותחים על ידנו וכתובים בעברית
  • יחס אישי וסבלנות אין קץ

    אנו מסבירים את החומר בסבלנות ועונים על כל שאלה

    יש לנו סבלנות לכל אחד
  • מדריכים מנוסים

    אצלנו המדריכים מנוסים הן בנושאי הקורס והן בהדרכה
  • 1
  • 2
  • 3
  • 4
  • 5
  • קורס הSQL המהפכני, המלמד SQL מההתחלה , לא רק את תחביר הפקודות אלא גם את כל הדינמיקות השונת המתרחשות בשפה.
    הקורס נלמד על מגוון בסיסי נתונים כדי לחקות את סביבת העבודה לאחר סיום הקורס.
    קראו עוד
  • בקורס זה אנו מלמדים כיצד לפתח דוחות באמצעות הWebintelligence. הקורס שם דגש על מספר נושאים, כגון הבאת נתונים מהDB באמצעות יצירת שאילתא, יצירה ועיצוב אובייקטים גרפים דוגמת, טבלה וגרף, ושימושיות למשל כדי לתזמן דוח. הקורס מלווה בתרגול רב, חלק נקודתי וחלק על ידי תרגילים מסכמים.
    קראו עוד
  • בקורס זה אנו נלמד כיצד לפתח דוחות באמצעות הWebintelligence של תוכנת Business Objects בגרסא 4.x . הקורס הוא קורס בן יום אחד למשתמשים אשר מכירים את הBO בגרסאות ישנות שלו, אשר שונות בצורה מהותית מגרסא 4. הקורס כרגיל מלווה בתרגול ובהרבה טיפים.
    קראו עוד
  • קורס ה Bo Designer Master הוא קורס ייחודי שפותח בארץ המקנה למשתמש מיומנויות מקצועיות בפיתוח עולמות תוכן באמצעות כלי הDesigner של Business Objects. קורס זה מדמה את סביבת העבודה של הDesigner וכן את המצבים והבעיות בהם נתקל בעבודתו. הקורס מועבר באמצעות סביבות של בסיסי נתונים "חיים" המכילים מודלים הקרובים מאד למודלים האמיתיים הנמצאים בפרויקטים. התלמיד בוחר את בסיס הנתונים שעליו רוצה לפתח את עולמות התוכן. (ישנן שתי אפשרויות: Sql Server או Oracle.)
    קראו עוד
  • למדתי מספר קורסים של אתר dwh.co.il בנושאי Business Objects. למרות שאני מנוסה מאד בתחום הBI למדתי דברים רבים ומעניינים שפתחו לי אפשרות לבצע דברים חדשים בעבודה היומיומית....
    קראו עוד
  • לאחר שמערכת הBO הוטמעה בארגון , החלטנו להרחיב את היריעה ולהכניס עוד משתמשים למעגל כותבי הדוחות. לצורך זה הזמנו קורסי Business Objects מאתר dwh.co.il. הקורסים של האתר היו מותאמים בדיוק למה שהיינו צריכים, המדריך הסביר בסבלנות....
    קראו עוד
  • dwh,אני חייב לכם תודה על הקורס שהעברתם לנו כאן בישראכרט - קורס מצויין ברמה גבוה, עם המון תכלס דרך תרגולים בה גם אנשי ה-BI המנוסים ביותר שלנו הצליחו ללמוד ולחדש...
    קראו עוד
  • DWH.CO.IL העבירו קורס Business Objects לקבוצת מנהלים ואנליסטים בביטוח ישיר ,הקורס הועבר בצורה מקצועית ויעילה ונגע בנקודות החשובות בעבודה היומיות....
    קראו עוד
  • במסגרת הטמעת מערכת הBusiness Objects בארגון , הזמנו קורס infoview באתר dwh.co.il....
    קראו עוד
  • הזמנו לבזק את אחת מהסדנאות BO Design למתקדמים. בהתחלה לא ידענו אם זה באמת מה שאנחנו צריכים, מאחר ויש לנו ניסיון רב בDesign בארגון....
    קראו עוד
  • פיתוח הקורסים

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

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

Exists, לא על הSubquery לבדו

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

מקומו הטבעי של ה EXISTS נמצא בחלק ה where  של שאילתת הSQL ולפי דעת רבים מאפשר חיתוך משוכלל מאד של נתונים. בשונה משאר המשפטים המופיעים בחלק ה WHERE, הפעלת EXISTS אינה מתחלקת לחלוקה הרגילה של אופרנד\אופרטור, אלא פועלת בשיטה אחרת לחלוטין.

 

תחביר EXISTS:

(שאילתא)EXISTS.

ביטוי זה יחזיר true כאשר השאילתא תחזיר ערך ויחזיר false כאשר השאילתא לא תחזיר ערך. כמובן, הערך המוחזר יתהפך, כאשר נשים NOT לפני ה EXISTS.

לטכניקה זאת יש מספר יתרונות בולטים:

1.שאילתות עם exists הם ברוב המקרים הרבה יותר מהירות. הסיבה לכך היא שכפי שתראו בדוגמאות הבאות, שיטת הפעולה מבחינת בסיס הנתונים היא הרבה יותר יעילה מאשר שימוש בטכניקות מקבילות. במקום ליצור cursors ענקיים ולהשוות בינהם כמו לדוגמא בintersect, בסיס הנתונים עובד רשומה רשומה ורק עליה מקבל החלטה האם להציג אותה או לאו.

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

3.שאילתות SQL שבהם משתמשים בexists הרבה יותר ברורות ומובנות משאר שאילתות שנכתבו עם טכניקות אחרות.

4. exists הוא פטנט שימושי מאד למגוון של מצבים שקשה או אף בלתי אפשרי להתמודד באמצעים אחרים.

כדי להדגים שאילתות עם EXISTS, נשתמש במסד הנתונים NORTHWIND של SQL SERVER, אך רעיונות אלו יעבדו באותה מידה גם בORACLE ובבסיסי נתונים אחרים.

בDB זה, טבלת ORDERS מתארת את הכותרת (HEADER) של ההזמנה הכוללת את קוד הלקוח ותאריך ההזמנה, וטבלת ORDER DETAIL מתארת את פרטי ההזמנה, כגון קוד מוצר וכמות. כדי לשלוף למשל, את כל ההזמנות, תאריך ההזמנה שלהם, הלקוח שלהם והמוצרים בהזמנה, יש להריץ שאילתא לדוגמא:
(הערה: כל הדוגמאות המופיעות במאמר זה נכתבו ב SQL תקני )

SELECT o.CustomerID,o.OrderDate,od.OrderID,  od.ProductID, od.quantity
 FROM Orders o ,  [Order Details] od 
 WHERE  o.OrderID = od.OrderID 

הערה: שימו לב ששני השדות הראשונים נלקחו מטבלת הזמנות, שני השדות האחרונים מטבלת פרטי הזמנה והשדה האמצעי למעשה משותף לשתי הטבלאות.

 


דוגמא א:

מהם מספרי ההזמנה אשר מכילים את מוצר 28 וגם את מוצר 39.

 SELECT distinct orderid 
      FROM   Orders o 
      WHERE exists (select 1 from [order details] od 
                    where o.orderid=od.orderid and od.productid=28) 
            and exists (select 1 from [order details] od 
                where o. orderid=od.orderid and od.productid=39)

הסבר:

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

משפט הexists הראשון אומר, לכל מספר הזמנה (orderid), לך לטבלת פרטי הזמנה (order detail) ובדוק האם יש בהזמנה זאת מוצר מספר 28. ברגע שישנה הזמנה כזאת השאילתא תחזיר ערך. במקרה זאת קבענו את ערך הקבוע 1 שיוחזר , אך ערך זה שרירותי ואין לא חשיבות. הדבר החשוב מבחינתנו שברגע שיוחזר ערך משפט הexists יקבל true.

במשפט הexists השני עשינו את אותו הדבר בדיוק, רק עם מספר הזמנה 39.


דוגמא ב:

מי הם הלקוחות שבאף הזמנה שלהם לא היה מוצר 11.

 
SELECT distinct o.CustomerID 
FROM   Orders o  
WHERE  not exists (select 1 from [order details] od 
                   where o.orderid=od.orderid and od.productid= 11 
                   ) 

הסבר: שוב, אנחנו רואים כאן שאילתא המבוסס על טבלת Orders בלבד. לכל שורה בטבלת ה Orders, השאילתא בודקת האם יש ללקוח בשורה (שדה customerid) הזמנה עם מוצר 11. מספיק שישנה הזמנה כזאת, הexists מחזיר true, לכן ה not exists יחזיר false והשורה של הלקוח הזה תושמט.


דוגמא ג:

מצא את כל הלקוחות מטבלת orders אשר אין להם אפילו הזמנה אחת מטבלת  order_details.

SELECT distinct o.CustomerID 
FROM   Orders o 
WHERE  NOT EXISTS (SELECT 1 FROM [ORDER DETAILS] od 
                   where o.orderid=od.orderid) 

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


דוגמא ד:

מצא את כל הלקוחות שבין אילו שתי הזמנות שלהם היה פער של לפחות 500 ימים.

select distinct customerid  from orders o 
where exists 
     (select 1  
      from orders o_alias  
      where  o.customerid=o_alias.customerid                                   
      and datediff(day,o.orderdate,o_alias.orderdate)>500)
     ) 

הסבר:

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

 


דוגמא ה:

מצא את כל הלקוחות אשר לאחר שקנו את מוצר 28 קנו את מוצר 59.

SELECT distinct o. CustomerID FROM Orders o 
WHERE    exists (select 1 
                 from [Order Details ]od, [Order Details]od_alias, orders o_alias  
                 where  o.OrderID = od.OrderID   
                 and o.customerid=o_alias. customerid       
                 and o_alias.orderid=od_alias. orderid  
                 and (od_alias.productid=59 and od. productid=28 )  
                 and o_alias.orderdate>o. orderdate ) 

הסבר:

דוגמא זאת דומה  לדוגמא ד, אלא שמעט יותר מורכבת. מכיוון שאנו שואלים על המוצרים אנחנו צריכים קישור לטבלת order details ובדומה לדוגמא הקודמת יש לנו התייחסות ל2 הזמנות, לכן אנחנו צריכים גם alias לטבלת orders וגם לטבלת order details.

3 השורות הראשונות של משפט הwhere הפנימי, מחברות בין טבלאות אלו. השורה הרביעית, מגדירה את המוצר הראשון (28) וכן את המוצר השני (59). השורה החמישית והאחרונה,  "דואגת" שהמוצר השני אכן הוזמן אחרי הראשון.

 


 

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

 

 

תנו לנו לייק לקבלת עדכונים שוטפים