# מערך שיעור: SQL בסיסי📋 מערך מרצה

משך: 2.5 שעות אקדמיות (113 דקות).

מטרת השיעור: הסטודנטים יכירו את חמש פקודות ה-SQL הבסיסיות (CREATE TABLE, INSERT, SELECT, UPDATE, DELETE) ויתרגלו אותן בפועל על מסד נתונים אמיתי, לפני שנוגעים בעיצוב טבלאות מתקדם או ב-EF Core.

בסוף השיעור הסטודנטים צריכים: לבנות טבלה בסיסית, להוסיף/לקרוא/לעדכן/למחוק שורות בה עם SQL גולמי, ולהבין למה `WHERE` הוא קריטי ב-`UPDATE`/`DELETE`.

דגש קריטי: זהו שיעור היסודות של כל היחידה — סטודנט שלא מרגיש בטוח עם `SELECT`/`WHERE` בסיסי כאן, ייתקע הרבה יותר בשיעור העיצוב ובוודאי ב-EF Core. הקדישו זמן אמיתי לתרגול ידני מול מסד נתונים אמיתי (למשל דרך Azure Data Studio / SSMS / כל כלי GUI פשוט), לא רק קריאת שקופיות.

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 8 דקות | הזכירו: `List<T>` נעלם כשהתוכנית נסגרת — SQL הוא הפתרון לכך |
| CREATE TABLE | 15 דקות | עמודות, טיפוסים בסיסיים, PRIMARY KEY + IDENTITY (בלי להעמיק ב-FK — זה בשיעור הבא) |
| INSERT + SELECT | 25 דקות | הוספת שורות, קריאת הכול, קריאת עמודות ספציפיות |
| WHERE + ORDER BY | 25 דקות | סינון והשוואה ל-`if`/`&&`/`||` שכבר מוכר; מיון עולה/יורד |
| UPDATE + DELETE | 20 דקות | הדגישו בכוח את הסכנה בלי `WHERE` — ראו "תרגיל חשיבה" למטה |
| תרגול מודרך | 20 דקות | תרגיל 1+2 + התחלת הפרויקט המסכם |

---

## דגשים להעברת השיעור

- זהו שיעור ידיים-על-המקלדת יותר מכל שיעור תיאוריה — כל פקודה שמוצגת צריכה לרוץ בפועל מול מסד נתונים אמיתי (גם אם ריק/לדוגמה), לא רק להיקרא משקופית.
- הדגישו את ההבדל בין `SELECT` (קריאה בלבד, בטוח להריץ כמה פעמים שרוצים) לבין `INSERT`/`UPDATE`/`DELETE` (משנים נתונים בפועל) — זו הבחנה שתחזור ב-HTTP Methods וב-DAL Pattern ביחידות הבאות.
- אל תדלגו על התרגול של `UPDATE`/`DELETE` בלי `WHERE` בכוונה (בסביבת תרגול מבודדת/לדוגמה בלבד!) — לראות בעיניים איך כל הטבלה מתעדכנת/נמחקת שווה יותר מכל אזהרה מילולית.

---

## מושגים

**Database** — מקום ששומר מידע לצמיתות.
**Table** — עמודות קבועות + שורות, כמו גיליון אקסל.
**Row / Column** — רשומה בודדת / שדה קבוע בטבלה.
**Query** — פקודת SQL בודדת.
**Primary Key** — עמודה שמזהה כל שורה בייחודיות (יורחב בשיעור הבא).

---

## תרגיל חשיבה

**שאלת פתיחה:** "מה ההבדל בין `DELETE FROM Students WHERE Id = 2;` לבין `DELETE FROM Students;` — ולמה SQL לא מתריע כשמריצים את השנייה?"

**מהלך:** הובילו לתובנה: SQL לא "יודע" שהתכוונתם למחוק שורה אחת — הוא רק מבצע בדיוק את מה שנכתב. בלי `WHERE`, אין הגבלה, אז "כל השורות" הוא לא מקרה מיוחד — הוא פשוט המצב הרגיל כשאין תנאי. זו אחריות הכותב, לא בדיקה של השפה.

**מה המרצה מראה בסוף:** בסביבת תרגול מבודדת (טבלת דוגמה לא-חשובה!), הריצו `SELECT * FROM Students WHERE Age > 20;` ואז את אותו `WHERE` בתוך `UPDATE`/`DELETE`, כדי להראות טכניקת עבודה בטוחה: קודם בודקים עם `SELECT` אילו שורות ייפגעו, ורק אז מריצים את השינוי בפועל עם אותו תנאי.
