+45 سؤالاً وإجابة نموذجية لمقابلات SQL لعام 2026، مع اختبار استعداد شامل
أتذكر أول مقابلة عمل أجريتها في مجال قواعد البيانات — دخلت واثقاً من نفسي، لكن حين سألني المحاور عن الفرق بين INNER JOIN وLEFT JOIN مع مثال تطبيقي، تجمّدت للحظة. المشكلة لم تكن أنني لا أعرف الإجابة، بل لأنني لم أتدرب على صياغتها بوضوح تحت الضغط. من يومها، آمنت أن التحضير المنهجي لمقابلات SQL هو نصف النجاح.
في هذا الدليل، جمعت لك أكثر من 45 سؤالاً حقيقياً تُطرح في مقابلات عمل SQL — من الأسئلة الأساسية التي يطرحها كل محاور، إلى الأسئلة المتقدمة التي تميّز المرشح الاستثنائي. ستجد إلى جانب كل سؤال إجابة نموذجية مدعومة بأمثلة عملية، وفي نهاية الدليل اختبار استعداد كامل لقياس جاهزيتك الفعلية.
ما هي لغة SQL ولماذا تُسأل عنها في مقابلات العمل؟
SQL (Structured Query Language) هي لغة الاستعلام المعيارية للتعامل مع قواعد البيانات العلائقية (Relational Databases). صُمِّمت في الأصل في مختبرات IBM بالسبعينيات، وأصبحت اليوم المهارة الأكثر طلباً في إعلانات وظائف علم البيانات وتطوير البرمجيات والذكاء الاصطناعي على حدٍّ سواء.
السبب الذي يجعل كل شركة تقريباً تُدرج SQL في متطلبات وظائفها هو بساطة: كل بيانات الشركة مخزّنة في مكان ما، وشخص ما يحتاج لاستخراجها وتحليلها. من يستطيع كتابة استعلام SQL كفء ودقيق يوفّر على الشركة ساعات من العمل اليدوي.
| المجال الوظيفي | مستوى SQL المطلوب |
|---|---|
| محلل بيانات (Data Analyst) | متوسط إلى متقدم |
| مطور خلفية (Backend Developer) | أساسي إلى متوسط |
| مهندس بيانات (Data Engineer) | متقدم |
| مطور قواعد بيانات (DBA) | خبير |
| عالم بيانات (Data Scientist) | متوسط |
أسئلة SQL الأساسية (مستوى مبتدئ)
هذه الأسئلة تظهر في 90% من المقابلات بصرف النظر عن مستوى الوظيفة. لا تستهن بها — الخطأ فيها أمام المحاور يُعطي انطباعاً سيئاً حتى لو أجبت على الأسئلة المتقدمة بشكل صحيح.
1. ما الفرق بين DDL وDML وDCL وTCL؟
هذا السؤال يختبر فهمك للبنية الأساسية للغة SQL. إليك التصنيف الصحيح:
| التصنيف | الاسم الكامل | الأوامر الرئيسية | الوظيفة |
|---|---|---|---|
| DDL | Data Definition Language | CREATE, ALTER, DROP, TRUNCATE | تعريف هيكل قاعدة البيانات |
| DML | Data Manipulation Language | SELECT, INSERT, UPDATE, DELETE | التعامل مع البيانات |
| DCL | Data Control Language | GRANT, REVOKE | إدارة صلاحيات المستخدمين |
| TCL | Transaction Control Language | COMMIT, ROLLBACK, SAVEPOINT | إدارة المعاملات (Transactions) |
2. ما الفرق بين DELETE وTRUNCATE وDROP؟
من أكثر الأسئلة التي تُفرّق بين المرشح المتمكن والمبتدئ:
| الأمر | ما يحذف؟ | يمكن التراجع؟ | يُطلق WHERE؟ |
|---|---|---|---|
| DELETE | صفوف محددة أو كل الصفوف | نعم (ROLLBACK) | نعم |
| TRUNCATE | كل الصفوف فقط | لا (في معظم الأنظمة) | لا |
| DROP | الجدول بالكامل مع هيكله | لا | لا |
3. ما الفرق بين المفتاح الأساسي (Primary Key) والمفتاح الخارجي (Foreign Key)؟
المفتاح الأساسي (Primary Key) هو عمود أو مجموعة أعمدة تُعرّف كل صف تعريفاً فريداً في الجدول. لا يقبل قيم NULL ولا قيماً مكررة.
المفتاح الخارجي (Foreign Key) هو عمود في جدول يشير إلى المفتاح الأساسي في جدول آخر، وظيفته الحفاظ على التكامل المرجعي (Referential Integrity) بين الجداول.
-- جدول العملاء (Primary Key = CustomerID)
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name VARCHAR(100)
);
-- جدول الطلبات (Foreign Key يشير لـ CustomerID)
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
4. ما الفرق بين WHERE وHAVING؟
الخطأ الشائع الذي أراه هو استخدام WHERE مع دوال التجميع — وهذا يُسبب خطأً في التنفيذ.
- WHERE: يُفلتر الصفوف قبل التجميع (GROUP BY). لا يمكن استخدامه مع دوال التجميع مثل SUM وCOUNT.
- HAVING: يُفلتر النتائج بعد التجميع. يُستخدم مع دوال التجميع.
-- صحيح: HAVING مع دالة تجميع
SELECT Department, COUNT(*) AS EmpCount
FROM Employees
WHERE Salary > 3000 -- يُفلتر قبل التجميع
GROUP BY Department
HAVING COUNT(*) > 5; -- يُفلتر بعد التجميع
5. ما الفرق بين UNION وUNION ALL؟
- UNION: يجمع نتائج جملتَي SELECT ويُزيل التكرارات تلقائياً. أبطأ لأنه يقوم بعملية فرز وتصفية.
- UNION ALL: يجمع النتائج دون إزالة التكرارات. أسرع ويُستخدم حين تثق أن البيانات غير مكررة.
أسئلة SQL المتوسطة
هذه الأسئلة تختبر قدرتك على التعامل مع بيانات حقيقية متعددة الجداول. من تجربتي، غالباً ما يُطلب منك كتابة الاستعلام مباشرة على ورقة أو شاشة.
6. اشرح أنواع JOIN مع مثال عملي
| نوع الـ JOIN | ماذا يُرجع؟ |
|---|---|
| INNER JOIN | الصفوف المتطابقة في كلا الجدولين فقط |
| LEFT JOIN | كل صفوف الجدول الأيسر + المتطابق من الأيمن (NULL إن لم يوجد) |
| RIGHT JOIN | كل صفوف الجدول الأيمن + المتطابق من الأيسر |
| FULL OUTER JOIN | كل الصفوف من كلا الجدولين مع NULL للقيم غير المتطابقة |
| CROSS JOIN | الضرب الديكارتي: كل صف مع كل صف |
-- جلب جميع الموظفين مع أسماء أقسامهم (حتى من لا قسم لهم)
SELECT e.Name, d.DepartmentName
FROM Employees e
LEFT JOIN Departments d ON e.DeptID = d.DeptID;
7. ما هو الفهرس (Index) وكيف يُحسّن أداء الاستعلامات؟
الفهرس هو هيكل بيانات منفصل يُنشئه قاعدة البيانات على عمود معين لتسريع عمليات البحث، تماماً كفهرس الكتاب الذي يأخذك مباشرة للصفحة المطلوبة بدلاً من قراءة الكتاب كله.
- Clustered Index: يُرتّب البيانات الفعلية في الجدول. يُسمح بفهرس واحد فقط لكل جدول.
- Non-Clustered Index: هيكل منفصل يحتوي على مؤشرات للبيانات. يمكن إنشاء أكثر من واحد.
-- إنشاء فهرس على عمود البريد الإلكتروني
CREATE INDEX idx_email ON Customers(Email);
-- فهرس مركب على أكثر من عمود
CREATE INDEX idx_name_dept ON Employees(LastName, DeptID);
8. ما هي التطبيع (Normalization) وما أشكاله؟
التطبيع هو عملية تنظيم الجداول في القاعدة للحد من التكرار وتحسين التكامل، والمفهوم مرتبط بشدة بـ تصميم قواعد البيانات. إليك الأشكال الرئيسية:
| الشكل | الشرط الأساسي |
|---|---|
| 1NF — الشكل الأول | كل خلية تحتوي على قيمة واحدة فقط (لا قوائم) |
| 2NF — الشكل الثاني | يحقق 1NF + كل عمود يعتمد كلياً على المفتاح الأساسي |
| 3NF — الشكل الثالث | يحقق 2NF + لا يوجد اعتماد متعدٍّ (Transitive Dependency) |
| BCNF | نسخة محسّنة من 3NF لحالات استثنائية |
9. ما هو الإجراء المخزّن (Stored Procedure) وما الفرق بينه وبين الدالة (Function)؟
| الخاصية | Stored Procedure | Function |
|---|---|---|
| القيمة المُرجَعة | قد يُرجع أو لا يُرجع | يُرجع قيمة دائماً |
| الاستخدام في SELECT | لا يمكن استخدامه داخل SELECT | يمكن استخدامها داخل SELECT |
| تعديل البيانات (DML) | نعم | لا (في معظم الأنظمة) |
| معالجة الأخطاء | يدعم TRY/CATCH | لا يدعم |
10. ما هو الـ View وما فوائده؟
الـ View هو جدول افتراضي مبني على استعلام SELECT. لا يخزّن بيانات فعلية، بل يُخزّن الاستعلام فقط ويُنفّذه في كل مرة تستدعيه.
-- إنشاء View يعرض الموظفين ذوي الراتب المرتفع
CREATE VIEW HighSalaryEmployees AS
SELECT Name, Salary, Department
FROM Employees
WHERE Salary > 10000;
-- الاستخدام كجدول عادي
SELECT * FROM HighSalaryEmployees;
فوائد الـ View: تبسيط الاستعلامات المعقدة، تحسين الأمان (إخفاء أعمدة حساسة)، وإعادة استخدام المنطق في أماكن متعددة.
أسئلة SQL المتقدمة
هذه الأسئلة تُميّز المرشح الاستثنائي. لاحظت أن الشركات التقنية الكبرى تُركّز كثيراً على هذه الجوانب تحديداً.
11. ما هي دوال النافذة (Window Functions) وكيف تختلف عن GROUP BY؟
دوال النافذة هي من أقوى ميزات SQL الحديثة وأكثرها طلباً في مقابلات الشركات الكبرى. الفرق الجوهري: GROUP BY تُلغي الصفوف الأصلية وتُدمجها، بينما دوال النافذة تُضيف نتيجة الحساب على كل صف دون دمج.
-- ترتيب الموظفين حسب الراتب داخل كل قسم
SELECT
Name,
Department,
Salary,
RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS SalaryRank
FROM Employees;
-- مجموع تراكمي (Running Total)
SELECT
OrderDate,
Amount,
SUM(Amount) OVER (ORDER BY OrderDate) AS RunningTotal
FROM Orders;
أشهر دوال النافذة: ROW_NUMBER()، RANK()، DENSE_RANK()، LAG()، LEAD()، NTILE(). ولمزيد من التعمق يمكنك قراءة التوثيق الرسمي لدوال النافذة في PostgreSQL.
12. ما هو الـ CTE (Common Table Expression) ومتى تستخدمه؟
الـ CTE هو استعلام مؤقت مُسمّى يمكن الإشارة إليه في الاستعلام الرئيسي. يُجعل الاستعلامات المعقدة أكثر قابلية للقراءة، وهو بديل أفضل للـ Subquery في أغلب الحالات.
-- مثال: إيجاد الموظفين الذين راتبهم أعلى من متوسط قسمهم
WITH DeptAvg AS (
SELECT Department, AVG(Salary) AS AvgSalary
FROM Employees
GROUP BY Department
)
SELECT e.Name, e.Salary, d.AvgSalary
FROM Employees e
JOIN DeptAvg d ON e.Department = d.Department
WHERE e.Salary > d.AvgSalary;
13. ما هو الـ Subquery وما أنواعه؟
الـ Subquery هو استعلام متداخل داخل استعلام آخر. يأتي في ثلاثة أنواع رئيسية:
- Scalar Subquery: يُرجع قيمة واحدة فقط، يُستخدم في SELECT أو WHERE.
- Row Subquery: يُرجع صفاً واحداً من أعمدة متعددة.
- Table Subquery (Correlated): يُرجع جدولاً كاملاً، يُستخدم في FROM.
-- Subquery في WHERE: موظفون بأعلى راتب
SELECT Name FROM Employees
WHERE Salary = (SELECT MAX(Salary) FROM Employees);
-- Correlated Subquery: الأداء أبطأ لأنه يُنفَّذ لكل صف
SELECT Name FROM Employees e
WHERE Salary > (
SELECT AVG(Salary) FROM Employees
WHERE Department = e.Department
);
14. ما مفهوم ACID في قواعد البيانات؟
ACID هو مجموعة خصائص تضمن موثوقية المعاملات (Transactions) في قواعد البيانات:
| الحرف | المعنى | التفسير العملي |
|---|---|---|
| A — Atomicity | الذرية | إما تنجح كل العمليات أو تفشل جميعاً |
| C — Consistency | الاتساق | البيانات تنتقل من حالة صحيحة إلى حالة صحيحة |
| I — Isolation | العزل | المعاملات المتزامنة لا تتأثر ببعضها |
| D — Durability | الديمومة | بعد COMMIT، البيانات محفوظة حتى في حالة العطل |
15. كيف تُحسّن أداء استعلام SQL بطيء؟
من تجربتي، هذا السؤال يظهر كثيراً في مقابلات الشركات التي تتعامل مع بيانات ضخمة. الإجابة المثالية تتضمن عدة محاور:
- استخدم EXPLAIN / EXPLAIN ANALYZE لفهم خطة التنفيذ وتحديد الاختناقات.
- تأكد من وجود فهارس مناسبة على الأعمدة المستخدمة في WHERE وJOIN وORDER BY.
- تجنب SELECT * واستخدم فقط الأعمدة التي تحتاجها.
- استبدل Correlated Subqueries بـ JOIN أو CTE حين يكون ذلك ممكناً.
- استخدم LIMIT إذا كنت لا تحتاج كل النتائج دفعة واحدة.
- فكّر في Partitioning للجداول الضخمة جداً.
16. كيف تستخرج ثاني أعلى راتب للموظفين (2nd Highest Salary)؟
هذا السؤال هو الأشهر على الإطلاق في المقابلات (Whiteboard Questions). أفضل طريقة حديثة هي استخدام دوال النافذة (Window Functions):
-- الطريقة الحديثة (تتعامل مع الرواتب المتكررة بشكل صحيح)
WITH RankedSalaries AS (
SELECT Salary, DENSE_RANK() OVER (ORDER BY Salary DESC) AS Rank
FROM Employees
)
SELECT DISTINCT Salary FROM RankedSalaries WHERE Rank = 2;
-- الطريقة الكلاسيكية باستخدام الاستعلام المتداخل
SELECT MAX(Salary) FROM Employees
WHERE Salary < (SELECT MAX(Salary) FROM Employees);
17. ما هو هجوم حقن SQL (SQL Injection) وكيف تتفاداه؟
حقن SQL هو ثغرة أمنية ناتجة عن تمرير أوامر ضارة من المستخدم كجزء من الاستعلام ليتم تنفيذها بالقاعدة. الطريقة الذهبية لتفاديها هي دائماً استخدام الاستعلامات المُعاملية (Parameterized Queries) مثل (Prepared Statements) حيث يتم تمرير المتغيرات كبيانات فقط ولا تنفذ كأوامر برمجية.
18. كيف تحدث صفاً إن وُجد، وتضيفه إن لم يوجد (UPSERT)؟
في SQL Server أو Oracle، يُستخدم أمر MERGE، بينما في PostgreSQL يُستخدم ON CONFLICT:
-- مثال PostgreSQL (تحديث الطلبات بناءً على مُعرِّف العميل)
INSERT INTO Customers (ID, Name, TotalOrders)
VALUES (1, 'Ali', 5)
ON CONFLICT (ID)
DO UPDATE SET TotalOrders = Customers.TotalOrders + 5;
19. ما هو الفرق بين بيئة OLTP و OLAP؟
هذا السؤال رئيسي لمهندسي البيانات: OLTP (Online Transaction Processing) مصممة للعمليات اليومية السريعة (تطبيع عالي Normalization، قراءة/كتابة سريعة)، مثل قاعدة بيانات متجر. أما OLAP (Online Analytical Processing) فهي مخصصة للتحليل ومستودعات البيانات (Data Warehouses المبنية غالبًا في بيئات الحوسبة السحابية) وتكون بنيتها مجهزة للقراءة السريعة للمعطيات الضخمة مثل هيكلة Star Schema أو Snowflake Schema.
ما الجديد في مقابلات SQL لعام 2026؟
لاحظت تحولاً جذرياً في طبيعة الأسئلة التي يطرحها مسؤولو التوظيف في 2026 مقارنة بالسنوات الماضية. إليك أبرز التطورات:
أ. الاعتماد على قواعد البيانات المتجهة (Vector Databases)
بسبب الطفرة في نماذج الذكاء الاصطناعي التوليدي، أصبح المتوقع من مطوري البيانات التعامل مع قواعد البيانات السحابية المتجهة (للبحث الدلالي و RAG) وإضافات مثل pgvector في PostgreSQL بدلاً من الاستعلامات التقليدية البسيطة فقط.
ب. مهارات مراجعة أكواد وكلاء الذكاء الاصطناعي (Agentic AI)
بدأت الشركات في اختبار مهارة "التنقيح". يتم عرض استعلام SQL تم توليده بواسطة أداة ذكاء اصطناعي (مثل Copilot أو ChatGPT)، ويُطلب منك اكتشاف الأخطاء الأمنية أو أخطاء الأداء (الـ N+1 Query Problem) فيه، فكن مستعداً.
ج. أداء الاستعلامات الضخمة (Big Data)
أدوات مثل BigQuery وSnowflake باتت المهيمنة على السوق. يجب أن تعرف متى تكون الفهارس مفيدة ومتى تسبب ضرراً، ومتى تستخدم بيئات التوزيع الموازية بدلاً من محركات القواعد العادية.
كُتيب أسئلة مقابلات SQL: أكثر من 45 سؤالاً وإجابة
في عالم تكنولوجيا المعلومات، تعتبر معرفة لغة الاستعلام أمراً أساسياً لأي محترف في مجال إدارة البيانات وقواعد البيانات. إذا كنت تستعد لإجراء مقابلة عمل في مجال قواعد البيانات، فالإلمام بلغة الاستعلام SQL يعتبر أمراً بالغ الأهمية.
لهذا السبب، أعددنا لك كُتيباً شاملاً يتضمن أكثر من 45 سؤالاً وإجابة نموذجية تغطي مختلف جوانب SQL، منها:
- الفرق بين الإجراء المخزن والدالة.
- الفهرس المجمع والفهرس غير المجمع.
- المفاتيح الأساسية والخارجية.
- عمليات التطبيع (Normalization).
- جمل SQL الأساسية (SELECT, INSERT, UPDATE, DELETE).
- الفهارس (Indexes) وأهميتها.
- الإجراءات المخزنة (Stored Procedures).
- التعامل مع البيانات باستخدام DDL, DML, DCL, TCL.
- دوال النافذة (Window Functions) والـ CTE.
- تحسين أداء الاستعلامات وقراءة Query Plan.
ترخيص الكُتيب
هذا الكُتيب مرخص تحت رخصة المشاع الإبداعي | Creative Commons — نَسب المُصنَّف - غير تجاري - الترخيص بالمثل 4.0 (CC BY-NC-SA 4.0). يُسمح لك بمشاركته وتعديله بشرط الإشارة إلى المصدر وعدم استخدامه لأغراض تجارية. لمزيد من التفاصيل، يرجى زيارة Creative Commons.
يرجى العلم أن هذا الكتيب متاح مجانًا للجميع، لكن إذا وجدت قيمة فيه وترغب في دعم المزيد من المحتوى المجاني عالي الجودة، يمكنك التبرع عبر الرابط: تبرع لدعم المحتوى.
تحميل النسخة الكاملة
لقراءة أو تحميل النسخة الكاملة من الكُتيب، انقر على الرابط أدناه:
اختبار الاستعداد لمقابلات SQL
للتأكد من مدى استعدادك، قمنا بإنشاء اختبار شامل يُمكّنك من تقييم معرفتك ومهاراتك في لغة الاستعلام SQL. يتضمن الاختبار 50 سؤالاً يغطي جميع الجوانب الهامة في SQL، بأنواع متنوعة: أسئلة متعددة الخيارات (MCQs)، أسئلة صح وخطأ، وأسئلة مفتوحة.
مدة الاختبار ساعة واحدة، وكل سؤال درجتان ليصبح الإجمالي 100 درجة. بعد الانتهاء، ستتلقى نتيجتك على بريدك الإلكتروني. يمكنك إجراء الاختبار أكثر من مرة — الأسئلة عشوائية في كل مرة.
هل أنت جاهز لإجراء الاختبار؟
نصائح عملية لاجتياز مقابلة SQL بثقة
بعد سنوات من التحضير للمقابلات ومشاركة التجارب مع المجتمع التقني، جمعت هذه النصائح التي تُحدث فرقاً حقيقياً:
- فكّر بصوت عالٍ: المحاور لا يريد فقط الإجابة الصحيحة — يريد أن يرى طريقة تفكيرك. شرح خطواتك أثناء كتابة الاستعلام يُعطي انطباعاً أفضل من صمت متبوع بإجابة مثالية.
- تدرّب على الكتابة اليدوية: كثير من المقابلات تطلب كتابة SQL على ورقة أو لوح أبيض. المحررات لا تصحح لك الأخطاء هناك.
- تعلّم EXPLAIN: القدرة على قراءة خطة التنفيذ (Execution Plan) تُظهر احترافية حقيقية وتُفرّقك عن 90% من المرشحين.
- اربط إجاباتك بسياق عملي: بدلاً من قول "الفهرس يُسرّع الاستعلام"، قل "في مشروع سابق، أضفت فهرساً على عمود البريد الإلكتروني فانخفض وقت الاستعلام من 3 ثوانٍ إلى أقل من 50 ميلي ثانية."
- لا تحفظ — افهم: المحاور الخبير يعرف متى تحفظ ومتى تفهم. ركّز على فهم المفهوم حتى تستطيع تطبيقه في سيناريوهات جديدة لم تدرسها.
هل استفدت من هذا الدليل؟
انضم إلى مئات المشتركين واحصل على أحدث الأدلة والموارد التقنية مباشرة في بريدك الإلكتروني.
نعم، أريد الاشتراك! ✉️🔒 خصوصيتك مهمة لنا. لن نرسل رسائل مزعجة أبداً.
يسعدنا أن نسمع آراءكم! اتركوا تعليقاً أدناه وشاركوا تجاربكم أو أسئلتكم.