[6 בינואר 2009] [30 תגובות]
כמעט כל היישומים והתוכנות משתמשות בבסיס נתונים (או "מסד נתונים") על מנת לשמור מידע. דוגמה אחת היא שמירת שמות כל הרחובות בארץ ישראל בתוכנת ניווט (GPS). דוגמה נוספת היא הרשת החברתית של Facebook, בה נשמרים הפרטים של מיליוני המשתמשים בשירות.
שפת SQL היא שפת מחשבים שמטרתה לתקשר עם מסדי הנתונים. המטרה היא לאפשר קריאת מידע קיים מבסיס הנתונים ולאפשר כתיבת מידע חדש לתוכו. ישנם בסיסי נתונים שונים שניתן להשתמש בהם: MS Access, MS SQL, mySQL ועוד. כל אלו תומכים בשפת ה-SQL ולכן התקשורת איתם כמעט זהה לחלוטין.
מושגים בסיסיים
בסיס נתונים מורכב מטבלאות המכילות נתונים. נביט בטבלה הבאה:
First_Name | Last_Name | Age |
---|---|---|
Eli | Cohen | 29 |
Avi | Levi | 55 |
שדה הוא עמודה בטבלה. בטבלה זו ישנם שלושה שדות: שם-פרטי, שם-משפחה וגיל.
כניסה היא שורה בטבלה. בטבלה זו ישנן שתי כניסות: כניסה עבור Eli Cohen וכניסה עבור Avi Levi.
השדות בטבלה בדרך כלל נקבעות מראש ואילו הכניסות נוספות ונמחקות עם הזמן.
שאילתה היא שילוב של פקודות SQL שמטרתה לקבל מידע מבסיס הנתונים. שאילתה יכולה גם לשנות את בסיס הנתונים, למחוק כניסות או ליצור כניסות חדשות. דוגמה לשאילתה:
SELECT * FROM UsersTable
הכנת הקרקע
על מנת שנוכל לתרגל את פקודות ה-SQL שנלמד בהמשך, נשתמש בבסיס הנתונים Access של מיקרוסופט. על מנת שתוכלו לתרגל, על המחשב שלכם צריכה להיות מותקנת התוכנה Access (תוכנה זו היא חלק מחבילת Office).
הורידו את הקובץ sql.mdb (זהו בסיס נתונים המכיל מספר טבלאות ונתונים) ופיתחו אותו בתוכנת MS Access. הדרך הכי קלה לבדוק אם תוכנת Access מותקנת במחשב היא להוריד את קובץ ה-mdb ולבצע דאבל-קליק עליו. במידה ו-Access מותקנת - היא תיפתח.
אם אין לכם את התוכנה, תוכלו להמשיך בקריאה וללמוד את הפקודות, אך בלימוד נושא כמו זה, כדאי מאוד שתוכלו לתרגל את הפקודות שתלמדו על מנת להגיע להבנה מלאה.
פיתחו את קובץ ה-mdb וביחרו ב-Queries ואז Design כך:
בחרו בכפתור Close:
בחרו ב-SQL View מהתפריט שבצד שמאל:
כעת תוכלו לכתוב שאילתה (את הפקודות נלמד בהמשך) ולהקיש על סימן הקריאה האדום:
אלו הם למעשה התוצאות של השאילתה:
בחרו ב-SQL View מהתפריט שבצד שמאל לחזור חזרה לכתיבת השאילתה:
כעת תוכלו להריץ שאילותת ולראות את התוצאות.
קריאת נתונים - פקודת SELECT
הקובץ sql.mdb מכיל מידע על עובדי החברה שלנו, כעת נראה כיצד לכתוב שאילתות על מנת לראות את המידע הרצוי אודות העובדים.
בשלב הראשון נרצה לקרוא את כל הנתונים על כל העובדים בחברה שלנו. פעולה זו למעשה "תחזיר" לנו את כל הנתונים הנמצאים בטבלת העובדים:
SELECT * FROM UsersTable;
שאילתה זו מתחלקת לשתי פקודות פשוטות:
- SELECT * - המשמעות היא לבחור את כל (הכוכבית מסמלת "הכל")
- FROM UsersTable - מכיוון שיש במסד הנתונים מספר טבלאות, צריך לקבוע מאיזה טבלה נרצה לקרוא את המידע.
שימו לב: בסוף השאילתה הוספנו את הסימן נקודה-פסיק ( ; ) על מנת לסמן שזהו הסוף של הפקודה, אך למעשה הסימן אינו נחוץ והפקודה תפעל גם בלעדיו.
אלו הם הנתונים המתקבלים לאחר הרצת השאילתה:
id | name | phone | age | from | group |
---|---|---|---|---|---|
1 | Yael | 03-9275467 | 25 | Israel | 2 |
2 | Eliran | 03-9030201 | 40 | Israel | 3 |
3 | Joe | 00-1-304-333 | 21 | England | 2 |
4 | Avi | 09-7493758 | 50 | Israel | 2 |
5 | Noa | 03-8463927 | 22 | Israel | 3 |
6 | Jane | 00-1-222-222 | 20 | United States | 1 |
7 | Walter | 00-1-304-444 | 30 | England | 1 |
8 | Hadas | 08-6792748 | 42 | Israel | 2 |
המשימה הראשונה שלנו היא לבנות דף-קשר עבור עובדי החברה - כלומר נציג רק את שם העובד ומספר הטלפון שלו. הרי לא נרצה להראות לכל העובדים מידע חסוי אודות החברים שלהם (כמו הגיל של העובד). לכן עלינו לבקש רק חלק מהנתונים:
SELECT name, phone FROM UsersTable
כעת במקום לבקש את כל השדות של בסיס הנתונים על ידי הסימן * (כוכבית) אנו מבקשים רק את השדות name ו-phone מהטבלה UsersTable. הריצו את השאילתה בעצמכם וראו אם התוצאה היא כפי שציפינו לקבל, כך:
name | phone |
---|---|
Yael | 03-9275467 |
Eliran | 03-9030201 |
Joe | 00-1-304-333 |
Avi | 09-7493758 |
Noa | 03-8463927 |
Jane | 00-1-222-222 |
Walter | 00-1-304-444 |
Hadas | 08-6792748 |
סינון התוצאות - פקודת WHERE
ישנה בעיה קטנה. ישנם מספר עובדים שמקום עבודתם אינו בישראל. אנו רוצים ליצור דף קשר המכיל רק את העובדים מהסניף הישראלי של החברה. נוכל לסנן את התוצאות על ידי שימוש בפקודת WHERE בצורה הבאה:
SELECT name, phone FROM UsersTable WHERE UsersTable.from='Israel'
הפקודה WHERE למעשה מסננת את התוצאות. כל התוצאות שהשאילתה תחזיר עומדים בחוקים שנכתבו לאחר הפקודה WHERE. כאן החוק היה שרק כניסות בהן השדה from שווה למילה Israel יוצגו. שימו לב לצורת הכתיבה של השדה form: קודם כל נכתבת שם הטבלה UsersTable, נקודה, ואז שם השדה form.
שימו לב לסימני הגרשיים המקיפים את המילה Israel - מכיוון ש-from הוא שדה מסוג מחרוזת (Text) יש להשוות אותו למילים המוקפות בגרשיים. אילו השוונו את השדה group שהוא מסוג מספר (Number) לא היה צורך (וגם אסור) להשתמש בגרשיים אלו.
כך נראה דף הקשר החדש:
name | phone |
---|---|
Yael | 03-9275467 |
Eliran | 03-9030201 |
Avi | 09-7493758 |
Noa | 03-8463927 |
Hadas | 08-6792748 |
ניתן לסנן את התוצאות על פי מספר תנאים: לאחר הפקודה WHERE יש לכתוב את התנאים ובינהם המילים AND ו-OR. בדוגמה הבאה נציג רק את העובדים מישראל שנמצאים בקבוצה מספר 2:
SELECT name, phone FROM UsersTable WHERE UsersTable.from='Israel' AND UsersTable.group=2
ותתקבל התוצאה:
name | phone |
---|---|
Yael | 03-9275467 |
Avi | 09-7493758 |
Hadas | 08-6792748 |
מיון התוצאות - פקודת ORDER BY
העובדים התלוננו שדף הקשר מאוד מבולגן ועל מנת להקל עליהם הם הציעו לסדר את דף הקשר על פי שם המשתמש בסדר אלפא-בתי, מ-א' ועד ת'. ישנה פקודה פשוטה מאוד שניתן להוסיף לשאילתה על מנת למיין את התוצאות, הפקודה היא ORDER BY והשאילתה המלאה תיראה כך:
SELECT name, phone FROM UsersTable WHERE UsersTable.from='Israel' ORDER BY UsersTable.name ASC
צורת הכתיבה היא ORDER BY לאחריו השדה שלפיו יש למיין את הנתונים ולבסוף המילה ASC או DESC. המילה ASC משמעותה סדר-עולה ואילו המילה DESC פירושה סדר-יורד.
כעת דף הקשר מופיע לפי סדר א'-ב':
name | phone |
---|---|
Avi | 09-7493758 |
Eliran | 03-9030201 |
Hadas | 08-6792748 |
Noa | 03-8463927 |
Yael | 03-9275467 |
רוצים את הטבלה בסדר הפוך? השתמשו ב-DESC כך:
SELECT name, phone FROM UsersTable WHERE UsersTable.from='Israel' ORDER BY UsersTable.name DESC
סיכום החלק הראשון
בחלק זה למדנו קצת על בסיסי נתונים התומכים בשפת SQL, מהם שאילתות, מהם שדות וכניסות.
אנו יודעים כיצד לשלוף נתונים על ידי הפקודה SELECT, לסנן תוצאות על ידי הפקודה WHERE ולסדר תוצאות על ידי ORDER BY.
בחלק השני, נלמד כיצד לאחד מידע משתי טבלאות וכיצד לערוך, להוסיף ולמחוק כניסות.
יש דברים שלדעתי לא ניגשת אליהם נכון, לדוגמה השירוש תנאים, הצגת אותו כחלק מהדרוש ב-WHERE, שלמעשה ניתן להריץ גם תנאי אחד. בנוסף גם אילו אופטורים קיימים לא הצגת, דבר כשם שהוא בעייתי בהתייחסות לנשוא ה-WHERE.
עוד משהו הוא שם הטבלה, שהתעקשת כביכול לכתוב, אם כי בשאילתות רגילות אין בכך צורך, וזה בשלב של מתחילים עלול לבלבל.
בנוגע למיון, לא חובה לכתוב ASC בסוף, הוא הברירות מחדל של הפקודה ORDER BY.
לדעתי קצת (הרבה) רצת בכל הנוגע ל-SQL, וזו שפה דווקא שהעומק שלה הוא השימושי, ולא להציג את הבסיס עצמו.
אין לי ספק שאתה יודע ומבין את השפה, אבל מי שיקרא את המדריך לא בהכרח, תתחשב בזה ואל תדלג על כלום.
זה באמת נושא שלכל פרט קטן אפשר להיכנס לפירוט עמוק, אך המטרה הייתה להציג מספר פקודות שאפשר ישירות להשתמש בהם.
בגל מקרה, אני אשקול לעדכן את הפוסט הזה עם עוד מידע על SQL במבוא.
ווואוו איזה יופי!
טל, תודה רבה! לי זה עזר. עבדתי ע"פ ההוראות. והצלחתי!
(זה קצת מבלבל למי שיש אקסס מתקדם)
תודה רבה על הפוסט, תמשיך עם עוד כאלה!
טל שלום,
ההדרכה שלך מדהימה. סוף כל סוף הבנתי דברים שבכתה לא הבנתי...יכול להיות שלאנשים בעלי ידע יש הארות של בעלי ידע, אבל אני מאד נהניתי והשכלתי. תודה!!!!!!
תודה לימור :) תגובות כאלה בהחלט עושות חשק לכתוב עוד.
טל תודה רבה אני הבנתי כל מילה כל דקה נהנתי גם בערב שראש שלי כאב עדיין נתת לי השראה! השפה הזאתי מענינת ביותר!
תודה!
תודה זה עובד 200%!
דרך אגב ניתן לפרוץ חלק(השאר מוגנים) בSQL INJECTIONS שזה ניצול לרעה של השפה המדהימה הזאת.
מאמר מדהים... באמת שלא צריך "לפחד" מהשפה הזאת... מתחיל לשחק עם זה בעבודה שלי. תודה!
שחכתי לציין... מחכה בקוצר רוח לחלק ב' של המדריך.
תודה רבה טל
פשוט ברור וטוב מאד בתור שיעור ראשון
טל שלום,
תודה רבה, עזרת גם לי.
יש לי שאלה, האם חייבים לכתוב "UsersTable.from", לא ניתן לכתוב רק "from"?
אני שואל כי כאשר רק תנאי אחד "מישראל" זה עבד, וכאשר היו 2 תנאים "מישראל" "ומקבוצה 2" , במקרה כזה נאלצתי לכתוב גם את השם של הטבלה. השאלה שלי האם כאשר יש 2 תנאים תמיד חייבים להוסיף גם את שם של הטבלה?
תודה רבה.
היי טל!
אני מחכה בקוצר רוח להמשך הדרכת SQL.
זה חשוב מאד, וממש הכרחי לדעת את הנושא הזה כמעט בכל תחום..
אני נתקלת בזה הרבה. וחסר לי ידע..
הרבה פעמים אני נכנסת פה לאתר שלך וזה תורם המוון!! תודה.
אשמח לראות מאמרים נוספים בנושא זה.
אני רואה שאתה מחדש ומתחדש בכל העידכונים הכי חמים בשוק. וזה תמיד כייף לקרוא ולהתעדכן. ועדיין אני חושבת שהבסיס צריך להיות בצורה מורחבת ומעמיקה. מה עוד---שיש לך שפה קולחת ומענינת, אף פעם אי אפשר לקרוא רק חלקית.... אתה מעביר את המסר והחומר בצורה ברורה וכייפית. אז שוב תודה לך!
שלום
אני צריך עזרה בחיפוש חומר לימוד SQL בעברית.
אצלי מותקן Microsoft SQL Server 2008.
האם מישהו מכיר אתר רלוונטי?
לתשובתכם אודה :)
תודה רבה..בזכותך אני יודע כרגע לכתוב שאילתות בסיסיות ב-Sql . גם את זה לא ידעתי לבצע .
כל הכבוד על הכתבה,
יש חלק שני?
איך משתמשים בנתון שמצאנו בעזרת השאילתה ?
מדריך מצויין,
יכולת ההסברה שלך מעולה, פשוטה וברורה!
פירסמת כבר חלק ב'?
אם כן אשמח מאוד לראות!
תודה,
אורית
היי,
מאוד נהניתי ממה שהסברת. היה מאוד מובן וההסברים היו ממש קלילים ומוסברים.
הדוגמאות היו מעולות!
יש מצב רק לראות חלק ב. עם תוכל לשלוח לי לינק למיל או לפרסם לכולם כאן אשמח מאוד.
תודה!!
תודה רבה!!
עזר לי מאד!!
תשתתכלו זה ישן תיכו!!!!!
אז מה אם זה ישן פקודות SQL משתנות אם הזמן?
מקסים, אבל איפה החלק השני ?
מקסים, אבל איפה החלק השני ?
זה פוסט מלפני 4.5 שנים... צריך לשאול את טל של אז מה קרה לפוסט.
אני כנראה כבר לא אשלים את ההמשך, אבל עם הבסיס הזה אפשר להמשיך ללמוד לבד מאלפי האתרים האחרים ברשת (אין לי אחד ספציפי להמליץ עליו).
ממש עזר לי, תודה רבה
גהדהדקעהדקהד
file:///C:/Users/tomerha/Desktop/תמונה%204.JPG
יפה מאד, תודה.היכן פרק שני ?
היי,
מאוד נהניתי ממה שהסברת. היה מאוד מובן וההסברים היו ממש קלילים ומוסברים.
הדוגמאות היו מעולות!
יש מצב רק לראות חלק ב. עם תוכל לשלוח לי לינק למיל או לפרסם לכולם כאן אשמח מאוד.
תודה!!