m7md_abdulghani
m7md_abdulghani

@AbdulghaniM7md

18 Tweets 44 reads Feb 24, 2021
صباح الخير
أنواع الJoin في قواعد البيانات
ثريد هذا الاسبوع راح اتكلم فيه عن كل أنواع الjoin وايش الفروقات الاساسية بيهم
مع أمثلة فعلية لكل واحد منهم
@PrograminLovers
@programming_4
#برمجة
#أكادمية_ترميز
#حزب_المبرمجين
أولا ما هي عملية الjoin وايش فوائدها وليش نحتاجها؟
تعال اعطيك مثال بسيط
تخيل عندنا جدولين واحد اسمه customers والثاني اسمه orders
وانا احتاج اعرف في كل طلب بيانات العميل الخاصة فيه زي رقم جواله واسمه وعنوانه وغيرها
بدل ما اني اسجل البيانات هذي لكل عميل داخل جدول الطلبات orders، انا فقط اسجل رقم العميل customer_id في هذا الجدول
وعن طريق استخدام خاصية الjoin اقدر بواسطة query وحده اني اطلع بيانات العميل من جدول الorders
نستخلص من هذا المثال ان الjoin تستعمل للربط بين عدة tables لاستخراج قيم من هذي الtables
وتفيد في انها تلغي اي تكرار ممكن يصير في البيانات
ثانيا أنواع الjoin في الSQL
الjoin عندها اكثر من نوع وكل واحد منهم يفيد في عملية معينه
1- inner join
2- left join
3- right join
4- full join
5- self join
6- cross join (قليل الاستعمال)
تعال نستعرضهم واحد واحد بالتفصيل
- inner join
يستعمل هذا النوع عشان نطلع البيانات المتشابهة بين جدولين
عشان توضح الصورة اكثر
انا عندي جدول employees وجدول departments وسويت الquery التالية
employees inner join departments
الان في هذي العملية انا بختار القيم المشتركة بين الجدولين
بمعنى انا بختار كل الموظفين الي عندهم إدارات وكل الادارات الي فيها موظفين
مثل الصورة الي فوق (المشترك بيهم فقط)
مثال للQuery
ٍSELECT * FROM Employees inner join Departments on Employee.employeeId = Departments.employeeId
عشان نوضح الquery
جدول الdepartments فيه قيمة هي employeeId، هذي القيمة هي الي تربط بين الtwo tables،
ف نحنا قلنا طلع لنا كل القيم الي يكون فيها الemployeeId في جدول الEmployees مساوي للemployeeId في جدول الdepartments وحددنا فوق inner join
ف النتيجة النهائية راح تكون القيم المشتركة بين الtwo tables
طبعا ملاحظة بسيطة
تقدر تكتب inner join او join فقط وكلها راح تأدي نفس النتيجة
- Left Join
هذا النوع راح يطلع في البداية كل القيم المشتركة بين الجدولين + كل القيم من الجدول الاول
نرجع للمثال السابق
اذا سوينا الquery هذي
employees left join departments
كل الموظفين راح يطلعو بغض النظر هم عندهم إدارة أو لا + راح تطلع فقط القيم المشتركة من جدول الdepartments (يعني فقط الادارات الي فيها موظفين)
الQuery
ٍSELECT * FROM Employees left join Departments on Employees.employeeId = Departments.employeeId
- Right Join
هذا النوع راح يطلع في البداية القيم المشتركة + كل القيم من الجدول الثاني (وهنا الفرق)
نرجع للمثال السابق
اذا سوينا
employees right join departments
كل الادارات راح تطلع بغض النظر فيهم موظفين او لا
وبالنسبة للموظفين، راح يطلع فقط القيم المشتركة (الموظفين الي عندهم ادارات)
الQuery
SELECT * FROM Employees right join Departments on Employees.employeeId = Departments.employeeId
- Full join
وهو اسهل نوع
باختصار كل البيانات راح تطلع من كل الجدولين سواء مشتركة او لا
الQuery
SELECT * FROM Employees full join Departments on Employees.employeeId = Departments.employeeId
- Self Join
هذا النوع معناته جدول يدمج مع نفسه
طبعا ممكن تستغرب وتقول كيف ندمج نفس الجدول
هذا النوع مستعمل بكثرة وكمثال للتوضيح
هنا عندنا جدول فيه الموظف ومديره
المدير ايضا عبارة عن موظف
فعشان نطلع كل موظف واسم مديره لازم ندمج نفس الجدول بنفسه
وعشان توضح الصورة اكثر تخيل ان نفس هذا الجدول مكرر مرتين
وتم ربطهم عن طريق الManager_id
الQuery
SELECT emp.Name, mng.Name from Employee emp inner join Employee mng on emp.ManagerID = mng.EmployeeID
هذي النتيجة راح تطلع القيم التالية
- Cross Join
فكرة الcross join او تخيل عندنا جدول فيه 4 قيم customers
وجدول ثاني فيه 10 قيم orders
لو سوينا
SELECT * FROM customers cross join orders
النتيجة راح تكون 40 قيمة
يعني كل قيمة من الجدول الاول راح تربط مع كل قيمة من الجدول الثاني
هذا النوع من الjoin مو مستعمل بكثرة ولكن ممكن يفيد في حالة انك تبغى تعرف كم الدقيقة في كل ساعة
الساعة الاولى --- الدقيقة 1
الساعة الاولى --- الدقيقة 2
الساعة الثانية ---- الدقيقة 10
وهكذا
طبعا ملاحظات بسيطة
ممكن تسمع
full outer join
left outer join
right outer join
هي نفسها الي شرحتها ومافي فرق بينهم
الشي الثاني اذا كنت تستعمل MySQL
الfull join مو مدعوم فيها بس في حلول كثيرة تقدر تشوفها
اتمنى الشرح يكون واضح
@PrograminLovers
#برمجة
#أكادمية_ترميز
#حزب_المبرمجين
#مبرمجين

Loading suggestions...