بهجای «چطور»، بگو «چه میخواهی»
این نسخهی پیشنمایش عمومیه. برای نمره گرفتن، ذخیرهی پیشرفت و باز کردن درسهای بعدی ثبتنام کن.
ثبتنام رایگانورودمهمترین تغییرِ ذهنیِ این دوره
اگر قبلاً کمی برنامهنویسی کرده باشی، عادت داری که به کامپیوتر مرحلهبهمرحله بگویی چه کند: یک حلقه بساز، روی هر عنصر برو، شرط را چک کن، اگر درست بود نگهش دار. به این سبک میگویند روالی (procedural) — تو روالِ کار را قدمبهقدم مینویسی.
SQL ذهنیتِ دیگری دارد و این تفاوت، قلبِ کلِ این دوره است. بیا با یک مثالِ واقعی ببینیم.
سبکِ روالی: تو میگویی چطور
فرض کن میخواهی همهی مشتریهای تهران را پیدا کنی. به سبکِ روالی (اینجا با شبهکدِ پایتون) چنین کاری میکنی:
result = [] # یک سبدِ خالی بساز
for customer in customers: # روی تکتکِ مشتریها حلقه بزن
if customer.city == 'تهران': # شرط را برای هرکدام چک کن
result.append(customer) # اگر درست بود، دستی به سبد اضافه کن
print(result)
ببین چقدر «چطور» در این کد است: خودت سبد میسازی، خودت حلقه میزنی، خودت ترتیبِ پیمایش را تعیین میکنی، خودت اضافه میکنی. تو دقیقاً روالِ اجرا را دیکته کردهای. اگر فردا دادهها میلیونها ردیف شوند یا روی چند سرور پخش شوند، باز هم خودت باید به فکرِ سرعت و ترتیب باشی.
سبکِ اعلانی: تو میگویی چه
همان سؤال در SQL یک جمله است:
SELECT name FROM customers WHERE city = 'تهران';
اینجا هیچ حلقهای ننوشتی. هیچ سبدی نساختی. فقط نتیجهی مطلوب را توصیف کردی: «نامِ آن مشتریهایی که شهرشان تهران است.» اینکه پایگاه داده برای پیدا کردنشان دقیقاً چه میکند — از کجا شروع کند، از چه اندیسی کمک بگیرد، به چه ترتیبی بگردد — مسئلهی توست نیست. این سبک را اعلانی (declarative) میگویند.
این همان تغییرِ بنیادی است: بهجای اینکه بگویی چطور، میگویی چه میخواهی.
چرا این تغییر اینقدر مهم است؟
- روی مجموعه فکر میکنی، نه روی تکردیف. در SQL،
WHERE city = 'تهران'یکجا روی کلِ مجموعهی ردیفها اعمال میشود. دیگر «ردیفِ جاری در حلقه» معنا ندارد؛ تو با کلِ جدول بهعنوان یک کل کار میکنی. - پایگاه داده آزاد است هوشمندانه اجرا کند. چون تو فقط چه را گفتی نه چطور، موتورِ پایگاه داده میتواند سریعترین راه را خودش انتخاب کند (از اندیس استفاده کند، کار را موازی کند). همان کوئریِ ساده روی ۱۰ ردیف و روی ۱۰ میلیون ردیف کار میکند، بدون اینکه یک کاراکتر عوض شود.
- کوتاهتر و کمخطاتر. یک جمله جای ده خط حلقه و شرط را میگیرد، و جای کمتری برای اشتباه دارد.
دامِ ذهنیِ تازهکارها
بزرگترین اشتباهِ کسانی که از برنامهنویسیِ روالی میآیند این است که میخواهند در SQL هم «حلقه بزنند» یا «قدمبهقدم» فکر کنند. هر وقت خودت را دیدی که میپرسی «اول این کار را بکن، بعد آن کار را…»، یک قدم عقب بیا و سؤال را عوض کن: «نتیجهای که میخواهم چه شکلی است؟ کدام ردیفها، کدام ستونها؟» اگر بتوانی نتیجه را توصیف کنی، نوشتنِ SQLاش آسان میشود. در دو تمرینِ بعد، دقیقاً همین کار را میکنی.