ToCode
Відкрити в Telegram
1 419
Підписники
+124 години
-17 днів
-530 день
Архів дописів
1 419
סדרת SQL בסיסי - פוסט 10 - מחיקה
הפעולה הבסיסית האחרונה שלנו עם בסיסי נתונים היא פעולת המחיקה.
איך למחוק שורות מטבלה
הפקודה DELETE מוחקת שורות מטבלה. הפקודה מקבלת את שם הטבלה ואפשר להוסיף לה בלוק where כדי למחוק רק חלק מהשורות. אני יוצר בסיס נתונים לדוגמה:
CREATE TABLE planets (
id INT PRIMARY KEY,
name VARCHAR(50),
diameter_km FLOAT,
distance_from_sun_mkm FLOAT,
number_of_rings INT
);
INSERT INTO planets (id, name, diameter_km, distance_from_sun_mkm, number_of_rings) VALUES
(1, 'Mercury', 4879.4, 57.9, 0),
(2, 'Venus', 12104, 108.2, 0),
(3, 'Earth', 12742, 149.6, 0),
(4, 'Jupiter', 139820, 778.5, 4),
(5, 'Saturn', 116460, 1434, 7);
תחילה נמחק את כל השורות עם:
DELETE FROM planets;
וודאו שכל השורות נמחקו עם select ואז הוסיפו אותן מחדש. נמשיך ונמחק רק את השורות שמייצגות כוכבים עם טבעות:
DELETE FROM planets WHERE number_of_rings > 0;
עכשיו אתם
1. הכנסו לאתר https://sqliteonline.com ושם צרו את הטבלאות ומחקו את הנתונים בכל סוגי בסיסי הנתונים.
2. מחקו רק את השורה שערך ה id שלה הוא 2.
3. מחקו את כל הכוכבים שהקוטר שלהם גדול מ 5000.1 419
סדרת SQL בסיסי - פוסט 9 - עדכון נתונים
בסיסי נתונים תומכים ב-4 סוגים של פעולות על המידע שזכו לקיצור CRUD. הפעולות הן Create, Read, Update, Delete או בעברית "יצירה", "קריאה", "עדכון" ו"מחיקה". ראינו כבר איך לבצע את השתיים הראשונות ובחלק זה נעבור לדבר על עדכונים ומחיקות.
עדכון כל השורות
נתחיל ביצירת טבלה של שירים. הריצו את הפקודות הבאות ב SQLime או בבסיס הנתונים המועדף עליכם:
CREATE TABLE songs (
id INT PRIMARY KEY,
title VARCHAR(100),
artist VARCHAR(100),
album VARCHAR(100),
release_year INT,
genre VARCHAR(50),
duration VARCHAR(50)
);
INSERT INTO songs (id, title, artist, album, release_year, genre, duration)
VALUES
(1, 'Bohemian Rhapsody', 'Queen', 'A Night at the Opera', 1975, 'Rock', '05:55'),
(2, 'Shape of You', 'Ed Sheeran', '÷ (Divide)', 2017, 'Pop', '04:24'),
(3, 'Hotel California', 'Eagles', 'Hotel California', 1976, 'Rock', '06:30');
פקודת SELECT * FROM songs מחזירה כעת את הנתונים:
id title artist album release_year genre duration
1 Bohemian Rhapsody Queen A Night at the Opera 1975 Rock 05:55
2 Shape of You Ed Sheeran ÷ (Divide) 2017 Pop 04:24
3 Hotel California Eagles Hotel California 1976 Rock 06:30
פקודת UPDATE משנה את הערך בעמודה אחת או יותר לערך קבוע בכל השורות. בדוגמה הראשונה נעדכן את שנת היצירה של כל השירים שלנו ל 1234:
UPDATE songs SET release_year = 1234;
בשביל לעדכן מספר עמודות אני מפריד אותן בפסיק לדוגמה:
update songs set artist = 'a', duration = '02:23';
בנוסף אפשר להשתמש בביטוי חשבוני בעדכון כדי לקבל ערך חדש המבוסס על הערך הקודם לדוגמה:
update songs set release_year = release_year + 5;
עדכון רק חלק מהשורות - פקודת WHERE
הפקודה where מאפשרת להריץ פקודת SQL רק על חלק מהשורות. בלוק where יעזור לנו גם בפקודות select כדי לקבל רק חלק מהשורות, ויהיה קריטי בפקודות update כדי לעדכן רק חלק מהשורות.
בלוק where נכתב בסוף השאילתה ואחרי המילה where אנחנו כותבים תנאי. רק שורות שמתאימות לתנאי ייכנסו לתוצאה. אני יוצר מחדש את טבלת השירים בבסיס נתונים חדש ולאחר מכן מפעיל את הפקודה הבאה:
select * from songs where release_year > 2000;
והתוצאה היא רק השיר של אד שירן. או בשביל לקבל כמה שורות אני מפעיל את הפקודה:
select * from songs where genre = 'Rock';
ומקבל את שני השירים האחרים. שימו לב שבתוך המחרוזת יש הבדל בין אותיות גדולות לקטנות לכן הכרחי לכתוב את ה R גדולה.
כשמוסיפים את WHERE ל UPDATE אנחנו יכולים לעדכן רק חלק מהשורות לדוגמה הפקודה הבאה תעדכן את השנה רק לשיר של אד שירן:
update songs set release_year=1234 where release_year > 2000;
הרבה פעמים כשאנחנו רוצים להפעיל פקודת update רק על שורה בודדת נעדיף להשתמש ב id בתוך ה where, כי אנחנו יודעים שיש רק שורה אחת עם כל id. הפקודה הבאה מעדכן את הז'אנר של האיגלס:
update songs set genre = 'Pop' where id=3;
עכשיו אתם
1. הפעילו את SQLime על בסיס הנתונים לדוגמה שלהם ושנו את שם המחלקה מ hr ל Human Resources לעובדים ב hr.
2. העלו את המשכורת ב 5 לכל העובדים.
3. ראינו איך להוסיף ערך מספרי למידע בעמודה עם set. מה קורה כשאתם מנסים לשנות כך עמודת טקסט? נסו להוסיף ערך קבוע לשמות של כל העובדים כדי לבדוק מה קורה.1 419
Requirements: - Experience with SEO, SEM, and social media advertising - Proficiency in Google Analytics and AdWords - Strong written and verbal communication skills - Ability to analyze data and generate actionable insights - 2+ years of experience in digital marketing Expected Pay: $60,000 - $80,000 per year --- Company Name: Global Enterprises Company Location: 456 Corporate Blvd, San Francisco, CA Role: Human Resources Manager Description: Global Enterprises is seeking a seasoned Human Resources Manager to oversee all aspects of HR practices and processes. The successful candidate will play a key role in developing HR strategies, managing employee relations, and ensuring compliance with labor laws. Requirements: - Bachelor's degree in Human Resources, Business Administration, or related field - Proven experience as an HR Manager or similar role - Knowledge of HR systems and databases - Excellent interpersonal and communication skills - Strong leadership and decision-making abilities Expected Pay: $90,000 - $110,000 per year --- Company Name: Creative Studio Company Location: Remote Role: Graphic Designer Description: Creative Studio is looking for a talented Graphic Designer to join our team. You will work on a variety of design projects, from digital graphics to print materials, and collaborate with other creatives to bring ideas to life. Requirements: - Proficiency in Adobe Creative Suite (Photoshop, Illustrator, InDesign) - Strong portfolio showcasing design skills - Understanding of design principles and typography - Excellent communication and teamwork skills - 2+ years of experience in graphic design Expected Pay: $50,000 - $70,000 per year --- Company Name: Fast Sales Solutions Company Location: 789 Sales Avenue, Chicago, IL Role: Sales Representative Description: Fast Sales Solutions is seeking a motivated Sales Representative to join our team. The ideal candidate will have a knack for building relationships, closing deals, and exceeding sales targets. Requirements: - Proven experience as a Sales Representative - Excellent communication and negotiation skills - Ability to work independently and as part of a team - Strong organizational and time-management skills - Willingness to travel Expected Pay: $50,000 - $75,000 per year + commissionהעבירו את הרשימה לטבלה בבסיס נתונים. נסו לחשוב איזה עמודות אתם צריכים ומה צריך להיות טיפוס הנתונים בכל עמודה. לאחר מכן: 1. הציגו את שמות כל החברות שמגייסות. 2. הציגו את החברה שמציעה את השכר הגבוה ביותר.
1 419
סדרת SQL בסיסי - פוסט 8 - תרגול היכרות עם בסיסי נתונים
היום ניקח הפסקה מחומר חדש ונתרגל את כל הפקודות שלמדנו עד עכשיו.
טבלת מסעדות
נתונה רשימת המסעדות הבאה:
1. La Belle Cuisine
Address: 123 Rue de Gastronomie, Paris, France
Rank: ⭐️⭐️⭐️⭐️
Expected Meal Price: €50 - €70
Date of Last Health Inspection: July 15, 2024
Useful Tip: Try the chef's special dessert; it's a local favorite!
2. Sushi Zen
Address: 456 Ocean Avenue, Tokyo, Japan
Rank: ⭐️⭐️⭐️⭐️⭐️
Expected Meal Price: ¥3,000 - ¥6,000
Date of Last Health Inspection: June 22, 2024
Useful Tip: Arrive early to get a spot at the sushi bar for an interactive experience.
3. The Rustic Grill
Address: 789 Maple Street, Austin, TX, USA
Rank: ⭐️⭐️⭐️
Expected Meal Price: $20 - $35
Date of Last Health Inspection: August 1, 2024
Useful Tip: The BBQ ribs are a must-try, especially on Wednesdays when they're half-off!
4. Pasta Paradiso
Address: 321 Via Roma, Rome, Italy
Rank: ⭐️⭐️⭐️⭐️
Expected Meal Price: €30 - €50
Date of Last Health Inspection: July 5, 2024
Useful Tip: Ask for a table on the terrace for a beautiful view of the city.
5. The Green Garden Café
Address: 123 Vegan Lane, Portland, OR, USA
Rank: ⭐️⭐️⭐️⭐️
Expected Meal Price: $15 - $25
Date of Last Health Inspection: June 30, 2024
Useful Tip: The avocado toast is a popular dish; pair it with a cold-pressed juice!
6. Le Petit Bistro
Address: 789 Rue de la Petite, Lyon, France
Rank: ⭐️⭐️⭐️⭐️⭐️
Expected Meal Price: €40 - €60
Date of Last Health Inspection: July 20, 2024
Useful Tip: Book a reservation in advance, as seating is limited and highly sought after.
7. Curry Corner
Address: 456 Spice Street, Mumbai, India
Rank: ⭐️⭐️⭐️⭐️
Expected Meal Price: ₹800 - ₹1,500
Date of Last Health Inspection: June 18, 2024
Useful Tip: Don't miss their signature butter chicken; it's a crowd-pleaser!
8. Casa del Mar
Address: 321 Beach Blvd, Barcelona, Spain
Rank: ⭐️⭐️⭐️⭐️
Expected Meal Price: €35 - €55
Date of Last Health Inspection: July 10, 2024
Useful Tip: The seafood paella is a must-try, especially with a glass of local white wine.
9. Urban Tacos
Address: 123 Downtown Avenue, Los Angeles, CA, USA
Rank: ⭐️⭐️⭐️
Expected Meal Price: $10 - $20
Date of Last Health Inspection: August 2, 2024
Useful Tip: Visit during Taco Tuesday for great deals and a lively atmosphere!
10. The Golden Wok
Address: 789 Oriental Street, Hong Kong
Rank: ⭐️⭐️⭐️⭐️
Expected Meal Price: HK$100 - HK$300
Date of Last Health Inspection: July 25, 2024
Useful Tip: The dim sum menu is extensive and delicious; try a variety for the best experience!
שמרו את הרשימה לטבלה בבסיס נתונים ולאחר מכן הציגו:
1. את כל הטיפים
2. את השמות והכתובות של כל המסעדות
3. את 5 המסעדות המדורגות הכי גבוה
4. את 5 המסעדות בהן הארוכה תהיה הכי זולה
נסו לחשוב מה יהיה טיפוס הנתונים הטוב ביותר לכל עמודה.
טבלת חיפוש עבודה
נתונה רשימה של מודעות דרושים:
Company Name: Tech Innovators Inc.
Company Location: Remote
Role: Software Engineer
Description: Tech Innovators Inc. is seeking a skilled Software Engineer to join our growing team. You'll work on cutting-edge projects, collaborate with a talented group of developers, and contribute to building scalable and efficient software solutions.
Requirements:
- Proficiency in Java, Python, or C++
- Experience with cloud technologies (AWS, Azure, GCP)
- Strong problem-solving skills and attention to detail
- Bachelor's degree in Computer Science or related field
- 3+ years of professional software development experience
Expected Pay: $100,000 - $120,000 per year
---
Company Name: Marketing Masters
Company Location: 123 Market Street, New York, NY
Role: Digital Marketing Specialist
Description: Marketing Masters is looking for a creative and analytical Digital Marketing Specialist to manage online campaigns and optimize our digital presence. The ideal candidate will have a passion for digital marketing and a strong understanding of the latest trends and tools.1 419
סדרת SQL בסיסי - פוסט 7 - המילים ORDER ו LIMIT
בשיעור זה נלמד על עוד 3 פקודות חשובות בכתיבת שאילתות: ORDER, LIMIT ו OFFSET.
מיון התוצאות
אני חוזר ל SQLime ויוצר בסיס נתונים לדוגמה חדש ואז מציג את כל הנתונים מטבלת העובדים:
select * from employees;
אנחנו רואים שלכל עובד יש משכורת אבל אנחנו קיבלנו את התוצאות קצת בערבוביה. הרבה פעמים נוח לנו לראות את הנתונים ממוינים לפי שדה אחד או יותר - ובשביל זה ל SQL יש את הפקודה ORDER BY. נוסיף אותה לשליפה כדי להציג את הנתונים ממויינים לפי המשכורת:
select * from employees ORDER BY salary;
או אם אנחנו רוצים משכורות גבוהות תחילה נוכל להשתמש במיון בסדר יורד באמצעות הוספת המילה DESC אחרי שם העמודה:
select * from employees ORDER BY salary DESC;
נשים לב שבנתוני הדוגמה לדייב ולסינדי יש את אותה משכורת. סינדי הופיעה קודם אבל זה לגמרי במקרה. אנחנו יכולים להוסיף מיון משני למשל לפי שם העובד:
select * from employees ORDER BY salary DESC, name ASC;
עכשיו אני מבקש את כל הנתונים ממוינים בסדר יורד לפי עמודת המשכורת ואם יש כמה עובדים עם אותה משכורת אז הם יסודרו בסדר עולה לפי עמודת שם העובד.
הצגת רק חלק מהתוצאות
בטבלת הדוגמה יש יחסית מעט עובדים אבל קל לדמיין מערכת אמיתית עם אלפי או עשרות אלפי עובדים. עם SQL אני יכול לקבל רק חלק מהתוצאות בעזרת הפקודה LIMIT:
select * from employees ORDER BY salary DESC, name ASC LIMIT 5;
וכך אני מקבל את 5 השורות של העובדים עם המשכורת הגבוהה ביותר. בנוסף הפקודה OFFSET מאפשרת להתחיל את התוצאות שמוחזרות ממקום נמוך יותר למשל:
select * from employees ORDER BY salary DESC, name ASC LIMIT 5 OFFSET 5;
וקיבלתי את 5 התוצאות "הבאות בתור".
עכשיו אתם
1. הציגו את כל השורות בטבלת העובדים ממוינות לפי המחלקה, ובתוך כל מחלקה מיון משני לפי המשכורת.
2. הציגו רק את 5 השורות העליונות מתוך התוצאה.1 419
INSERT INTO MythicalCreatures (creature_id, name, magical_power_level, habitat)
VALUES (1, 'Phoenix', 100, 'Volcanic Peaks');
INSERT INTO MythicalCreatures (creature_id, name, habitat)
VALUES (2, 'Dragon', 'Mystic Mountains');
INSERT INTO MythicalCreatures (creature_id, name, magical_power_level, habitat)
VALUES (3, 'Unicorn', 70, 'Enchanted Forest');
INSERT INTO MythicalCreatures (creature_id, name, habitat)
VALUES (4, 'Mermaid', 'Coral Reefs');
עכשיו אתם
1. הציגו את כל הנתונים בטבלה שיצרנו וודאו שערך ברירת המחדל נרשם לכל השורות בהן לא רשמנו ערך.
2. נסו להכניס שורה חדשה עם habitat שכבר קיים בטבלה. מה הודעת השגיאה שקיבלתם?
3. נסו להכניס שורה שלא כוללת שם ליצור. מה הודעת השגיאה שקיבלתם?
4. הכניסו שורה עם ערך ריק לשדה habitat. ועוד אחת. ועוד אחד. שימו לב שלמרות שהגדרנו את העמודה בתור "ייחודית", אין בעיה שיהיו ערכים ריקים ואף יותר משורה אחת עם ערך ריק.1 419
סדרת SQL בסיסי - פוסט 6 - סוגי מידע
כן, יש לנו בעיה של תאימות. בסיסי נתונים נכתבו כדי לעבוד עם כמות מאוד גדולה של מידע ולכן כל רמז שהם יכולים לקבל על איזה מידע יהיה שמור איפה יעזור להם לנהל את המידע טוב יותר, להשתמש בפחות מקום ולקבל חזרה את המידע מהר יותר. מסיבה זאת בסיסי נתונים מבקשים מאיתנו כשאנחנו יוצרים טבלה שנספר להם מה אנחנו הולכים לאחסן בכל עמודה. יחד עם זאת ההתנהגות הספציפית איזה סוגי מידע נתמכים ומה עושים כשמשתמשים מנסים לשים (בטעות או בכוונה) מידע מהסוג הלא נכון שונה עבור כל בסיס נתונים.
סוגי מידע יחסית בטוחים לשימוש (ואיפה לומדים יותר)
באתר:
https://sqliteonline.com
אנחנו יכולים להריץ פקודות SQL על כל אחד מבסיסי הנתונים הפופולריים. כשתרצו לשחק עם טבלאות וסוגי מידע כדי לראות בדיוק איזה שאילתה עובדת על איזה בסיס נתונים תוכלו לעשות שם את כל הניסויים. אני אראה פה את סוגי הנתונים המרכזיים שנתמכים בכל בסיסי הנתונים, גם כדי שיהיה לנו קל בקורס וגם כדי שיהיה לכם קל לעבור בהמשך לבסיסי נתונים אחרים.
אלה סוגי המידע בהם יחסית בטוח להשתמש. ב SQL אין חשיבות לאותיות קטנות או גדולות:
1. מספר שלם INTEGER (נקרא גם INT). סוג מידע Integer נועד לעמודה שמחזיקה מספר שלם כמו 2, 10 או 50. הערך בעמודה הוא בין
-2,147,483,648 ל 2,147,483,647.
2. מחרוזת קצרה VARCHAR. סוג מידע שני נועד לייצוג טקסטים. בדרך כלל נעביר בסוגריים את אורך הטקסט המקסימלי שנרצה לשמור בעמודה.
3. תאריך DATE. סוג מידע שנועד לשמור תאריך (מידע זה לא כולל זמן. בסיסי נתונים שונים כוללים הגדרות יותר ספציפיות כמו TIMESTAMP או DATETIME כדי להוסיף את הזמן).
4. מספר עם נקודה עשרונית FLOAT. שומר ערכים עם שבר למשל 2.5.
5. טקסט TEXT. שומר טקסטים ללא הגבלת אורך.
נשים לב ש SQLite הוא מיוחד בכך שאין לו באמת מערכת טיפוסים. כשאנחנו מגדירים טיפוס נתונים לעמודה מסוימת עדיין נוכל להכניס ערכים שונים לתוך אותה עמודה. בשביל שנראה איך מתנהג בסיס נתונים שכן מבדיל בין טיפוסים נוכל להיכנס לאתר:
https://sqliteonline.com
שבניגוד לשמו דווקא כולל סביבות עבודה לכל בסיסי הנתונים המרכזיים. אני לוחץ שם על PostgreSQL ומריץ את הפקודה הבאה:
CREATE TABLE coffee_orders (
order_id SERIAL PRIMARY KEY,
customer_name TEXT,
coffee_typ
INSERT INTO coffee_orders (customer_name, coffee_type, price, order_timestamp)
VALUES
('Alice Johnson', 'Caramel Macchiato', 4.75, '2024-02-10 08:30:00+00'),
('Bob Smith', 'Espresso Double Shot', 3.25, '2024-02-10 09:15:00+00'),
('Charlie Brown', 'Pumpkin Spice Latte', 5.50, '2024-02-10 10:00:00+00');
עכשיו בואו נראה מה קורה כשאני מנסה להוסיף לבסיס נתונים שורה שלא מתאימה לסוגי המידע שהגדרתי:
INSERT INTO coffee_orders (customer_name, coffee_type, price, order_timestamp)
VALUES (8, 'Caramel Macchiato', 4.75, '2024-02-10 08:30:00+00')
וזה עבד! לבסיס הנתונים לא היתה בעיה לשמור מספר בתור מחרוזת. עכשיו ננסה דוגמה נוספת:
INSERT INTO coffee_orders (customer_name, coffee_type, price, order_timestamp)
VALUES (8, 'Caramel Macchiato', 'expensive', '2024-02-10 08:30:00+00')
הפעם כבר קיבלתי שגיאה:
Error 22P02 invalid input syntax for type double precision: "expensive"
נשים לב שכל בסיס נתונים מטפל אחרת בסוגי המידע ובשגיאות שנובעות מהכנסת מידע לא מתאים, ולכן נשתדל תמיד להכניס את המידע בצורה נכונה וגם נבדוק את עצמנו כל פעם שאנחנו עוברים לבסיס נתונים מסוג אחר.
הגדרות נוספות לעמודות
אחרי סוג המידע אנחנו יכולים להוסיף עוד כמה מילים שיעזרו לבסיס הנתונים להתמודד עם פקודות הכנסה לא מלאות או לא מדויקות:
1. ההגדרה NOT NULL אחרי סוג המידע אומרת שבכל הכנסה חייבים להעביר ערך לעמודה זו.
2. ההגדרה UNIQUE אומרת שהערך בעמודה זו חייב להיות ייחודי לכל שורה.
3. ההגדרה DEFAULT מגדירה ערך ברירת מחדל לעמודה.
בואו נראה דוגמה הפעם חזרה ל SQLite. אני יוצר את הטבלה:
CREATE TABLE MythicalCreatures (
creature_id INTEGER PRIMARY KEY, -- Primary key
name TEXT NOT NULL, -- Creature name, cannot be NULL
magical_power_level INTEGER DEFAULT 50, -- Default power level
habitat TEXT UNIQUE -- Unique habitat for each creature
);1 419
INSERT INTO space_missions (crew_size)
VALUES (50);
אני מפעיל פקודת SELECT כדי לבדוק מה קיבלתי:
SELECT * FROM space_missions;
ושימו לב לשורה האחרונה ברשימת התוצאות:
1. לשורה זו יש id ייחודי, שהוא מספר אחד גדול יותר מה id של השורה שלפניה. בסיס הנתונים באופן אוטומטי יודע שאני צריך מזהה ייחודי לכל שורה ולכן יצר בעצמו את הערך. מכאן אני לומד שבאופן כללי כשאני מכניס נתונים חדשים לבסיס הנתונים אין צורך לציין id לשורה.
2. העמודות mission_name ו tagline נשארו ריקות. באופן כללי ביצירת הטבלה לא הגדרתי שום מגבלה על עמודות אלה ולכן לבסיס הנתונים אין בעיה להשאיר אותן בלי ערך. בשיעור הבא נלמד יותר על סוגי המידע ונראה גם איך מגדירים מגבלות על עמודות מסוימות.
הודעת שגיאה אחרונה שאנחנו עשויים לפגוש תגיע מהפעלת הפקודה:
INSERT INTO space_missions (mission_name, crew_size, tagline)
VALUES ("Mars 2020", 0, 'Seeking signs of ancient life and collecting rock and soil samples');
שימו לב שוויתרתי על ה id, אבל את שם המשימה כתבתי בתוך מרכאות כפולות ולא בתוך גרש בודד. תגובת בסיס הנתונים:
SQLite3Error: SQLITE_ERROR: sqlite3 result code 1: no such column: Mars 2020
כשאנחנו כותבים טקסט בתוך מרכאות כפולות בסיס הנתונים חושב שאנחנו מתיחסים לשם עמודה, ובמקרה הזה העמודה לא קיימת ולכן הופיעה הודעת השגיאה. בדרך כלל כשמקבלים כזאת הודעת שגיאה זה אומר שהתבלבלנו בין גרש בודד לבין מרכאות.
מה לגבי טעויות בסוגי הנתונים? בבסיס נתונים SQLite אפשר להכניס מחרוזות לעמודות של מספרים ולהיפך (נסו את זה). רוב בסיסי הנתונים לא יאפשרו לכם לשמור מידע מספרי בעמודה מסוג טקסט או מידע טקסטואלי בעמודת מספרים.1 419
סדרת SQL בסיסי - פוסט 5 - הכנסת מידע
יצירת טבלה חדשה
בשביל להכניס מידע אני אשמח ליצור טבלה חדשה בבסיס הנתונים. אני מפעיל את הפקודה הבאה:
CREATE TABLE space_missions (
id SMALLINT PRIMARY KEY,
mission_name VARCHAR(200),
crew_size SMALLINT,
tagline VARCHAR(500)
);
בדוגמה הפעם אנחנו יוצאים למשימה בחלל! כל שורה תייצג משימה והעמודות שלנו יהיו שם המשימה, גודל הצוות והאם המשימה כרגע פעילה. בשיעורים הבאים נדבר יותר באריכות על יצירת הטבלה אבל בינתיים כמה דברים שכדאי לשים לב:
1. פקודת יצירת הטבלה מגדירה את העמודות, ובנוסף לכל עמודה היא מגדירה את סוג המידע שיישמר בעמודה זו. גודל צוות למשל היא עמודה מספרית.
2. לפעמים סוגי מידע מקבלים פרמטרים, למשל סוג מידע VARCHAR אומר שהעמודה מכילה טקסט. הפרמטר המספרי שמופיע בסוגריים מגדיר את הגודל המקסימלי של טקסט שאפשר לרשום בעמודה זו. אם נכתוב מספר קטן מדי אנחנו עלולים להיתקע כשנצטרך יותר מקום, אבל אם נכתוב מספר גדול מדי בסיס הנתונים יצטרך לשריין הרבה מקום שאולי לא ישתמש בו.
3. כמעט כל טבלה שניצור תכיל עמודה בשם id, שהיא עמודה מספרית שונה עבור כל שורה. עמודה זו תעזור לנו כשנרצה לדבר על המידע בשורה זאת או לקשר את השורה למידע נוסף ששמור עליה בטבלאות אחרות.
בשיעור הבא נדבר יותר בפירוט על סוגי המידע שאפשר לשמור בעמודות. כרגע נסתפק בהרצת הפקודה. וודאו שהטבלה נוצרה באמצעות לחיצה על כפתור tables ואם הכל עבר כמו שצריך נוכל להמשיך להכנסת הנתונים.
אם היו לכם בעיות ביצירת הטבלה בסביבת התרגול של SQLime תמיד אפשר למחוק את כל בסיס הנתונים ולהתחיל מחדש באמצעות לחיצה על הלימון בצד שמאל למעלה של המסך.
הכנסת נתונים
הדביקו את הפקודות הבאות כבלוק אחד לתיבת ה SQL ב SQLime אחרי יצירת הטבלה והריצו:
INSERT INTO space_missions (id, mission_name, crew_size, tagline)
VALUES (1, 'Apollo 11', 3, 'One small step for man, one giant leap for mankind');
INSERT INTO space_missions (id, mission_name, crew_size, tagline)
VALUES (2, 'SpaceX Crew-1', 4, 'A new era of human spaceflight');
INSERT INTO space_missions (id, mission_name, crew_size, tagline)
VALUES (3, 'Mars 2020', 0, 'Seeking signs of ancient life and collecting rock and soil samples');
הפקודות הן פקודות הכנסת נתונים. הפורמט הוא:
1. מתחילים במילים INSERT INTO ואחריהן שם הטבלה אליה רוצים לכתוב נתונים.
2. אחרי שם הטבלה פותחים סוגריים ובתוכם כותבים את שמות העמודות אליהן נכתוב את הנתונים.
3. אחרי הסוגריים נכתוב את המילה VALUES ואחריה עוד זוג סוגריים ובתוכם הערכים. יש לרשום את הערכים באותו סדר בו רשמנו את שמות העמודות.
הכנסת מספר שורות בפקודה אחת
פקודת INSERT תומכת גם בהכנסת מספר שורות בפקודה אחת. הפעילו את הפקודה הבאה:
INSERT INTO space_missions (id, mission_name, crew_size, tagline)
VALUES
(4, 'Artemis III', 4, 'Returning humans to the Moon'),
(5, 'ExoMars', 0, 'Searching for signs of past life on Mars'),
(6, 'Voyager 3', 0, 'Exploring the outer Solar System and beyond');
נשים לב שאחרי המילה VALUES אנחנו רואים מספר קבוצות של ערכים, כל קבוצה בסוגריים משלה מופרדות בסימן פסיק.
קריאת הנתונים שהכנסנו
בואו נוודא שההכנסה הצליחה. הפעילו את הפקודה:
SELECT * FROM space_missions;
אנחנו רואים את כל המשימות שיצרנו מסודרות בסדר עולה לפי ה id.
בואו נבעט בזה קצת
לפני שניפרד מ INSERT אני רוצה להראות כמה דברים שיכולים להישבר כשאתם כותבים את הדוגמאות האלה על בסיס הנתונים שלכם ואת הודעות השגיאה המתאימות. נתחיל עם הפקודה:
INSERT INTO space_missions (id, mission_name, crew_size, tagline)
VALUES (1, 'Mars 2020', 0, 'Seeking signs of ancient life and collecting rock and soil samples');
בפקודה זו אני מנסה להכניס שורה נוספת שה id שלה הוא 1. בסיס הנתונים עונה לי בהודעת השגיאה:
SQLite3Error: SQLITE_CONSTRAINT_PRIMARYKEY: sqlite3 result code 1555: UNIQUE constraint failed: space_missions.id
למדנו ש id הוא מזהה ייחודי של שורה, ולכן לא ניתן להכניס לטבלה שתי שורות עם אותו ערך של id. עמודת id מוגדרת בתור מזהה ייחודי לשורה בגלל שביצירת הטבלה כתבתי את המילים PRIMARY KEY אחרי שם העמודה.
ננסה עוד אחד, הפעם נראה מה קורה כשאני לא כותב את כל הערכים בפקודת ה INSERT. הפעילו את הפקודה:1 419
סדרת SQL בסיסי - פוסט 4 - בסיס נתונים רלציוני
ראינו בתרגיל שבעזרת טבלאות ואקסל אנחנו יכולים לגלות פרטים חדשים על המידע שלנו, אבל באותו זמן ראינו גם שזה לא תמיד פשוט. אנחנו גם יכולים לדמיין שאם היה עלינו לעבוד עם מספר טבלאות במקביל החיפוש באקסל היה הופך להרבה יותר מסובך.
קצת תיאוריה
בסיס נתונים רלציוני הוא שם גנרי לקבוצת תוכנות שתפקידן לנהל נתונים בצורה של טבלאות וקשר בין טבלאות. בסיסי הנתונים הרלציוניים המפורסמים ביותר הם: Oracle, PostgreSQL, MySQL, MS SQL Server אבל יש עוד המון. אנחנו נעבוד בקורס עם בסיס נתונים רלציוני קטן בשם SQLite, שהכח שלו הוא בדיוק זה שהוא מאוד קטן - הוא אינו דורש התקנות או שרתים חזקים ולכן נוכל לעבוד איתו אונליין.
השפה בה בסיס נתונים רלציוני מדבר נקראת SQL. שפה זו פותחה במקור ב IBM בשנות ה 70 והפכה לתקן בשם Database Language SQL, כשהגירסה החדשה ביותר של התקן נכון לכתיבת קורס זה פורסמה ב 2023.
כל בסיסי הנתונים מדברים SQL לפי התקן (לפחות משתדלים). עדיין קיימים הבדלים גדולים בין בסיסי הנתונים בעיקר במנגנוני הניהול שלהם, איך הם שומרים את הנתונים, איך משפרים את מהירות שליפת הנתונים, איך לגבות אותם, מה חוזק השרתים שהם צריכים כדי לעבוד טוב ועוד המון פרמטרים שבקורס זה לא יעניינו אותנו. אנחנו נתמקד ב SQL ובפרט באותו חלק של SQL שמוגדר בתקן ומשותף לכל בסיסי הנתונים. מסיבה זו כל הפקודות שנראה כאן על SQLite יעבדו כמו שהן על כל בסיס נתונים אחר.
בסיס הנתונים הראשון שלנו
הכנסו לאתר:
https://sqlime.org
ושם לחצו על הלינק "Demo database". לינק זה יוצר בסיס נתונים לדוגמה שמורכב משתי טבלאות. לאחר מכן לחצו על הכפתור tables כדי לראות את רשימת שתי טבלאות הדוגמה:
1. employees
2. expenses
לחצו על המילה employees כדי לראות את מבנה הטבלה. התוצאה היא רשימת העמודות:
1. id
2. name
3. city
4. department
5. salary
אבל איפה הנתונים עצמם?
השאילתה הראשונה שלנו
בתיבת השאילתה כתבו את הטקסט:
SELECT id, name, city FROM employees;
לא חייבים להקפיד על אותיות קטנות וגדולות, וגם אפשר לוותר על הנקודה פסיק בסוף. התוצאה נראית כך:
id name city
11 Diane London
12 Bob London
21 Emma London
22 Grace Berlin
23 Henry London
24 Irene Berlin
25 Frank Berlin
31 Cindy Berlin
32 Dave London
33 Alice Berlin
הפקודה שרשמנו נקראת שאילתת SQL. בעוד שבאקסל ראינו את כל הנתונים בטבלה אחת על המסך, בבסיס נתונים הנחת העבודה היא שיש המון נתונים ולכן אנחנו צריכים לבקש ספציפית את הנתונים שאנחנו רוצים כדי לראות מידע. בואו נפרק את השאילתה כדי לראות את החלקים שלה:
1. הפקודה SELECT אומרת לבסיס הנתונים שאנחנו רוצים לקבל מידע. בהמשך הקורס נלמד עוד פקודות שנוכל לשלוח לבסיס הנתונים.
2. אחרי הפקודה SELECT אני רושם את רשימת העמודות שאני רוצה לקבל. אני יודע את שמות העמודות כי ראיתי את מבנה הטבלה קודם בעזרת כפתור tables, וכן באופן כללי בסיס נתונים מצפה שתדעו איזה עמודות יש בכל טבלה ואיזה טבלאות יש.
3. הפקודה FROM מפרידה בין רשימת העמודות לשם הטבלה - במקרה שלנו employees.
עכשיו אתם
1. שנו את רשימת העמודות בשאילתה שכתבנו יחד וודאו שאתם מצליחים לקבל עמודות נוספות.
2. בדקו איזה עמודות יש בטבלה השנייה בבסיס הנתונים והציגו את השורות שלה על המסך.
3. החליפו את רשימת העמודות בסימן הבודד * באחת השאילתות ובדקו מה קורה.1 419
סידרת SQL בסיסי - פוסט 3 - תרגול היכרות עם נתונים
טיולים לפריז זה נחמד אבל בעולם האמיתי אנחנו צריכים לנהל נתונים הרבה יותר גדולים. מה זה נתונים גדולים? באתר data.gov.il נוכל למצוא כמה דוגמאות לקבצי נתונים יותר גדולים ולקבל הצצה למידע שמערכות מחשב מנהלות.
רשימת טיסות
הורידו את טבלת הטיסות מהקישור הזה:
https://data.gov.il/dataset/flydata
ניתן להוריד את המאגר כקובץ CSV או לצפות אונליין. אני ממליץ על צפייה אונליין בגלל שקידוד הקובץ ב CSV יכול לסבך. אם בכל זאת אתם רוצים להוריד את ה CSV תוכלו לפתוח אותו באקסל וכדאי לראות את העברית תצטרכו לשנות את הקידוד ל UTF-8. כאן יש הסבר איך לעשות את זה:
https://support.microsoft.com/en-gb/office/opening-csv-utf-8-files-correctly-in-excel-8a935af5-3416-4edd-ba7e-3dfd2bc4a032
אחרי שהורדתם או צפיתם אונליין בקובץ נסו לענות על השאלות:
1. כמה טיסות המריאו אתמול בשעה המתוכננת?
2. מהן כל חברות התעופה שהמריאו או נחתו אתמול בישראל?
3. מהי המדינה אליה יצאו הכי הרבה טיסות אתמול?
4. כמה טיסות יצאו מטרמינל 3? כמה מטרמינל 1?
5. איזה חברות תעופה טסות מטרמינל 1? איזה מטרמינל 3? איזה משני הטרמינלים?
סניפי בנקים
הורידו את קובץ סניפי הבנקים מהקישור הזה:
https://data.gov.il/dataset/branches
הפעם כבר יש לנו את המידע כקובץ אקסל אז פתחו אותו באקסל ונסו לענות על השאלות:
1. לאיזה בנק יש הכי הרבה סניפים?
2. באיזה עיר יש הכי הרבה סניפי בנקים?
3. מהם כל הטלפונים של סניפי בנק דיסקונט בתל אביב?
4. באיזה ימים כל סניפי הבנקים פתוחים?
5. באיזה ערים יש סניף של יובנק?
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
