קינון של שאילתה בתוך שאילתה אחרת או בביטוי באמצעות שאילתת משנה

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

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

באפשרותך לכתוב שאילתת משנה בביטוי או במשפט Structured Query Language ‏(SQL) בתצוגת SQL.

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

במאמר זה

שימוש בתוצאות שאילתה כשדה בשאילתה אחרת

שימוש בשאילתת משנה כקריטריון עבור שדה שאילתה

מילות מפתח נפוצות של SQL שניתן להשתמש בהן עם שאילתת משנה

שימוש בתוצאות שאילתה כשדה בשאילתה אחרת

באפשרותך להשתמש בשאילתת משנה ככינוי שדה. שימוש בשאילתת משנה ככינוי שדה כאשר ברצונך להשתמש בתוצאות שאילתת משנה כשדה בשאילתה הראשי שלך.

הערה: שאילתת משנה המשמשת ככינוי שדה אינה יכולה להחזיר יותר משדה אחד.

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

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

הראה לי כיצד להתקין את Northwind

  1. בכרטיסיה קובץ, לחץ על חדש.

  2. תחת תבניות זמינות, לחץ על תבניות לדוגמה.

  3. לחץ על Northwind ולאחר מכן לחץ על צור.

  4. בצע את ההוראות בעמוד Northwind Traders (בכרטיסיית האובייקט של Startup Screen) כדי לפתוח את מסד הנתונים, ולאחר מכן סגור את החלון Login Dialog.

  1. בכרטיסיה צור, בקבוצה שאילתות, לחץ על עיצוב שאילתה.

  2. בתיבת הדו-שיח הצגת טבלה, לחץ על הכרטיסיה שאילתות ולאחר מכן לחץ פעמיים על Product Orders.

  3. סגור את תיבת הדו-שיח הצגת טבלה.

  4. לחץ פעמיים על השדה Product ID ועל השדה Order Date כדי להוסיף אותם לרשת עיצוב השאילתה.

  5. בשורה מיין בעמודה Product ID ברשת, בחר סדר עולה.

  6. בשורה מיין בעמודה Order Date ברשת, בחר סדר יורד.

  7. בעמודה השלישית של הרשת, לחץ באמצעות לחצן העכבר הימני על השורה שדה ולאחר מכן לחץ על שנה גודל תצוגה בתפריט הקיצור.

  8. בתיבת הדו-שיח שינוי גודל תצוגה, הקלד או הדבק את הביטוי הבא:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

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

  1. בעמודה הרביעית של הרשת, בשורה שדה, הקלד את הביטוי הבא:

    Interval: [Order Date]-[Prior Date]

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

  1. בכרטיסיה עיצוב, בקבוצה תוצאות, לחץ על הפעל.

    1. השאילתה פועלת ומציגה רשימה של שמות מוצרים, תאריכי הזמנות, תאריכי הזמנות קודמים ואת מרווח הזמן בין תאריכי ההזמנות. התוצאות ממוינות תחילה לפי מזהה מוצר (Product ID) בסדר עולה ולאחר מכן לפי תאריך הזמנה (Order Date) בסדר יורד.

    2. הערה: מאחר ש- Product ID הוא שדה בדיקת מידע, Access מציג את ערכי בדיקת המידע כברירת מחדל (במקרה זה את שם המוצר) במקום את מזהי המוצר הממשיים. אף על פי שהדבר משנה את הערכים המופיעים, אין הדבר משנה את סדר המיון.

  2. סגור את מסד הנתונים של Northwind.

לראש הדף

שימוש בשאילתת משנה כקריטריון עבור שדה שאילתה

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

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

  1. פתח את מסד הנתונים Northwind והפוך את תוכנו לזמין.

  2. סגור את טופס הכניסה.

  3. בכרטיסיה יצירה, בקבוצה אחר, לחץ על עיצוב שאילתה.

  4. בתיבת הדו-שיח הצגת טבלה, בכרטיסיה טבלאות, לחץ פעמיים על Orders ועל Employees.

  5. סגור את תיבת הדו-שיח הצגת טבלה.

  6. בטבלה Orders, לחץ פעמיים על השדה Employee ID, על השדה Order ID ועל השדה Order Date כדי להוסיף אותם לרשת עיצוב השאילתה. בטבלה Employees, לחץ פעמיים על השדה Job Title כדי להוסיף אותו לרשת העיצוב.

  7. לחץ באמצעות לחצן העכבר הימני על השורה קריטריונים בעמודה Employee ID ולאחר מכן לחץ על שנה גודל תצוגה בתפריט הקיצור.

  8. בתיבה שינוי גודל תצוגה, הקלד או הדבק את הביטוי הבא:

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

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

  9. בכרטיסיה עיצוב, בקבוצה תוצאות, לחץ על הפעל.

    השאילתה פועלת ותוצאות השאילתה מציגות רשימת הזמנות שעובדו על-ידי עובדים שאינם נציגי מכירות.

לראש הדף

מילות מפתח נפוצות של SQL שניתן להשתמש בהן עם שאילתת משנה

ישנן מספר מילות מפתח של SQL שניתן להשתמש בהן עם שאילתת משנה:

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

  • ALL    השתמש במילה ALL במשפט WHERE כדי לאחזר שורות שמקיימות את התנאי בעת השוואתן לכל שורה המוחזרת על-ידי שאילתת המשנה.

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

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

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    השתמש במילה ANY במשפט WHERE כדי לאחזר שורות שמקיימות את התנאי בעת השוואה לאחת מהשורות המוחזרות על-ידי שאילתת המשנה לפחות.

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

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

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    הערה: באפשרותך להשתמש גם במילת המפתח SOME עבור אותה המטרה; מילת המפתח SOME נרדפת למילה ANY.

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

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

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    באמצעות NOT EXISTS, השאילתה מחזירה רשימת מוצרים שאינם מופיעים בהזמנה קיימת אחת לפחות:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    השתמש ב- IN במשפט WHERE כדי לוודא שערך בשורה הנוכחית של השאילתה הראשית הוא חלק מהערכה ששאילתת המשנה מחזירה. באפשרותך גם להקדים את IN ב- NOT, כדי לוודא שערך בשורה הנוכחית של השאילתה הראשית אינו חלק מהערכה ששאילתת המשנה מחזירה.

    לדוגמה, השאילתה שלהלן מחזירה רשימת הזמנות (עם תאריכי הזמנות) שעובדו על-ידי עובדים שאינם נציגי מכירות:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    באמצעות NOT IN באפשרותך לכתוב את אותה השאילתה באופן הבא:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

לראש הדף

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

הרחב את הכישורים שלך
סייר בהדרכה
קבל תכונות חדשות לפני כולם
הצטרף למשתתפי Office Insider

האם מידע זה היה שימושי?

תודה על המשוב!

תודה על המשוב! נראה שכדאי לקשר אותך לאחד מנציגי התמיכה של Office.

×