Menu

פקודות SQL: רשימת פקודות SQL נפוצות עם דוגמאות

פקודות ה-SQL שמשתמשים בהן כל יום, מקובצות לפי מה שהן עושות (DDL, DML, DQL ו-TCL), וכל אחת עם דוגמה שאפשר להריץ ב-SQLite.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

פקודות SQL במבט אחד

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

פקודהקבוצהמה היא עושה
CREATE TABLEDDLמגדירה טבלה חדשה ואת העמודות שלה
ALTER TABLEDDLמוסיפה עמודה או משנה את שמה, או משנה את שם הטבלה
DROP TABLEDDLמוחקת טבלה ואת כל השורות שלה
INSERTDMLמוסיפה שורות חדשות
UPDATEDMLמשנה ערכים בשורות קיימות
DELETEDMLמסירה שורות
SELECTDQLקוראת שורות, מסננת עם WHERE וממיינת עם ORDER BY
BEGIN, COMMIT, ROLLBACKTCLמקבצות שינויים כך שיצליחו או ייכשלו יחד

DDL היא שפת הגדרת נתונים (data definition language), DML היא שפת טיפול בנתונים (data manipulation language), DQL היא שפת שאילתות (data query language) ו-TCL היא שפת בקרת טרנזקציות (transaction control language). השמות פחות חשובים מהחלוקה: DDL משנה את הצורה של מסד הנתונים, ו-DML משנה את מה שבתוכו.

CREATE TABLE: הגדרת טבלה

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

העמוד על CREATE TABLE מסביר כללים כמו NOT NULL, UNIQUE ו-DEFAULT.

INSERT: הוספת שורות

INSERT INTO מוסיפה שורה אחת או כמה. רשמו את העמודות, ואז את הערכים באותו סדר.

עמודת ה-id התמלאה מעצמה: INTEGER PRIMARY KEY מקבל את המספר הבא כשמשמיטים אותו. עוד על זה ב-INSERT.

SELECT: קריאת שורות

SELECT היא הפקודה שתכתבו הכי הרבה. בחרו את העמודות, סננו שורות עם WHERE ומיינו אותן עם ORDER BY.

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

UPDATE: שינוי שורות

UPDATE קובעת ערכים חדשים בשורות שכבר קיימות. פסוקית ה-WHERE קובעת באילו שורות מדובר, ואם משמיטים אותה, כל שורה משתנה.

כשאתם לא בטוחים למה פסוקית WHERE מתאימה, הריצו אותה קודם כ-SELECT. העמוד על UPDATE מראה עוד דפוסים.

DELETE: הסרת שורות

DELETE FROM מסירה את השורות שמתאימות לפסוקית ה-WHERE שלה. כמו UPDATE, היא משפיעה על כל שורה אם הפסוקית חסרה.

השורה של Chen נעלמה והשאר לא נפגעו. ראו DELETE.

ALTER TABLE ו-DROP TABLE: שינוי או הסרה של טבלה

ALTER TABLE משנה טבלה קיימת בלי לאבד את השורות שלה. DROP TABLE מסירה את הטבלה לגמרי.

עמודה חדשה מתחילה כ-NULL בשורות קיימות עד שממלאים אותה. ALTER ו-DROP TABLE מפרט מה SQLite מאפשרת.

JOIN: שילוב טבלאות

JOIN קורא שורות משתי טבלאות בבת אחת, לפי התאמה בעמודה משותפת.

ל-Boris אין הרשמות, ולכן INNER JOIN משאיר אותו בחוץ. LEFT JOIN היה שומר אותו, עם קורס ריק.

GROUP BY: סיכום שורות

GROUP BY מכווץ שורות שחולקות ערך לשורה אחת, ופונקציית צבירה כמו COUNT או AVG מסכמת כל קבוצה.

פונקציות צבירה ו-GROUP BY ו-HAVING מעמיקים יותר.

BEGIN, COMMIT ו-ROLLBACK: קיבוץ שינויים

טרנזקציה גורמת לכמה שינויים להיחשב כאחד. COMMIT שומרת את כולם, ו-ROLLBACK מבטלת את כולם.

ההעברה בוצעה, והשינוי השני בוטל, כך ש-Ada מסיימת עם 70 ו-Boris עם 80. טרנזקציות מסביר מתי להשתמש בהן.

במה SQLite שונה

הפקודות בעמוד הזה הן SQL תקני, ומה שלומדים כאן עובר גם ל-MySQL ול-PostgreSQL. הדוגמאות להרצה כתובות ל-SQLite, ושלושה פרטים משתנים במסדי הנתונים הגדולים יותר:

  • רשימת הטבלאות. הדוגמאות קוראות את sqlite_master, טבלת הסכמה של SQLite עצמה. MySQL משתמשת ב-SHOW TABLES, ו-PostgreSQL משתמשת ב-view information_schema.tables (או ב-\dt ב-psql).
  • מזהים אוטומטיים. עמודה שמוצהרת כ-INTEGER PRIMARY KEY ממספרת שורות חדשות בעצמה ב-SQLite, ולכן דוגמאות ה-INSERT משמיטות את id. MySQL צריכה AUTO_INCREMENT על העמודה, ו-PostgreSQL צריכה עמודת identity (GENERATED BY DEFAULT AS IDENTITY) או SERIAL.
  • הרשאות ושינויי סכמה. ל-SQLite אין GRANT או REVOKE, כי מסד נתונים של SQLite הוא קובץ יחיד בלי חשבונות משתמשים, וה-ALTER TABLE שלה לא יכול לשנות טיפוס של עמודה.

שאלות נפוצות

מהן פקודות ה-SQL הבסיסיות?

חמש פקודות מכסות את רוב העבודה היומיומית: CREATE TABLE להגדרת טבלה, INSERT להוספת שורות, SELECT לקריאתן, UPDATE לשינוין ו-DELETE להסרתן. אחריהן באות ALTER TABLE, DROP TABLE, JOIN, GROUP BY ופקודות הטרנזקציה BEGIN, COMMIT ו-ROLLBACK.

מה ההבדל בין DDL ל-DML?

DDL (שפת הגדרת נתונים) משנה את המבנה של מסד הנתונים: CREATE, ALTER ו-DROP. DML (שפת טיפול בנתונים) משנה את השורות שבתוך הטבלאות: INSERT, UPDATE ו-DELETE. SELECT רק קוראת, ולכן היא מופיעה לעתים קרובות בנפרד בתור DQL.

האם פקודות SQL רגישות לאותיות גדולות וקטנות?

לא. SELECT, select ו-Select כולן עובדות. כתיבת מילות מפתח באותיות גדולות היא מוסכמה שגורמת להן לבלוט מול שמות טבלאות ועמודות. עם זאת, טקסט בתוך מרכאות מושווה בדיוק, ולכן 'Ada' ו-'ada' הן מחרוזות שונות ב-SQLite, אלא אם מבקשים השוואה שלא מבחינה ברישיות.

האם הפקודות האלה עובדות אותו דבר ב-MySQL וב-PostgreSQL?

הפקודות הן SQL תקני ומשמעותן זהה בשלושתם, כך שמה שלומדים כאן עובר הלאה. הדוגמאות להרצה כתובות ל-SQLite: כאן רשימת הטבלאות נקראת מ-sqlite_master, מזהים אוטומטיים דורשים AUTO_INCREMENT ב-MySQL או עמודת identity ב-PostgreSQL, ול-SQLite אין GRANT או REVOKE.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל