fbpx

01. יצירת Database, טבלאות ורשומות

הקדמה

בקורס זה נלמד לעבוד עם ממסד נתונים דרך SQL.

מה זה בכלל SQL? למה זה נועד?

שפת SQL הינה שפה ייעודית לצורך עבודה מול דאטה-בייס (להלן גם DB).

דאטה בייס זה כינוי למידע שיושב בצורה מאורגנת על דיסק במחשב (המחשב יכול להיות גם שרת כמובן).

בקורס זה נלמד ליצור דאטה בייס מסוג SQLite.

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

בשונה משרתי SQL כמו postgresql וכן mySQL, הדורשים הרצת תוכנה ברקע (שרת) שינהל את העבודה מול ה-DB, ב-sqlite זו פשוט ספריית קוד שיודעת לעבוד מול קובץ בודד. אין צורך בהרמת שרת.

sqlite מאפשרת יצירת מסד נתונים רלציוני, שזה אומר שאפשר יהיה ליצור קשרים בין טבלאות שונות. נבין זאת טוב יותר בהמשך, אבל על רגל אחת, אם יש לנו טבלה בנתונים שמייצגת “אנשים”, ויש לנו טבלה שמייצגת “תפקידים”, נוכל לקשר כל רשומה בטבלת התפקידים לרשומה בטבלת האנשים.

המונח RDBMS הוא קיצור של:

Relational Database Management System

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

כל שנצטרך לעשות זה:

				
					import sqlite3
				
			

לאחר מכן נוכל לשלוח “שאילתות” מסוג SQL מתוך קוד הפייתון שלנו.

אנו נלמד לעשות זאת בפרק ייעודי.

תחילה נלמד דווקא להריץ פקודות ל-DB דווקא מתוך שורת הפקודה (CLI) של תוכנת sqlite.

אז שלב ראשון נתחיל בלהתקין אותה.

 

התקנה

לצורך התקנה, ניגש לקישור הבא.

נחפש ונוריד את:

נעשה un-zip לתיקיה שירדה, ונזהה בתוכה את הקובץ הנושא את השם: sqlite3.exe

נוכל ללחוץ עליו בשביל להיכנס לממשק שורת הפקודה של התוכנה. (לחילופין, נוכל להפעיל קובץ זה מתוך ה-CMD של מערכת ההפעלה).

נצפה לראות לאחר מכן את המסך הבא:

כעת מתוך שורת הפקודה, נוכל להריץ פקודות ב-sqlite.

כזכור, המידה ש-sqlite עובד איתו יושב בקובץ בודד ייעודי. הקובץ הזה יהיה בעצם ה-DB.

 

אז נתחיל בליצור קובץ DB משלנו,

לשם כך, נבחר לו שם, למשל my_first_db

ונריץ את הפקודה הבאה:

				
					.open my_first_db.db
				
			

(חייב סיומת db)

לאחר פקודה זו, נצפה שיווצר קובץ חדש בתיקיה ממנה הרצנו את הפקודה.

כעת שיצרנו (ואוטומטית גם התחברנו) ל-DB החדש, נוכל ליצור בו טבלאות.

הערה קטנה: נוכל להריץ את הפקודות הבאות שנלמד כמו ליצור טבלאות גם אם לא נבצע פתיחה ל-db. אבל אז הנתונים יישמרו רק בזיכרון הנדיף של המחשב, ויימחקו כשנסגור את התוכנה. (מה שנקרא in-memory) וזו האזהרה באדום שרואים במסך כשפותחים לראשונה את התוכנה.

 

מהן טבלאות?

מידע שיושב ב-DB בדר”כ מסודר בטבלאות.

נוכל לדמיין שטבלה היא כמו טבלת אקסל שמייצגת מידע כלשהו.

למשל, הטבלה הבאה היא טבלה שמייצגת מכוניות עם מידע שונה עליהן.

נבחין בין הכותרות – שמות העמודות, לבין השורות, המייצגות כל שורה = מכונית ספציפית.

בעבודה עם DB, אנו נרצה ליצור טבלאות בהן נשמור את הנתונים שלנו.

למשל תהיה לנו טבלה של “משתמשים” עם עמודות: שם פרטי, שם משפחה, כתובת וכדו’. ותהיה לנו טבלה של “רכישות” אם אנו בונים מערכת לחנות וכדומ’.

 

בואו ננסה ליצור טבלה כזו ב-DB שלנו.

הפקודה הבאה היא פקודה בסיסית בשפת SQL, והיא יוצרת טבלה בשם car, עם שתי “עמודות”, אחת בשם id שהיא מסוג int (מספר), ואחת בשם model שהיא מסוג text (מחרוזת).

				
					create table car (id int, model text);
				
			

הצלחתם להריץ?

שימו לב, יש נקודה-פסיק (;) בסוף השורה.

בתום ריצת שורה זו, נוצרה לנו טבלה ב-DB. ונוכל בהמשך (כפי שתכף נלמד) להוסיף לה שורות (רשומות).

 

נציין שהשתמשנו כאן בסוגי נתונים int וכן text, שהם טיפוסי הנתונים הבסיסיים, ואין עוד הרבה אופציות ב-sqlite (מוזמנים להרחיב על זה כאן).

אגב – למרות שהטבלה מתוכננת לשמור “מכוניות”, קראנו לה car ולא cars. באופן עקרוני זו מוסכמה שכדאי להיצמד איליה. (אבל ייתכן ונראה לפעמים אצל אחרים גם שימוש ברבים, זו לא שגיאה)

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

				
					.tables
				
			

נצפה שפלט פקודה זו בשלב הזה יהיה: car, שזו הטבלה היחידה שיצרנו.

שימו לב – פקודה זו לא דורשת שימוש בנקודה פסיק (;) לאחריה, שכן זו לא פקודה SQL כמו הפקודה שיוצרת את הטבלה, אלא פונקציה לתוכנית sqlite שמריצה את הפקודות שלנו.

פקודות של sql מקובל לרשום באותיות גדולות, למשל:

				
					CREATE TABLE car (id INT, name TEXT);
				
			

אם כי, אפשר גם באותיות קטנות. שפת SQL לא מבדילה ביניהן. (case-insensitive)

כמו כן, בדר”כ השדה / עמודה הראשון יהיה id.

אוקיי, אז יצרנו טבלה בשם car עם שדה מספר בשם id ושדה text בשם name.

איך נוסיף עכשיו “מופעים” (רשומות) של מכוניות?

 

הוספת רשומות

הפקודה הבאה מוסיפה מכונית עם id=0 ושם toyota:

				
					INSERT INTO car (id, name) VALUES (0, 'Toyota');
				
			

נשים לב:

  • הפקודה insert into נועדה להכנסת רשומה חדשה, 
    ואז מציינים את שם הטבלה: car.
  • ואז בתוך סוגריים את רשימת השדות שאנו הולכים לתת להם ערכים, במקרה שלנו זה id ו-name.
  • ואז משתמשים במילה VALUES (מזכיר, אפשר באותיות גדולות או קטנות).
  • ולאחר מכן בתוך סוגריים את רשימת הערכים שאנו מספקים לשדות שציינו.
  • בדוגמה זו: 0 ל-id, ו-Toyota ל-name.

נשים לב גם לכך שאת שם המכונית “Toyota” עטפנו במרכאות, כדי שהוא יוכר כמחרוזת.

היינו יכולים גם להפוך את הסדר שבו ציינו את שמות העמודות שאנו מעדכנים:

				
					INSERT INTO car (name, id) VALUES ('Toyota', 0);
				
			

והיינו יכולים גם להשמיט את הנתון name:

				
					INSERT INTO car (id) VALUES (2);
				
			

באופן כזה תיווצר לנו רשומה עם id בלבד. הערך שיישב בעמודה (שדה) name של רשומה זו, יהיה null.

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

למשל:

				
					INSERT INTO car VALUES (0, 'Toyota');
				
			

 

שליפת נתונים

אם הצלחנו בחלק הקודם להוסיף רשומה לטבלה, אז הטבלה שלנו מכילה נתונים, ולכן נוכל “לבקש אותם” דרך הפקודה:

				
					SELECT * FROM car;
				
			

השימוש בכוכבית מציין שאנו רוצים לקבל את כל המידע שיש בטבלה car. היינו יכולים במקום כוכבית, לציין רק את המידע שאנו רוצים, למשל רק את השם של המכונית:

				
					SELECT name FROM car;
				
			

אגב יכולנו גם לציין את שם העמודה name באותיות גדולות

וטיפ: אם נרצה בעת ההדפסה לצפות גם בכותרות של השדות, נוכל להריץ פעם אחת את הפקודה:

				
					.headers on
				
			

בשיעור הבא נלמד איך למחוק ולערוך רשומות קיימות, אבל לפני כן נרצה לתרגל את מה שלמדנו.

 

תרגיל:

השתמש בפקודת SQL בשביל ליצור טבלה בשם car המכילה את כל השדות מהטבלה למעלה (סה”כ 6 עמודות). 

לאחר מכן, הכנס את כל הרשומות שבטבלה, באמצעות פקודת ה-sql שהכרנו: insert into.

לסיום, בצע “שאילתא” על הטבלה, כך שתוצגנה שנות הייצור (השדה year) של כל המכוניות.

 

פתרון:

				
					create table car (id int, model text, year int, subtype text,
    engine int, km int, cost int);
 
insert into car (id, model, year, subtype, engine, km, cost)
    values (55798, 'Toyota', 2019, 'yaris', 1800, 45000, 300);
 
insert into car (id, model, year, subtype, engine, km, cost)
    values (19465, 'Lamborghini', 2020, 'v3', 2800, 30000, 900);
 
..
..
 
select year from car;
				
			

אם נרצה שפקודה “תתפזר” על יותר משורה אחת, נוכל פשוט ללחוץ אנטר. מאחר ולא שמנו נקודה פסיק (;) השורה לא תבוצע עדיין.

 

תרגיל נוסף:

צרו טבלה בשם person המייצגת אנשים. 

לטבלה תיצרו את השדות הבאים:

  • id
  • first_name
  • last_name
  • address

הוסיפו לטבלה מספר רשומות, לאחר מכן הציגו את שמות המשפחה של כל האנשים שהזנת.

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

				
					.open my_first_db.db
				
			

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

 

סיכום:

למדנו להוריד את sqlite, והכרנו את התחביר הבסיסי ליצור טבלאות, להכניס לתוכם רשומות, ואף לבצע שאילתות בסיסיות לקבל את המידע ששמנו ב-db.


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

נתראה 🙂

כניסה

שכחתי סיסמה

אין לך חשבון? להצטרפות

איפוס סיסמה:

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

שינוי סיסמה

עריכת פרטים אישיים