fbpx

פקודת 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 + 300
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  מקובל להקיף כינויים לעמודות בגרשים – ‘כינוי לעמודה’ ולא בגרשיים – “כינוי לעמודה”