פקודת SELECT מאפשרת לנו להציג נתונים בצורה הבסיסית ביותר – עמודות נבחרות מתוך טבלה. במדריך SQL זה אנו נלמד להכיר את המבנה של משפט SELECT ומרכיביו השונים
v כיצד ניתן לכתוב פקודותSELECT בסיסיות.
v פעולות מתמטיות על עמודות בטבלה.
v כינויים לעמודות.
v שרשור ערכים מעמודות שונות.
v פקודת DISTINCT.
פקודת SELECT בסיסית
חלקו הראשון שלך מדריך SQL זה מתמקד בפקודת ה SELECT הבסיסית. פקודה זו מאפשרת לנו להציג את נתוני הטבלה.
SELECT * FROM שם_טבלה
לדוגמא:
SELECT * FROM employees
בדוגמא זו אנו הצגנו את כל הטבלה במלואה.
v במשפטSELECT :
o אנו בוחרים מה אנו רוצים להציג.
o סימן הכוכבית מציין כי אנו רוצים להציג את כל הנתונים של הטבלה.
v במשפט FROM:
o אנו מציינים מאיזו טבלה אנו רוצים להציג את הנתונים.
o לאחר פקודת FROM תמיד יופיע שם של טבלה.
SELECT שם_עמודה, שם_עמודה, שם_עמודה FROM שם_טבלה
לדוגמא:
SELECT last_name , first_name FROM employees
בדוגמא זו אנו בחרנו להציג עמודות מסויימות.
v במשפט SELECT:
o אנו בוחרים מה אנו רוצים להציג.
o לאחר פקודת ה SELECT אנו מציינים את שמות העמודות אותן אנו רוצים להציג כאשר פסיק (,) מפריד בינהן.
o ניתן לציין כמה עמודות שאנו מעוניינים, ניתן אף לציין את אותה עמודה יותר מפעם אחת.
v במשפט FROM:
o אנו מציינים מאיזו טבלה אנו רוצים להציג את הנתונים.
o לאחר פקודת ה FROM תמיד יופיע שם של טבלה.
! בכל פקודת SQL שנכתוב, תמיד נשתמש בפקודת SELECT ופקודת FROM, לא יתכן משפט SQL בלעדי שניהם (לא הגיוני שנבקש להציג מידע בלי שנציין מה אנחנו רוצים ומהיכן).
! סדר פקודות ה-SELECT וה- FROM הינו מובנה, לא ניתן לכתוב פקודה אשר מתחילה ב- FROM ואז לעבור ל- SELECT.
! אין מניעה מציון שמה של עמודה יותר מפעם אחת, הנתונים של עמודה זו פשוט יופיעו שוב ושוב בהתאם לכמות הפעמים שכתבנו אותה.
! לצרכי סדר וקריאות – על אף ששפת ה- SQL אינה רגישה לגודל אות, רווחים או ירידת שורה, אנו נקפיד על כתיבה מסודרת כאשר הפקודות יכתבו באותיות גדולות, שמות העמודות טבלאות באותיות קטנות, ירידת שורה מפקודה לפקודה והזחות בעת הצורך.
חישובים על עמודות
חלקו השני של מדריך SQL זה מתמקד בחישובים על עמודות.
לא תמיד נרצה להציג את המידע כמות שהוא, אלא קיימים מצבים בהם נרצה להציג אותו יחד עם חישובים מסויימים על העמודות המייצגות אותו (לדוגמא, נרצה לדעת כיצד יראו המחירים בעמודת מחיר לאחר הוספת מע"מ).
אנו נבחן את נושא החישובים לפי סוגי העמודות השונות:
חישובים על עמודות מסוג מספר
בדוגמא זו אנו מציגים את שמו של העובד, שם משפחתו ושכרו לאחר העלאה של 20%.
SELECT last_name , first_name, salary,salary * 1.2 FROM employees
רצוי לכתוב את העמודה המקורית ללא השינוי (salary) בנוסף על העמודה עם החישוב (salary * 1.2) כדי שנוכל לראות את ההבדל (בדוגמא זו את ההעלאה).
ניתן לבצע כל חישוב מתמטי שנרצה על העמודות:
SELECT last_name , first_name , salary,salary * 0.14 / 2.74 + 52.36 FROM employees
אם נרצה להגדיר סדר קדימויות בביצוע הפעולות אנו נשתמש בסוגריים:
SELECT last_name , first_name , salary, salary * 0.14 / (2.74 + 52.36) FROM employees
לא ניתן לבצע חישובים מתמטיים על עמודות מסוג מחרוזת:
חישובים על עמודות מסוג תאריך
כאשר נבצע חישוב על עמודה מסוג תאריך, התוצאה תהיה שינוי התאריך ברמה של ימים:
SELECT last_name , first_name , hire_date, hire_date + 1 FROM employees
תוצאה: תאריך העסקת העובד ועוד (+) יום אחד.
SELECT last_name , first_name , hire_date, hire_date - 1 FROM employees
תוצאה: תאריך העסקת העובד פחות (-) יום אחד.
לא ניתן לבצע חישוב של * (כפל) או /(חילוק) על עמודות מסוג תאריך:
SELECT last_name , first_name , hire_date, hire_date * 3 FROM employees (שגיאה) SELECT last_name , first_name , hire_date, hire_date / 7 FROM employees (שגיאה)
חישובים על עמודות אשר מכילות בתוכן ערכי NULL
ערך NULL הוא ערך המציין שדה ריק בטבלה, ערך NULL לא שווה לאפס (0) וגם לא שווה לרווח (‘ ’) יש להתייחס אליו כחלל ריק.
כאשר נבצע חישוב כלשהו על עמודה אשר מכילה ערכי NULL, כל חישוב על הערך NULL יחזיר NULL.
SELECT last_name, salary, commission_pct, commission_pct + 1 FROM employees
! חישובים על עמודות (כל סוג של עמודה) לא משנים את תוכן העמודה בטבלה, אלא רק מציגים את תוכן העמודה, לאותה שליפה ספציפית, בצורה אחרת.
! חישובים על עמודות משנים את שם כותרת העמודה בפלט.
SELECT last_name, salary, salary + 500 FROM employees SELECT last_name, salary, salary + 500 FROM employees LAST_NAME SALARY + 500 --------- ------------- Levi 6200
כינויים לעמודות (Column Alias)
חלקו השלישי של מדריך SQL זה מתמקד בכינויים לעמודות.
בנושא האחרון למדנו כיצד לבצע חישובים לעמודות וכיצד כותרת העמודה תראה לאחר החישוב. לעיתים מטעמי נוחות או רצון להסתיר את החישוב שעשינו, נרצה לשנות את כותרת העמודה.
כדי לעשות זאת נשתמש בכינוי לעמודה :
SELECT שם_עמודה AS “כינוי_לעמודה” FROM שם טבלה
לדוגמא:
SELECT last_name, salary, salary + 500 AS “NEW_SALARY” FROM employees LAST_NAME SALARY NEW_SALARY --------- ------ ---------- Levi 5700 6200
ניתן גם לכתוב את הכינוי לעמודה גם ללא ה AS לדוגמא :
SELECT last_name, salary, salary + 500 “NEW_SALARY” FROM employees LAST_NAME SALARY NEW_SALARY --------- ------ ---------- Levi 5700 6200
ניתן גם לכתוב את הכינוי לעמודה ללא הגרשיים (" ")
SELECT last_name, salary, salary + 500 NEW_SALARY FROM employees LAST_NAME SALARY NEW_SALARY --------- ------ ---------- Levi 5700 6200
v כתיבת כינוי ללא גרשיים לא מאפשרת לנו לשלוט על גודל אות הכותרת (הכותרת תמיד תצא באותיות גדולות).
v כתיבת כינוי ללא גרשיים מונעת מאיתנו לכתוב את הכינוי כשתי מילים נפרדות (ולא מחוברות לדוגמא ע"י קו תחתון).
v כתיבת כינוי ללא גרשיים מונעת מאיתנו להשתמש במילים שמורות ככינויים.
v לצרכי סדר וקריאות – תמיד להשתמש ב- AS , תמיד להשתמש בגרשיים, תמיד לכתוב כינוי באותיות גדולות ותמיד לכתוב צמד מילים או יותר בצורה מחוברת ע"י קו תחתון.
שרשור עמודות (Concatenation Operator)
חלקו הרביעי של מדריך SQL זה עוסק בשרשור עמודות.
שרשור עמודות הוא מעין מיזוג ערכים של עמודות שונות, כאשר נרצה להציג תוכן של שתי עמודות (או יותר) תחת שם של עמודה אחת, אנו נוכל להשתמש בסימן השרשור – ||.
לדוגמא, כאשר נרצה להציג את שמו הפרטי של העובד יחד עם שם משפחתו, אנו נכתוב:
SELECT first_name || last_name FROM employees FIRST_NAME || LAST_NAME ------------------------ MosheLevi
אמנם, השגנו את מה שרצינו – מיזוג שני ערכים משתי עמודות שונות, עם זאת, התוצאה הסופית לא ממש ברורה (השם הפרטי "דבוק" לשם המשפחה).
לכן, נריץ שוב את השאילתה, הפעם נשרשר לעמודות גם רווח (‘ '):
SELECT first_name || ' ' || last_name FROM employees FIRST_NAME || LAST_NAME ------------------------ Moshe Levi
כדי שהתוצאה תצא יותר קריאה, אנו נשתמש בכינויים לעמודה (Alias):
SELECT first_name || last_name AS "FULL_NAME" FROM employees FULL_NAME ------------------------ MosheLevi
אם נרצה לאחר שרשור זה להציג עוד עמודה נוספת בנפרד, נשתמש בפסיק (,(:
SELECT first_name || ' ' || last_name AS “FULL_NAME”, salary FROM employees FULL_NAME SALARY --------- ------- Moshe Levi 5800
אפשר להמשיך וליצור שרשורים מורכבים יותר לפי הצורך:
SELECT 'Employee Name : ' || first_name || ' - ' || last_name AS “E_DETAILS”, 'Employee Salary : ' || salary AS “E_SALARY” FROM employees E_DETAILS E_SALARY ----------------------------- -------------------------- Employee Name : Moshe - Levi Employee Salary : 5800
! ניתן לשרשר לעמודה כל עמודה אחרת או כל טקסט – כאשר נרצה לכתוב טקסט אנו נקיף אותו בגרשים ('טקסט').
! לשים לב – בכינוי לעמודה (Alias) אנו נשתמש בגרשיים ("כינוי_לעמודה"), בערך טקסטואלי, למשל בעת שרשור ערכי טקסט לעמודה אנו נשתמש בגרשים (‘ ‘).
שימוש בפקודת DISTINCT
חלקו החמישי של מדריך SQL זה מתמקד בפקודת ה DISTINCT.
פקודתDISTINCT מאפשרת לנו להציג רשימת ערכים ייחודיים בעמודה.
נניח שיש לנו טבלת Suppliers ובה רשימת ספקים מערים שונות: 40 ספקים מת"א, 30 מירושלים ו- 30 מחיפה. התבקשנו להציג את רשימת הערים בהן יושבים הספקים שלנו:
SELECT city FROM suppliers
תוצאה זו תחזיר 100 שורות (כאשר העיר ת"א חוזרת 40 פעמים, ירושלים חוזרת 30 פעמים וחיפה חוזרת 30 פעמים) כאשר אנו רצינו להציג 3 שורות בלבד.
כדי לפתור את בעיה זו אנו נשתמש בפקודת DISTINCT
SELECT DISTINCT שם_עמודה FROM שם_טבלה SELECT city FROM suppliers
התוצאה תראה כך:
CITY ------ Tel Aviv Jerusalem Haifa
פקודת DISTINCT על יותר מעמודה אחת
ניתן אחרי DISTINCT לכתוב יותר מעמודה אחת, פעולה שכזו תביא להצגת שילוב הערכים הייחודי מהעמודות השונות, לדוגמה רשימת תלמידים בכיתה:
טבלת Class
שם פרטי |
שם משפחה |
משה |
לוי |
משה |
לוי |
ירון |
כהן |
ירון |
לוי |
ירון |
כהן |
ניתן לראות כי ישנם 2 תלמידים ששמם הוא משה לוי, 2 תלמידים ששמם הוא ירון כהן ועוד תלמיד ששמו ירון לוי.
v אם נפעיל DISTINCT על השם הפרטי נקבל 2 שורות (משה, ירון).
v אם נפעיל DISTINCT על שם המשפחה נקבל 2 שורות (לוי, כהן).
v אם נפעיל DISTINCT על השם הפרטי ושם המשפחה:
SELECT DISTINCT first_name , last_name FROM class
נקבל 3 תוצאות – משה לוי, ירון כהן, ירון לוי.
התאמות ל SQL Server
v פעולת השרשור נעשית באמצעות האופרטור ‘+’
v מקובל להקיף כינויים לעמודות בגרשים – ‘כינוי לעמודה’ ולא בגרשיים – “כינוי לעמודה”