چگونه از مبتدی به سطح پیشرفته در SQL برسیم
SQL همهجا هست.
این زبان در پسزمینهی تقریباً تمام پایگاه دادههایی که با آنها تعامل دارید قرار دارد، چه متوجهاش باشید، چه نه.
اما نکته اینجاست:
بیشتر افراد فقط به اندازهای SQL یاد میگیرند که بتوانند سر و ته کار را هم بیاورند.
مثلاً فقط یک دستور SELECT ساده، همین و بس.
اما SQL چیزی فراتر از یک زبان کوئریگیری ساده است.
وقتی از تمام ظرفیت آن استفاده شود، به یکی از قدرتمندترین ابزارهای موجود در جعبهابزار تحلیلی شما تبدیل میشود.
قادر است دادههای خام را به بینشهایی تبدیل کند که تصمیمگیری را هدایت میکنند.
اگر واقعاً میخواهید مهارتهای دادهایتان را جدی بگیرید، SQL باید به یک اولویت تبدیل شود.
در ادامه، ۶ گام اساسی برای رساندن شما از سطح مبتدی به کاربر پیشرفته آورده شده است:
• شش رکن اصلی – ساختار پایهی کوئریها
• دستورات CASE – افزودن منطق if-then به کوئریها
• JOIN ها – ترکیب دادهها از چند جدول
• زیرکوئریها و CTEها – تجزیه منطق پیچیده به بخشهای قابل فهم
• توابع پنجرهای (Window Functions) – انجام محاسبات پیشرفته بدون تجمیع داده
• توابع مربوط به نوع داده (Data Type Functions) – پاکسازی و آمادهسازی دادهها
بیایید هرکدام را جداگانه بررسی کنیم.
1. شش رکن اصلی (The Big Six)
اینها اجزای پایهای تقریباً همهی کوئریهای SQL هستند:
• SELECT
– مشخص میکند که چه فیلدهایی باید بازگردانده شوند
• FROM
– مشخص میکند دادهها از کدام جدول یا جداول گرفته شوند
• WHERE
– قبل از گروهبندی، ردیفها را فیلتر میکند
• GROUP BY
– ردیفها را برای تجمیع، گروهبندی میکند
• HAVING
– فیلتر روی نتایج گروهبندی شده اعمال میکند
• ORDER BY
– خروجی نهایی را مرتب میکند
چطور کار میکند؟
SQL کوئریهای شما را طبق یک ترتیب منطقی پردازش میکند.
یعنی برخلاف ترتیبی که شما کوئری را مینویسید، SQL مراحل مختلف را بهصورت منطقی و با یک توالی خاص اجرا میکند.
این ترتیب بر نحوهی واکشی، فیلتر، گروهبندی و بازگرداندن دادهها تأثیر میگذارد.
در اینجا ترتیب واقعی پردازش منطقی SQL را میبینید:
FROM
– ابتدا جداول منبع را شناسایی میکند.JOIN
– اگر join وجود داشته باشد، در این مرحله اعمال میشود.WHERE
– ردیفها را پیش از گروهبندی، فیلتر میکند.GROUP BY
– ردیفهای فیلترشده را گروهبندی میکند.HAVING
– فیلترهایی را روی نتایج گروهبندی شده اعمال میکند.SELECT
– مشخص میکند چه ستونها و عبارتهایی باید بازگردانده شوند.ORDER BY
– خروجی نهایی را مرتب میکند.

نگاه کردن به پشت پرده و درک نحوهی اجرای کوئریهای SQL، صرفاً دانستن یک نکتهی مفید نیست — بلکه واقعاً ارزشمند است.
چرا “شش رکن اصلی” مهم است؟
• پایهای برای منطقهای پیشرفتهتر در کوئرینویسی فراهم میکند
• به شما ساختاردهی تمیز و منطقی در کوئریها را آموزش میدهد
• دانشی ضروری برای مصاحبههای شغلی و تحلیلهای دنیای واقعی است
2. دستورات CASE
دستورات CASE در SQL معادل “اگر این، آنگاه آن” هستند.
به شما این امکان را میدهند که منطق شرطی را مستقیماً در نتایج کوئری خود وارد کنید.
چطور کار میکند؟
شما عبارات شرطی را با استفاده از ساختار CASE WHEN … THEN … ELSE … END
مینویسید.
این دستور میتواند در بخشهای SELECT
، WHERE
یا ORDER BY
به کار رود تا دستهبندی، برچسبگذاری (Flag)، یا محاسبات شرطی را انجام دهد.
حتی میتوانید چندین CASE را تو در تو بنویسید یا آنها را با توابع تجمیعی ترکیب کنید تا نتایج را بهصورت پویا (داینامیک) بخشبندی نمایید.

چرا دستورات CASE مهم هستند؟
• انعطافپذیری تحلیلهای شما را افزایش میدهد
• امکان دستهبندی متریکها (شاخصها) را فراهم میکند
• به شما اجازه میدهد منطقی را پیادهسازی کنید که در غیر این صورت نیاز به چندین کوئری مجزا داشت
3. JOINها
بیشتر مجموعه دادهها در دنیای واقعی در چندین جدول پخش شدهاند.
JOINها به شما این امکان را میدهند که آنها را در یک کوئری واحد با هم ترکیب کنید.
چطور کار میکند؟
JOINها ردیفهایی از دو یا چند جدول را بر اساس یک ستون مرتبط به هم متصل میکنند.
در اینجا چند نوع مهم از JOIN آورده شده است که باید آنها را بشناسید:
• INNER JOIN – فقط ردیفهایی را باز میگرداند که در هر دو جدول وجود دارند
• LEFT JOIN – تمام رکوردهای جدول سمت چپ و رکوردهای منطبق از جدول سمت راست را برمیگرداند
• RIGHT JOIN – معکوس LEFT JOIN است
• FULL OUTER JOIN – تمام ردیفها از هر دو جدول را بازمیگرداند، و در صورت امکان آنها را منطبق میکند
JOINها دانشی ضروری هستند و زمانی که دادههای شما در یک جدول واحد ذخیره نشده باشد (که تقریباً همیشه همینطور است)، به شما انعطافپذیری میدهند.

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

چرا مهم است
• برای کار با پایگاههای داده رابطهای ضروری است
• امکان تحلیل جامعتر و چندبعدی را فراهم میکند
• کنترل بیشتری بر نحوه اتصال و نمایش دادهها به شما میدهد
۴. زیرپرسوجوها و CTEها
هنگامی که پرسوجوهای SQL پیچیدهتر میشوند، مفید است که منطق خود را ماژولار کنید.
زیرپرسوجوها و عبارتهای جدول عمومی (CTEها) به شکستن پرسوجوهای بزرگ به بخشهای خواناتر کمک میکنند.
چگونه کار میکند؟
یک زیرپرسوجو در داخل یک پرسوجو SQL دیگر نوشته میشود و میتواند در جملات SELECT، FROM یا WHERE ظاهر شود. این به عنوان یک نتیجه موقت است که توسط پرسوجوی اصلی استفاده میشود.

یک CTE از کلمه کلیدی WITH برای تعریف یک مجموعه نتایج موقت با نام استفاده میکند که میتواند در سرتاسر پرسوجو ارجاع داده شود. برخلاف زیرپرسوجوها، CTEها معمولاً خواناتر و قابل استفاده مجددتر هستند، به ویژه در منطقهای طولانی یا لایهلایه.

هر دو ابزار به شما این امکان را میدهند که بخشهایی از منطق خود را ایزوله کنید، که باعث میشود SQL شما ماژولار، خوانا و برای رفع اشکال راحتتر باشد.
چرا مهم است
• پرسوجوهای پیچیده را خواناتر و قابل اشکالزدایی میکند
• اجازه میدهد منطق به صورت گام به گام در یک پرسوجو اجرا شود
• مستندسازی و همکاری بهتر را تشویق میکند
۵. توابع پنجره
توابع پنجره به شما این امکان را میدهند که شاخصها را در سطرها محاسبه کنید. اما برخلاف GROUP BY، دادههای شما را فشرده نمیکنند.
چگونه کار میکند؟
توابع پنجره با کلمه کلیدی OVER() کار میکنند تا یک “پنجره” یا دامنه سطرها را برای محاسبات تعریف کنند.
در اینجا برخی از توابع رایج آمده است:
• ROW_NUMBER() – به هر سطر در یک بخش یک شماره منحصر به فرد و ترتیبی اختصاص میدهد. برای رتبهبندی یا حذف تکراریها مفید است.
• RANK() – به هر سطر در یک بخش یک رتبه اختصاص میدهد، اما در صورت وجود تساویها، در رتبهها فاصله ایجاد میکند.
• DENSE_RANK() – مشابه RANK() است اما بین رتبهها فاصله ایجاد نمیکند.
شما میتوانید از PARTITION BY داخل OVER() برای شروع مجدد محاسبات بر اساس گروه استفاده کنید، و از ORDER BY برای کنترل ترتیب استفاده کنید. این به شما این امکان را میدهد که کارهایی مانند محاسبه مجموعهای پیوسته، ایجاد رتبهبندیها یا مقایسه مقادیر سطر به سطر انجام دهید.

چرا مهم است
• انجام محاسبات بدون فشردهسازی دادهها
• مناسب برای مجموعهای پیوسته، رتبهبندیها و تغییرات درصدی
• ضروری برای تحلیل روندها و مقایسههای عملکرد
۶. توابع نوع داده
SQL همچنین در آمادهسازی و پاکسازی دادهها برای تحلیل مفید است. توابع نوع داده به شما کمک میکنند تا نتایج خود را تبدیل و استاندارد کنید.
چگونه کار میکند؟
SQL میتواند رشتهها، اعداد، تاریخها را دستکاری کند و با مقادیر null برخورد کند.
در اینجا چند مثال آمده است:
• توابع رشتهای: LENGTH، TRIM، UPPER / LOWER، CONCAT، و LIKE
• توابع عددی: توابع ریاضی مانند LOG یا POWER و توابع گرد کردن مانند ROUND و FLOOR
• توابع تاریخ/زمان: CURRENT_DATE، DAYOFWEEK، یا DATEDIFF
• مدیریت مقادیر null: IFNULL، COALESCE
• تبدیل نوع داده: CAST، CONVERT
این توابع به شما کمک میکنند دادههای ناسازگار را پاکسازی کرده، انواع دادهها را تبدیل کرده و ورودیهای ناسازگار را استاندارد کنید. همه اینها برای خروجی تمیز و دقیق تحلیل شما ضروری است.

چرا مهم است
• دادههای دنیای واقعی اغلب به هم ریختهاند.
• اشتباهات و ناسازگاریها در تحلیل را کاهش میدهد
• دادههای شما را برای ابزارهای مانند Power BI یا Tableau آماده میکند
دیدگاهتان را بنویسید