SQL — DDL ו-DML
הוצג| English | משמעות |
|---|---|
| SQL/ˌes kjuː ˈel/ | שפת שאלות מבנית |
| Data Definition Language/ˈdeɪtə ˌdefɪˈnɪʃn ˈlæŋɡwɪdʒ/ | שפת הגדרת נתונים |
| Data Manipulation Language/ˈdeɪtə məˌnɪpjʊˈleɪʃn ˈlæŋɡwɪdʒ/ | שפת עיבוד נתונים |
| INNER JOIN/ˈɪnə dʒɔɪn/ | חיבור פנימי |
| aggregate functions/ˈæɡrɪɡeɪt ˈfʌŋkʃnz/ | פונקציות אגרגט |
השפה שמתכתיgrandparents גם השתמשו בה
- בשנת 1974 שני חוקרים של IBM עיצבו שפת שאלות לטבלאות של Codd וכינו לה SEQUEL: Structured English Query Language. השם קוצר ל-SQL, והשפה לעולם לא נעלמה.
- חמישים שנה לאחר מכן, כל בנק, חברת תעופה, בית חולים ואתר אינטרנט שתשתמש בהם פועל עליה. תלמיד שמקליד
SELECTהיום כותב את אותו פקודה שכתב מתכנת לפני שהוריו נולדו. - יש לה שני חלקים, ובמבחן מבקשים לקרוא את האחד ולכתוב את השניים: שפת הגדרת הנתונים הבונה את המבנה, ושפת עיבוד הנתונים שממלא, משנה ושואלת את הנתונים.
- שיעור זה הוא תת-קבוצת של SQL בתוכנית הלימודים, פקודה לפי פקודה, עם הציון שכל אחת נושאת.
DDL ו-DML
- ה-DBMS מבצע את כל יצירת ועריכה של המבנה של מסד הנתונים דרך ה-DDL: יצירת מסד נתונים, יצירת ושנוי טבלאות, הוספת מקדים.
- היא מבצעת כל השאלות ואת תחזוקת ה-נתונים דרך ה-DML: בחירה, הכנסה, עדכון ומחיקת שורות.
- SQL הוא הסטנדרט בתעשייה לשניהם. סיווג משפט לתחום הנכון הוא שאלה נפוצה בעלת סימן אחד:
CREATE TABLEהוא DDL,SELECTהוא DML.

מבנה בצד אחד, נתונים בצד השני
איזה מהבאים חלק מהשפה להגדרת נתונים (DDL)?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
DDL משנה את המבנה (CREATE, ALTER, DROP). SELECT/INSERT/UPDATE/DELETE הם DML (עבודה עם נתונים).
DDL מגדיר את המבנה (למשל CREATE TABLE), בעוד ש-DML עובד עם הנתונים הפנימיים בו (SELECT, INSERT, UPDATE, DELETE).
Difficulty 1/5 · 100 coins + a small bonus on first completion today
הגדרה מול עריכה: DDL מעצב את הטבלאות; DML קורא ומשנה את השורות.
DDL: יצירת המבנה
CREATE DATABASE Shop;
CREATE TABLE CUSTOMER (
CustomerID INTEGER,
Name VARCHAR(50),
Town VARCHAR(30),
Joined DATE,
Active BOOLEAN,
PRIMARY KEY (CustomerID)
);
ALTER TABLE CUSTOMER ADD Email VARCHAR(100);
- סוגי נתונים במסלול לימודים:
CHARACTER(מספר קבוע של תווים),VARCHAR(n)(עד n תווים),BOOLEAN,INTEGER,REAL,DATE,TIME. PRIMARY KEY (field)קורא שם למפתח;ALTER TABLE … ADDמוסיף מאפיין לטבלה קיימת.
התאם כל פריט נתונים לסוג הנתונים המתאים לו ב-SQL.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
שתי מצבים, טקסט אורך משתנה, מספר עם חלק עשרוני, תאריך לוח שנה. INTEGER מתאים לספירות שלמות ו-TIME לשעת יום.
דוגמה פתורה: שתי טבלאות עם מפתח זר
- כתוב את ה-SQL ליצירת טבלת
ORDERSעםOrderIDכמפתח ראשי,CustomerIDכמפתח זר ל-CUSTOMER, ושורתOrderDate.
CREATE TABLE ORDERS (
OrderID INTEGER,
CustomerID INTEGER,
OrderDate DATE,
PRIMARY KEY (OrderID),
FOREIGN KEY (CustomerID) REFERENCES CUSTOMER(CustomerID)
);
- הסימונים:
CREATE TABLEעם השם; כל מאפיין עם סוג מתאים; ה-PRIMARY KEY; ה-FOREIGN KEY … REFERENCESהקורא שם לטבלה גם לשדה שלה.
DML: שאלה באמצעות SELECT
SELECT Name, Town
FROM CUSTOMER
WHERE Town = 'London'
ORDER BY Name ASC;
SELECTמפרט את השדות להוצאה (*לכל),FROMקורא שם לטבלה,WHEREמשאיר רק שורות העונות לתנאי,ORDER BYמסדר את התוצאה,ASCאוDESC.- מחרוזות נכתבות בתוך סימני הוצאה (apostrophes); מספרים לא. השוואות:
=,<,>,<=,>=,<>; תנאים מחוברים בAND,OR,NOT;LIKE 'A%'מתאים טקסט שמתחיל באות A;BETWEEN 10 AND 20נותן טווח.

רק השורות שעוברות את WHERE מגיעות לתוצאות
איזה מילת מפתח ב-SQL משיבה נתונים מטבלה? (מילה אחת)
Difficulty 1/5 · 100 coins + a small bonus on first completion today
SELECT מפרטת את השדות להשבה; FROM מציינת את הטבלה.
הסעיף WHERE בהצהרת SELECT:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
WHERE מסנן שורות לפי תנאי; ORDER BY ממיין; רשימת SELECT בוחרת עמודות.
דוגמה פתורה: כתיבת השאלה
- כיתוב סקריפט SQL להדפסת שמות ומיילים של כל לקוחות פעילים במנצ'סטר, בסדר אלפביתי לפי שם.
SELECT Name, Email
FROM CUSTOMER
WHERE Town = 'Manchester' AND Active = TRUE
ORDER BY Name;
- נקודה אחת לכל: השדות הנכונים לאחר
SELECT; הטבלה הנכונה לאחרFROM; הWHEREעם שני התנאים והמחרוזת בתוך סימני הוצאה;ORDER BY Name. השתמש בשמות המדויקים של הטבלה והשדה שנתנה בשאלה.
הניחו את סעיפי פקודת SELECT בסדר הכתיבה שלהם.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
שדות, טבלה, סינון, מיון. ORDER BY נמצא תמיד באחרון, והפקודה מסתיימת בניקוד (סימון נקודה-פסיק).
שתי טבלות: INNER JOIN
SELECT CUSTOMER.Name, ORDERS.OrderDate
FROM CUSTOMER INNER JOIN ORDERS
ON CUSTOMER.CustomerID = ORDERS.CustomerID
WHERE ORDERS.OrderDate >= '2024-01-01';
- INNER JOIN משלב שורות משתי טבלות כאשר המקור הזר בטבלה האחת תואם למפתח הראשי בטבלה השנייה, המצוינים ב-clause ה
ON. - קדום שדה בשמו הטבלה כאשר אותו שם מופיע בשתי טבלות. הסיلابוס דורש שאילתות על עד שתי טבלות.
חיבור שתי טבלות באמצעות INNER JOIN
חיבור תואם שורות בהן המקרא הזר שווה למקרא הראשי — כאן Orders.CustomerID = Customer.CustomerID — ומשלב כל זוג תואם לשורה רחבה אחת.
INNER JOIN משמש ל:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
JOIN משלב שתי טבלות על בסיס קשר (בדרך כלל מפתח חיצוני התואם למפתח ראשי).
פונקציות אגרגט ו-GROUP BY
SELECT CustomerID, COUNT(*) AS NumOrders
FROM ORDERS
GROUP BY CustomerID;
SELECT AVG(Price) FROM PRODUCT;
SELECT SUM(Quantity) FROM ORDER_LINE WHERE OrderID = 1042;
- פונקציות אגרגט מסכמות מספר שורות לערך אחד:
COUNTספירת השורות,SUMחיבור כולל,AVGממוצע. GROUP BYיוצר שורת סיכום אחת לכל ערך בשדה: מספר ההזמנות לכל לקוח. ללא שימוש בזה, הפונקציה האגגרטי מסכמת את כל הטבלה.
מה מחזיר COUNT(*)?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
COUNT(*) סופר שורות; SUM/AVG/MIN/MAX הן הפונקציות האגרגטיות האחרות.
כדי להוציא את מספר ההזמנות של כל לקוח, השאלה דורשת: בחר את כולם שחל עליהם.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
ספור את השורות, קבוצה אחת לכל לקוח, מהטבלה הזמנות. סידור הוא אופציונלי.
שינוי נתונים: INSERT, UPDATE, DELETE
INSERT INTO CUSTOMER (CustomerID, Name, Town, Joined, Active)
VALUES (101, 'Ada Lovelace', 'London', '2024-03-01', TRUE);
UPDATE CUSTOMER SET Town = 'Bristol' WHERE CustomerID = 101;
DELETE FROM CUSTOMER WHERE CustomerID = 101;
INSERT INTO … VALUESמוסיף שורה: רשימת השדות, ולאחר מכן הערכים באותו סדר.UPDATE … SET … WHEREמעריך שורות התואמות.DELETE FROM … WHEREמוריד אותן.- תמיד יש לתת ל
UPDATEולDELETEclauseWHERE, אלא השינוי יפגע בכל שורה בטבלה.
מה קורה אם תפעיל UPDATE או DELETE ללא WHERE?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ללא WHERE, הפעולה מושפעת מכל השורות — טעות נפוצה ומסוכנת.
התאם כל פקודת DML למטרתה.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
SELECT קורא; INSERT מוסיף; UPDATE משנה; DELETE מסיר — ארבעת הפעלים המרכזיים ב-DML.
דוגמה פותרת: קריאת הפקודה
SELECT Name
FROM CUSTOMER INNER JOIN ORDERS
ON CUSTOMER.CustomerID = ORDERS.CustomerID
WHERE OrderDate = '2024-05-01'
ORDER BY Name DESC;
- הצג מה הסקריפט הזה מפיק. שמות כל הלקוחות שהגישו הזמנה ב-1 במאי 2024, שורה אחת לכל הזמנה כזו, בסדר אלפבית性的 יורד.
- קרא אותו בסדר ביצוע: חבר את הטבלות לפי מזהה לקוח, שמור את השורות ליום זה, הפק את השם, מיין יורד. לקוח עם שתי הזמנות באותו יום יופיע פעמיים.
סימונים נופלים מהיד
- מחרוזות בסימני הוצאה, מספרים ללא סימנים:
Town = 'London',CustomerID = 101. ORDER BYבא אחריWHERE; חיבור (join) דורש את clause הON; כל פקודה מסתיימת בנקודת-פסקה.COUNT(*)סופר שורות, לא ערכים ייחודיים; השאלה הקבוצתית דורשתGROUP BY.CREATE,ALTERוPRIMARY KEYהם DDL;SELECT,INSERT,UPDATE,DELETEהם DML. השתמש בשמות המדויקים שהשאלה נותנת.
הבנתך מושלמת
- DDL יוצר ומשנה את המבנה:
CREATE DATABASE,CREATE TABLEעם מאפיינים מסוגים,PRIMARY KEY,FOREIGN KEY … REFERENCES,ALTER TABLE … ADD· DML עובד עם הנתונים - סוגים:
CHARACTER,VARCHAR(n),BOOLEAN,INTEGER,REAL,DATE,TIME SELECT fields FROM table WHERE condition ORDER BY field;INNER JOIN … ONלשתי טבלות;COUNT,SUM,AVGעםGROUP BYלשורה אחת לכל קבוצהINSERT INTO … VALUES,UPDATE … SET … WHERE,DELETE FROM … WHERE: לעולם עדכון או מחיקה ללאWHERE