ברוכים הבאים לקורס SQL למתחילים, בו אנו נלמד אתכם כיצד לכתוב SQL ולתחקר נתונים ברמה מקצועית.


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


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



למה בעצם ללמוד SQL?


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


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


רגע, כבר מתחילים ללמוד? עדיין לא, בואו נעבור קודם על כמה מושגי יסוד חשובים, מבטיחים שזה לא יישמע כמו ג׳יבריש!



מהו בסיס נתונים (Data Base)?


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


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


כך נלמד אתכם את נושא הטבלאות בצורה היעילה ביותר:


  1. נעבוד עם צילומים של טבלאות, כאשר כל עמודה תיוצג בצבע משלה. המטרה כאן היא להקל עליכם מבחינת האתגר שעליכם לקלוט המון מידע במקביל.
  2. לכל הנושאים שנציג, יתווספו שאלות לדוגמא, כך שתצליחו להתעמק בנושא ואף לתרגל את אותן שאלות במקביל על דף או על קובץ במחשב.
  3. הדרך להצלחה היא על ידי תרגול רב. סקרנים לדעת על כמה תרגילים מדובר כדי להצליח לתחקר ברמה גבוהה? כמובן שזה מאוד אינדיבידואלי, אך בהחלט יש צורך ב-50 שאלות לפחות וכמובן, להמשיך לתרגל כמה שניתן כדי לשמר את מה שלמדנו.


טבלת נתונים SQL עם עמודות: first name, last name, data role, domain, email, salary


3 סוגי נתונים מרכזיים בטבלה:


מספר int - בעמודה כזו יכולים להכנס מספרים בלבד. למה? זה יקל עלינו לדעת שהבסיס מסודר כמו שצריך.


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


לא נעים, נכון? כדי למנוע מקרים כאלו, בבסיס נתונים דבר כזה לא יכול לקרות כי סוג העמודה מקבלת רק ערכים מספריים.


String - עמודה זו משמשת לערכים שהם טקסט, אך תיאורטית היא יכולה לקבל כל ערך בטבלה.


Date - עמודה זו משמשת לערכים מסוג תאריך.



SQL Query (או בשמה הנוסף ״שאילתה״):


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


לפנינו טבלה דמיונית של עובדים מכל העולם במחלקות דאטה, לפי תפקידים שונים:


טבלת SQL של עובדים מכל העולם במחלקות דאטה, לפי תפקידים שונים: first name, last name, data role, domain, email, salary


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



SELECT


1. כך תוכלו לשלוף את כל המידע מהטבלה (לאחר מכן תוכלו להשתמש באקסל):


----

SELECT

*

FROM

data_salaries

---


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


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


2. בצורה הבאה, תוכלו לבחור להציג רק חלק מהעמודות:


---

SELECT

First_name,

email

FROM

Data_salaries

---


טבלת דוגמא לשימוש ב SELECT עם שתי העמודות: שם פרטי ואימייל



LIMIT


3. כיצד תוכלו לבחור רק חלק מהשורות?


בשביל זה קיימת פונקציה בשם LIMIT שמגבילה את כמות השורות החוזרות.


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


----

SELECT

First_name,

email

FROM

Data_salaries

LIMIT 3

---


טבלת דוגמא לשימוש ב LIMIT עם שתי העמודות: שם פרטי ואימייל



DISTINCT


עכשיו שכבר הבנו הכל :), אנחנו נרצה להתחיל להבין יותר לעומק את הנתונים שבטבלה.


לדוגמא: איזה תפקידים יש בעמודת data role?


תכירו פקודה חדשה בשם DISTINCT:


----

SELECT DISTINCT

data_role

FROM

Data_salaries

---


עמודת data role בעלת 4 תפקידים לפי הסדר הבא משמאל לימין : VP, Director, Analyst, Team Leader



ORDER BY


כיצד ניתן למיין את התוצאות (גדול לקטן, מא עד ת׳ וההפך)?


אז, מסתבר שבשביל זה יצרו את הפונקציה ORDER BY .ORDER BY יגיע תמיד בסוף השאילתה.


אחרי ה-ORDER BY, נציין ASC סדר עולה או DESC סדר יורד. כאשר לא נציין שום דבר, הפקודה תחשב כ- ASC.


כפי שאתם רואים, הפונקציות ממשיכות להקרא בשמות אינטואיטיבים וקלים להבנה (:


4. אנו מעוניינים לקבל את אותה רשימה מלמעלה (איזה תפקידים יש בעמודת data role), אבל ממוינים לפי ה- ABC.



----

SELECT DISTINCT

data_role

FROM

Data_salaries

ORDER BY data_role ASC

---


עמודת data role עם 4 תפקידים לפי הסדר הבא משמאל לימין: Analyst, Director, Team Leader, VP



בואו נתרגל את מה שלמדנו:


  1. הציגו את כל הנתונים בטבלה.
  2. הציגו את עמודת email ,data_role.
  3. הציגו את עמודות first_name,last_name, רק את עשרת השורות הראשונות.
  4. הציגו רשימת DISTINCT של כל התפקידים.
  5. הציגו רשימת DISTINCT של כל התפקידים ושמות משפחה (כמה שורות קיבלתם בשאילתה הקודמת וכמה עכשיו? מה ההבדל?)
  6. הציגו את עשרת בעלי השכר הגבוה ביותר (שכר, שם פרטי ושם משפחה) ומה תפקידם?
  7. הציגו את עשרת בעלי השכר הגבוה ביותר (שכר, שם פרטי ושם משפחה) ותפקידם, ממוינים לפי ה -ABC.



למדנו הרבה מאוד עד כה, אז בוא נסכם את הכל:


SELECT, FROM, DISTINCT, LIMIT, ORDER BY


ברשותי טבלאות גדולות מאוד - של כמה מאות מיליוני שורות שאותן אני אצטרך לתשאל.


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


איך אנחנו ממשיכים מכאן? האם אנחנו נרצה רק עובדים מחברות מסוימות? בנוסף, אם יש לי השערה שכל מי שהשם שלו Jeremie הוא בטוח מוצלח, אז איך נקבל רק את התוצאות האלו?



WHERE

כאשר נרצה ״לפלטר״ את הטבלה, כלומר לסנן שורות לא רלוונטיות, נשתמש בפקודת WHERE.


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


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


את מה אנחנו מפלטרים? סופסוף הקורס SQL הזה מתחיל להיות מעניין. מצליחים לנחש למה?


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


WHERE יגיע אחרי FROM.


SELECT

*

FROM Data_salaries

WHERE column_name =<> > <



בואו נעבור על כמה דוגמאות:


משימה: הצג את כל האנשים שהרוויחו מעל $50,000.


טבלת SQL של עובדים מכל העולם במחלקות דאטה, לפי תפקידים שונים: first name, last name, data role, domain, email, salary


כמה שורות יחזרו? תחשבו רגע.




טבלת SQL עם שורה מסומנת של העובדת Marita


תשובה:

SELECT

*

FROM

Data_salaries

WHERE salary > 50000



התשובה היא - רק אחת! השורה הראשונה היא זאת שתחזור, אילו עמודות יוצגו? כולם, כי בחרתי כוכבית.


שאלה: האם אני יכול לבחור להציג רק עמודות מסוימות?

תשובה: בוודאי! תלוי בעמודות שאבחר ב-SELECT.


שאלה: האם העמודה salary שמופיעה ב-WHERE חייבת להופיע ב-SELECT?

תשובה: בוודאי שלא! אין שום קשר בין העמודות שאבחר להציג ב-SELECT לתנאי שאבחר לשים על העמודה ב-WHERE.


משימה: הצג את כל האנשים שהרוויחו בין 39000 ל-40000.


טבלת SQL עם רשימת עובדים מ Marita עד Jeremie


כמה שורות יחזרו?תחשבו רגע.




תשובה SQL: שתי שורות (המסומנות).


רוצים לתרגל בעצמכם? מוזמנים לבדוק ולתרגל ב-bigquery.


טבלת SQL :עובדים עם סימון שני עובדים Elsworth, Fawnia



אופציה 1:

SELECT

*

FROM

Data_salaries

WHERE salary >= 39000

and salary <=40000




אופציה 2:



SELECT

*

FROM

Data_salaries

WHERE salary between 39000 and 40000



שימו לב לשני דברים חדשים כאן:


  1. ניתן להשתמש בתנאי AND. האם זה אומר שאפשר להשתמש גם ב- OR? כמובן, תנאים לוגיים.
  2. אילו עוד תנאים קיימים? אנחנו נגלה עד סוף המדריך.
  3. ניתן לקרוא לאותה עמודה בכמה תנאים salary.
  4. שימוש ב-BETWEEN, פשוטו כמשמעו.


משימה: הצג את כל השמות הפרטיים ושמות המשפחה של אלו שהרוויחו מעל $50,000.


טבלת SQL :נתונים לפי עובדים Marita, Elswoth, Kathryn, Maura, Fawnia, Jeremie, Morganica, Carre


כמה שורות יחזרו? כמה עמודות יחזרו? תחשבו רגע.




טבלת SQL שורה נתונים של העובדת Marita Sabatier עם 2 עמודות first name, last name


תשובה SQL:


SELECT

first_name,

last_name

FROM

Data_salaries

WHERE salary > 50000



תשובה: רק אחת! השורה הראשונה היא זאת שתחזור. אילו עמודות יוצגו? first_name and last name, כי רק אותן בחרתי ב-SELECT.


שורה מטבלה עם פרטי אימייל ושכר של עובדת Kathryn Hackney



משימה: הציגו את כל האנשים שתפקידם הוא Director.


טבלת SQL :נתונים לפי עובדים Marita, Elswoth, Kathryn, Maura, Fawnia, Jeremie,


כמה שורות יחזרו? תחשבו רגע.




תשובה: שתי שורות (המסומנות).


רוצים לתרגל בעצמכם? מוזמנים לבדוק ולתרגל ב-bigquery.


טבלת SQL עם סימון העובדים: Elsworth, Fawnia


תשובה SQL:




SELECT

*

FROM

Data_salaries

WHERE data_role LIKE ’Director’



מה למדנו כאן?


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


משימה: הציגו את כל האנשים שתפקידם הוא Director ,VP, Analyst.


טבלת SQL :נתונים לפי עובדים Marita, Elswoth, Kathryn, Maura, Fawnia, Jeremie


כמה שורות יחזרו? תחשבו רגע.




תשובה: חמש שורות.


טבלת SQL :נתונים לפי עובדים Marita, Elswoth, Kathryn, Maura, Fawnia,



תשובה SQL:


אופציה 1:


SELECT

*

FROM

Data_salaries

WHERE data_role = ’Director’

OR data_role = ’VP’

OR data_role = ’Analyst’


אופציה 2:



SELECT

*

FROM

Data_salaries

WHERE data_role IN (’Director’,’VP’,’Analyst’)



מה למדנו כאן?


  1. שימוש ב-OR: אם אחד מהתנאים מתקיים, תחזיר את הערכים ללא קשר לשני.
  2. שימוש ב-IN: שימו לב, שמנו בסוגריים את כל הערכים שרצינו לקבל. מאוד נוח כאשר נרצה לבחור מספר רב של ערכים.
  3. מה היה קורה אם היינו רושמים NOT IN? כמה שורות היינו מקבלים?




תשובה: רק שורה אחת! לא בטוחים? מוזמנים לבדוק ולתרגל ב-bigquery.


למדנו הרבה מאוד עד כה. אז בואו נסכם:


WHERE, AND, OR, BETWEEN, LIKE, IN, NOT IN


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


אז, מה אנחנו כבר יודעים לבצע אחרי תרגול SQL שכזה?


בעיקר להוציא רשימות ולעשות עליהן מניפולציות מורכבות יותר באקסל.


מה נלמד במדריך SQL הבא?


במסגרת קורס SQL למתחילים, במדריך הבא נתחיל ללמוד חישובים ופונקציות שמסכמות לנו את הנתונים, כגון: MAX, MIN, SUM, COUNT, AVG.


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


נשמע מעניין, נכון? מזומנים להמשיך למדריך הבא.