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 روی دادهٔ واقعی.
در نوبت نوشتنپروژهٔ متوسطپروژهٔ ۳ — پایگاهدادهٔ فروش با دادهٔ حجیم
بارگذاری میلیونها سطر و رساندن کوئری به زیر یک ثانیه.
در نوبت نوشتنپروژهٔ پیچیده