חיפוש

מדריך SQLite מקיף

מסד נתונים קל ועוצמתי - מיסודות ועד מתקדם

יסודות SQLite

💡 מה זה SQLite?
SQLite הוא מסד נתונים קל משקל שלא דורש שרת נפרד - הכל בקובץ אחד! הוא מושלם לאפליקציות מובייל, אתרים קטנים, ופרויקטים אישיים. SQLite משמש במיליארדי מכשירים ברחבי העולם.

פקודות בסיסיות

פתיחת/יצירת מסד נתונים:

sqlite3 database.db

הצגת כל הטבלאות:

.tables

הצגת מבנה טבלה:

.schema table_name

יציאה:

.quit

הצגה מסודרת של תוצאות:

.mode column .headers on

יצירת טבלאות

CREATE TABLE

טבלה בסיסית:

CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE, age INTEGER, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );
טיפוסי נתונים ב-SQLite:
• INTEGER - מספרים שלמים
• REAL - מספרים עשרוניים
• TEXT - טקסט
• BLOB - נתונים בינאריים
• NULL - ערך ריק

מחיקת טבלה:

DROP TABLE IF EXISTS users;

שינוי טבלה - הוספת עמודה:

ALTER TABLE users ADD COLUMN phone TEXT;

הוספת נתונים (INSERT)

הכנסת רשומות

הכנסה בסיסית:

INSERT INTO users (name, email, age) VALUES ('Alice', 'alice@example.com', 25);

הכנסת מספר רשומות:

INSERT INTO users (name, email, age) VALUES ('Bob', 'bob@example.com', 30), ('Charlie', 'charlie@example.com', 28), ('Diana', 'diana@example.com', 22);

הכנסה עם כל העמודות:

INSERT INTO users VALUES (NULL, 'Eve', 'eve@example.com', 27, CURRENT_TIMESTAMP);

שאילתות SELECT

שאילתות בסיסיות

בחירת כל הנתונים:

SELECT * FROM users;

בחירת עמודות ספציפיות:

SELECT name, email FROM users;

סינון עם WHERE:

SELECT * FROM users WHERE age > 25;

מספר תנאים:

SELECT * FROM users WHERE age >= 25 AND age <= 30;

חיפוש בטקסט (LIKE):

SELECT * FROM users WHERE name LIKE 'A%';
% = כל דבר, _ = תו אחד

מיון והגבלה

מיון:

SELECT * FROM users ORDER BY age DESC;

הגבלת תוצאות:

SELECT * FROM users LIMIT 10;

דילוג והגבלה (pagination):

SELECT * FROM users LIMIT 10 OFFSET 20;

ערכים ייחודיים:

SELECT DISTINCT age FROM users;

עדכון ומחיקה

UPDATE

עדכון רשומה:

UPDATE users SET age = 26 WHERE name = 'Alice';

עדכון מספר שדות:

UPDATE users SET age = 31, email = 'bob.new@example.com' WHERE id = 2;
⚠️ זהירות!
UPDATE ללא WHERE יעדכן את כל הרשומות!

DELETE

מחיקת רשומה:

DELETE FROM users WHERE id = 5;

מחיקה עם תנאי:

DELETE FROM users WHERE age < 18;

מחיקת כל הנתונים:

DELETE FROM users;

JOIN - חיבור טבלאות

סוגי JOIN

INNER JOIN - רק רשומות תואמות:

SELECT users.name, orders.product FROM users INNER JOIN orders ON users.id = orders.user_id;

LEFT JOIN - כל המשתמשים גם ללא הזמנות:

SELECT users.name, orders.product FROM users LEFT JOIN orders ON users.id = orders.user_id;

חיבור מספר טבלאות:

SELECT u.name, o.product, p.amount FROM users u INNER JOIN orders o ON u.id = o.user_id INNER JOIN payments p ON o.id = p.order_id;

פונקציות

פונקציות צבירה (Aggregate)

ספירה:

SELECT COUNT(*) FROM users;

ממוצע, מינימום, מקסימום:

SELECT AVG(age), MIN(age), MAX(age) FROM users;

סכום:

SELECT SUM(price) FROM orders;

קיבוץ (GROUP BY):

SELECT age, COUNT(*) as count FROM users GROUP BY age;

סינון אחרי קיבוץ (HAVING):

SELECT age, COUNT(*) as count FROM users GROUP BY age HAVING count > 2;

פונקציות מחרוזות

אורך מחרוזת:

SELECT name, LENGTH(name) FROM users;

אותיות גדולות/קטנות:

SELECT UPPER(name), LOWER(email) FROM users;

חיתוך רווחים:

SELECT TRIM(name) FROM users;

חיבור מחרוזות:

SELECT name || ' - ' || email as full_info FROM users;

פונקציות תאריך ושעה

תאריך ושעה נוכחיים:

SELECT datetime('now');

תאריך בלבד:

SELECT date('now');

הוספת זמן:

SELECT datetime('now', '+7 days');

פורמט תאריך:

SELECT strftime('%d/%m/%Y', 'now');

אינדקסים (Indexes)

💡 למה אינדקסים?
אינדקסים מאיצים שאילתות באופן דרמטי, במיוחד בטבלאות גדולות. הם כמו תוכן עניינים בספר - מאפשרים למצוא מידע מהר יותר.

יצירה וניהול

יצירת אינדקס:

CREATE INDEX idx_users_email ON users(email);

אינדקס ייחודי:

CREATE UNIQUE INDEX idx_users_email_unique ON users(email);

אינדקס על מספר עמודות:

CREATE INDEX idx_users_name_age ON users(name, age);

מחיקת אינדקס:

DROP INDEX idx_users_email;

הצגת כל האינדקסים:

.indexes users

טרנזקציות (Transactions)

💡 מה זה טרנזקציה?
טרנזקציה היא קבוצת פעולות שמתבצעות ביחד - או שהכל מצליח, או שהכל נכשל. זה מבטיח שהמידע במסד הנתונים תמיד יהיה עקבי.

שימוש בטרנזקציות

טרנזקציה בסיסית:

BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;

ביטול טרנזקציה:

BEGIN TRANSACTION; DELETE FROM users WHERE age < 18; ROLLBACK; -- מבטל את כל השינויים
COMMIT - שומר את השינויים
ROLLBACK - מבטל את השינויים

נושאים מתקדמים

Views - תצוגות

יצירת View:

CREATE VIEW active_users AS SELECT id, name, email FROM users WHERE age >= 18;

שימוש ב-View:

SELECT * FROM active_users;

מחיקת View:

DROP VIEW active_users;

Subqueries - תת-שאילתות

תת-שאילתה ב-WHERE:

SELECT name FROM users WHERE age > (SELECT AVG(age) FROM users);

תת-שאילתה ב-FROM:

SELECT * FROM ( SELECT name, age FROM users WHERE age > 25 ) AS young_users;

EXISTS:

SELECT name FROM users u WHERE EXISTS ( SELECT 1 FROM orders o WHERE o.user_id = u.id );

CASE - תנאים

CASE WHEN:

SELECT name, age, CASE WHEN age < 18 THEN 'קטין' WHEN age < 65 THEN 'בוגר' ELSE 'פנסיונר' END as category FROM users;

ייצוא וייבוא

ייצוא לקובץ CSV:

.mode csv .output users.csv SELECT * FROM users; .output stdout

ייבוא מקובץ CSV:

.mode csv .import users.csv users

גיבוי מסד נתונים:

.backup backup.db

שחזור מגיבוי:

.restore backup.db

אופטימיזציה

ניתוח שאילתה:

EXPLAIN QUERY PLAN SELECT * FROM users WHERE email = 'test@example.com';

ניקוי ואופטימיזציה:

VACUUM;

ניתוח לשיפור ביצועים:

ANALYZE;