שאלות ראיון SQL ומסדי נתונים 2026 — 34 שאלות
זמן קריאה: 8 דקות
SQL הוא כישור בסיסי כמעט בכל תפקיד טכני — מפיתוח ועד דאטה. ראיון SQL בודק שליטה בשאילתות, הבנת JOINs, אינדקסים, נרמול וטרנזקציות. נכון להיום פתוחות ב-HiTakeJob 133 משרות SQL, ולצידן 36 משרות PostgreSQL ו-36 משרות MySQL. ריכזנו 22 שאלות אמיתיות עם תשובות.
סוגי JOIN — טבלת ייחוס מהירה
הבנת סוגי ה-JOIN היא מהשאלות הנפוצות ביותר. הטבלה מסכמת מה כל אחד מחזיר:
| סוג JOIN | מה מוחזר |
|---|---|
| INNER JOIN | רק שורות עם התאמה בשתי הטבלאות |
| LEFT JOIN | כל השורות משמאל + התאמות מימין (NULL אם אין) |
| RIGHT JOIN | כל השורות מימין + התאמות משמאל |
| FULL OUTER JOIN | כל השורות משני הצדדים, עם NULL בהיעדר התאמה |
| CROSS JOIN | מכפלה קרטזית של כל השורות |
שאילתות ו-JOINs
מה ההבדל בין INNER JOIN ל-LEFT JOIN?
INNER JOIN מחזיר רק שורות עם התאמה בשתי הטבלאות. LEFT JOIN מחזיר את כל השורות מהטבלה השמאלית, ולשורות ללא התאמה בטבלה הימנית ממלא NULL. ההבדל קריטי כשרוצים לכלול רשומות ללא זוג.
מה ההבדל בין WHERE ל-HAVING?
WHERE מסנן שורות לפני הקיבוץ (GROUP BY), ו-HAVING מסנן קבוצות אחרי הקיבוץ. לכן פונקציות צבירה כמו COUNT או SUM ניתן להשתמש רק ב-HAVING, לא ב-WHERE.
מה ההבדל בין UNION ל-UNION ALL?
UNION מאחד תוצאות של שתי שאילתות ומסיר שורות כפולות (מה שדורש עיבוד נוסף). UNION ALL מאחד ומשאיר את כל השורות, כולל כפילויות, ולכן מהיר יותר כשידוע שאין חפיפה.
מה ההבדל בין DELETE, TRUNCATE ל-DROP?
DELETE מוחק שורות לפי תנאי וניתן לביטול בטרנזקציה. TRUNCATE מוחק את כל השורות מהר, מאפס אך שומר את מבנה הטבלה. DROP מוחק את הטבלה כולה כולל המבנה שלה.
מה ההבדל בין GROUP BY ל-DISTINCT?
DISTINCT מסיר שורות כפולות מהתוצאה. GROUP BY מקבץ שורות לקבוצות ומאפשר להפעיל עליהן פונקציות צבירה. אם רק רוצים ערכים ייחודיים ללא צבירה — DISTINCT קריא יותר.
ביצועים ואינדקסים
מהו אינדקס וכיצד הוא משפר ביצועים?
אינדקס הוא מבנה נתונים (לרוב B-Tree) שמאפשר למנוע לאתר שורות במהירות ללא סריקה מלאה של הטבלה. הוא מאיץ קריאות משמעותית, אך מאט כתיבות ותופס מקום, כי צריך לעדכן אותו בכל שינוי.
מתי אינדקס דווקא לא עוזר?
בטבלאות קטנות מאוד, כשהשאילתה מחזירה חלק גדול מהשורות, על עמודות עם מעט ערכים ייחודיים (low cardinality), או כשמפעילים פונקציה על העמודה המאונדקסת. אז המנוע עשוי להעדיף סריקה מלאה.
מהו Composite Index ומה חשיבות סדר העמודות בו?
אינדקס על מספר עמודות יחד. הסדר קריטי: האינדקס יעיל לשאילתות שמשתמשות בעמודה הראשונה (או בקידומת שמאלית). שאילתה שמסננת רק לפי העמודה השנייה לא תרוויח ממנו במלואו.
איך תאבחן שאילתה איטית?
משתמשים ב-EXPLAIN (או EXPLAIN ANALYZE) כדי לראות את תוכנית הביצוע: האם יש סריקה מלאה, אילו אינדקסים בשימוש, ומהם צווארי הבקבוק. משם מחליטים על הוספת אינדקס, שכתוב שאילתה, או שינוי סכמה.
מהו N+1 Query Problem?
בעיה שבה מריצים שאילתה אחת לקבלת רשימה, ואז שאילתה נוספת לכל פריט ברשימה — סך N+1 שאילתות. הפתרון: JOIN יחיד או eager loading שמביא את כל הנתונים בשאילתה אחת.
עיצוב סכמה ונרמול
מהו נרמול (Normalization) ומה מטרתו?
נרמול הוא ארגון הנתונים לטבלאות כדי לצמצם כפילות ותלויות. הוא מונע חוסר עקביות ואנומליות בעדכון, אך עלול לדרוש יותר JOINs. הצורות הנפוצות הן 1NF, 2NF ו-3NF.
מתי דווקא כדאי לבצע Denormalization?
כשביצועי קריאה קריטיים ו-JOINs רבים מאטים את המערכת, מכפילים בכוונה נתונים כדי לחסוך JOINs. נפוץ במחסני נתונים ובמערכות אנליטיקה, במחיר של ניהול עקביות הכפילות.
מה ההבדל בין Primary Key ל-Foreign Key?
Primary Key מזהה ייחודית כל שורה בטבלה ואינו יכול להיות NULL. Foreign Key הוא עמודה שמפנה ל-Primary Key בטבלה אחרת, ובכך אוכף את שלמות הקשרים בין הטבלאות.
מה ההבדל בין CHAR ל-VARCHAR?
CHAR הוא באורך קבוע — משלים ברווחים עד לאורך המוגדר, מתאים לערכים באורך אחיד. VARCHAR הוא באורך משתנה ושומר רק את התווים בפועל, יעיל יותר כשהאורך משתנה.
טרנזקציות ועקביות
מהן תכונות ACID?
Atomicity (הכול או כלום), Consistency (המסד עובר בין מצבים תקינים), Isolation (טרנזקציות מקבילות לא משבשות זו את זו), ו-Durability (שינוי שאושר נשמר גם לאחר קריסה). אלה מבטיחות אמינות נתונים.
מהי טרנזקציה ומתי משתמשים בה?
יחידת עבודה שמאגדת מספר פעולות שחייבות להצליח או להיכשל יחד. שימוש קלאסי: העברת כסף בין חשבונות — החיוב והזיכוי חייבים לקרות יחד, אחרת מבצעים ROLLBACK.
מהו Deadlock וכיצד מתמודדים איתו?
מצב שבו שתי טרנזקציות ממתינות זו למשאב שנעול על ידי השנייה, ואף אחת לא מתקדמת. המנוע מזהה זאת ומבטל אחת מהן. מפחיתים סיכון בגישה לטבלאות בסדר עקבי ובטרנזקציות קצרות.
SQL מול NoSQL
מתי לבחור מסד נתונים רלציוני ומתי NoSQL?
רלציוני (PostgreSQL, MySQL) מתאים לנתונים מובנים עם קשרים ודרישת ACID חזקה. NoSQL מתאים לסקיילינג אופקי, נתונים לא-מובנים או משתנים, ותפוקה גבוהה. הבחירה תלויה בדרישות העקביות והמבנה.
מהי שאילתת תת-שאילתה (Subquery) ומתי היא שימושית?
שאילתה מקוננת בתוך שאילתה אחרת, שמשמשת לחישוב ביניים או לסינון לפי תוצאה של שאילתה נוספת. לעיתים ניתן לשכתב אותה כ-JOIN לשיפור ביצועים, בהתאם למנוע.
פונקציות חלון ותכונות מתקדמות
מהי Window Function וכיצד היא שונה מ-GROUP BY?
Window function מחשבת ערך מצטבר על "חלון" שורות מבלי לכווץ אותן לשורה אחת, כך שכל שורה שומרת את פרטיה לצד החישוב. GROUP BY לעומת זאת מקבץ ומצמצם. לכן window מתאימה לדירוגים ולסיכומים רצים.
מה ההבדל בין ROW_NUMBER, RANK ל-DENSE_RANK?
ROW_NUMBER נותן מספר רץ ייחודי. RANK נותן אותו דירוג לערכים שווים אך "מדלג" על המספרים הבאים. DENSE_RANK נותן אותו דירוג לשווים בלי לדלג. ההבדל מתגלה כשיש תיקו בערכים.
מהו CTE (Common Table Expression) ומתי כדאי להשתמש בו?
CTE הוא בלוק WITH שמגדיר תוצאת ביניים בעלת שם, שאפשר להתייחס אליה בשאילתה הראשית. הוא משפר קריאות, מפרק שאילתות מורכבות לשלבים, ותומך ברקורסיה (למשל מעבר על עץ היררכי).
מהו View ומה היתרון שלו?
View הוא שאילתה שמורה שמתנהגת כטבלה וירטואלית. הוא מפשט שאילתות חוזרות, מסתיר מורכבות, ומגביל חשיפת עמודות רגישות. חשוב לזכור ש-view רגיל אינו מאחסן נתונים — הוא רץ בכל גישה.
שאלות מעשיות
איך תמצא רשומות כפולות בטבלה?
משתמשים ב-GROUP BY על העמודות שמגדירות כפילות יחד עם HAVING COUNT(*) > 1. זה מחזיר את קבוצות הערכים שמופיעים יותר מפעם אחת, ומשם אפשר להחליט אילו למחוק.
איך תשלוף את השכר השני בגובהו מטבלה?
אפשר להשתמש בפונקציית חלון: DENSE_RANK() OVER (ORDER BY salary DESC) ולסנן לדירוג 2. חלופה קלאסית היא תת-שאילתה שמחזירה את המקסימום מבין הערכים הנמוכים מהמקסימום הכללי. שתי הגישות מדגימות שליטה מעבר ל-SELECT בסיסי.
איך תחשב סכום רץ (running total)?
עם window function: SUM(amount) OVER (ORDER BY date). זה מחזיר לכל שורה את הסכום המצטבר עד אותה נקודה. זו שאלה נפוצה שבודקת אם אתם מכירים חלונות ולא רק GROUP BY.
איך תמצא לקוחות בלי אף הזמנה?
LEFT JOIN בין לקוחות להזמנות עם סינון WHERE order_id IS NULL, או תת-שאילתה עם NOT EXISTS. שתי הגישות מדגימות הבנה של anti-join — תרחיש קלאסי בראיונות.
רמות בידוד בטרנזקציות — טבלת ייחוס
שאלות על isolation levels נפוצות בתפקידי Backend ודאטה. הטבלה מסכמת אילו תופעות כל רמה מונעת:
| רמת בידוד | Dirty Read | Non-repeatable Read | Phantom Read |
|---|---|---|---|
| Read Uncommitted | אפשרי | אפשרי | אפשרי |
| Read Committed | נמנע | אפשרי | אפשרי |
| Repeatable Read | נמנע | נמנע | אפשרי |
| Serializable | נמנע | נמנע | נמנע |
טעויות נפוצות בראיון SQL
גם מי ששולט בתחביר נכשל לעיתים על אותם דפוסים:
- בלבול בין WHERE ל-HAVING: ניסיון לסנן פונקציית צבירה ב-WHERE הוא טעות תחבירית קלאסית.
- שכחת NULL: NULL אינו שווה לכלום, גם לא ל-NULL. תנאי = NULL תמיד יחזיר ריק במקום IS NULL.
- הנחה ש-INNER JOIN מתאים תמיד: כשצריך לכלול שורות ללא התאמה, INNER JOIN מפיל אותן בשקט — כאן צריך LEFT JOIN.
- התעלמות מביצועים: לכתוב שאילתה נכונה בלי לחשוב על אינדקסים ו-EXPLAIN נראה חלקי בעיני מראיין.
- SELECT * בפרודקשן: שליפת כל העמודות ללא צורך מבזבזת רשת וזיכרון ומסגירה חוסר תשומת לב לביצועים.
צ'קליסט הכנה לראיון SQL
ודאו כיסוי של הנקודות הבאות לפני הראיון:
- לתרגל כתיבת שאילתות אמיתיות מול מסד נתונים — לא רק לקרוא עליהן.
- לשלוט בכל סוגי ה-JOIN ולהסביר מתי כל אחד מתאים.
- להבין אינדקסים: מתי עוזרים, מתי לא, וכיצד לקרוא פלט EXPLAIN.
- לרענן GROUP BY מול HAVING, ותת-שאילתות מול JOIN.
- לתרגל window functions: ROW_NUMBER, RANK וסכום רץ.
- לזכור את תכונות ACID ואת ההתנהגות של NULL.
איך להתכונן לראיון SQL
הדרך הטובה ביותר היא לתרגל כתיבת שאילתות אמיתיות מול מסד נתונים, במיוחד JOINs, GROUP BY ואופטימיזציה עם EXPLAIN. SQL רלוונטי כמעט לכל תפקיד טכני — ראו משרות SQL, משרות PostgreSQL, ואת כלל המשרות. אם אתם בכיוון דאטה, ראו גם קריירת Data Engineer בישראל ושאלות ראיון Data Engineer.
שאלות נפוצות
אילו שאלות SQL הכי נפוצות בראיונות?
ההבדל בין סוגי JOIN, שימוש ב-GROUP BY ו-HAVING, ואופטימיזציה עם אינדקסים. עם 133 משרות SQL פתוחות בישראל, כמעט כל ראיון טכני כולל לפחות שאלה אחת על SQL — לרוב גם משימת כתיבת שאילתה בפועל.
האם צריך לדעת SQL גם למשרות שאינן דאטה?
כן. מפתחי Backend, מהנדסי QA, מנתחי מוצר ואנשי DevOps נדרשים לעיתים קרובות לשאילתות SQL. זהו כישור רוחבי שמעלה את הערך שלכם כמעט בכל תפקיד טכני.
מה ההבדל בין PostgreSQL ל-MySQL מבחינת ראיון?
ברמת התחביר הבסיסי הם דומים מאוד. PostgreSQL נחשב עשיר יותר בפיצ'רים מתקדמים (JSON, window functions, סוגי נתונים). לראיון, שליטה ב-SQL סטנדרטי חשובה יותר מהיכרות עם מנוע ספציפי.
האם שואלים על אופטימיזציה בראיון SQL?
בתפקידים בכירים ובכיוון דאטה — בהחלט. מצפים שתדעו לזהות שאילתה איטית עם EXPLAIN, להוסיף אינדקס נכון, ולהבין את בעיית ה-N+1. בתפקידי כניסה הדגש יותר על נכונות מאשר על ביצועים.
מהי הדרך הטובה ביותר לתרגל SQL לראיון?
לעבוד מול מסד נתונים אמיתי עם נתונים לדוגמה ולפתור בעיות מדורגות — מ-JOIN בסיסי ועד window functions. פלטפורמות תרגול אינטראקטיביות שמריצות את השאילתה מיד עדיפות על קריאה פסיבית.
האם צריך לדעת NoSQL לראיון SQL?
לא לעומק, אך כדאי להבין מתי בוחרים רלציוני מול NoSQL ומהן ההשלכות על עקביות וסקייל. שאלה השוואתית כזו נפוצה ומדגימה ראייה ארכיטקטונית רחבה.