خانه/ برنامه‌نویسی در SQL Server/ جدول‌های موقت

جدول‌های موقت: فضای کاری برای پرس‌وجوهای چندمرحله‌ای

مبتدی ۱۱ دقیقه مطالعه

در درس‌های CTE و متغیرها دیدیم چطور نتایج میانی را نگه داریم. جدول موقت (Temporary Table) یک قدم فراتر می‌رود: یک جدول واقعی می‌سازد که می‌توان چند بار در آن INSERT/UPDATE کرد و رویش ایندکس هم گذاشت — اما به‌محض پایان یافتن اتصال، خودش را خودکار پاک می‌کند.

جدول موقت در SQL Server: # و ##

نحودامنه
CREATE TABLE #Temp (...)فقط در همان اتصال (Session) فعلی قابل‌دیدن است
CREATE TABLE ##GlobalTemp (...)بین همه‌ی اتصال‌ها به SQL Server مشترک است، تا وقتی همه بسته شوند

جدول موقت در SQLite: TEMP

SQLite (موتور همین Playground) هم از جدول موقت پشتیبانی می‌کند، فقط با کلمه‌ی کلیدی TEMP به‌جای علامت #:

sql
CREATE TEMP TABLE HighValueSales (
  product TEXT,
  revenue INTEGER
);

INSERT INTO HighValueSales
SELECT product, price * quantity
FROM sales
WHERE price * quantity > 200000;

SELECT * FROM HighValueSales ORDER BY revenue DESC;

بیا این را واقعاً اجرا کنیم:

امتحانش کن — ساخت و پرکردن یک جدول موقت
فقط محصولاتی که درآمدشان از ۲۰۰٬۰۰۰ بیشتر بود، در جدول موقت ذخیره شدند. حالا می‌توانستیم چندین پرس‌وجوی دیگر هم روی همین HighValueSales بزنیم — بدون این‌که هر بار محاسبه‌ی price * quantity را تکرار کنیم.

جدول موقت در برابر CTE — کِی کدام؟

CTEجدول موقت
طول عمرفقط همان یک پرس‌وجوکل اتصال (Session)
قابل تغییر (INSERT/UPDATE)؟خیربله
قابل ایندکس‌گذاری؟خیربله
مناسب برایخواناسازی یک پرس‌وجوی پیچیدهفرآیندهای چندمرحله‌ای که باید چند بار به همان داده‌ی میانی مراجعه کنند

حذف صریح (اختیاری)

جدول موقت خودش با پایان اتصال پاک می‌شود، اما می‌توان زودتر هم آن را حذف کرد:

sql
DROP TABLE HighValueSales;

جمع‌بندی این درس (و کل فصل ۸)

  • جدول موقت، جدولی واقعی و قابل‌تغییر است که خودکار پاک می‌شود — در SQL Server با #/##، در SQLite با TEMP.
  • بر خلاف CTE، می‌توان چند بار به یک جدول موقت مراجعه کرد، رویش INSERT زد، و حتی ایندکس گذاشت.
  • برای فرآیندهای چندمرحله‌ای با داده‌ی میانی حجیم، جدول موقت از CTE مناسب‌تر است.

با این درس، فصل ۸ (برنامه‌نویسی در SQL Server) کامل شد! در فصل بعدی، وارد یکی از مهم‌ترین مباحث پایگاه‌داده‌های واقعی می‌شویم: تراکنش‌ها — چطور چند دستور را به‌عنوان یک واحد غیرقابل‌تقسیم اجرا کنیم.