כאשר ברצונך לאחזר נתונים ממסד נתונים, אתה מבקש את הנתונים באמצעות שפת שאילתות מובנית או SQL. SQL הוא שפת מחשב הדומה מאוד לאנגלית, אך תוכניות מסד נתונים אלה מבין. כל שאילתה שאתה מפעיל משתמשת ב- SQL מאחורי הקלעים.
הבנת אופן הפעולה של SQL יכולה לעזור לך ליצור שאילתות טובות יותר, ולאפשר לך להבין ביתר קלות כיצד לתקן שאילתה שלא מחזירה את התוצאות הרצויות.
זהו מאמר אחד מתוך סדרה של מאמרים בנושא Access SQL. מאמר זה מתאר את השימוש הבסיסי ב- SQL לבחירת נתונים, ומשתמש בדוגמאות כדי להמחיש תחביר SQL.
במאמר זה
מהו SQL?
SQL הוא שפת מחשב לעבודה עם קבוצות של עובדות ואת קשרי הגומלין ביניהם. תוכניות מסד נתונים יחסי, כגון Microsoft Office Access, משתמשות ב- SQL כדי לעבוד עם נתונים. שלא כמו שפות מחשב רבות, לא קשה לקרוא ולהבין את SQL, אפילו לתחילת העבודה. בדומה לשפות מחשב רבות, SQL הוא תקן בינלאומי המזוהה על-ידי גוף התקן כגון ISO ו- ANSI.
השתמש ב- SQL כדי לתאר ערכות נתונים שעשויות לעזור לך לענות על שאלות. בעת שימוש ב- SQL, עליך להשתמש בתחביר הנכון. תחביר הוא ערכת הכללים שבה משולבים רכיבי השפה כראוי. תחביר SQL מבוסס על תחביר באנגלית, ומשתמש באותם רכיבים כמו תחביר Visual Basic for Applications (VBA).
לדוגמה, משפט SQL פשוט המאוחזר רשימה של שמות משפחה עבור אנשי קשר ששמם הפרטי הוא מרים, עשוי להיות דומה לזה:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
הערה: SQL משמש לא רק לצורך טיפול בנתונים, אלא גם ליצירה ו לשינוי של עיצוב אובייקטי מסד נתונים, כגון טבלאות. החלק של SQL המשמש ליצירה ולעריכה של אובייקטי מסד נתונים נקרא שפת הגדרת נתונים (DDL). נושא זה אינו מכסה DDL. לקבלת מידע נוסף, עיין במאמר יצירה או שינוי של טבלאות או אינדקסים באמצעות שאילתת הגדרת נתונים.
משפטי SELECT
כדי לתאר ערכת נתונים באמצעות SQL, כתוב משפט SELECT. משפט SELECT מכיל תיאור מלא של ערכת נתונים שברצונך להשיג ממסד נתונים. הדבר כולל את הפרטים הבאים:
-
אילו טבלאות מכילות את הנתונים.
-
האופן בו נתונים ממקורות שונים קשורים.
-
אילו שדות או חישובים ייצרו את הנתונים.
-
קריטריונים שהנתונים חייבים להתאים כדי להיכלל.
-
האם וכיצד למיין את התוצאות.
משפטי SQL
כמו משפט, משפט SQL כולל משפטים. כל פסוקית מבצעת פונקציה עבור משפט ה- SQL. משפטים מסוימים נדרשים במשפט SELECT. הטבלה הבאה מפרטת את משפטי ה- SQL הנפוצים ביותר.
משפט SQL |
הפעולה המבוצעת |
נדרש |
SELECT |
רשימות השדות המכילים נתונים מעניינים. |
כן |
FROM |
רשימות את הטבלאות המכילות את השדות המפורטים במשפט SELECT. |
כן |
WHERE |
מציין קריטריוני שדה שכל רשומה חייבת לכלול בתוצאות. |
לא |
סדר לפי |
מציין כיצד למיין את התוצאות. |
לא |
GROUP BY |
במשפט SQL המכיל פונקציות צבירה, מוצגים שדות שאינם מסוכמים במשפט SELECT. |
רק אם קיימים שדות כאלה |
HAVING |
במשפט SQL המכיל פונקציות צבירה, מציין תנאים החלים על שדות המסוכמים במשפט SELECT. |
לא |
מונחי SQL
כל פסוקית SQL מורכבת ממונחים - השוואה לחלקי הדיבר. הטבלה הבאה מפרטת סוגים של מונחי SQL.
מונח SQL |
חלק הדיבר הניתן להשוואה |
הגדרה |
דוגמה |
המזהה |
שם עצם |
שם שבו אתה משתמש כדי לזהות אובייקט מסד נתונים, כגון שם של שדה. |
הלקוחות. [מספר טלפון] |
אופרטור |
פועל או תואר הפועל |
מילת מפתח המייצגת פעולה או משנה פעולה. |
AS |
קבוע |
שם עצם |
ערך שאינו משתנה, כגון מספר או NULL. |
42 |
ביטוי |
שם תואר |
שילוב של מזהים, אופרטורים, קבועים ופונקציות המוערכים כערך יחיד. |
>= Products. [מחיר יחידה] |
משפטי SQL בסיסיים: SELECT, FROM ו- WHERE
משפט SQL מקבל את התבנית הכללית:
SELECT field_1
FROM table_1 WHERE criterion_1 ;
הערות:
-
Access מתעלם מ מעברי שורה במשפט SQL. עם זאת, שקול להשתמש בשורה עבור כל פסוקית כדי לשפר את הקריאות של משפטי ה- SQL שלך עבור עצמך ואחרים.
-
כל משפט SELECT מסתיים בנקודה-פסיק (;). הנקודה-פסיק יכולה להופיע בסוף המשפט האחרון או בשורה בפני עצמה בסוף משפט ה- SQL.
דוגמה ב- Access
להלן ממחיש כיצד משפט SQL עבור שאילתת בחירה פשוטה עשוי להיראות ב- Access:
1. משפט SELECT
2. משפט FROM
3. משפט WHERE
משפט SQL לדוגמה זה מקריא "Select the data that is stored in the fields named E-mail Address and Company from the table named Contacts, specific those records in which the value of the field City is Seattle".
בוא נבחן את הדוגמה, משפט אחד בכל פעם, כדי לראות כיצד תחביר SQL פועל.
משפט SELECT
SELECT [E-mail Address], Company
זהו משפט SELECT. הוא מורכב אופרטור (SELECT) ואחריו שני מזהים ([כתובת דואר אלקטרוני] ו'חברה').
אם מזהה מכיל רווחים או תווים מיוחדים (כגון "כתובת דואר אלקטרוני"), עליו להיות מוקף בסוגריים מרובעים.
פסוקית SELECT אינה חייבת לומר אילו טבלאות מכילות את השדות, ואין לה אפשרות לציין תנאים כלשהם שיש להתקיים על-ידי הנתונים שיש לכלול.
משפט SELECT מופיע תמיד לפני משפט FROM במשפט SELECT.
משפט FROM
FROM Contacts
זהו משפט FROM. הוא מורכב אופרטור (FROM) ואחריו מזהה (אנשי קשר).
משפט FROM אינו רשום את השדות שיש לבחור.
משפט WHERE
WHERE City="Seattle"
זהו משפט WHERE. הוא מורכב אופרטור (WHERE) ואחריו ביטוי (City="Seattle").
הערה: בניגוד לפסוקיות SELECT ו- FROM, משפט WHERE אינו רכיב נדרש במשפט SELECT.
באפשרותך לבצע רבות מהפעולות ש- SQL מאפשר לך לבצע באמצעות משפטי SELECT, FROM ו- WHERE. מידע נוסף על האופן שבו אתה משתמש בפסוקיות אלה מוצג במאמרים נוספים אלה:
מיון התוצאות: ORDER BY
כמו Microsoft Excel, Access מאפשר לך למיין תוצאות שאילתה בגליון נתונים. באפשרותך גם לציין בשאילתה כיצד ברצונך למיין את התוצאות בעת הפעלת השאילתה, באמצעות משפט ORDER BY. אם אתה משתמש במשפט ORDER BY, זהו המשפט האחרון במשפט SQL.
משפט ORDER BY מכיל רשימה של השדות שבהם ברצונך להשתמש למיון, באותו סדר שבו ברצונך להחיל את פעולות המיון.
לדוגמה, נניח שברצונך למיין תחילה את התוצאות לפי הערך של השדה חברה בסדר יורד, ואם קיימות רשומות עם אותו ערך עבור חברה - ממוינות לצד הערכים בשדה כתובת דואר אלקטרוני בסדר עולה. המשפט ORDER BY ייראה כך:
ORDER BY Company DESC, [E-mail Address]
הערה: כברירת מחדל, Access ממיין ערכים בסדר עולה (A-Z, מהקטן ביותר לגדול ביותר). השתמש במילת המפתח DESC כדי למיין ערכים בסדר יורד במקום זאת.
לקבלת מידע נוסף אודות המשפט ORDER BY, עיין בנושא משפט ORDER BY.
עבודה עם נתונים מסוכמים: GROUP BY ו- HAVING
לעתים ברצונך לעבוד עם נתונים מסוכמים, כגון סך המכירות בחודש או הפריטים היקרים ביותר במלאי. לשם כך, עליך להחיל פונקציית צבירה על שדה במשפט SELECT. לדוגמה, אם ברצונך שהשאילתה תציג את ספירת כתובות הדואר האלקטרוני המפורטות עבור כל חברה, פסוקית SELECT שלך עשויה להיות דומה לנוסחה הבאה:
SELECT COUNT([E-mail Address]), Company
פונקציות הצבירה שבהן באפשרותך להשתמש תלויות בסוג הנתונים הקיימים בשדה או בביטוי שבו ברצונך להשתמש. לקבלת מידע נוסף אודות פונקציות הצבירה הזמינות, עיין במאמר פונקציות צבירה של SQL.
ציון שדות שאינם בשימוש בפונקציית צבירה: המשפט GROUP BY
בעת שימוש בפונקציות צבירה, בדרך כלל עליך ליצור גם פסוקית GROUP BY. משפט GROUP BY מפרט את כל השדות שעליו אינך מחיל פונקציית צבירה. אם אתה מחיל פונקציות צבירה על כל השדות בשאילתה, אינך צריך ליצור את המשפט GROUP BY.
פסוקית GROUP BY עוקבת מיד אחר פסוקית WHERE, או את משפט FROM אם אין משפט WHERE. משפט GROUP BY מפרט את השדות כפי שהם מופיעים במשפט SELECT.
לדוגמה, אם המשך הדוגמה הקודמת, אם פסוקית SELECT מחילה פונקציית צבירה על [כתובת דואר אלקטרוני] אך לא על Company, משפט GROUP BY ייראה כך:
GROUP BY Company
לקבלת מידע נוסף אודות המשפט GROUP BY, עיין בנושא פסוקית GROUP BY.
הגבלת ערכים מצטברים באמצעות קריטריוני קבוצה: משפט HAVING
אם ברצונך להשתמש בקריטריונים כדי להגביל את התוצאות, אך השדה שתרצה להחיל בו קריטריונים נמצא בשימוש בפונקציית צבירה, לא ניתן להשתמש במשפט WHERE. במקום זאת, השתמש במשפט HAVING. פסוקית HAVING פועלת כמו משפט WHERE, אך משמשת לנתונים מצטברים.
לדוגמה, נניח שאתה משתמש בפונקציה AVG (המחשבת ערך ממוצע) עם השדה הראשון בפסוקית SELECT:
SELECT COUNT([E-mail Address]), Company
אם ברצונך שהשאילתה תגביל את התוצאות בהתבסס על הערך של פונקציית COUNT זו, לא תוכל להשתמש בקריטריונים עבור שדה זה במשפט WHERE. במקום זאת, תמקם את הקריטריונים במשפט HAVING. לדוגמה, אם ברצונך שהשאילתה תחזיר שורות רק אם קיימות יותר מכתובת דואר אלקטרוני אחת המשויכת לחברה, פסוקית HAVING עשויה להיות דומה לנוסחה הבאה:
HAVING COUNT([E-mail Address])>1
הערה: שאילתה יכולה לכלול משפט WHERE ופסוקית HAVING - קריטריונים עבור שדות שאינם בשימוש בפונקציית צבירה מופיעים במשפט WHERE, וקריטריונים עבור שדות שנעשה בהם שימוש עם פונקציות צבירה מופיעים במשפט HAVING.
לקבלת מידע נוסף אודות פסוקית HAVING, עיין בנושא HAVING Clause.
שילוב תוצאות שאילתה: UNION
כאשר ברצונך לסקור את כל הנתונים המוחזרים על-ידי כמה שאילתות בחירה דומות יחד, כערכה משולבת, עליך להשתמש באופרטור UNION.
האופרטור UNION מאפשר לך לשלב שני משפטי SELECT לאחד. המשפטים SELECT שאתה משלב חייבים לכלול מספר זהה של שדות פלט, באותו סדר, עם סוגי נתונים זהים או תואמים. בעת הפעלת השאילתה, נתונים מכל קבוצה של שדות מתאימים משולבים בשדה פלט אחד, כך שפלט השאילתה מכיל מספר שדות זהה לזה של כל אחד מ משפטי הבחירה.
הערה: למטרות שאילתת איחוד, סוגי הנתונים 'מספר' ו'טקסט' תואמים.
בעת שימוש באופרטור UNION, באפשרותך גם לציין אם תוצאות השאילתה יכללו שורות כפולות, אם קיימות, באמצעות מילת המפתח ALL.
להלן תחביר ה- SQL הבסיסי עבור שאילתת איחוד המשלבת שני משפטי SELECT:
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
לדוגמה, נניח שיש לך טבלה בשם Products וטבלה אחרת בשם Services. שתי הטבלאות כוללות שדות המכילים את שם המוצר או השירות, את המחיר, האחריות או זמינות הערובה, ואם אתה מציע את המוצר או השירות באופן בלעדי. למרות שטבלת המוצרים מאחסינת מידע אחריות, וטבלת השירותים מאחסינת מידע מבטיח, המידע הבסיסי זהה (בין אם מוצר או שירות מסוימים כוללים הבטחה לאיכות). באפשרותך להשתמש בשאילתת איחוד, כגון הבאה, כדי לשלב את ארבעת השדות משתי הטבלאות:
SELECT name, price, warranty_available, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services ;
לקבלת מידע נוסף אודות שילוב משפטי SELECT באמצעות האופרטור UNION, ראה שילוב התוצאות של כמה שאילתות בחירה באמצעות שאילתת איחוד.