آموزش ویدیویی پایگاه داده، SQL و NoSQL و ...
2.09K subscribers
227 photos
116 videos
1.84K links
* پیشنهادات، تبلیغات و تبادل و ... : @ma_limbs

* تعرفه تبلیغات:
https://t.me/+w-o6dHW5O31jMWNk
Download Telegram
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏مدیریت فایل پایگاه داده

نکته 1:
‏دیتابیس SQLite فقط یه فایل تکی (با پسوند .db یا هر چی) هست. مدیریت فایل دیتابیس، یعنی مدیریت همین یه دونه فایل! 📦💾💡

نکته 2:
‏برای بک‌آپ گرفتن، کافیه این فایل رو کپی کنی. البته مطمئن شو که موقع کپی، هیچ برنامه‌ای ازش استفاده نکنه، وگرنه فایل ممکنه خراب بشه. ✂️

نکته 3:
‏اگه از حالت WAL (Write-Ahead Logging) استفاده می‌کنی، دیتابیس تو یه فایل اصلی و دو تا فایل کمکی .wal و .shm داره. برای جابجایی یا بک‌آپ باید هر سه تا رو منتقل کنی. ⚠️🔥

نکته 4:
‏برای کاهش حجم فایل دیتابیس (بعد از حذف و آپدیت زیاد)، حتماً از دستور VACUUM استفاده کن. این جاروبرقی دیتابیسه! 🧹

نکته 5:
‏اگه می‌خوای دیتابیس رو رمزگذاری کنی، چون SQLite خودش ابزار داخلی نداره، باید از افزونه‌هایی مثل SQLCipher استفاده کنی تا فایل رو قفل کنه. 🔒

نکته 6:
‏برای انتقال دیتابیس به یه کامپیوتر دیگه، فقط کافیه فایل .db رو کپی کنی. نیازی به export یا import پیچیده نیست. 🚀

نکته 7:
‏وقتی دیتابیس رو باز می‌کنی و اون فایل وجود نداره، SQLite به صورت خودکار یه فایل جدید برات می‌سازه. نیازی به CREATE DATABASE نیست. 🛠️

نکته 8:
‏اگه برنامه‌های زیادی همزمان می‌خوان از فایل دیتابیس استفاده کنن، حتماً WAL Mode رو فعال کن تا مشکل قفل شدن (Locking) برای خواندن‌ها پیش نیاد. 👥

نکته 9:
‏برای حذف کامل دیتابیس، فقط کافیه فایل .db (و اگه WAL فعاله، فایل‌های .wal و .shm) رو پاک کنی. به همین سادگی! 🗑️

نکته 10:
‏اگر دیتابیس تو آسیب دیده (Corrupted شده)، تنها راه مطمئن، جایگزینی فایل خراب با یه فایل پشتیبان سالم هست. مدیریت فایل یعنی داشتن بک‌آپ خوب! 💯😎


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
📚 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏ایجاد پایگاه داده در حافظه

نکته 1:
‏ایجاد یک پایگاه داده در حافظه (In-Memory Database) در SQLite با تعیین نام فایل ویژه :memory: در زمان برقراری اتصال توسط API، محقق می‌شود.

نکته 2:
‏زمانی که اتصال با نام :memory: برقرار می‌شود، ساختار پایگاه داده به جای تخصیص فضای دیسک، در حافظه اصلی (RAM) سیستم میزبان ایجاد و نگهداری می‌گردد.

نکته 3:
‏این نوع پایگاه داده به صورت پیش‌فرض غیرمشترک (Unshared) است؛ یعنی به محض بسته شدن اتصال ایجادکننده، تمام داده‌های ذخیره‌شده و ساختار شمای آن از حافظه پاک می‌شوند.

نکته 4:
‏برای ایجاد یک پایگاه داده حافظه که قابلیت اشتراک‌گذاری بین چندین اتصال را داشته باشد، باید از URI File Names با فرمت file::memory:?cache=shared استفاده شود.

نکته 5:
‏پایگاه داده‌های حافظه برای تست‌های عملکردی (Performance Testing) و تست‌های واحد (Unit Testing) بسیار مناسب هستند، زیرا فرآیند ایجاد و تخریب محیط (Teardown) با سرعت بالا انجام می‌گیرد.

نکته 6:
‏پس از ایجاد، می‌توان با اجرای دستورات DDL (مانند CREATE TABLE) و DML (مانند INSERT)، ساختار و داده‌های مورد نیاز را به پایگاه داده موجود در حافظه اضافه کرد.

نکته 7:
‏حجم داده‌هایی که می‌توانند در پایگاه داده حافظه ذخیره شوند، مستقیماً توسط فضای RAM آزاد سیستم عامل محدود می‌شود و با افزایش حجم، خطر خطای تخصیص حافظه وجود دارد.

نکته 8:
‏به دلیل حذف کامل عملیات ورودی/خروجی دیسک، پایگاه داده ایجاد شده در حافظه، حداکثر سرعت و کارایی را در اجرای پرس‌وجوهای پردازشی (CPU-Bound) ارائه می‌دهد.

نکته 9:
‏برای انتقال داده‌ها از یک پایگاه داده دیسکی به پایگاه داده حافظه، می‌توان از API پشتیبان‌گیری داخلی SQLite استفاده کرد تا فرآیند کپی به صورت کارآمد انجام شود.

نکته 10:
‏پایگاه داده حافظه فاقد ویژگی پایداری (Durability) است؛ لذا برای نگهداری داده‌های حیاتی و طولانی‌مدت که نیاز به بازیابی پس از قطع برق یا خاموشی سیستم دارند، مناسب نیست.


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #یادگیری_ماشین

🟣 موضوع : ‏یادگیری ماشین: کاهش ابعاد - تفسیرپذیری پایین در برخی روش‌ها (مثل t-SNE, Autoencoders)

نکته :

‏برای اینکه بفهمی کدوم ویژگی‌ها مهم‌ترن، به واریانس توضیح داده شده توسط PCA نگاه کن! 🔥


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
📚 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏استفاده از json_each

نکته 1:
‏تابع json_each به عنوان یک تابع جدول‌ساز (Table-Valued Function) در SQLite عمل می‌کند که برای تجزیه یک سند JSON و استخراج عناصر آن به صورت ردیف‌های مجزا به کار می‌رود.

نکته 2:
‏این تابع برای تکرار (Iteration) بر روی عناصر یک آرایه JSON یا جفت‌های کلید-مقدار یک شیء JSON و تبدیل آن‌ها به یک ساختار رابطه‌ای موقت مورد استفاده قرار می‌گیرد.

نکته 3:
‏نحو استفاده از jsoneach به این صورت است که به عنوان بخشی از عبارت FROM در یک پرس‌وجوی SELECT به کار می‌رود، نظیر SELECT * FROM jsoneach(json_document).

نکته 4:
‏خروجی json_each شامل مجموعه‌ای از ستون‌های ثابت است که اطلاعاتی نظیر key (کلید برای اشیاء)، value (مقدار عنصر) و type (نوع داده JSON) را ارائه می‌دهد.

نکته 5:
‏ستون fullkey در خروجی این تابع، مسیر کامل JSON (JSON Path) را از ریشه تا عنصر جاری نمایش می‌دهد که برای بازیابی زمینه‌ای (Contextual Retrieval) مفید است.

نکته 6:
‏ستون parent حاوی مسیر JSON به عنصر والد است که امکان بازیابی ساختار سلسله‌مراتبی داده‌های JSON را در حین پیمایش فراهم می‌سازد.

نکته 7:
‏تکرار بر روی آرایه‌ها در json_each منجر به تولید ردیف‌هایی می‌شود که ستون key آن‌ها حاوی اندیس عددی عناصر آرایه (از صفر به بالا) خواهد بود.

نکته 8:
‏استفاده از json_each برای بسط داده‌های JSON (JSON Data Expansion) در پرس‌وجوهای پیچیده، به ویژه در ترکیب با عبارت JOIN، برای تحلیل‌های پیشرفته ضروری است.

نکته 9:
‏تابع jsoneach این قابلیت را دارد که با ارائه مسیر JSON به عنوان آرگومان دوم، پیمایش را از یک زیربخش مشخص از سند JSON آغاز کند، نظیر jsoneach(jsondocument, '$.arrayname').

نکته 10:
‏با استفاده از این تابع می‌توان به راحتی محتویات تودرتو (Nested Content) در سند JSON را به صورت سطوح مسطح شده (Flattened) بازیابی کرد و شرایط فیلترسازی SQL را بر روی آن‌ها اعمال نمود.


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏تراکنش‌ها در SQLite

نکته 1:
‏تراکنش (Transaction) چیه؟ 🤔 مثل یه سبد خریده که توش چند تا کار رو می‌ذاری و می‌خوای همه‌شون با هم انجام بشن یا هیچ‌کدوم انجام نشن! 🛒

نکته 2:
‏هدف تراکنش اینه که همه عملیات‌ها رو به صورت یه واحد غیرقابل تفکیک اجرا کنه. اگه یکی از کارها خراب شد، بقیه هم لغو می‌شن (Rollback). 🛑

نکته 3:
‏برای شروع یه تراکنش از دستور BEGIN TRANSACTION یا فقط BEGIN استفاده می‌کنی. از اینجا به بعد، دیگه هر کاری کنی موقتیه. 🎬

نکته 4:
‏اگه همه چیز خوب پیش رفت، باید با دستور COMMIT تراکنش رو نهایی کنی. اینجوری تغییراتت به طور دائمی توی دیتابیس ذخیره می‌شن. 💾

نکته 5:
‏اگه وسط کار یه مشکلی پیش اومد یا پشیمون شدی، از دستور ROLLBACK استفاده کن. دیتابیس برمی‌گرده به قبل از BEGIN. انگار هیچ اتفاقی نیفتاده!

نکته 6:
‏یکی از مهم‌ترین ویژگی‌های تراکنش‌ها، ACID بودنه. به‌خصوص Atomicity (تجزیه‌ناپذیری) که می‌گه یا همه یا هیچ! Consistency هم مهمه. ⚛️💡

نکته 7:
‏تو SQLite، اگه یه دستور INSERT, UPDATE یا DELETE رو بدون BEGIN اجرا کنی، SQLite به صورت خودکار یه تراکنش کوچیک دورش می‌سازه و COMMIT می‌کنه. 🤓

نکته 8:
‏استفاده از تراکنش‌ها، به‌خصوص وقتی تعداد زیادی INSERT داری، می‌تونه سرعت عملیات نوشتن رو به شدت افزایش بده. به جای ۱۰۰۰ تراکنش، فقط ۱ تراکنش داری! 🚀🔥

نکته 9:
‏برای مدیریت تراکنش‌های پیچیده، می‌تونی از Savepoints استفاده کنی. اینا مثل یه سری نقطه عطف تو دل تراکنش هستن که می‌تونی بهشون برگردی. 🚩

نکته 10:
‏وقتی دو نفر همزمان سعی می‌کنن یه جدول رو تغییر بدن، تراکنش‌ها کمک می‌کنن تا دیتابیس قفل نشه یا اطلاعات خراب نشن (Concurrency Control). امنیت داده‌ها رو تضمین می‌کنه! 🔒😎


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏پشتیبان‌گیری و بازیابی (Backup and Restore)

نکته 1:
‏ساده‌ترین راه برای پشتیبان‌گیری (Backup)، اینه که کل فایل دیتابیس (.db یا .sqlite) رو کپی کنی و بذاری یه جای امن! چون SQLite فقط یه فایله. 📦💾

نکته 2:
‏قبل از اینکه فایل رو کپی کنی، مطمئن شو که هیچ فرآیندی مشغول نوشتن یا تغییر دادن دیتابیس نیست. اگه هست، فایل رو قفل می‌کنه. 🚫✍️

نکته 3:
‏برای بک‌آپ گرفتن مطمئن‌تر، می‌تونی از دستور VACUUM INTO 'backup_path.db'; استفاده کنی. این دستور یه کپی فشرده و تمیز می‌گیره. 🧹

نکته 4:
‏اگه حالت WAL (Write-Ahead Logging) فعال باشه، برای بک‌آپ باید علاوه بر فایل اصلی، فایل‌های کمکی .wal و .shm رو هم کپی کنی. ⚠️🔥

نکته 5:
‏برای بازیابی (Restore)، کافیه فایل بک‌آپ رو برگردونی به جای فایل اصلی. اما اول برنامه رو ببند تا تداخل پیش نیاد.

نکته 6:
‏یکی از بهترین راه‌های بک‌آپ گرفتن، استفاده از API بک‌آپ خود SQLite هست که بهت اجازه می‌ده موقعی که برنامه داره از دیتابیس استفاده می‌کنه هم، بک‌آپ بگیری. 🛠️

نکته 7:
‏با استفاده از دستور ATTACH DATABASE می‌تونی فایل بک‌آپ رو به دیتابیس فعال وصل کنی و با دستورات SQL داده‌ها رو بینشون کپی کنی. 🔗💡

نکته 8:
‏هیچ‌وقت فایل‌های بک‌آپت رو تو همون مسیر فایل اصلی نگه ندار! اگه هاردت بسوزه، هر دو با هم از دست می‌رن. بک‌آپ رو یه جای دیگه بذار. 📍

نکته 9:
‏یه روش دستی بازیابی اینه که با sqlite3 یه فایل SQL از Schema و داده‌ها بگیری (با دستور .dump) و بعد اون رو تو یه فایل جدید RESTORE کنی. 📝

نکته 10:
‏بهترین کار اینه که بک‌آپ گرفتن رو به صورت منظم و خودکار تنظیم کنی تا همیشه یه نسخه امن از داده‌هات داشته باشی. این یه اصل طلاییه! 💯😎


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین


داده‌های پرت (Outliers) می‌تونن مدل رو به شدت خراب کنن.

🔹 داده پرت یا Outlier یعنی داده‌ای که خیلی از بقیه فاصله داره (مثلاً حقوق ۵ میلیاردی وسط یه دیتاست با میانگین ۱۰ میلیون 😅).
🔹 بعضی الگوریتم‌ها مثل Linear Regression یا KNN خیلی حساسن به داده‌های پرت، در حالی که مدل‌هایی مثل Random Forest کمتر آسیب می‌بینن.

🔹 روش‌های برخورد:

شناسایی و حذف: با استفاده از Z-score، IQR یا روش‌های آماری.

ترنسفورم داده: مثل استفاده از log یا sqrt برای کاهش اثر مقادیر خیلی بزرگ.

مدل‌های مقاوم (Robust): مثل Robust Regression یا استفاده از الگوریتم‌هایی که به outlier حساس نیستن.

به زبان ساده: Outlier مثل “نویز خیلی بلند” توی یک موسیقیه؛ اگه کنترل نشه کل آهنگ رو خراب می‌کنه. 🎵

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #MySQL

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏آماده‌سازی محیط کار: نصب MySQL و ابزارهای لازم

‏رفیق، وقتی می‌خوای MySQL رو نصب کنی، حواست باشه که همیشه جدیدترین نسخه بهترین نیست! 🧐 گاهی اوقات نسخه‌های پایدارتر یا سازگار با پروژه‌ات، خیلی بهترن. قبل نصب یه چک کوچولو بزن! 👍

‏برای شروع و کارای اولیه، نیازی نیست خیلی خودتو درگیر کنی! 🚀 بسته‌هایی مثل XAMPP یا WAMP یه راه خیلی آسونن که MySQL رو با PHP و Apache یکجا نصب می‌کنن. برای شروع کارآموزی محشره!

‏بعد از اینکه نصب کردی، چطوری مطمئن بشی که MySQL داره کار می‌کنه؟ 🤔 برو تو سرویس‌های ویندوز یا با دستور sudo systemctl status mysql تو لینوکس وضعیتش رو چک کن. اگه سبز بود، یعنی اوکیه!

‏مهم‌ترین قدم امنیتی! 🛡️ بعد از نصب، حتماً یه رمز عبور قوی برای کاربر root ست کن. هیچ وقت بدون رمز عبور رهاش نکن، وگرنه ممکنه هکرها به راحتی وارد شن! 🚨

‏کار کردن با خط فرمان اوکیه، ولی برای دید بصری بهتر، حتماً یه ابزار گرافیکی مثل MySQL Workbench یا phpMyAdmin نصب کن. 🎨 کلی کارت رو راحت‌تر می‌کنه و جذاب‌تره! 🤩

‏اگه می‌خوای از یه کامپیوتر دیگه به MySQL وصل بشی، حواست به فایروال سیستم باشه! 🔥 باید پورت 3306 رو باز کنی تا اتصال برقرار بشه. اگه نه، ممکنه کلی سرش گیج شی! 😵‍💫

‏وقتی MySQL رو نصب کردی و رمز root رو گذاشتی، وقتشه اولین اتصال رو برقرار کنی! 💪 کافیه تو خط فرمان بزنی mysql -u root -p و بعد رمزتو وارد کنی. یه دنیای جدید به روت باز میشه! 🚀

‏هر چیزی یه فایل تنظیمات داره، MySQL هم همینطور! 💡 تو ویندوز معمولاً my.ini و تو لینوکس my.cnf هست. گاهی اوقات برای تغییر پورت یا تنظیمات پیشرفته، باید سراغ این فایل بری! 🕵️‍♂️

‏کار کردن همیشه با کاربر root مثل اینه که با کلید گاوصندوق بری خرید! 🔑 همیشه یه کاربر جدید برای هر پروژه بساز و بهش فقط دسترسی‌های لازم رو بده. اینطوری امن‌تره! 🔐

‏گاهی اوقات ممکنه MySQL روشن نشه! 😩 نگران نباش، معمولاً یا یه سرویس دیگه پورت 3306 رو اشغال کرده (مثل اسکایپ قدیمی) یا فایل تنظیمات ایراد داره. لاگ‌ها رو چک کن! 📜 خیلی کمک می‌کنه. 😉


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #MySQL

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏انواع دیگر JOIN

‏برای اینکه بتونی تمام ردیف‌های دو تا جدول رو حتی اگه نقطه مشترکی نداشتن ببینی، از FULL OUTER JOIN استفاده کن. انگار داری می‌گی: "همه رو بیار، چه با هم جور بشن چه نشن!" 😉

‏وقتی می‌خوای فقط ردیف‌هایی رو ببینی که توی جدول چپ هستن ولی توی جدول راست نیستن، LEFT JOIN (یا LEFT OUTER JOIN) بهترین دوستته. مثل این می‌مونه که می‌گی: "اول مال خودم، بعد اگه چیزی اضافه بود از تو هم بگیر!" 😎

‏اگه برعکس حالت قبل، یعنی فقط ردیف‌هایی که توی جدول راست هستن ولی توی جدول چپ نیستن رو خواستی، RIGHT JOIN (یا RIGHT OUTER JOIN) کارتو راه میندازه. یه جورایی دیگه از اون ور بوم افتادی! 🙃

‏وقتی فقط دنبال ردیف‌هایی هستی که هم توی جدول چپ باشن هم توی جدول راست (یعنی نقاط مشترک)، INNER JOIN همون چیزیه که لازم داری. ساده و سرراست! 👍

‏CROSS JOIN یه گزینه‌ی باحاله که تمام ترکیبات ممکن از ردیف‌های دو جدول رو بهت نشون میده. خیلی وقتا ممکنه زیاد به درد نخوره، ولی برای تست کردن یا تولید داده‌های اولیه می‌تونه مفید باشه. 🚀

‏اگه خواستی فقط یه سری ردیف از جدول اول رو با ردیف‌های منطبق از جدول دوم ترکیب کنی و اگه منطبق نبود، فقط ستون‌های جدول اول رو نشون بدی، LEFT JOIN رو فراموش نکن. 🌟

‏به طور پیش‌فرض، JOIN توی MySQL معادل INNER JOIN هست. پس اگه نخواستی از INNER JOIN استفاده کنی، بهتره صراحتاً نوع JOIN رو مشخص کنی. 💡

‏گاهی وقت‌ها، استفاده از LEFT JOIN با شرط WHERE می‌تونه به اندازه‌ی NOT EXISTS یا LEFT JOIN IS NULL سریع باشه. حتماً امتحان کن! 💨

‏برای اینکه بفهمی کدوم ردیف‌ها در یک جدول وجود دارن ولی در جدول دیگه نه، ترکیب LEFT JOIN با چک کردن IS NULL در ستون جدول دوم خیلی کاربردیه. یه راه سریع و باحال!

‏یادت باشه که OUTER توی LEFT OUTER JOIN و RIGHT OUTER JOIN اختیاریه. یعنی LEFT JOIN و RIGHT JOIN همون کار رو انجام میدن. پس سخت نگیر! 😄


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #یادگیری_ماشین

🟣 موضوع : ‏یادگیری ماشین: انتقال یادگیری - چالش‌ها - تفاوت دامنه بین داده‌های منبع و هدف (Domain Shift)

نکته :

‏وقتی داری انتقال یادگیری می‌کنی، اول یه مدل کوچیک رو با داده‌های منبع تمرین بده، بعد کم کم پیچیده‌ترش کن. اینجوری زودتر نتیجه می‌گیری! 🚀🎯


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #یادگیری_ماشین

🟣 موضوع : ‏یادگیری ماشین: DBSCAN - DBSCAN در داده‌های جریانی (Streaming Data)

نکته :

‏DBSCAN برای داده‌های جریانی مثل یه چالش هیجان‌انگیزه! 🎢 چون DBSCAN دوست داره همه داده‌ها رو با هم ببینه، ولی تو داده‌های جریانی، داده‌ها هی میان و میرن. باید فکر چاره باشی! 🤔


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #NoSQL

🟣 موضوع : ‏Modeling روابط در گراف‌دیتابیس

نکته :

‏از ابزارهای ویژوال برای تجسم روابط استفاده کن. 🖼️ خیلی راحت‌تر میشه فهمید چی به چیه! 😄


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #MySQL

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏مثال عملی: یافتن سفارشات یک مشتری خاص

‏یه راه آسون برای پیدا کردن اطلاعات، استفاده از دستور "SELECT" هست. مثلاً SELECT * FROM tablename WHERE columnname = 'value'; 😎

‏اگه می خوای جدولت رو ببینی، از SHOW TABLES; استفاده کن! خیلی سریع و مفیده.

‏برای اینکه بفهمی ساختار جدولت چیه، از DESCRIBE table_name; استفاده کن. این خیلی بهت کمک می‌کنه! 🧐

‏فراموش نکن قبل از هر تغییری، از دیتابیست بک‌آپ بگیری! 😉 پیشگیری بهتر از درمانه. 🛡️

‏برای اضافه کردن یه ستون جدید به جدولت، از ALTER TABLE tablename ADD columnname datatype; استفاده کن. 💪

‏اگه می خوای یه ردیف جدید به جدولت اضافه کنی، از INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2'); استفاده کن. ✍️

‏اگه می خوای یه چیزی رو از جدولت پاک کنی، از DELETE FROM table_name WHERE condition; استفاده کن. مراقب باش! 😬

‏برای آپدیت کردن اطلاعات یه رکورد، از UPDATE tablename SET columnname = 'new_value' WHERE condition; استفاده کن. 🛠️

‏اگه سرعت کوئری‌هات کمه، حتماً ایندکس‌ها رو بررسی کن و به جدولت اضافه کن! 🚀🔥

‏موقعی که داری یه کوئری می‌نویسی، از کامنت‌ها استفاده کن! اینطوری بعداً راحت‌تر می‌فهمی چی نوشتی. 📝💡


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

بریم سراغ یه نکته کاربردی برای اینکه چطور با دوتا از بزرگ‌ترین مشکلات یادگیری ماشین، یعنی کم‌برازش و بیش‌برازش، مبارزه کنیم! 🥊

راه‌حل‌های کم‌برازش و بیش‌برازش 💊

کم‌برازش (Underfitting) وقتی اتفاق می‌افته که مدل‌ت زیادی ساده‌ است و نمی‌تونه از داده‌ها یاد بگیره. 📉 برعکس، بیش‌برازش (Overfitting) وقتی اتفاق می‌افته که مدل‌ت زیادی پیچیده است و نویز و جزئیات بی‌ربط رو حفظ می‌کنه. 📈

حالا ببینیم برای هر کدوم چه راه‌حل‌هایی داریم:

راه‌حل‌های کم‌برازش (Underfitting)

ویژگی‌های بیشتر اضافه کن: 💡 مدل‌ت رو با اطلاعات بیشتر تغذیه کن. شاید با مهندسی ویژگی بتونی ویژگی‌های جدید و معناداری بسازی.

از یک مدل پیچیده‌تر استفاده کن: اگر مدل‌ت خطیه، شاید یک مدل غیرخطی (مثل شبکه عصبی) برای داده‌هات مناسب‌تر باشه.

برای مدت طولانی‌تر آموزش بده: ⏱️ شاید مدل‌ت فقط به زمان بیشتری برای یادگیری الگوهای داده‌ها نیاز داره.

راه‌حل‌های بیش‌برازش (Overfitting)

داده‌های بیشتری جمع‌آوری کن: 📈 هرچه داده‌ها متنوع‌تر باشن، مدل بهتر می‌تونه به یک نتیجه کلی و قابل تعمیم برسه. اگر نمی‌تونی داده‌ی واقعی جمع کنی، از افزایش داده (Data Augmentation) استفاده کن.

مدل‌ت رو ساده‌تر کن: ✂️ اگر از یک مدل پیچیده استفاده می‌کنی، می‌تونی تعداد لایه‌ها یا پیچیدگیش رو کم کنی.

از رگولاریزیشن استفاده کن: 🔒 این تکنیک به مدل به خاطر پیچیده بودنش "جریمه" می‌ده و اون رو مجبور می‌کنه ساده‌تر بمونه.

از یادگیری گروهی (Ensemble Learning) استفاده کن: 🤝 ترکیب چندین مدل ساده، اغلب بهتر از یک مدل پیچیده عمل می‌کنه و پایداری بیشتری داره.

اعتبارسنجی متقابل (Cross-Validation) انجام بده: این تکنیک بهت کمک می‌کنه تا بیش‌برازش رو شناسایی کنی و جلوی اون رو بگیری.

خلاصه که، شناختن این دو مشکل و دونستن راه‌های حلشون، کلید ساختن مدل‌های هوشمنده! 🗝

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
📚 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏فشرده‌سازی داده‌ها در SQLite

نکته 1:
‏SQLite به صورت بومی و در سطح هسته، مکانیسم‌های فشرده‌سازی خودکار داده‌ها را برای کاهش حجم داده‌های خام ذخیره‌سازی شده پیاده‌سازی نمی‌کند، بلکه مدیریت فشرده‌سازی به سطح کاربر یا لایه‌های بالاتر واگذار می‌شود.

نکته 2:
‏فشرده‌سازی ضمنی در SQLite از طریق ذخیره‌سازی مقادیر NULL, صفرها و رشته‌های خالی با حداقل فضای ذخیره‌سازی (یک بایت یا کمتر) و استفاده مؤثر از رمزگذاری Varint برای اعداد صحیح صورت می‌پذیرد.

نکته 3:
‏برای فشرده‌سازی داده‌های بزرگ (مانند BLOB یا متن‌های طولانی)، رویکرد استاندارد علمی شامل اجرای الگوریتم‌های فشرده‌سازی مانند ZLIB یا LZ4 در لایه برنامه و ذخیره‌سازی محتوای فشرده شده در ستون‌های جدول است.

نکته 4:
‏استفاده از VACUUM اگرچه مستقیماً داده‌ها را فشرده نمی‌کند، اما فضای ذخیره‌سازی را با حذف صفحات خالی و بازسازی ساختار پایگاه داده به صورت فیزیکی بهینه‌سازی کرده و حجم کلی فایل را کاهش می‌دهد.

نکته 5:
‏در صورت ذخیره‌سازی رشته‌های متنی، استفاده از رمزگذاری کاراکترهای با عرض متغیر (مانند UTF-8) به جای عرض ثابت می‌تواند به صورت مؤثری در کاهش فضای مورد نیاز برای ذخیره داده‌ها کمک کند.

نکته 6:
‏برای ستون‌هایی که دامنه مقادیر محدودی دارند، نرمال‌سازی با استفاده از یک جدول نگاشت (Mapping Table) و ذخیره کلیدهای خارجی INTEGER به جای متن‌های تکراری، به شدت فضا را فشرده می‌سازد.

نکته 7:
‏پیاده‌سازی مکانیزم‌های فشرده‌سازی در لایه برنامه نیازمند سربار پردازشی (CPU Overhead) برای فشرده‌سازی قبل از INSERT و دی‌فشرده‌سازی پس از SELECT است که باید با مزایای صرفه‌جویی در فضا متعادل شود.

نکته 8:
‏انتخاب نوع داده INTEGER به جای REAL یا TEXT برای ذخیره‌سازی مقادیر عددی کوچک، به دلیل استفاده از رمزگذاری Varint، به طور مؤثری در بهینه‌سازی فضای ذخیره‌سازی نقش دارد.

نکته 9:
‏برخی از افزونه‌های خارجی یا توابع تعریف شده توسط کاربر (UDFs) برای SQLite توسعه داده شده‌اند که امکانات فشرده‌سازی داخلی را از طریق توابع SQL مانند compress() و uncompress() فراهم می‌کنند.

نکته 10:
‏بهینه‌سازی فضای ذخیره‌سازی در SQLite یک فرآیند چندوجهی است که شامل طراحی ساختار داده، تنظیم پارامترهای پایگاه داده و مدیریت عملیاتی مانند VACUUM و نه صرفاً فشرده‌سازی داده‌های خام می‌باشد.


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
📚 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏حالت‌های تراکنش (IMMEDIATE, EXCLUSIVE)

نکته 1:
‏SQLite سه حالت مختلف برای شروع تراکنش با دستور BEGIN ارائه می‌دهد: DEFERRED، IMMEDIATE و EXCLUSIVE که نحوه مدیریت قفل‌ها و همزمانی (Concurrency) را تعیین می‌کنند.

نکته 2:
‏حالت پیش‌فرض BEGIN DEFERRED است که قفل نوشتن (Write Lock) را تا زمان اجرای اولین دستور نوشتن (مانند INSERT یا UPDATE) به تأخیر می‌اندازد.

نکته 3:
‏در حالت DEFERRED، چندین تراکنش می‌توانند به طور همزمان به پایگاه داده دسترسی خواندن داشته باشند، اما تنها یک تراکنش می‌تواند همزمان عملیات نوشتن را آغاز کند.

نکته 4:
‏حالت BEGIN IMMEDIATE بلافاصله یک قفل نوشتن را بر روی پایگاه داده اعمال می‌کند، به محض شروع تراکنش و قبل از اجرای هر دستور DML.

نکته 5:
‏هنگامی که قفل نوشتن فوری (IMMEDIATE) توسط یک تراکنش به دست می‌آید، هیچ تراکنش دیگری نمی‌تواند عملیات نوشتن را آغاز کند، اما تراکنش‌های خواننده موجود می‌توانند ادامه دهند.

نکته 6:
‏حالت BEGIN EXCLUSIVE بالاترین سطح انزوا را فراهم می‌کند و بلافاصله یک قفل انحصاری را بر روی پایگاه داده اعمال می‌کند.

نکته 7:
‏در حالت EXCLUSIVE، نه تنها هیچ تراکنش دیگری نمی‌تواند عملیات نوشتن را آغاز کند، بلکه هیچ تراکنش دیگری (حتی خواننده) نیز اجازه دسترسی به پایگاه داده را ندارد.

نکته 8:
‏استفاده از حالت IMMEDIATE برای برنامه‌هایی که قصد دارند حتماً عملیات نوشتن را انجام دهند، توصیه می‌شود، زیرا از احتمال شکست تراکنش در میانه راه به دلیل قفل‌های تأخیری جلوگیری می‌کند.

نکته 9:
‏حالت EXCLUSIVE معمولاً در مواقعی استفاده می‌شود که نیاز به انجام یک سری عملیات حساس و حیاتی است و هیچ فعالیت همزمان دیگری (حتی خواندن) نباید دخالت کند.

نکته 10:
‏انتخاب حالت مناسب تراکنش بر روی کارایی و رفتار همزمانی برنامه تأثیر مستقیم دارد؛ DEFERRED بیشترین همزمانی خواندن را فراهم می‌کند، در حالی که EXCLUSIVE کمترین همزمانی را دارد.


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏دستور VACUUM

نکته 1:
‏VACUUM چیه؟ 🤔 مثل یه جاروبرقی قوی برای دیتابیس SQLite می‌مونه! فایل دیتابیس رو تمیز و بهینه‌سازی می‌کنه. 🧹

نکته 2:
‏هدف اصلیش اینه که فضای خالی (Free Space) که بعد از حذف و آپدیت‌ها تو فایل جا مونده رو حذف کنه و حجم فایل رو واقعاً کوچک کنه. 💾

نکته 3:
‏وقتی VACUUM رو اجرا می‌کنی، SQLite کل دیتابیس رو بازسازی و داده‌ها رو تو یه فایل جدید مرتب کپی می‌کنه، بعد فایل قدیمی رو پاک می‌کنه. 🛠️

نکته 4:
‏اگه دیتابیس تو بعد از حذف داده‌ها هنوز بزرگه، VACUUM تنها راهیه که می‌تونی حجم فایل رو به اندازه واقعی داده‌ها برگردونی. 📏💡

نکته 5:
‏نکته مهم: موقع اجرای VACUUM، دیتابیس قفل می‌شه و هیچ فرآیند دیگه‌ای نمی‌تونه بهش دسترسی داشته باشه. پس تو زمان کم‌ترافیک اجراش کن. 🚫

نکته 6:
‏VACUUM یه عملیات زمان‌بره، چون کل دیتابیس رو کپی می‌کنه. برای دیتابیس‌های خیلی بزرگ، ممکنه طول بکشه! 🐘

نکته 7:
‏برای اینکه VACUUM کل دیتابیس رو قفل نکنه، می‌تونی از PRAGMA incremental_vacuum استفاده کنی که فقط یه تعداد مشخص از صفحات رو تمیز می‌کنه. ذره‌ذره تمیزکاری! 🤏

نکته 8:
‏اگه می‌خوای یه کپی تمیز و فشرده از دیتابیس بگیری، می‌تونی از VACUUM INTO 'backup_path.db'; استفاده کنی. هم تمیز می‌شه، هم بک‌آپ می‌گیری! 📦🔥

نکته 9:
‏تو نمی‌تونی VACUUM رو توی یه تراکنش باز (Open Transaction) اجرا کنی. باید اول تراکنش رو با COMMIT یا ROLLBACK ببندی. 🛑

نکته 10:
‏یه ترفند: اگه PRAGMA auto_vacuum = FULL; رو فعال کنی، بعد از هر حذف، SQLite سعی می‌کنه یه کم فضا رو تمیز کنه. این به جای VACUUM بزرگ، به درد می‌خوره. 😎


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏مشکلات همزمانی و راه‌حل‌ها

نکته 1:
‏مشکل اصلی همزمانی تو SQLite اینه که فقط یک فرآیند می‌تونه در هر لحظه بنویسه. اگه چند نفر همزمان بخوان بنویسن، یکی باید منتظر بشه.

نکته 2:
‏رایج‌ترین مشکل، خطای SQLITE_BUSY هست. یعنی "بابا، یکی داره می‌نویسه، بیا چند لحظه دیگه!" راه‌حل: دوباره تلاش کن! 🔄💡

نکته 3:
‏راه‌حل طلایی: تو کدت یه حلقه تلاش مجدد (Retry Loop) بذار. اگه BUSY دیدی، چند میلی‌ثانیه صبر کن و کوئری رو دوباره بفرست. اینجوری برنامه هنگ نمی‌کنه. 🛠️🔥

نکته 4:
‏برای بهینه‌سازی، همیشه از تراکنش‌ها استفاده کن! جمع کردن چندین عملیات نوشتن تو یک BEGIN...COMMIT، زمان قفل بودن رو خیلی کم می‌کنه. 🚀

نکته 5:
‏اگه خواندن‌های همزمان داری که باعث مشکل می‌شن، با دستور PRAGMA read_uncommitted = 1 می‌تونی اجازه بدی که فرآیندها دیتای نیمه‌کاره رو هم بخونن (با ریسک کمتر). 🧐

نکته 6:
‏یکی از بهترین راه‌حل‌ها، فعال کردن حالت WAL (Write-Ahead Logging) هست. این مکانیزم اجازه می‌ده خواندن‌ها و نوشتن‌ها همزمان انجام بشن (با قفل‌های هوشمندتر). ✍️📖

نکته 7:
‏تو حالت عادی (Journal Mode)، موقع نوشتن، خواندن‌ها بلاک می‌شن. اما با WAL، خواندن‌ها می‌تونن از فایل کمکی WAL بخونن و بلاک نمی‌شن. 🥳

نکته 8:
‏اگه خطای BUSY داری، سعی کن دستور COMMIT یا ROLLBACK رو سریع‌تر اجرا کنی. باز نگه داشتن طولانی تراکنش، کل سیستم رو کند می‌کنه. ⏱️

نکته 9:
‏برای برنامه‌هایی که خیلی خیلی ترافیک نوشتن بالا دارن، شاید SQLite دیگه مناسب نباشه! باید به دیتابیس‌های بزرگتر (مثل PostgreSQL یا MySQL) که همزمانی واقعی دارن کوچ کنی. 🐘

نکته 10:
‏اگه داری از دیتابیس‌های موقتی (TEMP) استفاده می‌کنی، برای اونها مشکلی با همزمانی نوشتن نداری، چون هر اتصال دیتابیس موقتی خودش رو داره. راحت باش! 😎


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #MySQL

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏مثال عملی دیگر با SELF JOIN: یافتن مشتریان هم‌شهر

‏فکر کن داری از جدول مشتری‌هات یه کپی می‌گیری و کنار خودش می‌ذاری تا ردیف به ردیف با هم مقایسه‌شون کنی. یه جورایی همزادبازی! 👯‍♂️

‏جادوی اصلی تو شرط ON اتفاق میفته! وقتی می‌نویسی a.City = b.City یعنی فقط مشتری‌هایی که تو یه شهرن رو بیار کنار هم.

‏یادت نره که یه مشتری رو با خودش مقایسه نکنی! حتماً این شرط رو بذار: a.CustomerID <> b.CustomerID وگرنه الکی شلوغ میشه. 🤦‍♀️💡

‏استفاده از اسم‌های مستعار (alias) مثل c1 و c2 برای جدولات، کوئری رو خیلی خوشگل و خوانا می‌کنه. مثلاً FROM Customers AS c1, Customers AS c2 😎

‏برای اینکه نتیجه رو واضح ببینی، اسم هر دو مشتری و شهرشون رو کنار هم بیار. مثلا: SELECT c1.FullName, c2.FullName, c1.City 👀

‏برای اینکه جفت‌های تکراری (مثلا علی و رضا، بعد رضا و علی) رو نبینی، یه شرط کوچولوی دیگه اضافه کن: WHERE c1.CustomerID < c2.CustomerID. اینجوری کوئریت تمیز میشه! 🧹

‏اگه جدول مشتری‌هات خیلی بزرگه، حتما روی ستون شهر یه ایندکس (Index) بذار. سرعت کوئری‌ت زمین تا آسمون فرق می‌کنه! 🚀

‏میتونی خلاق باشی! حالا که اینو یاد گرفتی، مشتری‌های هم‌استانی یا حتی با فامیلی یکسان رو هم پیدا کن. دستت بازه! 🌌

‏این تکنیک برای کمپین‌های تبلیغاتی محلی یا پیدا کردن مشتری‌های یه منطقه خاص عالیه. حسابی به دردت می‌خوره! 🎯

‏از SELF JOIN نترس! انگار جدول داره با خودش حرف می‌زنه تا رفیق‌هاشو پیدا کنه. تو هم می‌تونی! 💪🔥


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

یه مثال ساده با پایتون در مورد تاثیر نرمال‌سازی داده‌ها


from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score

# داده نمونه
data = load_iris()
X, y = data.data, data.target

# تقسیم داده به آموزش و تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# مدل KNN بدون نرمال‌سازی
model = KNeighborsClassifier()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("دقت بدون نرمال‌سازی:", accuracy_score(y_test, y_pred))

# مدل KNN با نرمال‌سازی
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

model_scaled = KNeighborsClassifier()
model_scaled.fit(X_train_scaled, y_train)
y_pred_scaled = model_scaled.predict(X_test_scaled)
print("دقت با نرمال‌سازی:", accuracy_score(y_test, y_pred_scaled))


نتیجه معمولا نشون میده که نرمال‌سازی باعث افزایش دقت یا پایداری مدل می‌شه، مخصوصا وقتی ویژگی‌ها مقیاس‌های متفاوتی دارند.



ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #MySQL

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏معرفی عبارت‌های جدول مشترک (Common Table Expressions - CTE)

‏CTE ها مثل یه اسم مستعار باحال برای زیرquery هات هستن! خیلی خوانا میکنه کوئری رو. 😎

‏با CTE ها، میتونی یه بار یه چیزی رو حساب کنی و بعد چند بار ازش استفاده کنی! ♻️ دیگه لازم نیست کدتو تکرار کنی.

‏یادت باشه CTE ها فقط تو همون کوئری که تعریف شدن اعتبار دارن. مثل یه راز باحال! 😉🤫

‏CTE های بازگشتی برای کار با داده‌های سلسله مراتبی خیلی به درد میخورن. مثلاً ساختار سازمانی یه شرکت. 🌳🏢

‏میتونی چند تا CTE رو پشت سر هم تعریف کنی، فقط کافیه با کاما از هم جداشون کنی. خیلی شیک و مجلسی! 👌

‏وقتی از CTE استفاده میکنی، اول اسم CTE رو میاری، بعد ستون هاش رو (اگه خواستی اسم بدی)، بعدش هم AS و بعدش SELECT statement خودت. ✍️

‏اگه یه CTE داری که هیچی برنمیگردونه، کل کوئری هیچی برنمیگردونه. پس حواست باشه! 👻

‏با CTE ها میتونی کوئری های پیچیده رو به تیکه های کوچیکتر و قابل فهم تر تقسیم کنی. مثل پازل! 🧩🤓

‏میتونی CTE ها رو با جدول های دیگه join کنی. اینجوری قدرتت چند برابر میشه! 💪💥

‏قبل از اینکه CTE رو تو production استفاده کنی، حتماً تستش کن. نمیخوای یهو خرابکاری بشه! 💣🔥


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir