راهنمای گام به گام برای خواندن و درک پرس و جوهای SQL - KDnuggets

راهنمای گام به گام برای خواندن و درک پرس و جوهای SQL – KDnuggets

گره منبع: 3091384

راهنمای گام به گام برای خواندن و درک پرس و جوهای SQL
تصویر Freepik
 

SQL یا استاندارد Query Language یک زبان برنامه نویسی برای مدیریت و دستکاری داده ها در یک سیستم مدیریت پایگاه داده رابطه ای (RDBMS) است. این زبان استانداردی است که در بسیاری از شرکت‌ها برای کمک به کسب‌وکارها برای دسترسی راحت به داده‌ها استفاده می‌شود. از آنجا که به طور گسترده مورد استفاده قرار می گیرد، استخدام معمولاً SQL را به عنوان یکی از مهارت های ضروری ذکر می کند. به همین دلیل است که یادگیری در مورد SQL ضروری است.

یکی از مشکلات رایج افراد هنگام یادگیری SQL، درک پرس و جوها است، عمدتاً زمانی که شخص دیگری آنها را می نویسد. ما به عنوان یک تیم در شرکت ها کار می کنیم و اغلب نیاز به خواندن و درک سوالات SQL آنها داریم. بنابراین، ما باید ساختارشکنی پرس و جوهای SQL را تمرین کنیم و آنها را درک کنیم.

این مقاله یک فرآیند گام به گام برای خواندن و درک پرس و جوهای SQL را طی می کند. چگونه ما آن را انجام دهیم؟ بیایید وارد آن شویم.

اولین کاری که باید در هنگام مواجهه با پرس و جوی SQL انجام دهیم، درک هدف کلی پرس و جوهای SQL است. هدف کلی به این معنی نیست که ما کاملاً در مورد ساختار پرس و جو می دانیم. این بیشتر در مورد جریان های کلی است.

ما باید پرس و جوهای استاندارد SQL را برای درک پرس و جو عمومی SQL درک کنیم. اکثر پرس و جوهای SQL با عبارت شروع می شوند انتخاب کنید بند و دنبال کنید از عبارت. از آنجا ادامه می‌دهیم، اغلب پرسش‌ها دنبال می‌شوند بپیوندید, مکانی که در آن, دسته بندی بر اساس, سفارش توسط، و داشتن بندها

بندهای بالا در پرس و جوهای SQL استاندارد هستند که باید آنها را درک کنیم. برای هر بند، توابع آنها عبارتند از:

  1. انتخاب کنید: چه ستون هایی باید از جدول گرفته شوند
  2. از: داده ها از کدام جدول آمده است
  3. بپیوندید: جداول را با شناسه مشخص شده ترکیب کنید
  4. مکانی که در آن: فیلتر داده ها بر اساس شرایط
  5. دسته بندی بر اساس: داده ها را بر اساس مقدار ستون سازماندهی کنید و اجازه دهید عملکرد تجمیع انجام شود.
  6. سفارش داده شده توسط: ترتیب نتایج داده ها را بر اساس ستون خاص ترتیب دهید
  7. داشتن: شرایط فیلتر برای عملکرد تجمع که نمی توان با آن مشخص کرد مکانی که در آن

اینها بندهای استاندارد هستند و آنچه باید در ابتدا هنگام درک ساختار کلی پرس و جوی 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;

 

وقتی به پرس و جو بالا نگاه می کنید، سعی کنید بندهای استاندارد را شناسایی کنید. این بند به شما درک درستی از اینکه چه داده هایی انتخاب شده است (انتخاب کنید) از کجاست (از و بپیوندیدو شرایط (مکانی که در آن, دسته بندی بر اساس, سفارش داده شده توسطو داشتن). 

به عنوان مثال، خواندن پرس و جو در بالا به شما درک موارد زیر را ارائه می دهد:

  1. ما سعی می کنیم سه نوع داده مختلف به دست آوریم: نام از جدولی به نام مشتریان، محصول از جدولی به نام خریدها، و تجمیع ستون های قیمتی که مشخص نمی کنند جدول از کجاست و با نام مستعار total_price (اطلاعات از بند) انتخاب کنید). 
  1. داده های کلی از جداول خریدها و مشتریان بدست می آید که با استفاده از ستون cust_id از خریدها و ستون id از جدول مشتری به یکدیگر می پیوندند (اطلاعات از بند از جانب) و بپیوندید). 
  1. ما فقط داده هایی را با مقدار ستون دسته بندی در جدول خریدها به عنوان "آشپزخانه" انتخاب می کنیم (اطلاعات از بند مکانی که در آن), 
  1. گروه برای تابع تجمع با نام و ستون محصول که از جدول مربوطه آمده است (اطلاعات از بند دسته بندی بر اساس), 
  1. همچنین از مجموع نتیجه تابع تجمیع فیلتر شده است که در آن مجموع_price بیش از 10000 است (اطلاعات از بند داشتن)، و 
  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;

 

پرس و جو در حال حاضر پیچیده تر و طولانی تر به نظر می رسد، اما تمرکز اولیه باید روی نهایی باشد انتخاب کنید، که به نظر می رسد سعی در تولید کل تاریخچه هزینه و خرید مشتری دارد. سعی کنید نتیجه نهایی را ارزیابی کنید و آن را از آنجا تجزیه کنید.

ما بینشی از نتیجه باید از نمایش داده شد. قسمت بعدی این است که ببینیم شرایط فینال چگونه است انتخاب کنید هستند. بند شرایط از جمله مکانی که در آن, دسته بندی بر اساس, سفارش داده شده توسطو داشتن آنهایی بودند که نتیجه کلی داده ها را کنترل کردند. 

سعی کنید شرایط پرس و جو ما را بخوانید و درک کنید و نتیجه نهایی پرس و جو خود را بهتر درک کنیم. به عنوان مثال، در پرس و جوی قبلی SQL ما، شرط نهایی فقط عبارت است سفارش داده شده توسط. این بدان معناست که نتیجه نهایی بر اساس قیمت کل محصول به ترتیب نزولی مرتب می شود. 

دانستن شرایط نهایی به شما کمک می کند بخش قابل توجهی از پرس و جو و هدف کلی پرس و جو را درک کنید.

در نهایت، ما باید بفهمیم که داده ها از کجا می آیند. پس از اینکه اطلاعات مورد نظر را برای انتخاب و شرایط بدست آوردن آنها دانستیم، باید منبع را درک کنیم. آخرین بپیوندید این بند به ما در مورد نحوه تعامل جداول و جریان داده ها می دهد.

به عنوان مثال، پرس و جو پیچیده قبلی نشان می دهد که ما دو بار 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
)

 

ما می‌توانیم فرآیند فکر نویسنده را به وضوح ردیابی کنیم، زمانی که هر زیرپرسش را از یک مورد نزدیکتر به نتیجه تا دورتر تجزیه کنیم. 

اگر برای درک هر سوال فرعی نیاز به کمک دارید، فرآیند بالا را تکرار کنید. با کمی تمرین، تجربه بهتری در خواندن و درک پرس و جو خواهید داشت.

خواندن و درک پرس و جوهای SQL مهارتی است که همه باید در عصر مدرن داشته باشند، زیرا هر شرکتی با آنها سروکار دارد. با استفاده از راهنمای گام به گام زیر، زمان بهتری برای درک پرس و جوهای پیچیده SQL خواهید داشت. مراحل شامل:

  1. ساختار کلی پرس و جوی SQL را درک کنید
  2. انتخاب نهایی را درک کنید
  3. بند شرایط نهایی را درک کنید
  4. پیوستن نهایی را درک کنید
  5. ترتیب معکوس خواندن و تکرار

 
 

کورنلیوس یودا ویجایا دستیار مدیر علوم داده و نویسنده داده است. در حالی که به طور تمام وقت در آلیانز اندونزی کار می کند، دوست دارد نکات Python و Data را از طریق رسانه های اجتماعی و رسانه های نوشتاری به اشتراک بگذارد.

تمبر زمان:

بیشتر از kdnuggets