
SELECT FirstName, LastName FROM Employees מחזירה רק את העמודות שנבחרו. SELECT * מחזירה את כל העמודות.AS נותן שם אחר לעמודה בתוצאה, למשל FirstName AS [first name].+ מחבר עמודות ומחרוזות. FirstName + ' ' + LastName מחבר את השם המלא עם רווח ביניהם.ORDER BY LastName ממיין בסדר עולה, ו-DESC בסדר יורד.DISTINCT מחזיר כל ערך פעם אחת, למשל את רשימת הערים שבהן גרים העובדים, בלי חזרות.TOP 3 מחזיר שלוש שורות ראשונות, ו-TOP 50 PERCENT מחזיר בערך חצי מהשורות.UnitPrice * 1.16 למחיר כולל מע"מ.WHERE CategoryID = 2 מסנן שורות. האופרטורים הם =, <, >, <=, >= ו-<>.CategoryID = 2 AND UnitPrice > 30 מחזיר רק שורות שעונות לשני התנאים. NOT הופך תנאי.UnitPrice BETWEEN 10 AND 20 כולל את הקצוות. City IN ('London', 'Seattle') מחזיר שורות שמתאימות לאחד הערכים ברשימה.ProductName LIKE 'C%' מחזיר מוצרים שמתחילים ב-C. סוגריים מרובעות מציינות תו אחד מתוך רשימה.IS NULL ו-IS NOT NULL. ISNULL(Fax, 'NoFax') מחליף ריק בטקסט להצגה.FLOOR מעגל כלפי מטה, CEILING כלפי מעלה, LEFT מחזיר תווים מההתחלה, UPPER הופך לאותיות גדולות.FROM Products p JOIN Categories c ON p.CategoryID = c.CategoryID מציג את שם הקטגוריה לכל מוצר. אפשר להוסיף JOIN שלישי, לספקים.INSERT INTO Employees (LastName, FirstName) VALUES (...). עמודות וערכים צריכים להתאים בסדר, וערך טקסט נכתב בגרשיים.UPDATE Products SET UnitPrice = UnitPrice * 1.1 WHERE SupplierID = 7 מעלה ב-10 אחוז את מחירי מוצרי הספק. בלי WHERE יתעדכנו כל השורות בטבלה.DELETE FROM Employees WHERE EmployeeID = 10 מוחק שורה אחת. בלי WHERE יימחקו כל השורות.הטקסט המלא של הדקות הראשונות בהרצאה «פקודות SQL שחייבים לדעת» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בשיעור היום אנחנו הולכים ללמוד את שפת SQL. שפת SQL מאפשרת לפנות למסד הנתונים מתוך כל אפליקציה או כל אתר אינטרנט ולבצע כל מיני שאילתות על מסד הנתונים שמאפשרות להוסיף מידע, למחוק מידע, לעדכן מידע ולהחזיר נתונים אלינו לאפליקציה.
שפת SQL זה בעצם השפה הבינלאומית שמתקשרת עם מסדי הנתונים והיא תקפה לרוב מסדי הנתונים שקיימים היום. אז איך אנחנו בעצם יוצרים שאילתה בשפת sql? אז אנחנו יכולים ללחוץ כאן על new query ולפתוח דף חדש שמאפשר לנו לכתוב שאילתה.
יש לי פה דף לבן ואני יכול בדף הזה לכתוב שאילתה. כאשר אני שומר אותו, ctrl s, הקובץ נשמר לי על ידי סיומת sql. דרך אגב, ראשי התיבות של sql זה Structured Query Language או בעברית שפת שאילתות מובנית.
עכשיו אני יכול לשמור את הקובץ הזה איפה שאני רוצה, בואו נשמור אותו על הדסטופ ואנחנו נתחיל בפקודות בחירת נתונים שנקראות סלקט.
הדבר הראשון שעלי לבצע בקובץ ה-SQL בשביל להתחיל לכתוב שאילתות זה להגיד לו מאיזה מסד נתונים אני רוצה שהוא יביא לי את הנתונים. אני רואה שבדאטאבייסס יש לי כל מיני מסדי נתונים, אחד מהם זה ה-college שהגדרנו לפני זה, אני רואה כאן שיש לי מסד נתונים שנקרא Northwing וזה מסד נתונים חינמי מאוד מאוד מוצלח של מיקרוסופט, שמכיל בתוכו מספר
טבלאות שקשורות לחברה ליבוא וייצוא מוצרי מזון ייחודיים מכל העולם. בואו שנייה נעיף מבט בטבלאות שיש כאן. ואנחנו רואים שיש לנו פה טבלה של employees שמאפשרת לנו להסתכל על מידע שקשור לעובדים, יש לנו טבלה שנקראת customers שמאפשרת לנו לראות נתונים לגבי לקוחות, categories של קטגוריות של מוצרים, פרודקטס שמציגה לנו מוצרים שונים, ספליירס שמציגה לנו
ספקים ועוד כל מיני טבלאות אחרות. אנחנו יכולים לעבוד עם הטבלה הזאתי, או יותר נכון עם מסד הנתונים הזה בשביל לבצע שאילתות כי הוא מסד נתונים ממש טוב שמכיל המון מידע.
אז בואו נתחיל. אז לצורך הגדרה מאיזה מסד נתונים אני רוצה לקחת את המידע שלי אנחנו משתמשים בפקודת sql שנקראת use. לאחר מכן אני מגדיר את מסד הנתונים והפקודה הבאה שאני רושם זה go.
Northwind מציינת כרגע מאיזה מסד נתונים להתחיל לשלוף את המידע, או מאיזה מסד נתונים השאילתות הבאות מתייחסות אליו.
Go מציינת תוציא לפועל את הפקודות שהיו עד עכשיו, וכך כרגע אני יכול להתעסק עם מסד הנתונים Northwind. הפקודה הראשונה שאנחנו הולכים לראות זה פקודת סלקט שמאפשרת לנו לבחור נתונים.
הפקודה מתחילה במילה סלקט, ולאחר מכן אני רושם את שמות העמודות שאני רוצה לשאוב מהם נתונים. בואו ניקח נתונים מטבלת העובדים. טבלת העובדים בנורת'ווינד קיימים לי מספר עמודות, בואו נסתכל עליהן.
יש לנו פה את טבלת העובדים, אמפלואיז, עמודות, אני רואה שיש לי עמודה שמדברת על אמפלואי-איי-די שזאת המפתח, עמודה שמדברת על לאסט-ניים, פרסט-ניים, טייטל וכולי.
בואו נניח שאני רוצה לקחת רק את הנתונים של פרסט-ניים ולאסט-ניים. כל מה שאני רושם זה את השמות של העמודות מופרדות עם פסיקים, לאחר מכן אני רושם From ולאחר מכן שם הטבלה.
בשביל להריץ את הפקודה אני לוחץ על Execute או במקלדת על F5. ואני רואה את הנתונים שהוא מחזיר לי. מה בעצם קרה כאן? מה שכתבנו כאן זאת שאילתת SQL פשוטה שאומרת למסד הנתונים Select, כלומר תחזיר לי בחזרה את עמודת First Name ואת עמודת Last Name מתוך טבלת Employees.
אם אתר או אפליקציה כלשהי הייתה שולחת למסד הנתונים את השאילתה בדיוק הזאתי, מוסד הנתונים היה מחזיר לה בדיוק את הטבלה שאנחנו רואים כאן, שזה בעצם כל הנתונים שנמצאים בטבלת העובדים, אבל אני רציתי רק את ה-First Name ואת ה-Last Name.
אם לדוגמה הייתי מוסיף פה גם את עמודת סיטי והייתי מריץ את זה הייתי מקבל גם את עמודת סיטי. והמשפט הכי פשוט בנוגע ל-Select, יכול להיות מצב שאנחנו רוצים את כל העמודות ולא רוצים לפרט אותן אחת אחת.
אז יש לנו פה אפשרות להגדיר סלקט כוכבית כאשר כוכבית מתייחסת למילה all. סלקט כוכבית from employees ונריץ את זה ונראה כרגע שהוא נותן לי שתי תוצאות.
הסיבה שהוא נותן לי שתי תוצאות זה בגלל שיש לי פה שתי שאילתות. התוצאה הראשונה שייכת לשאילתה הראשונה. התוצאה השנייה שייכת לשאילתה השנייה ואנחנו רואים באמת שהוא החזיר לי את כל העמודות.
אם הייתי רוצה להריץ רק את השאילתה השנייה הייתי צריך לסמן רק אותה ואז להריץ. אז הוא היה נותן לי אך ורק את התוצאות ששייכות לשאילתא המסומנת.
בואו נחזור רגע לפורמט של השאילתא הראשונה, נעתיק אותו לכאן ונריץ אותו. אנחנו רואים שקיבלנו את ה-First Name, Last Name ו-City ואכן אנחנו רואים שיש לנו פה שמות של עמודות - First Name, Last Name ו-City.
אבל מה קורה אם במקום First Name כשתי מילים מחוברות, הייתי רוצה ששם העמודה שתחזור תהיה קצת שונה, לדוגמה - First רווח Name.
ומה שהייתי יכול לעשות זה להגדיר כינוי לעמודה הזאתי. ואז בסוגריים מרובעות first רווח name או כל כינוי אחר.
בואו נריץ ונראה כעת ששם העמודה זה first רווח name. אני כמובן יכול לעשות את זה עבור כל עמודה. לדוגמה גם ל-last name, ניתן כינוי as last name, נסמן, נריץ ונראה שזה שם העמודה החדש שיש לנו.
במקום סוגריים מרובעות יכלתי לעשות את זה גם עם גרש בודד ועוד תחביר שניתן לביצוע. קיבלנו את אותו הדבר ולעיתים אנחנו נראה שאין לנו את המילה as כי היא לא חייבת להיות, מסד הנתונים יודע שאנחנו רוצים את זה בתור כינוי.
הדבר הבא שאנחנו יכולים לעשות בפקודת סלקט זה לבצע איזושהי תשלובת מסוימת בין העמודות. לדוגמה, אני רוצה עמודה אחת שתהיה full name, שבתוכה יהיו שם פרטי, משורשרים, שם משפחה, וכמובן רווח ביניהם.
אז אנחנו יכולים לעשות מעין שרשור על הערכים שמגיעים ממסד הנתונים. וזה מתבצע בצורה הבאה: first name, פלוס זה אופרטור השרשור במקרה הזה, last name, from employees.
אוקיי, בואו נריץ ונראה מה קורה. אני רואה שאני מקבל את הנתונים בעמודה אחת, אבל הם מוצמדים, אין ביניהם רווח. אז כל מה שאנחנו צריכים לעשות זה להוסיף עוד שרשור, ולהוסיף תו אחד של רווח.
מידע טקסטואלי בשפת SQL מיוצג על ידי גרש בודד, ואז המידע הטקסטואלי, לא משנה איזה, ואז עוד גרש.
בואו נסתכל על זה. ונראה כרגע שיש לנו שם פרטי משורשר עם רווח, משורשר עם שם משפחה. אבל לעמודה הזאת אין שום כינוי, אז בואו נגדיר לה גם כינוי.
כעת הגדרתי לה כינוי full name. זה בעצם שם העמודה שהולכת לחזור. דרך אגב, שפת SQL היא לא case-sensitive, זאת אומרת שהיא לא רגישה לאותיות קטנות ואותיות גדולות.
הייתי יכול לרשום גם select all from employees, באיזו צורה שאני רוצה. מסד הנתונים היה מבין את זה לגמרי. הדבר הבא זה מיון הנתונים.
מה קורה אם אני רוצה לבחור את שם הפרטי ושם המשפחה ואני רוצה למיין אותם בוא נניח לפי שם המשפחה. אני רואה כרגע שזה לא ממויין לי אני רואה פה d, אני רואה f, l, p, b, s וכו'.
בשביל למיין אני יכול להגדיר order by ואז שם העמודה שאני רוצה למיין לפיה. לדוגמה last name. כעת זה ממויין לפי ה-last name אני רואה פה b, c, d, d וכו' ויכלתי גם למיין את זה בסדר הפוך על ידי הפקודה d, e, s, c שזה קיצור של descending.
בעצם ממוין בסדר יורד. יכול להיות מצב שיש לי שתי שמות משפחה אותו הדבר והייתי רוצה להמשיך ולמיין מיון פנימי עם השם הפרטי, ואז הייתי יכול להוסיף כאן עוד עמודה לצורך מיון.
אם היו לי שתי שמות משפחה אותו הדבר הייתי עדיין רואה מיון פנימי של שמות הפרטיים ספציפית לגבי שני שמות המשפחה הם אותו דבר.
כעת מה קורה אם אני רוצה להציג מידע ייחודי, כלומר מידע שלא חוזר על עצמו פעמיים? למה הכוונה? בוא נניח שקיבלתי מטלה מהבוס להראות את כל הערים שבהם גרים העובדים מנורת'ווינד, מחברת נורת'ווינד.
אז כמובן שהייתי יכול לכתוב את השאילתה הבאה: Select city from employees. כלומר, מטבלת העובדים תראה לי רק את עמודת סיטי, כי אני רוצה לראות באיזה ערים הם גרים.
בואו נריץ את זה ונראה את רשימת הערים שקיימות בטבלה. אבל שימו לב מה המטלה שקיבלתי. המטלה שקיבלתי זה לומר באיזה ערים הם גרים.
אני לא רוצה לומר שיש לי את לונדון ארבע פעמים, אני רוצה לומר שיש לי את לונדון פעם אחת. ויש לנו פקודה שנקראת Distinct. Distinct זה ייחודי ולכן הוא יחזיר לי כל ערך בצורה חד פעמית בלבד.
הדבר הבא שיכול להיות זה שאני רוצה רק אחוז מסוים מהערכים ממסד הנתונים שלי או מספר מסוים מהערכים. אם הייתי אומר דבר כזה Select All From Employees, הייתי כמובן מקבל את כל הרשומות שקיימות לי בתוך טבלת העובדים.
הרשומות, יש לי תשע רשומות. אני יכול להגיד משהו קצת שונה. Select Top 3 All From Employees תחזיר לי רק את שלושת הראשונות.
אפשרות אחרת זה להחזיר Top 3% בואו נעשה Top 50%. כעת מסד הנתונים החזיר לי 50% בערך מהרשומות שקיימות לי במסד הנתונים. הדבר הבא שניתן לביצוע במשפטי Select זה לבצע פעולות מתמטיות על ערכים שנמצאים לי בטבלת הנתונים שאני רוצה להביא.
לדוגמה, בואו נבחר את שם המוצר Product Name ואת המחיר שלו Unit Price מתוך טבלת Products. מה קורה אם אני רוצה להחזיר גם את שם המוצר, גם את המחיר, ואני רוצה לראות את המחיר פלוס מע"מ?
אני יכול בהחלט לבצע את זה בצורה הבאה: אני יכול ליצור עוד עמודה שנקראת Unit Price ולבצע פעולה מתמטית על העמודה הזאת.
לדוגמה, כפול 1.16. ואני רואה שקיבלתי כרגע Product Name, Unit Price ועמודה שאין לה שם אבל יש לה איזושהי פעילות מתמטית שהתבצעה על המחיר הזה, שזה בעצם Unit Price כפול 1.16. אני יכול כמובן גם לתת לה כינוי PriceVid VAT כאשר VAT זה Value Added Tax מע"מ.
אלה הפעולות שניתן לבצע על ידי Select בצורה הכי פשוטה. עכשיו מה קורה אם אנחנו רוצים לא להביא את כל הרשומות אלא להביא רשומות מסוימות מקודם ראינו שהבאנו רק מספר מסוים או אחוז מסוים של רשומות אבל יכול להיות שאני רוצה רשומות יותר ספציפיות
כאן יש לנו פקודה אחרת שמאפשרת לנו לבצע חיתוך על הרשומות בואו נסתכל מה הפקודה נסגור את הקובץ הזה נפתח קובץ חדש נשמור אותו והפקודה שאנחנו הולכים לראות נקראת where אז בואו ניקח כרגע מטבלת המוצרים את product name את unit Price ואת Category ID from Products נריץ ונראה שקיבלתי את שלושת העמודות האלה
מטבלת המוצרים כאשר קיבלתי את כל הרשומות מהטבלה אוקיי אני רוצה עכשיו לא להביא את כל הרשומות אלא להביא רק רשומות לדוגמה מקטגוריה מספר 2 אז אני עכשיו צריך להוסיף עוד חלק שאומר where כלומר כאשר ולתת את התנאי לדוגמה קטגוריה ID שווה 2.