מדריך צעד אחר צעד לקריאה והבנה של שאילתות SQL - KDnuggets

מדריך צעד אחר צעד לקריאה והבנה של שאילתות SQL - KDnuggets

צומת המקור: 3091384

מדריך צעד אחר צעד לקריאה והבנה של שאילתות SQL
תמונה על ידי פריפיק
 

SQL, או Standard Query Language, היא שפת תכנות לניהול ולטפל בנתונים בתוך מערכת ניהול מסד נתונים יחסי (RDBMS). זוהי שפה סטנדרטית המשמשת בחברות רבות כדי לעזור לעסקים לגשת לנתונים בצורה חלקה. מכיוון שהוא נמצא בשימוש נרחב, התעסוקה מציינת את SQL כאחת המיומנויות הנחוצות. לכן חיוני ללמוד על SQL.

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

מאמר זה יעביר תהליך שלב אחר שלב לקריאה והבנה של שאילתות SQL. איך אנחנו עושים את זה? בואו ניכנס לזה.

The first thing we need to do when encountering an SQL query is to understand the general intention of the SQL queries. The general intention doesn’t mean we know entirely about the query’s structure; it’s more about the overall flows.

עלינו להבין את שאילתות SQL הסטנדרטיות כדי להבין את שאילתת SQL הכללית. רוב שאילתות SQL מתחילות ב- לבחור סעיף ופעל לפי ה מן סָעִיף. אם ממשיכים משם, לרוב השאילתות עוקבות אחריהן להצטרף, איפה, קבוצתי קבוצתי, מיין לפי, ו HAVING סעיפים.

הסעיפים לעיל הם סטנדרטיים בשאילתות SQL שעלינו להבין. עבור כל סעיף, הפונקציות שלהם הן:

  1. לבחור: אילו עמודות יש לקחת מהטבלה
  2. מן: מאיזו טבלה הגיעו הנתונים
  3. להצטרף: שלב טבלאות עם המזהה שצוין
  4. איפה: מסנן נתונים המבוסס על התנאי
  5. קבוצתי קבוצתי: Organize the data based on the column’s value and allow aggregation function to be performed.
  6. מיין לפי: סדר את סדר תוצאות הנתונים על סמך העמודה הספציפית
  7. HAVING: תנאי המסנן לפונקציית צבירה שלא ניתן לציין איתה איפה

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

SELECT 
  customers.name, 
  purchases.product, 
  SUM(price) as total_price 
FROM 
  purchases 
  JOIN customers ON purchases.cust_id = customers.id 
WHERE 
  purchases.category = 'kitchen' 
GROUP BY 
  customers.name, 
  purchases.product 
HAVING 
  total_price > 10000 
ORDER BY 
  total_price DESC;

 

כאשר אתה מסתכל על השאילתה למעלה, נסה לזהות את הסעיפים הסטנדרטיים. הסעיף יספק לך הבנה של אילו נתונים נבחרים (לבחור), מאיפה זה (מן ו להצטרף), והמצב (איפה, קבוצתי קבוצתי, מיין לפי, ו HAVING). 

לדוגמה, קריאת השאילתה למעלה תספק לך הבנה של הדברים הבאים:

  1. אנחנו מנסים לקבל שלושה סוגים שונים של נתונים: השם מטבלה שנקראת לקוחות, המוצר מטבלה שנקראת רכישות, והצטברות עמודות המחיר שאינן מזהות מאיפה הטבלה ועם הכינוי total_price (מידע מסעיף לבחור). 
  1. The overall data would come from purchases and customers tables that join together using the cust_id column from purchases and the id column from the customer’s table (Information from clause מ) ו להצטרף). 
  1. נבחר רק את הנתונים עם ערך עמודת הקטגוריה בטבלת הרכישות בתור 'מטבח' (מידע מסעיף איפה), 
  1. קבוצה עבור פונקציית הצבירה עם עמודת השם והמוצר שהגיעו מהטבלה המתאימה (Information from clausule קבוצתי קבוצתי), 
  1. מסונן גם מסכום התוצאה של פונקציית הצבירה כאשר המחיר הכולל הוא יותר מ-10000 (מידע מסעיף HAVING,) ו 
  1. סדר את הנתונים יורדים לפי total_price (מידע מסעיף מיין לפי).

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

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

בואו נשתמש בקוד מורכב יותר כמו זה למטה.

WITH customerspending AS (
  SELECT 
    customers.id, 
    SUM(purchases.price) as total_spending 
  FROM 
    purchases 
    JOIN customers ON purchases.cust_id = customers.id 
  GROUP BY 
    customers.id
) 
SELECT 
  c.name, 
  pd.product, 
  pd.total_product_price, 
  cs.total_spending 
FROM 
  (
    SELECT 
      purchases.cust_id, 
      purchases.product, 
      SUM(purchases.price) as total_product_price 
    FROM 
      purchases 
    WHERE 
      purchases.category = 'kitchen' 
    GROUP BY 
      purchases.cust_id, 
      purchases.product 
    HAVING 
      SUM(purchases.price) > 10000
  ) AS pd 
  JOIN customers c ON pd.cust_id = c.id 
  JOIN customerspending cs ON c.id = cs.id 
ORDER BY 
  pd.total_product_price DESC;

 

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

יש לנו את התובנה שהתוצאה צריכה להיות מהשאילתות. החלק הבא הוא לראות מה התנאים לגמר לבחור הם. סעיף התנאים, לרבות איפה, קבוצתי קבוצתי, מיין לפי, ו HAVING היו אלה ששלטו בתוצאת הנתונים הכוללת. 

Try to read and understand our query’s conditions, and we will better understand our query’s final result. For example, in our previous SQL query, the final condition is only the מיין לפי. המשמעות היא שהתוצאה הסופית תוסדר לפי מחיר המוצר הכולל בסדר יורד. 

ידיעת התנאים הסופיים תעזור לך להבין חלק משמעותי מהשאילתה ואת כוונת השאילתה הכוללת.

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

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

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

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

SELECT 
  purchases.cust_id, 
  purchases.product, 
  SUM(purchases.price) as total_product_price 
FROM 
  purchases 
WHERE 
  purchases.category = 'kitchen' 
GROUP BY 
  purchases.cust_id, 
  purchases.product 
HAVING 
  SUM(purchases.price) > 10000

 

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

WITH customerspending AS (
  SELECT 
    customers.id, 
    SUM(purchases.price) as total_spending 
  FROM 
    purchases 
    JOIN customers ON purchases.cust_id = customers.id 
  GROUP BY 
    customers.id
)

 

We can track down the author’s thought process clearly when we break down each subquery from the one closer to the result to the furthest. 

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

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

  1. הבן את מבנה שאילתת SQL כללי
  2. הבן את הבחירה הסופית
  3. הבן את סעיף התנאים הסופיים
  4. הבן את ההצטרפות הסופית
  5. קריאה וחזרה בסדר הפוך

 
 

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

בול זמן:

עוד מ KDnuggets