PracticU

יצירת תת-שאילתות ב-SQL

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › יצירת תת-שאילתות ב-SQL
מילון מושגים:
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
תנאי - ביטוי לוגי בקוד שתוצאתו אמת או שקר, וקובע אילו פקודות יתבצעו בהתאם לערכו.

יצירת תת-שאילתות ב-SQL
לפעמים תנאי בשאילתה תלוי בחישוב שאינו שמור בשום מקום, למשל "מוצרים שמחירם גדול או שווה לממוצע המחירים". הפתרון הוא תת-שאילתה.
הבעיה והפתרון
1. הניסיון הישיר: Where UnitPrice >= Avg(UnitPrice) נכשל. המערכת מציגה שגיאה שפונקציית aggregate לא יכולה להופיע כך ב-Where.
2. תת-שאילתה: זו שאילתת SQL בתוך שאילתה אחרת. המערכת מחשבת אותה קודם, ומשתמשת בתוצאה בשאילתה החיצונית. היא חייבת להיות בסוגריים עגולים.
3. הכתיבה: Where UnitPrice >= (Select Avg(UnitPrice) From Products). הרצה של תת-השאילתה לבדה מחזירה את הממוצע עצמו.
4. בדיקת התוצאה: עם Order By UnitPrice רואים שהמחירים מתחילים מ-30 ומעלה, כי הממוצע הוא 28 ומשהו. אפשר להציג רק ProductName ו-UnitPrice, ולפרוס את השאילתה על כמה שורות לקריאות.
השאילתה הפנימית נקראת inner query והחיצונית outer query.
עכשיו אפשר לסנן לפי ערך שמחושב תוך כדי, כמו ממוצע, בעזרת תת-שאילתה.
השיעור הבא בקורס: שימוש בפקודות Union לאיחוד מידע ב-SQL

פרקי ההרצאה: יצירת תת-שאילתות ב-SQL

  1. 00:00

    הצורך בחישוב נפרד בשאילתה

  2. 00:45

    מדוע Aggregate לא עובד ב-WHERE

  3. 01:25

    כתיבת תת-שאילתה בסוגריים

  4. 02:10

    שילוב inner query ו-outer query

תמלול ההרצאה: יצירת תת-שאילתות ב-SQL

הטקסט המלא של הדקות הראשונות בהרצאה «יצירת תת-שאילתות ב-SQL» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    מה קורה אם אנחנו רוצים לבצע שאילתא שמשתמשת באיזשהו חישוב נפרד? מה הכוונה? בואו נעשה דבר כזה Select all from products where unit price גדול או שווה ובדיוק פה אני רוצה את הממוצע של המחירים אבל אין לי את ממוצע המחירים ממוצע המחירים זה חישוב שאני צריך לבצע הוא לא קיים לי איפשהו אז אתם יכולים להגיד

  2. 00:32

    ומה הבעיה? בוא תיקח average של unit price כי average זה הממוצע, ראינו את זה בפונקציות גרופינג אבל זה לא יעבוד. בואו נריץ.

  3. 00:46

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

  4. 01:06

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

  5. 01:18

    תת-שאילתא זאת בעצם שאילתת SQL שנמצאת בתוך שאילתת SQL אחרת. המערכת קודם כל מחשבת את התת-שאילתא, מחזירה ממנה את התוצאה, ולוקחת את התוצאה הזאתי ומשתמשת איתה בשאילתה החיצונית.

  6. 01:36

    כל תת-שאילתה חייבת להיות בתוך סוגריים עגולים. אז אנחנו יכולים לכתוב פה תת-שאילתה של Select Average של Unit Price From Product. אם אני עכשיו אריץ אך ורק את תת-השאילתה, אני אקבל את הממוצע האמיתי.

  7. 01:57

    אם אני אריץ את כלל השאילתה, אני אקבל את כל המוצרים שהמחיר שלהם גדול או שווה לממוצע כי כאן חזר לי הממוצע ששולב בתוך שאילתה חיצונית יש לנו inner query ו-outer query בואו אולי נמיין את זה order by unit price נריץ ויש לנו כאן את ה-unit price ותסתכלו שה-unit price מתחיל משלושים כי הממוצע שלו של כלל המחירים

  8. 02:32

    היה עשרים ושמונה אז אנחנו רואים שהוא מתחיל

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: שימוש בפונקציות Grouping

ההרצאה הבאה: שימוש בפקודות Union - לאיחוד מידע ב-SQL

הרצאות קשורות מקורסים אחרים

  • יצירת שאילתות View - דוט-נט Core
  • כתיבת שאילתות ל-MongoDB
  • LINQ ל- SQL
  • התקנה של SQL

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI