אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » מדריכים » לימוד MySQL » שליפת נתונים בסיסית ב-MySQL עם אופרטורים

שליפת נתונים בסיסית ב-MySQL עם אופרטורים

רן בר-זיק ספטמבר 16, 2009 8:12 am אין תגובות

כיצד לבצע שליפות יותר מורכבות וכן עדכונים למידע שיש כבר בטבלת ה-MySQL.

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

במאמר הקודם למדנו כיצד לעשות שליפת נתונים ב-MySQL באמצעות SELECT. במאמר הזה נרחיב את הדיבור על SELECT.

אנו ממשיכים לעבוד על טבלת my_costumer מהמאמר הקודם. הטבלה נראית כך:


+-------------+---------------+--------------+--------------+
| costumer_id | costumer_name | costumer_age | costumer_sex |
+-------------+---------------+--------------+--------------+
|           1 | moshe         |           26 | male         |
|           2 | Haim          |           22 | male         |
|           3 | Yaakov        |           19 | male         |
|           4 | Dan           |           19 | male         |
|           5 | Dana          |           42 | female       |
|           6 | Rina          |           24 | female       |
|           7 | Omri          |            9 | male         |
+-------------+---------------+--------------+--------------+

אנו כבר יודעים מהמאמר הקודם כיצד לבחור אנשים שהגיל שלהם הוא 26 או 9 או 42, אבל נניח שאני צריך לבחור טווח של תאריכים – למשל בין גיל 20 לגיל 30? בשביל זה יש לנו את האופרטורים הפשוטים. אני יכול לשלב ב-WHERE את האופטרטורים כדי להגיע לתוצאות מיטביות מבחינתי. דוגמא פשוטה שתבהיר את הכל:


SELECT * FROM my_costumer WHERE costumer_age > 20 && costumer_age < 30;

שאילתה כזו תתן לי את כל אלו שגילם (costumer_age) הוא גדול מ-20 וקטן מ-30:


+-------------+---------------+--------------+--------------+
| costumer_id | costumer_name | costumer_age | costumer_sex |
+-------------+---------------+--------------+--------------+
|           1 | moshe         |           26 | male         |
|           2 | Haim          |           22 | male         |
|           6 | Rina          |           24 | female       |
+-------------+---------------+--------------+--------------+

אנו לא חייבים להשתמש רק באופרטורים מתמטיים! אם אנו רוצים לבדוק שמות למשל, אין דבר קל מזה. בואו ונניח שאני רוצה את כל השמות שמתחילים ב-'D'. כל מה שעלי לעשות זה להשתמש באופרטור LIKE שמקבל מחרוזת טקסט באופן הבא: %טקסט%. אם אני מחפש שם שמתחיל ב-D אני אחפש D% ואם אני מחפש שם שנגמר ב-D אני אחפש %D. אם אני רוצה גם שמות שמתחילים ב-D וגם שמות שמסתיימים ב-D, אני אחפש %D%. אין כמו דוגמא:


select * from my_costumer where costumer_name LIKE 'D%';

שאילתא כזו תחזיר לי את כל השמות שמתחילים ב-D:


+-------------+---------------+--------------+--------------+
| costumer_id | costumer_name | costumer_age | costumer_sex |
+-------------+---------------+--------------+--------------+
|           4 | Dan           |           19 | male         |
|           5 | Dana          |           42 | female       |
+-------------+---------------+--------------+--------------+

אפשר להריץ חיפוש גם עם Regular Expressions. כך למשל, כך אחפש את כל השמות שמתחילים באותיות a-m:


select * from my_costumer where costumer_name REGEXP '^[a-m]';

ניתן לקרוא בדוקומנטציה של MySQL על האופרטורים השונים והמגוונים שיש.

איסוף נתונים באמצעות GROUP BY

כאשר אנו רוצים לאגד את הנתונים שלנו בקבוצות ולראות איזה נתונים יש לנו, אחת השיטות החביבות ביותר היא שימוש בשיטת GROUP BY. דוגמא היא אולי הדבר הטוב ביותר להמחשה. נניח ואני רוצה לדעת אילו קבוצות גיל יש לי בטבלה שלי. כל מה שעלי לעשות זה להריץ SELECT שיקבץ לי את התוצאות לפי קבוצות:


SELECT costumer_age FROM my_costumer GROUP BY  costumer_age;

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


+--------------+
| costumer_age |
+--------------+
|            9 |
|           19 |
|           22 |
|           24 |
|           42 |
+--------------+

אני יכול להוסיף גם תנאים כמובן. אם אני רוצה לבדוק את כל הגילאים של הזכרים בלבד במועדון שלי, כל מה שעלי לעשות זה להריץ את השאילתא עם התנאי:


SELECT costumer_age FROM my_costumer WHERE costumer_sex = 'male' GROUP BY costumer_age;

אם אני משתמש ב-GROUP BY אני גם יכול להריץ פונקציות מתמטיות על התוצאות, כמו למשל לסכום את התוצאות. על מנת להריץ את הסכימה, כל מה שעלי לעשות זה להריץ את פקודת COUNT ולומר לה מה לספור וכן לציין את שם הטור שבו אני רוצה שהתוצאה תופיע. כאן אני מריץ חיפוש רגיל על הגילאים, משתמש ב-GROUP BY כדי לקבל את כל התוצאות ומשתמש ב-COUNT כדי לקבל סכימה. הנה השאילתה:



SELECT costumer_age, COUNT(costumer_id) my_count  FROM my_costumer GROUP BY costumer_age;

וזו התוצאה:


+--------------+----------+
| costumer_age | my_count |
+--------------+----------+
|            9 |        1 |
|           19 |        2 |
|           22 |        1 |
|           24 |        1 |
|           42 |        1 |
+--------------+----------+

אני יכול להשתמש גם בפונקציות MIN ו-MAX כדי להביא מקסימום או מינימום. למשל, אני רוצה למצוא את הגיל הצעיר ביותר בקבוצת הזכרים ואת הגיל הצעיר ביותר בקבוצת הנקבות שיש במועדון שלי. ראשית אני אבצע שאילתת SELECT שתבחר את השמות, תעשה GROUP BY לפי המינים ואז אני אריץ פונקציות MIN על שדות הגילאים. נשמע מסובך? שימו לב לשאילתה:


select costumer_sex, MIN(costumer_age)  FROM my_costumer GROUP BY costumer_sex;

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


+--------------+-------------------+
| costumer_sex | MIN(costumer_age) |
+--------------+-------------------+
| male         |                 9 |
| female       |                24 |
+--------------+-------------------+

אני כמובן יכול להכניס WHERE על מנת למיין את הנתונים שבהם אני עושה את ה-min כלומר, לסנן את התוצאות לפני הפעולה המתמטית. כך למשל, אם אני רוצה להציג את הצעירים ובתנאי שהם בני 18 ומעלה, אני יכול להכניס פונקצית WHERE שתסנן את התוצאות עוד לפני שאני מפעיל את ה-MIN:


SELECT costumer_sex, MIN(costumer_age) FROM my_costumer WHERE costumer_age>18 GROUP BY costumer_sex;

וזה יתן לנו את התוצאה הבאה:


+--------------+-------------------+
| costumer_sex | MIN(costumer_age) |
+--------------+-------------------+
| male         |                19 |
| female       |                24 |
+--------------+-------------------+

אם אני רוצה לסנן את התוצאות שהתקבלו לאחר הפעלת פונקצית ה-MIN (במקרה שלנו, הצגת הגיל הצעיר ביותר ואז סינון שלו, אנחנו צריכים להשתמש בפונקצית HAVING שהסינטקס שלה זהה לזה של WHERE רק שהיא באה לאחר ה-GROUP BY:


select costumer_sex, MIN(costumer_age) my_age  FROM my_costumer GROUP BY costumer_sex HAVING my_age>18;

וזו התוצאה שאני אקבל:


+--------------+--------+
| costumer_sex | my_age |
+--------------+--------+
| female       |     24 |
+--------------+--------+

עדכון נתונים

אם אנו רוצים לשנות נתונים בטבלה, למשל להפוך את moshe ל-Moshe, אין דבר קל מזה. עלינו להשתמש בפקודת UPDATE ו-SET. הסינטקס הוא פשוט, אנו מציינים איזו טבלה לעדכן, מציינים את השדה שיש לעדכן ואת הערך שאנו מעדכנים ואז WHERE והתנאי שלנו שאומר באיזה שורה (או שורות) יש לעדכן את הערך. כך למשל:


UPDATE my_costumer SET costumer_name='Moshe' WHERE costumer_id=1;

וכמובן שכל האופרטורים שלמדנו יכולים להכנס ב-WHERE. כך שזה מאד שימושי.

מחיקת נתונים

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


DELETE FROM my_costumer WHERE costumer_id = 9;

⚠️המדריכים כאן הם טעימה בלבד! יש ספר מקיף המלמד MySQL מרמת בסיס ועד רמה מתקדמת. הספר הדיגיטלי, שרלוונטי גם לכל מסדי הנתונים שעובדים עם SQL – זמין כאן כחלק מהפרויקט "ללמוד ג'אווהסקריפט בעברית" – זו הדרך הטובה ביותר ללמוד באופן מקיף MySQL.

במאמר הבא אנו נדבר על join ב-MySQL.

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
למדריך ה-MySQL הקודםשליפת נתונים בסיסית באמצעות MySQL
למדריך ה-MySQL הבאJoin – צירוף תוצאות מטבלאות ב-MySQL
לתפריט המדריכים ל-MySQL
MySQL
ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

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

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

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

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

גלילה לראש העמוד