۲۵ سؤال پرتکرار مصاحبه و امتحان SQL با پاسخ کوتاه
این ۲۵ سؤال از پرتکرارترین موارد مصاحبههای شغلی و امتحانهای درس پایگاهداده جمعآوری شدهاند. پاسخها عمداً کوتاهاند تا برای مرور سریع مناسب باشند؛ هر جا مفهوم عمیقتری وجود دارد لینک مقالهی کامل آمده است.
بخش اول: مفاهیم پایه
۱. SQL چیست؟
زبان استاندارد پرسوجوی پایگاهدادههای رابطهای برای تعریف ساختار (DDL)، تغییر داده (DML)، خواندن داده (DQL) و کنترل دسترسی (DCL).
۲. تفاوت DDL، DML، DQL و DCL؟
DDL: CREATE/ALTER/DROP؛ DML: INSERT/UPDATE/DELETE؛ DQL: SELECT؛ DCL: GRANT/DENY/REVOKE.
۳. تفاوت DELETE، TRUNCATE و DROP؟
DELETE ردیفهای انتخابی را پاک میکند، TRUNCATE همهی ردیفها را سریع پاک میکند، DROP کل جدول را حذف میکند. توضیح کامل.
۴. NULL چیست؟
نشانهی «مقدار نامعلوم» که با هیچ چیز برابر نیست؛ با IS NULL بررسی میشود نه = NULL.
۵. تفاوت CHAR و VARCHAR؟
CHAR طول ثابت و VARCHAR طول متغیر دارد؛ برای متن یونیکد (فارسی) NVARCHAR استفاده میشود.
بخش دوم: کلیدها و ارتباطها
۶. Primary Key چیست؟
ستون (یا ترکیب ستونها)ی یکتا و غیر NULL که هر ردیف را مشخص میکند؛ هر جدول فقط یکی دارد.
۷. تفاوت Primary Key و Unique؟
Unique میتواند چندتا باشد و یک NULL میپذیرد؛ Primary Key فقط یکی است و NULL نمیپذیرد. مقایسه.
۸. Foreign Key چه میکند؟
ارتباط بین دو جدول را برقرار و از ایجاد ردیف یتیم جلوگیری میکند.
۹. انواع رابطهها؟
یکبهیک، یکبهچند و چندبهچند (که با جدول واسط پیاده میشود).
۱۰. نرمالسازی چیست؟
تجزیهی جدولها برای حذف تکرار و ناهنجاری؛ مرسومترین فرمها 1NF تا 3NF و BCNF هستند. آموزش با مثال.
بخش سوم: پرسوجو
۱۱. تفاوت INNER JOIN و LEFT JOIN؟
INNER فقط ردیفهای دارای جفت را نشان میدهد؛ LEFT همهی ردیفهای جدول چپ را نگه میدارد. JOINها با مثال.
۱۲. چطور مشتریانی را بیابیم که سفارش ندارند؟LEFT JOIN Orders o ON ... WHERE o.OrderId IS NULL یا WHERE NOT EXISTS (...).
۱۳. تفاوت WHERE و HAVING؟
WHERE قبل از گروهبندی ردیفها را فیلتر میکند و HAVING بعد از آن گروهها را. توضیح.
۱۴. تفاوت UNION و UNION ALL؟
UNION نتیجه را بدون تکرار برمیگرداند (کندتر)، UNION ALL همهی ردیفها را با تکرار.
۱۵. تفاوت COUNT(*) و COUNT(column)؟
اولی همهی ردیفها را میشمارد و دومی فقط ردیفهای غیر NULL آن ستون را.
۱۶. IN و EXISTS چه فرقی دارند؟
IN مقدار را با یک فهرست مقایسه میکند؛ EXISTS فقط وجود ردیف را بررسی میکند و با NULL مشکل ندارد (NOT EXISTS امنتر از NOT IN است).
۱۷. دومین بیشترین حقوق را چطور پیدا کنیم؟SELECT MAX(Salary) FROM Emp WHERE Salary < (SELECT MAX(Salary) FROM Emp) یا با DENSE_RANK() و انتخاب رتبهی ۲.
۱۸. چطور ردیفهای تکراری را بیابیم؟GROUP BY col HAVING COUNT(*) > 1.
بخش چهارم: اشیاء برنامهنویسی و تراکنش
۱۹. تفاوت View و جدول؟
View دادهی جداگانه ندارد و فقط یک پرسوجوی ذخیرهشده است. مقایسهی View، Procedure و Function.
۲۰. Stored Procedure چه مزیتی دارد؟
کد یکجا، کارایی بهتر در استفادهی مکرر، مجوزدهی دقیق و کاهش خطر SQL Injection.
۲۱. ACID یعنی چه؟
Atomicity (همه یا هیچ)، Consistency (حفظ قیدها)، Isolation (جدایی تراکنشها)، Durability (ماندگاری پس از Commit).
۲۲. Deadlock چیست؟
دو تراکنش که هرکدام منتظر قفل دیگری هستند؛ SQL Server یکی را بهعنوان قربانی Rollback میکند.
بخش پنجم: کارایی
۲۳. ایندکس چیست و چرا سرعت میدهد؟
ساختاری مرتب (B-Tree) که جستجو را از پیمایش کل جدول به چند جهش کاهش میدهد؛ بهایش کندی نوشتن و فضای بیشتر است. آموزش ایندکس.
۲۴. تفاوت Clustered و NonClustered Index؟
خوشهای ترتیب فیزیکی ردیفها را تعیین میکند و فقط یکی در هر جدول است؛ غیرخوشهای ساختاری جداگانه با اشارهگر به ردیف است و چندتا میتواند باشد.
۲۵. چرا SELECT * توصیه نمیشود و چرا WHERE YEAR(col)=2026 بد است؟
اولی دادهی اضافه میخواند؛ دومی با تابع روی ستون، استفاده از ایندکس را ناممکن (Non-SARGable) میکند و باید بهصورت بازه نوشته شود.
چند توصیه برای روز مصاحبه
- قبل از نوشتن کد، جدولها و ستونها را با صدای بلند تأیید کن (مثلاً «سفارشها کلید خارجی به مشتری دارد؟»).
- پرسوجو را مرحلهای بساز: اول JOIN، بعد شرط، بعد گروهبندی.
- به حالتهای مرزی فکر کن: NULL، ردیفهای بدون جفت، تکراریها.
- اگر جواب را نمیدانی، روش پیدا کردنش را توضیح بده (مثلاً «با Execution Plan بررسی میکنم»).
برای تمرین واقعی، همین سؤالها را روی پروژههای فروشگاه و مدیریت کارکنان بنویس.
سوالات متداول دربارهی این موضوع
برای مصاحبهی SQL چقدر باید آماده باشم؟
برای موقعیتهای مبتدی و کارآموزی، تسلط بر SELECT، JOIN، GROUP BY، کلیدها و نرمالسازی کافی است. برای موقعیتهای بالاتر، ایندکس، Execution Plan، تراکنش و بهینهسازی هم پرسیده میشود.
بهترین روش تمرین چیست؟
هر مفهوم را با یک مثال کوچک در Playground یا SSMS بنویس و نتیجه را ببین. فقط خواندن پاسخ کافی نیست؛ باید بتوانی همان را روی کاغذ یا بدون کمک بنویسی.
آیا حفظ بودن تعریفها کافی است؟
نه. مصاحبهکننده معمولاً یک سناریو میدهد (مثلاً «مشتریانی که سفارش ندادهاند») و کد میخواهد؛ پس تعریف را با مثال همراه کن.
میخوای همهی این مفاهیم را تمرین کنی؟
درسهای SQLFarsi هر مبحث را با Playground و تمرین همراه کرده است.
شروع تمرین در Playground