לדלג לתוכן

הקדמה - מסד נתונים - Database

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

שפת שליפה - Query language

  • המון פעמים נרצה לכתוב תכנות שיודעות לדבר עם DB-ים.
    למשל: תוכנה ששומרת מידע בDB, שולפת מידע, מכניסה מידע, או מוחקת מידע.
  • תוכנות מתקשרות עם DB-ים באמצעות "שפת שליפה" או באנגלית query languege
  • שפת שליפה היא שפה שמטרתה לעזור לנו לעשות שליפות על הDB ועוד.
  • שפות שליפה פופלוריות הן למשל: SQL, NoSQL, GraphQL

סוגים שונים של מסדי נתונים

  • מסד נתונים רלציוני (טבלאי): מסד נתונים מסוג זה שומר את המידע בטבלאות, כדי לשלוף על מסדים מהסוג הזה נשתמש בשפת שליפה SQL, דוגמה של מסדי נתונים רלציונים: MySQL, PostgreSQL, SQLite
  • מסד נתונים א-רלציוני (לא טבלאי): מסד נתונים מסוג זה שומר מידע שלא נשמר טוב בטבלאות, יכול להיות מידע שנשמר כמו מילון, ג'סונים, ועוד. כדי לשלוף על מסדים מהסוג הזה נשתמש בשפת שליפה NoSQL, דוגמה של מסדי נתונים א-רלציונים: MongoDB, Cassandra.
  • מסדי נתונים מובני עצמים (אובייקטים): מסד נתונים ששומר מידע בצורה של אובייקט, דומה למסדים א-רלציונים, יש המון סוגים שונים של מסדים כאלה.

איך לבחור מסד נתונים לפרויקט שלך?

  • איזה סוג מידע אנחנו שומרים בפרויקט? מידע טבלאי או מידע לא טבלאי (מידע שבא יותר בצורת JSON)
  • כמה מידע אנחנו צריכים לשמור? איזה מסדי נתונים יכולים לשמור כמות כזו של מידע?
  • איזה סוגים של שליפות / מניפולציות אנחנו נרצה לעשות על המידע? איזה מסדי נתונים תומכים בזה?

שפת שליפה SQL

  • בהרצאה הזו נלמד על שליפות עם SQL ואיך להשתמש בSQL בפייתון עם הDB שנקרא MySql
  • זכרו - SQL זה בשביל DB-ים רלציונים, ממליץ מאוד בפרויקטים שלכם לבחור DB ושפת שליפות, ממליץ לנסות גם בעצמכם לנסות להשתמש בDB א-רלציוני כמו mongoDB עם שפת NoSQL

יצירת טבלה חדשה עם SQL

  • כדי לשמור מידע בDB אנחנו נצטרך לצור טבלה, הנה שאילת SQL שיוצרת טבלה
    CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, username TEXT, password TEXT)
    
  • הולך ליצור טבלה חדשה, עם 3 שדות.
    • מפתח id - זהו מזהה מיוחד לכל משתמש בטבלה (מספר שלם) (מפתח ראשי)
    • שם משתמש - שם המשתמש (טקסט)
    • סיסמה - הסיסמה של המשתמש (טקסט)
id username password

הכנסת מידע לטבלה

INSERT INTO users (username, password) VALUES ("Amit", "Password1")

- הוספנו ערך חדש לטבלה users עם הערכים שם username=Amit ו - password=Password1, הid (המפתח הראשי) מתווסף אוטומטית

שליפת מידע מהDB

SELECT username, password FROM users;

- זה ישלוף את כל השמות משתמשים, והסיסמאות מהטבלה users

username password
Amit Password1
Shir 123456
Ben iloveyou

SELECT username, password FROM users WHERE username="Amit"; 

- זה ישלוף את כל השמות משתמשים, והסיסמאות מהטבלה users כאשר השם משתמש שלהם הוא "Amit" (תנאים)

username password
Amit Password1

SELECT password FROM users WHERE username="Amit"; 

- שליפה של שדה ספציפי - במקרה זה password

password
Password1

SELECT * FROM users; 

- שליפה על כל הערכים בDB

id username password
1 Amit Password1
2 Shir 123456
3 Ben iloveyou

מחקית מידע מהDB

  • כדי למחוק מידע נכתוב שאילתת שליפה רגילה כמו מקודם, רק שבמקום SELECT נכתוב DELETE
    DELETE FROM users WHERE username = "Amit" AND password = "Password1";
    

שילוב טבלאות עם JOIN

כאשר יש לנו נתונים המפוצלים במספר טבלאות, נוכל לחבר ביניהם באמצעות JOIN:

INNER JOIN

מחזיר רק רשומות שיש להן התאמה בשתי הטבלאות:

SELECT users.username, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;

Pasted image 20250331223603.png

LEFT JOIN

מחזיר את כל הרשומות מהטבלה השמאלית, גם אם אין התאמה בטבלה הימנית:

SELECT users.username, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

RIGHT JOIN

מחזיר את כל הרשומות מהטבלה הימנית, גם אם אין התאמה בטבלה השמאלית:

SELECT users.username, orders.amount
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;

שילוב תוצאות עם UNION

מאפשר לשרשר תוצאות משאילתות שונות:

SELECT username FROM admins
UNION
SELECT username FROM customers;

Pasted image 20250331223633.png

פונקציות שימושיות ב-SQL

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

פונקציות מתמטיות

SELECT 
    COUNT(*) as total_users,
    AVG(age) as average_age,
    MAX(salary) as max_salary,
    MIN(salary) as min_salary,
    SUM(sales) as total_sales
FROM employees;

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

SELECT 
    CONCAT(first_name, ' ', last_name) as full_name,
    UPPER(username) as uppercase_username,
    LOWER(email) as lowercase_email,
    SUBSTRING(address, 1, 10) as short_address
FROM users;

פונקציות תאריך

SELECT 
    NOW() as current_datetime,
    DATE_FORMAT(birth_date, '%Y-%m-%d') as formatted_date,
    DATEDIFF(NOW(), join_date) as days_since_joining
FROM members;

המשיכו להתאמן על SQL עם האתר הבא:
https://sqliteonline.com/