לא ניתן היה לרענן את הגדרות ההקלדה. טען מחדש את הדף כדי לנסות שוב.
שיעור הקלדה: תכנות בשפה SQL
כללי חישוב הדיוק השתנו. התרגיל הזה מתחיל שוב מההתחלה.
לא ניתן היה לאשר שהתרגול שהשלמת נשמר. נסה לשמור שוב בלי להקליד מחדש.
שיעור הקלדה: תכנות בשפה SQL
הקלדה עיוורת חשובה בתכנות. שימוש בטכניקות הקלדה מהירה מאפשר לך לכתוב קוד ביעילות רבה יותר בשפת התכנות SQL.
תכנות ב-SQL והקלדה עיוורת
לימוד SQL ותרגול הקלדה עיוורת משתלבים בצורה טבעית. שאילתות SQL מלאות בסוגריים, פסיקים, אופרטורים ומרכאות. טעויות קטנות, כמו מרכאות לא נכונות או נקודה-פסיק שנשכחה, עלולות לגרום לכל השאילתה להיכשל. כשכותבים SQL, חשוב לדעת אילו חלקים מהתחביר משותפים למערכות שונות ואילו ייחודיים לכל מערכת. מאמר זה מתמקד בעיקר ב-PostgreSQL, אך מזכיר גם את MySQL, SQLite ו-SQL Server כאשר התחביר שונה.
מה מאפיין את תחביר ה-SQL?
SQL (Structured Query Language) היא שפה דקלרטיבית. במקום לתאר שלב אחר שלב כיצד לשלוף נתונים, מצהירים אילו נתונים רוצים. כמעט כל פקודה מתחילה במילת מפתח כמו SELECT, INSERT או UPDATE. סדר החלקים קבוע: SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY .... PostgreSQL ו-MySQL חולקות את אותו סדר, כך שאם לומדים אותו במערכת אחת, ניתן ליישם אותו גם באחרת.
SELECT id, name
FROM customers
WHERE active = true
ORDER BY created_at DESC;
תווים מיוחדים שנעשה בהם שימוש תדיר
SQL עשירה בסימני פיסוק. סוגריים () תוחמים ארגומנטים של פונקציות ומקבצים תנאים. פסיקים , מפרידים בין עמודות. נקודה . משמשת לשמות סכימה וטבלאות, כמו public.users. גרשיים יחידים '...' מסמנים מחרוזות. PostgreSQL משתמשת בגרשיים כפולים "..." למזהים, בעוד MySQL משתמשת בסימן backtick `...`. ב-SQL Server מופיעים גם סוגריים מרובעים [...]. אימון עם הסימנים האלו עוזר להקליד שאילתות ללא טעויות.
-- מחרוזת טקסט
SELECT * FROM books WHERE title = 'War and Peace';
-- מזהים עם רווחים (PostgreSQL)
SELECT "Order ID", "Customer Name" FROM orders;
אותיות גדולות וקטנות
על פי מוסכמה, מילות מפתח ב-SQL נכתבות לרוב באותיות גדולות: SELECT, FROM, WHERE. זה מקל על זיהוין, אך זה לא חובה. ב-PostgreSQL מזהים ללא גרשיים מומרים לאותיות קטנות, כך ש-MyTable ו-mytable ייחשבו לאותו הדבר. ב-MySQL, ההבחנה בין אותיות גדולות לקטנות בשמות מסדי נתונים וטבלאות תלויה במערכת ההפעלה ובהגדרות השרת. לתרגול, נהוג להשתמש באותיות גדולות כדי להדגיש את מבנה השאילתה.
נקודה-פסיק וסיום משפט
ב-SQL, נקודה-פסיק ; מסיימת פקודה. כלים אינטראקטיביים כמו psql, לקוח MySQL ומעטפת SQLite ממתינים בדרך כלל לתו הזה לפני ביצוע הפקודה. ב-psql אפשר גם לשלוח את השאילתה הנוכחית באמצעות \g. אם מופיעה בקשה להזין עוד טקסט במקום תוצאה, כדאי לבדוק אם הפקודה הסתיימה.
שאילתות SELECT ו-joins
כתיבת שאילתות כוללת לעיתים קרובות כתיבת joins. PostgreSQL משתמשת ב-INNER JOIN, LEFT JOIN, RIGHT JOIN. בדוגמה הבאה, תנאי הצירוף מופיע אחרי מילת המפתח ON. יש גם צירופים שמשתמשים ב-USING או ב-NATURAL. רווח חסר או טעות קטנה בתנאי יכולים לשבור את השאילתה. תרגול joins עוזר לדיוק עם סימנים כמו = ו-..
SELECT c.id, c.name, o.amount
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id
WHERE o.amount > 100;
פונקציות וביטויים
PostgreSQL כוללת פונקציות רבות כמו COUNT(), SUM(), AVG(). סוגריים נדרשים תמיד. פונקציות תאריך ושעה כמו NOW() או DATE_TRUNC() זמינות ב-PostgreSQL; הזמינות ואופן הפעולה שלהן משתנים בין מסדי נתונים. ל-MySQL יש מקבילות כמו CURDATE() או DATE_FORMAT(). הקלדה נכונה שלהן דורשת תשומת לב לקווים תחתיים, פסיקים וסוגריים.
SELECT DATE_TRUNC('month', created_at) AS month,
COUNT(*) AS orders
FROM orders
GROUP BY month
ORDER BY month;
INSERT, UPDATE, DELETE
פקודות שמשנות נתונים כוללות סימני פיסוק רבים. INSERT משתמשת בסוגריים ופסיקים לעמודות וערכים. UPDATE משתמשת ב-= להשמת ערכים ובפסיקים להפרדה בין ההשמות. DELETE משלבת מילות מפתח ותנאים. מבנים אלו כמעט זהים ב-PostgreSQL, MySQL, SQLite ו-SQL Server, אך לכל אחד יש כללי ציטוט שונים.
INSERT INTO users (id, name, email)
VALUES (1, 'Alice', 'a@example.com');
UPDATE users
SET name = 'Bob', email = 'bob@example.com'
WHERE id = 1;
DELETE FROM users WHERE id = 2;
Common Table Expressions (CTE)
PostgreSQL עושה שימוש רב ב-CTE שמתחילות עם WITH. מבנים אלו כוללים הרבה סוגריים ופסיקים, ולכן מהווים תרגול מצוין. גם MySQL, SQLite ו-SQL Server תומכים ב-CTE. כדאי לבדוק שלכל סוגר פותח יש סוגר מסיים תואם.
WITH recent_orders AS (
SELECT * FROM orders WHERE created_at > NOW() - INTERVAL '30 days'
)
SELECT customer_id, COUNT(*) AS order_count
FROM recent_orders
GROUP BY customer_id;
פונקציות חלון
PostgreSQL ידועה בפונקציות החלון המתקדמות שלה. התחביר הטיפוסי OVER (PARTITION BY ... ORDER BY ...) דורש הקלדה מדויקת של סוגריים ומילות מפתח. גם MySQL וגם SQL Server תומכים בפונקציות חלון. הדוגמה הבאה משתמשת בתחביר PostgreSQL.
SELECT customer_id,
SUM(amount) OVER (PARTITION BY customer_id ORDER BY created_at) AS running_total
FROM payments;
פרמטרים ו-placeholders
באפליקציות, מצייני הפרמטרים תלויים גם במסד הנתונים וגם בדרייבר. פקודות מוכנות בתחביר המקורי של PostgreSQL משתמשות ב-$1, $2, פקודות מוכנות ב-MySQL ושאילתות SQLite יכולות להשתמש ב-?, וב-SQL Server יש פרמטרים עם שמות כמו @p1. דרייבר עשוי לדרוש תחביר אחר, למשל %s ב-Psycopg. כדאי לבדוק בתיעוד שלו, כי קל לטעות בהקלדת הסמלים הקטנים האלה.
-- PostgreSQL
SELECT * FROM users WHERE id = $1;
-- MySQL
SELECT * FROM users WHERE id = ?;
סיכום
על פי מוסכמה, מילות מפתח ב-SQL נכתבות באותיות גדולות. PostgreSQL ממירה מזהים שאינם מוקפים במרכאות כפולות לאותיות קטנות; במערכות אחרות הכללים שונים. PostgreSQL מוסיפה גרשיים כפולים למזהים, placeholders $n, CTE ופונקציות חלון. MySQL משתמשת ב-backticks וב-placeholders ?. SQL Server מציגה סוגריים מרובעים ופרמטרים עם @. SQLite שומרת על תחביר פשוט, אך דורשת דיוק. תרגול כתיבת שאילתות SQL מחזק דיוק עם סימני פיסוק, מילות מפתח וסמלים, ומיקוד ב-PostgreSQL מספק ניסיון עם אחד ממסדי הנתונים הנפוצים ביותר כיום.