کدنامهمرجع‌های مهندسی نرم‌افزار، به فارسی

SQL و SQL Server

SQL & SQL Server

نوشتن کوئری که جواب بدهد آسان است. نوشتن کوئری که روی ده میلیون سطر هم جواب بدهد، مهارت دیگری است. این مسیر هر دستور را با دلیلش می‌دهد: چرا بهینه‌ساز این نقشه را انتخاب کرد، چرا این ایندکس کمک می‌کند و آن یکی نه، و چرا این کوئری که درست به نظر می‌رسد سطرها را تکثیر می‌کند. کد کپی‌کردنی همه‌جا هست؛ چیزی که کم است، فهمیدن آن است.

۵۱فصل
۸۸۵تمرین با پاسخ
≈ ۸۱ ساعتزمان تخمینی
۳پروژهٔ نهایی

پیشرفت تو

۰٪

درصد هر فصل از دو چیز می‌آید: چقدر از بخش‌هایش را خوانده‌ای (۵۵٪) و چند تمرینش را تیک زده‌ای (۴۵٪). همه‌چیز داخل مرورگر خودت می‌ماند.

فصل

فصل‌ها به هم وابسته‌اند و ترتیبشان معنا دارد. هر مسیر با پروژه‌های نهایی تمام می‌شود: ساده، متوسط، پیچیده.

۱

مدل رابطه‌ای

چرا داده را در جدول می‌ریزیم و نه در فایل — و ایدهٔ ‎relation‎ از کجا آمد.

در نوبت نوشتن
۲

نصب و ابزار

‏SQL Server با داکر، ‎SSMS‎ و ‎Azure Data Studio‎.

در نوبت نوشتن
۳

‏SELECT

ترتیب واقعی اجرا — چرا ‎WHERE‎ قبل از ‎SELECT‎ اجرا می‌شود.

در نوبت نوشتن
۴

فیلتر کردن

‏WHERE، ‎IN‎، ‎BETWEEN‎، ‎LIKE‎ و منطق سه‌مقداری.

در نوبت نوشتن
۵

‏NULL

نه صفر است نه رشتهٔ خالی — و چرا ‎= NULL‎ هیچ‌وقت درست نیست.

در نوبت نوشتن
۶

مرتب‌سازی و صفحه‌بندی

‏ORDER BY، ‎OFFSET/FETCH‎ و ‎collation‎ فارسی.

در نوبت نوشتن
۷

‏JOIN ۱

‏INNER و ‎LEFT‎ — با نمودار، و اینکه ‎ON‎ دقیقاً چه می‌کند.

در نوبت نوشتن
۸

‏JOIN ۲

‏RIGHT، ‎FULL‎، ‎CROSS‎، ‎self join‎ و تکثیر ناخواستهٔ سطرها.

در نوبت نوشتن
۹

تجمیع

‏GROUP BY، ‎HAVING‎، و تفاوت آن با ‎WHERE‎.

در نوبت نوشتن
۱۰

زیرکوئری

‏scalar، ‎IN‎، ‎EXISTS‎ و زیرکوئری همبسته.

در نوبت نوشتن
۱۱

‏CTE

کوئری خوانا به‌جای تودرتو، و ‎CTE‎ بازگشتی.

در نوبت نوشتن
۱۲

‏window function ۱

‏OVER، ‎PARTITION BY‎ — تجمیع بدون از دست دادن سطرها.

در نوبت نوشتن
۱۳

‏window function ۲

‏LAG، ‎LEAD‎، مجموع تجمعی و قاب پنجره.

در نوبت نوشتن
۱۴

‏PIVOT و شرط

چرخاندن سطر به ستون، و ‎CASE‎ در تجمیع.

در نوبت نوشتن
۱۵

عملگرهای مجموعه‌ای

‏UNION، ‎INTERSECT‎، ‎EXCEPT‎ و ‎UNION ALL‎.

در نوبت نوشتن
۱۶

‏INSERT

درج تکی، انبوه، از روی ‎SELECT‎ و ‎IDENTITY‎.

در نوبت نوشتن
۱۷

‏UPDATE و ‎DELETE‎

تغییر داده بدون فاجعه — و چرا همیشه اول ‎SELECT‎.

در نوبت نوشتن
۱۸

‏MERGE و ‎OUTPUT‎

همگام‌سازی دو جدول، و گرفتن سطرهای تغییرکرده.

در نوبت نوشتن
۱۹

نوع داده

‏VARCHAR در برابر ‎NVARCHAR‎، ‎DECIMAL‎ در برابر ‎FLOAT‎ — و فارسی.

در نوبت نوشتن
۲۰

‏constraint

‏PRIMARY KEY، ‎FOREIGN KEY‎، ‎UNIQUE‎، ‎CHECK‎ و ‎DEFAULT‎.

در نوبت نوشتن
۲۱

طراحی جدول

از نیاز تا شِما: کلید طبیعی یا مصنوعی، و نام‌گذاری.

در نوبت نوشتن
۲۲

نرمال‌سازی

‏1NF تا ‎3NF‎ با مثال واقعی — و مشکلی که هر فرم حل می‌کند.

در نوبت نوشتن
۲۳

‏denormalization آگاهانه

کِی عمداً قاعده را بشکنیم، و هزینه‌اش را بپذیریم.

در نوبت نوشتن
۲۴

ایندکس ۱

ساختار ‎B-tree‎، ‎clustered‎ در برابر ‎nonclustered‎.

در نوبت نوشتن
۲۵

ایندکس ۲

ترتیب ستون، ‎covering‎، ‎INCLUDE‎ و ایندکس فیلترشده.

در نوبت نوشتن
۲۶

ایندکس ۳

هزینهٔ ایندکس: کندی نوشتن، ‎fragmentation‎ و نگه‌داری.

در نوبت نوشتن
۲۷

برنامهٔ اجرا ۱

خواندن نقشه: ‎scan‎ در برابر ‎seek‎، و جهت خواندن.

در نوبت نوشتن
۲۸

برنامهٔ اجرا ۲

‏nested loop، ‎hash‎، ‎merge‎ — و تخمین اشتباه بهینه‌ساز.

در نوبت نوشتن
۲۹

آمار

بهینه‌ساز از کجا می‌داند چند سطر برمی‌گردد.

در نوبت نوشتن
۳۰

تراکنش

‏ACID در عمل، ‎COMMIT‎، ‎ROLLBACK‎ و تراکنش تودرتو.

در نوبت نوشتن
۳۱

سطوح ایزوله

‏dirty read تا ‎serializable‎ — با آزمایش عملی هر کدام.

در نوبت نوشتن
۳۲

قفل و ‎deadlock‎

چه چیزی قفل می‌شود، چرا، و باز کردن گره.

در نوبت نوشتن
۳۳

‏stored procedure

پارامتر، خروجی، و ‎parameter sniffing‎.

در نوبت نوشتن
۳۴

تابع

‏scalar در برابر ‎table-valued‎ — و چرا ‎scalar‎ کند است.

در نوبت نوشتن
۳۵

‏trigger

قدرت پنهان، و اینکه چرا معمولاً بد است.

در نوبت نوشتن
۳۶

‏T-SQL ۱

متغیر، شرط، حلقه و جدول موقت.

در نوبت نوشتن
۳۷

‏T-SQL ۲

‏TRY/CATCH، ‎THROW‎ و مدیریت خطای تراکنشی.

در نوبت نوشتن
۳۸

‏SQL پویا

‏sp_executesql، و تزریق ‎SQL‎ در سمت پایگاه‌داده.

در نوبت نوشتن
۳۹

‏JSON و ‎XML‎

‏FOR JSON، ‎OPENJSON‎ و کِی داده را نیمه‌ساختاریافته نگه داریم.

در نوبت نوشتن
۴۰

پارتیشن‌بندی

جدول‌های خیلی بزرگ، و ‎partition switching‎.

در نوبت نوشتن
۴۱

امنیت

‏login، ‎user‎، ‎role‎، ‎schema‎ و کمترین دسترسی.

در نوبت نوشتن
۴۲

پشتیبان و بازیابی

‏full، ‎differential‎، ‎log‎ و بازیابی نقطه‌ای واقعی.

در نوبت نوشتن
۴۳

نگه‌داری

ایندکس، آمار، ‎DBCC‎ و کار زمان‌بندی‌شده.

در نوبت نوشتن
۴۴

مانیتورینگ

‏DMV، ‎Query Store‎ و ‎wait statistics‎.

در نوبت نوشتن
۴۵

بهینه‌سازی ۱

روش سیستماتیک: اندازه‌گیری، تشخیص، درمان — نه حدس.

در نوبت نوشتن
۴۶

بهینه‌سازی ۲

بازنویسی کوئری: ‎SARGable‎، ‎OR‎ و تابع روی ستون.

در نوبت نوشتن
۴۷

ضدالگوها

‏SELECT *‎، ‎cursor‎، ‎NOLOCK‎ و بقیهٔ عادت‌های گران.

در نوبت نوشتن
۴۸

اتصال از اپ

‏connection pool، ‎ORM‎ و ‎N+1‎ از سمت پایگاه‌داده.

در نوبت نوشتن
۴۹

پروژهٔ ۱ — طراحی شِما

از نیاز تا جدول، با کلید و ‎constraint‎ درست.

در نوبت نوشتنپروژهٔ ساده
۵۰

پروژهٔ ۲ — گزارش تحلیلی

‏window، ‎CTE‎ و ‎PIVOT‎ روی دادهٔ واقعی.

در نوبت نوشتنپروژهٔ متوسط
۵۱

پروژهٔ ۳ — پایگاه‌دادهٔ فروش با دادهٔ حجیم

بارگذاری میلیون‌ها سطر و رساندن کوئری به زیر یک ثانیه.

در نوبت نوشتنپروژهٔ پیچیده