الـSET Operators في SQL هي مجموعة من الأدوات اللي بتساعدك تدمج النتائج المسترجعة من استعلامين أو أكتر في قائمة واحدة. أهم حاجة إنها تشتغل على صفوف البيانات (Rows) وتتعامل مع الاستعلامات اللي ليها نفس عدد الأعمدة ونفس الأنواع.
أنواع الـ SET Operators:
UNIONUNION ALLINTERSECTEXCEPT
1. UNION
- بتدمج الصفوف من استعلامين أو أكتر، لكن بتحذف الصفوف المكررة.
- لازم يكون عدد الأعمدة وأنواع البيانات متطابقة بين الاستعلامات.
مثال:
SELECT FirstName, LastName FROM Employees
UNION
SELECT FirstName, LastName FROM Customers;- النتيجة: قائمة تجمع بين أسماء الموظفين والعملاء بدون تكرار.
2. UNION ALL
- مشابهة لـ
UNION، لكنها تحتفظ بالصفوف المكررة. - أسرع لأنها ما بتعملش معالجة لحذف التكرارات.
مثال:
SELECT FirstName, LastName FROM Employees
UNION ALL
SELECT FirstName, LastName FROM Customers;- النتيجة: كل الصفوف من الموظفين والعملاء، حتى لو متكررة.
3. INTERSECT
- بتجيب الصفوف المشتركة فقط بين الاستعلامات.
- بتحذف التكرارات بشكل افتراضي.
مثال:
SELECT FirstName, LastName FROM Employees
INTERSECT
SELECT FirstName, LastName FROM Customers;- النتيجة: قائمة بالأسماء المشتركة بين الموظفين والعملاء.
4. EXCEPT
- بتجيب الصفوف اللي موجودة في الاستعلام الأول ومش موجودة في الاستعلام التاني.
- بتحذف التكرارات بشكل افتراضي.
مثال:
SELECT FirstName, LastName FROM Employees
EXCEPT
SELECT FirstName, LastName FROM Customers;- النتيجة: أسماء الموظفين اللي مش موجودين في قائمة العملاء.
شروط استخدام SET Operators:
- عدد الأعمدة في كل استعلام لازم يكون متطابق.
- نوع البيانات لكل عمود لازم يكون متطابق (أو ممكن تحويله تلقائيًا).
- ترتيب الأعمدة في كل استعلام لازم يكون متطابق.
مقارنة بين الأنواع:
| Operator | الوظيفة | التكرارات |
|---|---|---|
UNION | دمج البيانات مع حذف التكرار | لا يسمح بالتكرار |
UNION ALL | دمج البيانات بدون حذف التكرار | يسمح بالتكرار |
INTERSECT | البيانات المشتركة فقط | لا يسمح بالتكرار |
EXCEPT | الفرق بين الاستعلامين | لا يسمح بالتكرار |
مثال شامل:
لو عندك جدولين Sales2023 و Sales2024:
UNION:
SELECT ProductName FROM Sales2023
UNION
SELECT ProductName FROM Sales2024;- تجمع كل المنتجات من السنتين، بدون تكرار.
UNION ALL:
SELECT ProductName FROM Sales2023
UNION ALL
SELECT ProductName FROM Sales2024;- تجمع كل المنتجات مع التكرار.
INTERSECT:
SELECT ProductName FROM Sales2023
INTERSECT
SELECT ProductName FROM Sales2024;- تعرض المنتجات المشتركة بين السنتين.
EXCEPT:
SELECT ProductName FROM Sales2023
EXCEPT
SELECT ProductName FROM Sales2024;- تعرض المنتجات اللي كانت موجودة في 2023 فقط.
نصائح:
- الأداء:
UNION ALLأسرع منUNIONلأنه مش بيعمل معالجة لإزالة التكرارات.
- الوضوح:
- استخدم النوع اللي يناسب احتياجاتك (مثلاً، لو عايز بيانات مميزة فقط، استخدم
UNION).
- استخدم النوع اللي يناسب احتياجاتك (مثلاً، لو عايز بيانات مميزة فقط، استخدم
- التجربة:
- دايمًا جرّب استعلاماتك عشان تتأكد إنها بتديك النتيجة المطلوبة.