برنامه نویسی

ترتیب پردازش منطقی یک پرس و جو SQL

Summarize this content to 400 words in Persian Lang
ترتیب پردازش منطقی یک پرس و جوی SQL را می توان با فرو رفتن عمیق تر در هر مرحله درک کرد. اگرچه پرس و جوهای SQL به ترتیب خاصی نوشته می شوند، موتور پایگاه داده آنها را به طور متفاوتی اجرا می کند. در زیر یک تفکیک دقیق از ترتیب منطقی با یک پرس و جو نمونه برای وضوح آورده شده است:

ترتیب منطقی اجرای SQL:

FROM: داده ها را شناسایی و بارگذاری کنید
بپیوندید: جداول را ترکیب کنید (در صورت وجود)
WHERE: سطرها را بر اساس شرایط فیلتر کنید
گروه بندی: ردیف ها را برای تجمع گروه بندی کنید
داشتن: فیلتر کردن گروه ها بر اساس شرایط کل
SELECT: Columns یا Expressions را انتخاب کنید
متمایز: موارد تکراری را حذف کنید (در صورت درخواست)
ترتیب بر اساس: مجموعه نتایج را مرتب کنید
LIMIT/OFFSET: محدود کردن تعداد سطرها (صفحه بندی)

حالا بیایید هر مرحله را با جزئیات بیشتری بررسی کنیم:

FROM: داده ها را شناسایی و بارگذاری کنید

اجرای پرس و جو با شناسایی منبع داده ها، یعنی جدول(هایی) که پرس و جو می شود، آغاز می شود.

اگر پرس و جوها یا نماها درگیر باشند، موتور ابتدا آن ها را اجرا می کند.

مثال:

از کارمندان

در اینجا، داده ها از جدول کارکنان می آیند.

بپیوندید: جداول را ترکیب کنید

اگر چندین جدول درگیر باشد، پایگاه داده نحوه ترکیب داده ها را تعیین می کند. انواع مختلف اتصالات (INNER، LEFT، RIGHT، FULL OUTER) نحوه تطبیق سطرها بین جداول را مشخص می کند.

عملیات JOIN قبل از فیلتر کردن در عبارت WHERE انجام می شود و اطمینان حاصل می شود که تمام ردیف های لازم در دسترس هستند.

مثال:

از کارکنان eبه بخش ها بپیوندید d ON e.department_id = d.department_id

جداول کارکنان و بخش ها با استفاده از ستون Department_id به هم متصل می شوند.

WHERE: سطرها را بر اساس شرایط فیلتر کنید

بعد از ترکیب جداول، عبارت WHERE ردیف هایی را که شرایط خاصی را ندارند فیلتر می کند. این شرایط معمولاً بر اساس مقادیر ستون جداگانه است.

این یک فیلتر در سطح ردیف است.

مثال:

WHERE e.hire_date > '01-01-2020'

این پرس و جو کارمندانی را که بعد از 1 ژانویه 2020 استخدام شده اند فیلتر می کند.

گروه بندی: ردیف ها را برای تجمع گروه بندی کنید

هنگامی که داده ها فیلتر شدند، عبارت GROUP BY ردیف هایی را که مقادیر یکسانی در ستون های مشخص شده دارند گروه بندی می کند. سپس تجمیع‌ها (مانند COUNT، SUM، AVG) برای این گروه‌ها اعمال می‌شوند.

بدون بند GROUP BY، توابع جمعی مانند COUNT() کل مجموعه نتیجه را به عنوان یک گروه در نظر می گیرند.

مثال:

GROUP BY e.department_id

پرس و جو کارکنان را بر اساس Department_id گروه بندی می کند و برای تجمیع آماده می شود (مانند شمارش کارکنان در هر بخش).

داشتن: فیلتر کردن گروه ها بر اساس شرایط کل

HAVING مانند WHERE کار می کند، اما به جای ردیف های فردی، گروه ها را فیلتر می کند.

این بند معمولاً برای فیلتر کردن بر اساس توابع انبوه استفاده می شود که نمی توان از آن در عبارت WHERE استفاده کرد.

مثال:

داشتن تعداد (e.employee_id) > 5

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

SELECT: Columns یا Expressions را انتخاب کنید

هنگامی که داده ها گروه بندی و فیلتر شدند، عبارت SELECT ستون ها یا عبارات واقعی را که در خروجی نهایی برگردانده می شوند، مشخص می کند.

می‌توانید توابع یا محاسبات مجموع را به همراه مقادیر ستون‌های معمولی در عبارت SELECT قرار دهید.

مثال:

SELECT e.department_id، COUNT(e.employee_id) AS total_employees

پرس و جو بخش_id و تعداد کارمندان (total_employees) را برای هر بخش برمی گرداند.

متمایز: موارد تکراری را حذف کنید (در صورت وجود)

اگر از کلمه کلیدی DISTINCT استفاده شود، ردیف های تکراری از مجموعه نتایج حذف می شود.

بعد از بند SELECT اما قبل از هر سفارشی اعمال می شود.

مثال:

DISTINCT Department_id را انتخاب کنید

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

ترتیب بر اساس: مجموعه نتایج را مرتب کنید

عبارت ORDER BY مجموعه نتایج را بر اساس یک یا چند ستون مرتب می کند.

مرتب سازی می تواند به ترتیب صعودی (ASC) یا نزولی (DESC) انجام شود.

مثال:

سفارش توسط total_employees DESC

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

LIMIT/OFFSET: محدود کردن تعداد سطرها (صفحه بندی)

بند LIMIT تعداد سطرهای برگردانده شده توسط پرس و جو را محدود می کند.

OFFSET را می توان در ترکیب با LIMIT برای رد کردن تعداد مشخصی از ردیف ها (مثلاً برای صفحه بندی) استفاده کرد.

مثال:

LIMIT 10

پرس و جو خروجی را بر اساس تعداد کارمندان به 10 ردیف بالا محدود می کند.

پرس و جو نمونه نهایی

SELECT e.department_id، COUNT(e.employee_id) AS total_employeesاز کارکنان eWHERE e.hire_date > '01-01-2020'GROUP BY e.department_idداشتن تعداد (e.employee_id) > 5سفارش توسط total_employees DESCLIMIT 10;

تفکیک گام به گام اجرا:

از کارکنان: پرس و جو با شناسایی جدول کارکنان شروع می شود.
WHERE hire_date > «01-01-2020»: همه کارمندانی که قبل از 1 ژانویه 2020 استخدام شده اند را فیلتر می کند.
GROUP BY Department_id: کارمندان باقی مانده را بر اساس Department_id گروه بندی می کند.
داشتن COUNT(employee_id) > 5: فقط بخش هایی را حفظ می کند که بیش از 5 کارمند دارند.
SELECT Department_id, COUNT(employee_id): شناسه بخش و تعداد کل کارکنان را برای هر بخش انتخاب می کند.
ORDER BY total_employees DESC: بخش ها را بر اساس تعداد کارمندان به ترتیب نزولی مرتب می کند.
LIMIT 10: فقط 10 بخش برتر را برمی گرداند.

نتیجه گیری:

پرس و جوهای SQL در قالبی “سطح بالا” نوشته می شوند که برای کاربران بصری تر است (با SELECT شروع می شود)، اما موتور پایگاه داده آنها را به ترتیبی بسیار منطقی و سیستماتیک اجرا می کند تا داده های صحیح را به طور موثر بازیابی کند.

درک ترتیب منطقی اجرای پرس و جو برای نوشتن پرس و جوهای پیچیده که همانطور که انتظار می رود کار می کنند ضروری است، به ویژه در هنگام استفاده از JOIN، GROUP BY و HAVING.

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

ترتیب منطقی اجرای SQL:

  1. FROM: داده ها را شناسایی و بارگذاری کنید

  2. بپیوندید: جداول را ترکیب کنید (در صورت وجود)

  3. WHERE: سطرها را بر اساس شرایط فیلتر کنید

  4. گروه بندی: ردیف ها را برای تجمع گروه بندی کنید

  5. داشتن: فیلتر کردن گروه ها بر اساس شرایط کل

  6. SELECT: Columns یا Expressions را انتخاب کنید

  7. متمایز: موارد تکراری را حذف کنید (در صورت درخواست)

  8. ترتیب بر اساس: مجموعه نتایج را مرتب کنید

  9. LIMIT/OFFSET: محدود کردن تعداد سطرها (صفحه بندی)

حالا بیایید هر مرحله را با جزئیات بیشتری بررسی کنیم:


  1. FROM: داده ها را شناسایی و بارگذاری کنید

اجرای پرس و جو با شناسایی منبع داده ها، یعنی جدول(هایی) که پرس و جو می شود، آغاز می شود.

اگر پرس و جوها یا نماها درگیر باشند، موتور ابتدا آن ها را اجرا می کند.

مثال:

از کارمندان

در اینجا، داده ها از جدول کارکنان می آیند.


  1. بپیوندید: جداول را ترکیب کنید

اگر چندین جدول درگیر باشد، پایگاه داده نحوه ترکیب داده ها را تعیین می کند. انواع مختلف اتصالات (INNER، LEFT، RIGHT، FULL OUTER) نحوه تطبیق سطرها بین جداول را مشخص می کند.

عملیات JOIN قبل از فیلتر کردن در عبارت WHERE انجام می شود و اطمینان حاصل می شود که تمام ردیف های لازم در دسترس هستند.

مثال:

از کارکنان e
به بخش ها بپیوندید d ON e.department_id = d.department_id

جداول کارکنان و بخش ها با استفاده از ستون Department_id به هم متصل می شوند.


  1. WHERE: سطرها را بر اساس شرایط فیلتر کنید

بعد از ترکیب جداول، عبارت WHERE ردیف هایی را که شرایط خاصی را ندارند فیلتر می کند. این شرایط معمولاً بر اساس مقادیر ستون جداگانه است.

این یک فیلتر در سطح ردیف است.

مثال:

WHERE e.hire_date > '01-01-2020'

این پرس و جو کارمندانی را که بعد از 1 ژانویه 2020 استخدام شده اند فیلتر می کند.


  1. گروه بندی: ردیف ها را برای تجمع گروه بندی کنید

هنگامی که داده ها فیلتر شدند، عبارت GROUP BY ردیف هایی را که مقادیر یکسانی در ستون های مشخص شده دارند گروه بندی می کند. سپس تجمیع‌ها (مانند COUNT، SUM، AVG) برای این گروه‌ها اعمال می‌شوند.

بدون بند GROUP BY، توابع جمعی مانند COUNT() کل مجموعه نتیجه را به عنوان یک گروه در نظر می گیرند.

مثال:

GROUP BY e.department_id

پرس و جو کارکنان را بر اساس Department_id گروه بندی می کند و برای تجمیع آماده می شود (مانند شمارش کارکنان در هر بخش).


  1. داشتن: فیلتر کردن گروه ها بر اساس شرایط کل

HAVING مانند WHERE کار می کند، اما به جای ردیف های فردی، گروه ها را فیلتر می کند.

این بند معمولاً برای فیلتر کردن بر اساس توابع انبوه استفاده می شود که نمی توان از آن در عبارت WHERE استفاده کرد.

مثال:

داشتن تعداد (e.employee_id) > 5

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


  1. SELECT: Columns یا Expressions را انتخاب کنید

هنگامی که داده ها گروه بندی و فیلتر شدند، عبارت SELECT ستون ها یا عبارات واقعی را که در خروجی نهایی برگردانده می شوند، مشخص می کند.

می‌توانید توابع یا محاسبات مجموع را به همراه مقادیر ستون‌های معمولی در عبارت SELECT قرار دهید.

مثال:

SELECT e.department_id، COUNT(e.employee_id) AS total_employees

پرس و جو بخش_id و تعداد کارمندان (total_employees) را برای هر بخش برمی گرداند.


  1. متمایز: موارد تکراری را حذف کنید (در صورت وجود)

اگر از کلمه کلیدی DISTINCT استفاده شود، ردیف های تکراری از مجموعه نتایج حذف می شود.

بعد از بند SELECT اما قبل از هر سفارشی اعمال می شود.

مثال:

DISTINCT Department_id را انتخاب کنید

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


  1. ترتیب بر اساس: مجموعه نتایج را مرتب کنید

عبارت ORDER BY مجموعه نتایج را بر اساس یک یا چند ستون مرتب می کند.

مرتب سازی می تواند به ترتیب صعودی (ASC) یا نزولی (DESC) انجام شود.

مثال:

سفارش توسط total_employees DESC

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


  1. LIMIT/OFFSET: محدود کردن تعداد سطرها (صفحه بندی)

بند LIMIT تعداد سطرهای برگردانده شده توسط پرس و جو را محدود می کند.

OFFSET را می توان در ترکیب با LIMIT برای رد کردن تعداد مشخصی از ردیف ها (مثلاً برای صفحه بندی) استفاده کرد.

مثال:

LIMIT 10

پرس و جو خروجی را بر اساس تعداد کارمندان به 10 ردیف بالا محدود می کند.


پرس و جو نمونه نهایی

SELECT e.department_id، COUNT(e.employee_id) AS total_employees
از کارکنان e
WHERE e.hire_date > '01-01-2020'
GROUP BY e.department_id
داشتن تعداد (e.employee_id) > 5
سفارش توسط total_employees DESC
LIMIT 10;

تفکیک گام به گام اجرا:

  1. از کارکنان: پرس و جو با شناسایی جدول کارکنان شروع می شود.

  2. WHERE hire_date > «01-01-2020»: همه کارمندانی که قبل از 1 ژانویه 2020 استخدام شده اند را فیلتر می کند.

  3. GROUP BY Department_id: کارمندان باقی مانده را بر اساس Department_id گروه بندی می کند.

  4. داشتن COUNT(employee_id) > 5: فقط بخش هایی را حفظ می کند که بیش از 5 کارمند دارند.

  5. SELECT Department_id, COUNT(employee_id): شناسه بخش و تعداد کل کارکنان را برای هر بخش انتخاب می کند.

  6. ORDER BY total_employees DESC: بخش ها را بر اساس تعداد کارمندان به ترتیب نزولی مرتب می کند.

  7. LIMIT 10: فقط 10 بخش برتر را برمی گرداند.


نتیجه گیری:

پرس و جوهای SQL در قالبی “سطح بالا” نوشته می شوند که برای کاربران بصری تر است (با SELECT شروع می شود)، اما موتور پایگاه داده آنها را به ترتیبی بسیار منطقی و سیستماتیک اجرا می کند تا داده های صحیح را به طور موثر بازیابی کند.

درک ترتیب منطقی اجرای پرس و جو برای نوشتن پرس و جوهای پیچیده که همانطور که انتظار می رود کار می کنند ضروری است، به ویژه در هنگام استفاده از JOIN، GROUP BY و HAVING.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا