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

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

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

نکته 1:
‏بند HAVING یک عبارت شرطی است که در دستور SELECT، پس از بند GROUP BY، به منظور اعمال فیلتر بر روی گروه‌های ایجاد شده توسط آن بند، به کار می‌رود.

نکته 2:
‏تفاوت کلیدی بین HAVING و WHERE در این است که WHERE فیلتر کردن را بر روی سطرهای مجزا قبل از گروه‌بندی انجام می‌دهد، در حالی که HAVING بر روی نتایج تجمعی گروه‌ها اعمال می‌شود.

نکته 3:
‏شرط‌های تعریف شده در بند HAVING اغلب شامل یک یا چند توابع تجمعی (Aggregate Functions) مانند COUNT، SUM یا AVG هستند که نتیجه آن‌ها برای ارزیابی شرط استفاده می‌شود.

نکته 4:
‏فیلتر کردن با HAVING پس از محاسبه توابع تجمعی برای هر گروه رخ می‌دهد؛ بنابراین، تنها گروه‌هایی که شرط را ارضا کنند، در مجموعه نتیجه نهایی ظاهر می‌شوند.

نکته 5:
‏اگر در یک پرس‌وجو از بند GROUP BY استفاده نشده باشد، می‌توان از HAVING برای اعمال شرط‌های تجمعی بر روی کل مجموعه نتیجه (که به عنوان یک گروه واحد در نظر گرفته می‌شود) استفاده کرد.

نکته 6:
‏در زنجیره پردازش یک عبارت SELECT استاندارد، بند HAVING پس از GROUP BY و قبل از ORDER BY توسط موتور پایگاه داده SQLite ارزیابی و اجرا می‌شود.

نکته 7:
‏وجود HAVING برای فیلتر کردن نتایج بر اساس معیارهای مشتق شده از داده‌های گروهی (مانند تعداد کل رکوردها یا میانگین مقادیر) ضروری است.

نکته 8:
‏استفاده غیرضروری از HAVING برای شرط‌هایی که می‌توانند با WHERE فیلتر شوند، ممکن است منجر به کاهش کارایی (Performance Degradation) شود، زیرا فیلتر کردن بر روی مجموعه بزرگ‌تری از داده‌ها انجام می‌گیرد.

نکته 9:
‏مانند WHERE، عملگرهای مقایسه‌ای و منطقی (مانند AND، OR، NOT) برای تعریف عبارات شرطی پیچیده در بند HAVING قابل استفاده هستند.

نکته 10:
‏HAVING امکان انجام تجزیه و تحلیل آماری سطح بالا را فراهم می‌سازد؛ به عنوان مثال، بازیابی فقط گروه‌هایی که دارای بیش از X عضو هستند یا میانگین آن‌ها بیشتر از Y است.


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

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

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

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

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

نکته 1:
‏دستور BEGIN TRANSACTION یا به اختصار BEGIN، در SQLite برای خروج از حالت Auto-commit و شروع صریح یک تراکنش جدید توسط کاربر به کار می‌رود.

نکته 2:
‏شروع یک تراکنش صریح، امکان گروه‌بندی چندین عملیات زبان دستکاری داده‌ها (DML) را به عنوان یک واحد منطقی فراهم می‌سازد که خواص ACID را تضمین می‌کند.

نکته 3:
‏SQLite سه حالت شروع تراکنش را ارائه می‌دهد: BEGIN DEFERRED، BEGIN IMMEDIATE، و BEGIN EXCLUSIVE که هر کدام رفتار قفل‌گذاری متفاوتی دارند.

نکته 4:
‏DEFERRED (تاخیری) به سایر تراکنش‌های خواننده اجازه می‌دهد تا به کار خود ادامه دهند و قفل نوشتن تنها هنگام اجرای اولین دستور نوشتن (WRITE) اعمال می‌شود.

نکته 5:
‏IMMEDIATE (فوری) بلافاصله یک قفل نوشتن (WRITE Lock) را بر روی فایل پایگاه داده اعمال می‌کند، به این معنا که هیچ تراکنش نوشتن دیگری نمی‌تواند همزمان شروع شود.

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

نکته 7:
‏استفاده از تراکنش‌های صریح برای اجرای چندین دستور INSERT، UPDATE یا DELETE به طور متوالی، منجر به بهبود قابل توجهی در عملکرد به دلیل کاهش سربار I/O و عملیات دیسک می‌شود.

نکته 8:
‏در صورت عدم فراخوانی صریح BEGIN، هر دستور DML در SQLite به صورت پیش‌فرض در یک تراکنش Auto-commit مجزا و خودکار اجرا و تأیید می‌شود.

نکته 9:
‏تراکنش آغاز شده توسط BEGIN TRANSACTION، باید با دستور COMMIT (برای اعمال تغییرات) یا ROLLBACK (برای لغو تغییرات) به پایان برسد.

نکته 10:
‏در محیط‌های چندکاربره، انتخاب حالت مناسب BEGIN (به ویژه IMMEDIATE یا EXCLUSIVE) در مدیریت همزمانی (Concurrency) و جلوگیری از تضادهای قفل‌گذاری بسیار حیاتی است.


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

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

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

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

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

نکته 1:
‏json_patch چیه؟ 🤔 این تابع مثل یه وصله‌دوز جادویی عمل می‌کنه که دو تا سند JSON رو می‌گیره و تغییرات سند دوم رو روی سند اول اعمال می‌کنه. 🩹

نکته 2:
‏ساختارش اینه: jsonpatch(سندهدف, وصله_تغییر). سند تغییر باید خودش یه JSON معتبر باشه که دستورات تغییر رو توش نوشته باشی. 📝💡

نکته 3:
‏این تابع بر اساس استاندارد JSON Patch (RFC 6902) کار می‌کنه. یعنی می‌تونی عملیات‌هایی مثل add، remove، replace، move، copy، و test رو تو وصله استفاده کنی. 🛠️

نکته 4:
‏برای به‌روزرسانی (Update) یه سند JSON بدون اینکه لازم باشه کل سند رو از اول بسازی، json_patch یه راه خیلی بهینه است. 🚀🔥

نکته 5:
‏اگه تو وصله (Patch) یه مسیر رو برای remove بدی که وجود نداره، json_patch خطا نمی‌ده و فقط اون قسمت رو نادیده می‌گیره. رفتار دوستانه! 🤝

نکته 6:
‏از json_patch برای همگام‌سازی (Syncing) استفاده کن. می‌تونی یه سند JSON رو بفرستی و فقط تغییرات رو (وصله) برگردونی تا حجم داده‌های منتقل شده کم بشه. 📉

نکته 7:
‏اگه تو سند وصله، عملیات replace رو برای یه کلید تعریف کنی، اون کلید با مقدار جدید جایگزین می‌شه. ساده و مستقیم! 🔄

نکته 8:
‏json_patch فقط روی JSONهایی که به صورت آبجکت () یا آرایه ([]) هستن کار می‌کنه. اگه ورودی یه مقدار ساده (مثل عدد) باشه، ممکنه خطا بده. 🔢

نکته 9:
‏این تابع یه ابزار پیشرفته برای توسعه‌دهنده‌هاست. برای کارهای ساده‌تر مثل اضافه کردن یک کلید، از json_set() استفاده کن که ساده‌تره. ⚠️

نکته 10:
‏یه ترفند: می‌تونی یه Patch رو برای برگشت به عقب هم تعریف کنی. اگه عملیات‌ها رو معکوس کنی، می‌تونی سند رو به حالت قبل برگردونی! 😎


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

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

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

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

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

نکته 1:
‏BEGIN TRANSACTION مثل زدن دکمه ضبط قبل از یه سری کار مهمه! می‌گه: "از این به بعد، هر تغییری موقتیه تا وقتی که من اجازه بدم." 🎬

نکته 2:
‏اگه می‌خوای چندتا دستور INSERT، UPDATE یا DELETE رو خیلی سریع اجرا کنی، حتماً قبلش BEGIN بزن. سرعتت چند برابر می‌شه! 🚀🔥

نکته 3:
‏هدف اصلی BEGIN اینه که مطمئن شی تمام کارهایی که می‌خوای انجام بدی، یا همه‌شون با هم موفق بشن، یا هیچ‌کدوم. (قانون اتمیسیته) ⚛️

نکته 4:
‏اگه تو یه تراکنش هستی و سیستم کرش کنه، نگران نباش! چون هنوز COMMIT نکردی، SQLite با Rollback دیتابیس رو برمی‌گردونه به حالت قبل از BEGIN. امنیت! 🔒

نکته 5:
‏SQLite به طور پیش‌فرض در حالت Autocommit کار می‌کنه. یعنی هر دستور تغییر داده (DML) رو خودش خودکار تو یه تراکنش می‌ذاره. BEGIN این رفتار رو غیرفعال می‌کنه. 💡

نکته 6:
‏سه نوع BEGIN داریم: BEGIN DEFERRED (پیش‌فرض)، BEGIN IMMEDIATE و BEGIN EXCLUSIVE. معمولاً DEFERRED کافیه، مگر اینکه مشکل قفل شدن داشته باشی. 🔑

نکته 7:
‏از BEGIN استفاده کن تا مطمئن شی که بقیه فرآیندها نمی‌تونن تغییرات نیمه‌کاره تو رو ببینن. اینجوری دیتای بقیه خراب نمی‌شه (قانون انزوا). 🚪

نکته 8:
‏اگه بخوای توی یه فایل دیتابیس، همزمان بیش از یک نفر بنویسن، باید از نوع BEGIN EXCLUSIVE استفاده کنی. اینجوری قفل کامل می‌گیری. 🚫✍️

نکته 9:
‏بعد از BEGIN، باید حواست باشه که تراکنش رو یا با COMMIT نهایی کنی یا با ROLLBACK لغو کنی. اگه برنامه‌ات بسته شه، خودکار Rollback می‌شه. ⚠️

نکته 10:
‏یه مثال عملی: داری پول رو از حساب A به B منتقل می‌کنی. حتماً قبل از کم کردن و اضافه کردن، BEGIN کن تا مطمئن شی هر دو کار انجام می‌شه. 💰😎


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

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

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

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

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

نکته 1:
‏تابع ST_Intersects در پسوند SpatiaLite یک تابع توپولوژیکی (Topological Function) است که وقوع تقاطع فضایی بین دو هندسه ورودی را ارزیابی می‌نماید.

نکته 2:
‏خروجی تابع ST_Intersects(geometry1, geometry2) یک مقدار بولی (Boolean) است: مقدار 1 به معنای تقاطع (Overlap) یا تماس و مقدار 0 به معنای عدم تقاطع است.

نکته 3:
‏تقاطع فضایی به معنای وجود حداقل یک نقطه مشترک در مرزها یا فضای داخلی هندسه‌های ورودی است و شامل تماس یا اشتراک کامل درونی می‌شود.

نکته 4:
‏این تابع در پرس‌وجوهای فیلترینگ مکانی (Spatial Filtering Queries) برای انتخاب رکوردهایی به کار می‌رود که هندسه آن‌ها با یک هندسه مرجع مشخص، دارای اشتراک فضایی است.

نکته 5:
‏برخلاف توابع فاصله (مانند STDistance)، STIntersects صرفاً بر روابط مکانی تمرکز دارد و محاسبات مربوط به واحد اندازه‌گیری یا فاصله بین هندسه‌ها را انجام نمی‌دهد.

نکته 6:
‏برای بهینه‌سازی عملکرد، ST_Intersects از اندیس فضایی R-tree برای انجام یک آزمون سریع محدوده (Bounding Box Test) قبل از انجام محاسبات هندسی دقیق استفاده می‌نماید.

نکته 7:
‏اگر محدوده‌های مرزی (Bounding Boxes) دو هندسه با یکدیگر تقاطع نداشته باشند، ST_Intersects به سرعت مقدار 0 را برمی‌گرداند و از پردازش هندسی پرهزینه اجتناب می‌شود.

نکته 8:
‏در صورت تقاطع محدوده‌های مرزی، تابع به مرحله محاسبه دقیق می‌رود تا اشتراک فضایی در سطح هندسه واقعی، نه فقط مستطیل‌های محصورکننده، تأیید شود.

نکته 9:
‏این تابع در تحلیل همپوشانی‌ها (Overlap Analysis)، به ویژه در سامانه‌های اطلاعات جغرافیایی (GIS)، برای شناسایی عوارضی که از نظر جغرافیایی با یکدیگر همپوشانی دارند، کاربرد اساسی دارد.

نکته 10:
‏استفاده از ST_Intersects در بند WHERE یک عبارت SELECT امکان می‌دهد تا رکوردهای مرتبط بر اساس معیار تماس یا اشتراک فضایی به صورت کارآمد فیلتر و بازیابی شوند.


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

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

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

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

نکته: LSTM (Long Short-Term Memory) شبکه‌ای عصبی برای سری‌های زمانی غیرخطی و طولانیه.

🔹 ویژگی‌ها:

می‌تونه وابستگی بلندمدت بین مشاهدات رو یاد بگیره

مناسب برای داده‌های غیرخطی و پیچیده (مثل قیمت سهام یا متن)

از مشکل Vanishing Gradient در RNNهای ساده جلوگیری می‌کنه

🔹 مزایا:

پیش‌بینی دقیق‌تر سری‌های زمانی طولانی

توانایی یادگیری الگوهای پیچیده و دوره‌ای

کاربرد در Forecasting، NLP و تشخیص ناهنجاری

به زبان ساده: LSTM مثل یک “حافظه بلندمدت” برای مدل هست که اتفاقات گذشته‌ی مهم رو فراموش نمی‌کنه 🧠

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


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

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

آدرس وبسایت:
https://Tutorial24.ir
🔵 کوییز #SQL



کدام عبارت SQL برای محاسبه مجموع حقوق (salary) تمام کارمندان در جدول employees صحیح است؟
 
   A) SELECT COUNT(salary) FROM employees; 

   B) SELECT SUM(salary) FROM employees; 

   C) SELECT AVG(salary) FROM employees; 

   D) SELECT MAX(salary) FROM employees; 


   پاسخ:
B
 
   توضیح: SUM(salary) مجموع مقادیر ستون salary را محاسبه می‌کند. 


   

💗 مطالب بعدی ما رو حتما دنبال کنید!



ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
آدرس کانال اصلی:
https://t.me/Tu_24
آدرس وبسایت:
https://tutorial24.ir/
💡 نکته #یادگیری_ماشین

🟣 موضوع : ‏یادگیری ماشین: Apriori - تولید آیتم‌ست‌های کاندیدا (Candidate Generation)

نکته :

‏همیشه یادت باشه، تولید کاندیدا مثل یه غربالگر اولیه عمل می‌کنه! ما آیتم‌ست‌های بزرگ‌تر رو پیشنهاد می‌دیم که شاید پرتکرار باشن. 🕵️‍♂️💡


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
🔵 کوییز T-SQL - استفاده از UNION و UNION ALL برای ترکیب نتایج چند SELECT #sql_server #t_sql #پایگاه_داده

🟣 سوال: چگونه می‌توان داده‌های دو جدول مختلف را بدون حذف مقادیر تکراری ترکیب کرد؟

🟢 پاسخ: برای این کار می‌توان از UNION ALL استفاده کرد. مثال: SELECT ProductName FROM Table1 UNION ALL SELECT ProductName FROM Table2;
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

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

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

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

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

نکته 1:
‏SQLite یک سامانه مدیریت پایگاه داده رابطه‌ای (RDBMS) است که به واسطه طراحی سبک، بدون نیاز به نصب یا پیکربندی مجزا، به عنوان یک موتور پایگاه داده تعبیه‌شده (Embedded) شناخته می‌شود.

نکته 2:
‏معماری SQLite به صورت بدون سرور (Serverless) است؛ به این معنا که فرآیند (Process) پایگاه داده به طور مستقیم درون برنامه میزبان (Host Application) اجرا می‌شود و هیچ فرآیند سرور جداگانه‌ای وجود ندارد.

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

نکته 4:
‏SQLite در اصل توسط دکتر ریچارد هیپ (Dr. D. Richard Hipp) طراحی شده و یک پروژه متن‌باز (Open Source) و فاقد محدودیت‌های حق تکثیر (Public Domain) است که قابلیت استفاده در هر محیطی را فراهم می‌کند.

نکته 5:
‏یکی از ویژگی‌های کلیدی SQLite، پشتیبانی کامل از تراکنش‌های ACID (Atomic, Consistent, Isolated, Durable) است که تضمین‌کننده یکپارچگی داده‌ها حتی در شرایط خطا یا قطع ناگهانی عملیات است.

نکته 6:
‏SQLite از زبان SQL استاندارد برای انجام عملیات مختلف از جمله تعریف داده‌ها (DDL)، دستکاری داده‌ها (DML) و بازیابی داده‌ها (DQL) استفاده می‌نماید.

نکته 7:
‏این سامانه به دلیل حجم کم، کارایی مناسب و سادگی در پیاده‌سازی، به طور گسترده‌ای در سیستم‌های موبایل (مانند اندروید و iOS)، مرورگرهای وب و سیستم‌های توکار (Embedded Systems) استفاده می‌شود.

نکته 8:
‏بر خلاف سایر RDBMSها، SQLite از نوع‌بندی ضعیف/پویا (Weak/Dynamic Typing) در ستون‌های جداول خود استفاده می‌کند که امکان ذخیره مقادیری با نوع داده متفاوت از نوع تعریف شده ستون را فراهم می‌آورد.

نکته 9:
‏فایل پایگاه داده SQLite با نام‌های رایجی مانند .sqlite، .db یا .sqlite3 ذخیره می‌شود و شامل موتور پایگاه داده، جداول، اندیس‌ها، و ساختارهای داده‌ای فرعی است.

نکته 10:
‏موتور SQLite به طور کامل در زبان C نوشته شده است و با استفاده از یک API ساده امکان اتصال و تعامل با آن از طریق زبان‌های برنامه‌نویسی متعدد فراهم می‌آید.


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

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

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

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

🟣 موضوع : ‏یادگیری ماشین: یادگیری تحت نظارت - رگرسیون چندگانه (Multiple Linear Regression)

نکته :

‏یه چیزی که خیلی مهمه اینه که داده‌ها رو به دو قسمت تقسیم کنی: آموزش و تست. 🧑‍🏫 اول مدل‌ت رو با داده‌های آموزش یاد بگیر و بعد با داده‌های تست ارزیابی کن.


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

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

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

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

🟣 موضوع : Connection Pooling

نکته :

‏وقتی از Connection Pooling استفاده می‌کنی، فشار کمتری روی دیتابیس میاد. اینجوری عمرش هم بیشتر میشه! 😉


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

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

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

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

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

‏برای شروع، اول دو تا جدول (مثلا مشتریان و سفارشات) رو بهم وصل کن، بعد که مطمئن شدی درسته، جدول سوم (محصولات) رو بهش اضافه کن. اینجوری کمتر گیج میشی! 💡

‏برای اسم جدول‌ها حتما از نام مستعار (Alias) استفاده کن. مثلا c برای مشتریان، o برای سفارشات و p برای محصولات. کوئری‌ت خیلی خوانا و تمیز میشه.

‏ترتیب JOIN کردن مهمه! سعی کن یه مسیر منطقی رو دنبال کنی. مثلا مشتری رو به سفارش وصل کن، و بعد سفارش رو به محصول. مثل یه زنجیر به هم پیوسته. 🔗

‏هیچ‌وقت از SELECT * استفاده نکن! فقط ستون‌هایی که لازم داری رو انتخاب کن (مثلا c.name, p.product_name). این کار سرعت کوئری رو خیلی بالا می‌بره. 🚀

‏شرط‌های ON رو دو بار چک کن! مطمئن شو که کلیدهای خارجی و اصلی درست بهم وصل شدن (مثلا c.id = o.customer_id). یه اشتباه کوچیک اینجا کل نتیجه رو خراب می‌کنه. 👀

‏یادت باشه INNER JOIN فقط رکوردهایی رو میاره که تو هر سه تا جدول وجه اشتراک دارن. یعنی اگه یه مشتری سفارشی نداشته باشه، اصلا تو نتیجه نمیاد! 🤔

‏جدول سفارشات اینجا نقش "پل" رو بازی می‌کنه که مشتری‌ها رو به محصولات وصل می‌کنه. همیشه حواست به این جدول واسط باشه که قلب اتصال توئه. 🌉

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

‏برای درک بهتر، سه تا دایره‌ی تو در تو رو تصور کن. INNER JOIN فقط اون قسمت کوچیکی که هر سه دایره با هم مشترک هستن رو بهت نشون میده. 🎯

‏قبل از اجرای کوئری روی دیتابیس اصلی، همیشه اون رو روی چندتا داده‌ی تستی اجرا کن تا مطمئن بشی همون چیزی که می‌خوای رو برمیگردونه. کار از محکم‌کاری عیب نمی‌کنه! 💪


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

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

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

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

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

نکته 1:
‏بند ORDER BY در دستور SELECT یک عبارت اختیاری است که برای مرتب‌سازی (Sorting) مجموعه نتایج (Result Set) یک پرس‌وجو بر اساس مقادیر یک یا چند ستون مشخص، به کار می‌رود.

نکته 2:
‏ترتیب پیش‌فرض مرتب‌سازی در SQL، از جمله در SQLite، به صورت صعودی (Ascending) است که با عبارت کلیدی ASC مشخص می‌شود و از کوچکترین مقدار به بزرگترین مقدار است.

نکته 3:
‏برای اعمال مرتب‌سازی به صورت نزولی (Descending) و نمایش نتایج از بزرگترین مقدار به کوچکترین مقدار، باید صراحتاً از عبارت کلیدی DESC استفاده شود.

نکته 4:
‏مرتب‌سازی می‌تواند بر اساس چندین ستون صورت پذیرد؛ در این حالت، نتایج ابتدا بر اساس اولین ستون، سپس بر اساس ستون دوم (برای مقادیر یکسان در ستون اول) و به همین ترتیب مرتب می‌شوند.

نکته 5:
‏SQLite از مرتب‌سازی بر اساس شماره موقعیت (Ordinal Position) ستون در لیست SELECT نیز پشتیبانی می‌کند، اما این روش به دلیل کاهش خوانایی و وابستگی به ساختار پرس‌وجو، کمتر توصیه می‌شود.

نکته 6:
‏مقادیر NULL در SQLite هنگام مرتب‌سازی با ORDER BY، بر اساس تنظیمات پیش‌فرض یا صراحتاً با استفاده از عبارت‌های NULLS FIRST یا NULLS LAST مدیریت می‌شوند.

نکته 7:
‏NULLS FIRST تضمین می‌کند که سطر حاوی مقادیر NULL در ابتدای مجموعه نتایج (صرف نظر از ASC یا DESC) قرار گیرد، در حالی که NULLS LAST آن‌ها را به انتهای نتایج منتقل می‌کند.

نکته 8:
‏در صورت عدم وجود اندیس‌های مناسب (Indexes) بر روی ستون‌های مورد استفاده در ORDER BY، عملیات مرتب‌سازی نیاز به فرآیند پرهزینه‌ای به نام Sort Operation در حافظه یا دیسک خواهد داشت.

نکته 9:
‏عملکرد مرتب‌سازی در SQLite همچنین می‌تواند توسط Collating Sequence ستون‌های متنی تأثیر پذیرد، که شیوه مقایسه کاراکترها و حروف را هنگام مرتب‌سازی تعیین می‌کند.

نکته 10:
‏بند ORDER BY همواره آخرین بندی است که در یک عبارت SELECT استاندارد (پس از FROM, WHERE, GROUP BY و HAVING) توسط موتور پایگاه داده ارزیابی و اجرا می‌شود.


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

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

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

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

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏کلید اصلی (Primary Key) و نقش آن در JOIN

‏کلید اصلی مثل شناسنامه هر ردیفه تو جدول MySQL، بدون اون نمی‌شه مطمئن شد کدوم ردیف رو داری می‌بینی! 🆔

‏وقتی داری JOIN می‌زنی، کلید اصلی رو به کلید خارجی جدول دیگه وصل می‌کنی تا داده‌ها رو درست به هم ربط بدی. 🤝🔗

‏اگه کلید اصلی نداشته باشی، JOIN کردن مثل پیدا کردن سوزن تو انبار کاهه! 🤯🌾

‏استفاده درست از کلید اصلی توی JOIN، سرعت کوئری‌هات رو فوق‌العاده بالا می‌بره. 🚀

‏به کلید اصلی به چشم ستون مهمی که نباید تکراری باشه و NULL هم نشه نگاه کن. 😉

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

‏برای بهینه‌سازی، حتماً روی ستون کلید اصلی ایندکس (Index) بذار. خیلی فرق می‌کنه! 💯👍

‏یادت باشه، کلید اصلی فقط برای شناسه نیست، کلی کاربرد تو طراحی دیتابیس داره. 🌟🗄️

‏اگه از کلید اصلی درست استفاده کنی، احتمال خطا توی داده‌هات خیلی کم می‌شه. خیال راحت! 😊🛡️

‏کلید اصلی کلید جادویی برای دسترسی سریع و امن به داده‌ها در عملیات JOIN هست. جدی بگیرش! 🧙‍♂️🔑


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

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

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

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

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

نکته 1:
‏نمایه‌ها (Indexes) ساختارهای داده‌ای مجزایی هستند که با دستور CREATE INDEX ایجاد می‌شوند و برای تسریع فرآیند بازیابی داده‌ها (Data Retrieval) از جداول SQLite طراحی شده‌اند.

نکته 2:
‏ساختار داده‌ای نمایه‌ها معمولاً به صورت یک درخت بی پلاس (B-tree) سازماندهی می‌شود که دسترسی مستقیم و سریع به سطرها را بر اساس مقادیر کلید فراهم می‌سازد .

نکته 3:
‏هدف اصلی از ایجاد نمایه، کاهش تعداد عملیات ورودی/خروجی دیسک (Disk I/O) مورد نیاز برای اجرای پرس‌وجوها، به ویژه آن‌هایی که دارای بندهای WHERE یا ORDER BY هستند، است.

نکته 4:
‏ایجاد یک نمایه، سربار اضافی (Overhead) در عملیات دستکاری داده‌ها (DML) مانند INSERT، UPDATE و DELETE ایجاد می‌کند، زیرا نمایه باید پس از هر تغییر در داده‌های جدول، به‌روزرسانی شود.

نکته 5:
‏SQLite به طور خودکار اندیس‌های داخلی برای ستون‌های PRIMARY KEY و UNIQUE ایجاد می‌کند تا از اجرای قیدهای یکپارچگی و دسترسی سریع به سطرها اطمینان حاصل شود.

نکته 6:
‏نمایه‌ها را می‌توان بر روی یک ستون (Single-Column Index) یا بر روی ترکیبی از چندین ستون (Composite Index) ایجاد کرد که برای پرس‌وجوهایی با شروط چندگانه مفید است.

نکته 7:
‏ترتیب ستون‌ها در یک نمایه ترکیبی اهمیت زیادی دارد و باید با ترتیب استفاده از ستون‌ها در بند WHERE پرس‌وجوها برای بهینه‌سازی بهتر، مطابقت داشته باشد.

نکته 8:
‏نمایه‌های UNIQUE INDEX تضمین می‌کنند که مقادیر موجود در ستون‌های نمایه شده، هیچ‌گونه تکراری نداشته باشند و از یکپارچگی داده‌ها محافظت می‌کند.

نکته 9:
‏تحلیل عملکردی (Performance Analysis) پرس‌وجوها با استفاده از عبارت EXPLAIN QUERY PLAN به متخصصان امکان می‌دهد تا از استفاده صحیح و مؤثر نمایه‌ها توسط بهینه‌ساز پرس‌وجو (Query Optimizer) اطمینان حاصل نمایند.

نکته 10:
‏تصمیم‌گیری برای ایجاد یک نمایه باید با در نظر گرفتن تعادل بین سرعت بازیابی و سربار به‌روزرسانی انجام شود؛ نمایه‌های بیش از حد می‌توانند عملکرد کلی سیستم را کاهش دهند.


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

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

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

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

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

نکته 1:
‏برای بهینه‌سازی، اول از همه باید از دستور VACUUM استفاده کنی! این دستور فضای خالی دیتابیس رو حذف می‌کنه و حجم فایل رو کم می‌کنه. 🧹

نکته 2:
‏از نوع داده‌ی BLOB برای ذخیره‌ی فایل‌های حجیم (مثل تصاویر) پرهیز کن! بهتره فایل رو تو سیستم فایل معمولی ذخیره کنی و فقط مسیرش رو تو SQLite بذاری. 📦💾

نکته 3:
‏اگه می‌خوای یه عدد کاملاً صحیح باشه و هیچ‌وقت Null نشه، ستون رو INTEGER PRIMARY KEY تعریف کن. این کار باعث می‌شه از فضای کمتری استفاده بشه. 🔢💡

نکته 4:
‏از ایندکس‌های زیادی پرهیز کن! هر ایندکس یه کپی اضافی از داده‌ها رو تو فایل ذخیره می‌کنه و حجم رو زیاد می‌کنه. فقط برای ستون‌های ضروری ایندکس بساز. 📉

نکته 5:
‏اگه می‌بینی تو یه ستون فقط عدد صفر و یک یا True و False ذخیره می‌کنی، حتماً نوع داده رو INTEGER بذار. چون فضای کمتری نسبت به TEXT می‌گیره. 🤏

نکته 6:
‏برای اینکه دیتابیس خودش کم‌کم تمیز بمونه، PRAGMA auto_vacuum = FULL; رو فعال کن. این باعث می‌شه فضای آزاد مدیریت بشه و دیگه لازم نباشه همیشه VACUUM بزنی. 🔄

نکته 7:
‏در صورت امکان، از نام‌های کوتاه‌تر برای جدول‌ها و ستون‌ها استفاده کن. چون این نام‌ها تو Schema و ایندکس‌ها ذخیره می‌شن و روی حجم نهایی تأثیر می‌ذارن. 📝

نکته 8:
‏به جای ذخیره کردن تاریخ و زمان به صورت رشته‌های طولانی (TEXT)، از فرمت‌های عددی INTEGER (مثلاً Unix Time) استفاده کن. حجم کمتری می‌گیره.

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

نکته 10:
‏برای ستون‌های متنی، سعی کن فقط مقداری که واقعاً لازمه رو ذخیره کنی. حذف فاصله‌های اضافه یا متون تکراری، به طور غیرمستقیم فضای ذخیره‌سازی رو بهینه می‌کنه. 😎


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

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

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

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

معیارهای ارزیابی (Evaluation Metrics) 📊

ما دوست داریم یه مدل خوب بسازیم. اما "خوب" یعنی چی؟ اینجا جاییه که معیارهای ارزیابی وارد می‌شن. این معیارها مثل کارنامه مدل ما هستن.

شاید اولش فکر کنی دقت (Accuracy) کافیه. یعنی بگی "مدل من ۹۵٪ از پیش‌بینی‌هاش درسته." 🎯 اما بیا یه مثال بزنیم که ببینیم چرا این عدد می‌تونه گول‌زننده باشه.

فرض کن یه مدل ساختی برای تشخیص یه بیماری خیلی نادر که فقط ۱٪ از مردم بهش مبتلا هستن. 🦠 حالا مدل تو همیشه می‌گه "هیچ‌کس مریض نیست!" در این حالت، دقت مدل تو ۹۹٪ هست! چون از هر ۱۰۰ نفر، ۹۹ نفر واقعاً مریض نیستن. 🤯 ولی این مدل کاملاً بی‌فایده‌ست، چون نمی‌تونه هیچ مریضی رو تشخیص بده.

پس به جای یه نمره ساده، باید معیارهای دقیق‌تری رو بشناسیم:

دقت (Precision): از بین تمام پیش‌بینی‌های "مثبت" مدل (مثلاً "مریض هستی")، چندتاشون واقعاً درست بودن؟ این معیار می‌گه مدل چقدر در پیش‌بینی‌هایش دقیق عمل کرده.

بازیابی (Recall): از بین تمام موارد "مثبت" واقعی (مثلاً تمام مریض‌ها)، مدل تونسته چندتاشون رو پیدا کنه؟ این معیار نشون می‌ده مدل چقدر موارد مثبت رو از دست نداده.

نمره F1-Score: این نمره تعادلی بین دقت و بازیابی ایجاد می‌کنه و وقتی هر دو معیار به یک اندازه مهم باشن، خیلی کاربردیه.

خلاصه که، به جای اینکه فقط به یه نمره ساده نگاه کنی، باید با کارنامه کامل مدل آشنا بشی تا بفهمی واقعاً چقدر خوب کار می‌کنه و آیا برای مشکل مورد نظر تو مناسبه یا نه! 😉

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


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

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

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

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

نکته 1:
‏دستور ROLLBACK یک عبارت تراکنشی است که برای لغو و خنثی‌سازی تمامی تغییرات اعمال شده در طول یک تراکنش آغاز شده توسط BEGIN TRANSACTION به کار می‌رود.

نکته 2:
‏ROLLBACK تضمین می‌کند که پایگاه داده به وضعیت ثابتی که درست قبل از شروع تراکنش در آن قرار داشت، بازگردد و به این ترتیب، خاصیت اتمیسیته (Atomicity) از مبانی ACID را محقق می‌سازد.

نکته 3:
‏هنگام اجرای ROLLBACK، موتور SQLite از داده‌های ذخیره شده در Rollback Journal یا Write-Ahead Log (WAL) برای بازگرداندن محتوای سطرها به مقادیر اولیه آن‌ها استفاده می‌کند.

نکته 4:
‏ROLLBACK زمانی استفاده می‌شود که یک یا چند دستور DML درون تراکنش با خطا مواجه شوند، یا هنگامی که کاربر به صورت منطقی تصمیم می‌گیرد که تغییرات اعمال شده نباید دائمی شوند.

نکته 5:
‏پس از موفقیت‌آمیز بودن ROLLBACK، تمامی قفل‌های نوشتن (Write Locks) اعمال شده در طول تراکنش، آزاد می‌شوند تا سایر تراکنش‌ها بتوانند به فایل پایگاه داده دسترسی پیدا کنند.

نکته 6:
‏استفاده از ROLLBACK برای مدیریت بازیابی خطاها در برنامه‌های کاربردی بسیار حیاتی است، زیرا در صورت بروز شرایط غیرمنتظره، از آسیب رساندن به یکپارچگی داده‌ها جلوگیری می‌کند.

نکته 7:
‏در صورت عدم اجرای صریح COMMIT یا ROLLBACK، اگر اتصال برنامه به پایگاه داده به طور ناگهانی قطع شود، SQLite به صورت خودکار تغییرات را لغو (Rollback) می‌کند تا از ماندن داده‌ها در یک حالت ناپایدار جلوگیری نماید.

نکته 8:
‏ROLLBACK می‌تواند برای بازگشت به یک نقطه ذخیره (SAVEPOINT) خاص در داخل یک تراکنش استفاده شود، که امکان لغو بخشی از عملیات‌های تراکنش را فراهم می‌سازد.

نکته 9:
‏پیاده‌سازی کارآمد ROLLBACK در SQLite مبتنی بر این اصل است که تغییرات در فایل‌های جانبی ردیابی می‌شوند و فایل اصلی داده تا زمان COMMIT دست‌نخورده باقی می‌ماند.

نکته 10:
‏اجرای ROLLBACK نه تنها تغییرات داده‌ها را لغو می‌کند، بلکه هرگونه تغییر موقت در ساختارهای فراداده‌ای مرتبط با تراکنش را نیز خنثی می‌سازد.


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

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

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

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

🟣 موضوع : ‏LEAD و LAG

نکته :

‏با PARTITION BY می‌تونی LEAD و LAG رو توی گروه‌های خاصی اعمال کنی. 🔥مثلاً مقایسه فروش‌ها در هر شعبه. 🏢


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

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

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

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

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

‏یادت نره، INNER JOIN فقط ردیف‌هایی رو برمی‌گردونه که تو هر دو جدول مقدار داشته باشن! مثل پیدا کردن جفت جوراب‌ها 🧦🧦

‏قبل از نوشتن کوئری، یه نگاه به دیاگرام ER بنداز. اینجوری می‌فهمی کدوم فیلدها کلید مشترک دارن! 🔑💡

‏وقتی INNER JOIN می‌زنی، حتماً اسم جدول رو قبل از اسم فیلد بیار. اینجوری کوئری‌هات خواناتر می‌شن! 👌

‏برای تمرین، دوتا جدول ساده بساز و باهاشون بازی کن. اینجوری قشنگ دستت راه می‌افته! 🔥

‏یه مثال ساده بزن! مثلاً جدول دانشجوها و جدول نمره‌ها. بعد ببین کی‌ها نمره گرفتن! 🎓📝

‏اگه یه جدول، چندتا کلید خارجی داشته باشه، می‌تونی چندتا INNER JOIN پشت سر هم بزنی!🤯

‏بعد از نوشتن کوئری، حتماً با چندتا داده‌ی مختلف تستش کن. اینجوری خیالت راحت می‌شه!

‏توی WHERE شرط بذار تا فقط داده‌های مورد نظرت رو فیلتر کنی. اینجوری کوئری‌هات سریع‌تر می‌شن! ⚡️

‏از alias استفاده کن! اسم‌های مستعار برای جدول‌هات انتخاب کن تا کوئری‌هات کوتاه‌تر بشن! 😎

‏یادت باشه که ترتیب جدول‌ها توی INNER JOIN مهم نیست. نتیجه یکی‌ئه! 😉


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

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

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

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