الدرس اليوم: Relational Algabra for SQL database
اليوم راح اشرح لكم كيفية تعامل مع queries او استدعاء بيانات من جداول يسمى Relational Algabra
السلام عليكم
اليوم راح اشرح لكم عن موضوع جدآ مهم و مفضل بالنسبه لي لانه كل الشغل بيكون عن طريق sql queries
وسبق شرحت عن بناء قاعده البيانات اذا ماشفتها تفضل من هنا : https://twitter.com/Azi__2019/status/1175440653041504257?s=20
بسم الله نبدء:
ايش هو Relational algabra ؟
هي بالاساس query language او تتعامل مع query بطريقة الاوامر بحيث تجيب لك الجداول على حسب طلبك.
مثال: أنا ابي استخدم جدولين, جدول اسمه Customer و جدول اسمه Cars
ابي اسوي query اني ادمج جدولين مع بعض بطريقه تتناسب مع primery key و Foreign key
و ابي يعرض لي كل شي فيها.
مثال بالكود:
select * from vehicle natural join customer;
والناتج بعد التطبيق
================================================================
(* Select table name or )
طبعآ Select يسمى Project: لانه انت تختار اي column او الاعمده بشكل محدد و راح يظهر لك فقط الى حددتها و يلغي كل شي الى ماتحدد
مثال: انا بختار جدول customer
بسوي بروجيت فقط الاسم الاول والاسم الاخير و الايميل
بيكون هكذا:
تلاحظون في ثلاث اعمده الى طلعت لي فقط ليه؟ لاني سويت بروجيت الاسم الاول والاخير و الايميل فقط
أو تحط النجمة * يعني اقول الجدول جيب لي كل شي الى موجود بالجدول :).
select * from customer;
ملاحظة:
Select from
هذي اهم اوامر لازم تتواجد لما تجي تطلب الجدول لانه هي الاساس
في كلمة بعدها الى كذا
select * from
where
where
هذي اقول شرط او بشرط معين conditions
زي مثلآ انا ابي جدول من Customer بس بشرط الاسم الاول هو Aziz
رح يطلع لك كل شي تحت اسم Aziz
هذا مثال بالصوره:
select * from customer
where Cust_fname = 'Aziz';
ظهر لنا فقط معلومات تحت اسم Aziz اما باقي معلومات يتجاهلها تمامآ
طبعآ ليه طلع لي كذا؟ لاني استخدمت Where الى هي الشرط او بشرط
اكيد اغلبكم تعرفون عن برمجة و لكل يعرف عن IF then هي نفس الطريقه بس بطريقة sql :)
==============================================================
* Union
Union: يجمع بين جدولين من غير تكرار كيف ؟
انا اشرح لكم عن طريقة رياضيات.
تتذكرون لما اخذنا Algabra
كان زي كذا
D1 ={1,2,3,5,8,11}
Union
D2 ={9,2,3,10,61,51}
الناتج بيكون كذا
الناتج ={9,2,3,10,61,51,1,5,8,11}
طبعآ ايش صار
جمع بين جدولين كلها حتى لو مكرره بس بشرط بالناتج مايصير تكرار يعني مايصير
داخل الناتج تكرار بالرقم...
هنا مثال Sql
لو كتبت بالكود على طبيعتها و دمجت جدولين مع بعض
يصير كذا وطلع لنا 9 ارقام كلها مع بعض و تكرار
لانه customer واحد عنده اكثر من سياره :)
ولكن لو استخدمت Union مع جدولين مع بعض
الكود:
select cust_ID from customer natural join vehicle
union
select cust_ID from vehicle;
الناتج هكذا
تلاحظون صار 5 ارقام فقط
التكرار تكنسلو و كل الارقام الى كانت موجوده بين جدولين صارو بالناتج واحد من غير تكرار
و تقدرون تسوونها مع اي شي ثاني مثل الاسماء او المدن او غيرها
ملاحظة مهمة: في حال استخدمتو union
لازم يكون جدول الاول والثاني متساوين بعد select
مثلآ كتبت جدولين customer and support
لازم تسويها بهالطريقة~
Select fname, lastname, city, Zipcode from customer
union
Select fname, lastname, city, Zipcode from support;
==========================================================================
* intersect
هذا عكس union
يقولك ياخذ من جدولين مكررات والارقام الى موجودات بكل جدولين و يتجاهل الباقيين~
يعني لو جدول الثاني في رقم زايد و غير متواجد بالجدول الاول
غالبآ ماراح يضاف
مثال:
عملت جدولين الى هم customer and cars
select * from customer join cars
on customer.studID = cars.studID;
ويكون عندنا جدول هكذا
لما نعمل INTERSECT
راح يطلع لنا كل شي من جدول معدا Aldaharn
لانه خارج الجدول customer
يصير عندنا هكذا بعد تطبيق المثال:
select city from customer
intersect
select city from cars
تلاحظون طلع لي ثلاث مدن فقط لانه موجوده بكل جدولين معدا Aldaharn
==================================================================================.
Cartesian Product (Cross Product)*
هذا النوع مايعتبر دمج نوعآ ما اقصد
راح يدمج كل ROWS بين جدولين
يعني تضرب ROWS * ROWS يطلع لك مجموعه ROWS بالجدول واحد
مثالآ
بجيب CUSTOMER و Vehicles
الامر يكون هكذا
select * from customer, vehicle;
النتيجة:
طبعآ الجدول بيكون مرره كبييير بسبب اني جمعت بين جدولين سواء يربطهم pk and FK او لا
لو تلاحظون اسم Aziz تكرر اكثر من مره لانه بكل حال عمل هكذا
customer Rows* Vehicle Rows= customerVechile Rows
====================================================================
* Joins
عندنا انواع Join
1- natural join
الي استخدمها فوق هي ماتحتاج تربط pk مع fk لانه هي بطبيعتها راح تتربط من نفسها
2- Inner join
الى هي عكس الى فوق
لازم نعمل هكذا
Select * from Customer join Cars
on Customer.ID = cars.ID;
آي اني عملت ربط بين PK مع FK
اذا ماعملت يساوي راح تجيك خطأ لانه مو نفس natural join
3- outer join
هذي نفس الى فوق بس لها ثلاث انوواع متفرعه
الى هي left outer join, right outer join and Full outer join
طيييب ايش سالفتها Join؟
هي ربط بين جدولين pk مع FK
مثلآ ابي اربط customer مع Vehicle
الكود بيكون كذا:
select customer.cust_ID, CUST_FNAME, MAKE from customer join vehicle
on customer.cust_ID = vehicle.cust_ID;
الجدول:
تلاحظون Aziz جاء مرتين لانه عنده سيارتين :)
ونفس الشئ مع Jeffery معاه سيارتين
بس لو استخدمنا Cross Product راح يكون مختلف و نفس الى شرحته فوق
راح يكون جدول كبيير جدآ بسبب انه مو مربطون pk and fk ابدآ
عكس join راح يكون مربوط و لازم اصلآ.
ملاحظه: لما نبي تسوي بروجكت ID لازم تحط اسم الجدول بعدها
مثل كذا
customer.ID
لانه لو حطينا زي كذا ID فقط راح يطلع خطآ و يحتار sql لانه مو عارف من اي جدول يختار هذا ولا الثاني :)
=================================================================
أخر شي بشرح لكم بشكل مبسط عن outer Join
لانه هذي لكل يلخبط فيها اكيد ومنهم انا هههه
وحاب اوضح لكم افضل طريقة وان شاءالله توصل لكم المعلومة:
انا راح استخدم هذا البيانات:
create table customer(
studID number PRIMARY key,
Fname VARCHAR(20),
Lname VARCHAR(20),
city VARCHAR(20)
);
create table cars(
idcar number PRIMARY KEY,
namec VARCHAR(10),
city VARCHAR(20),
studID int REFERENCES customer
);
insert into customer values(1520,'Aziz','Ala', 'Dammam');
insert into customer values(5140,'Ahmad','Ag', 'Alkhafji');
insert into customer values(0021,'Khalid','tt', 'Riyadh');
insert into cars values(2151, 'Camry','Dammam',1520);
insert into cars values(7482, 'Corella','Dammam',1520);
insert into cars values(7784, 'Dodge','Alkhafji',5140);
insert into cars values(9584, 'lambo','Riyadh',0021);
insert into cars values(1215, 'Jako','Aldaharn',5140);
insert into cars values(111111, 'CARS','Aldaharn',Null);
طيب خلينا نختار الكود كذا
select * from customer left outer join cars
on customer.studID = cars.studID;
Parent: راح يكون على يسار
child :راح يكون على يمين
ركزو زيين على هذي لانه مهمه تفرقون بين right and left
بسم الله :
1- left outer join
يقولك اظهار كل شي بالجدول parent مع child باليسار فقط
الصوره:
تلاحظون مافيه NULL في جدول child بسبب كله متركز على يسار parent
2- Right outer join
يقولك هنا
ابي كل شي parent مع child يطلع باليمين بس بشرط يكون id لل child
معناته احنا نعرف child عنده Null راح يطلعها حتى لو غير موجود في جدول parent
الصوره:
تلاحظون تحت Null طلع لنا
بسبب child ماعنده رقم من parent و انا عطيت sql امر اني ابي كل جدولين يبدء من يمين فقط
يعني مالي شغل في parent :)
مثال اخر:
لو جدول child عنده 200 Null راح يطلع 200 Null لانه تركيزنا على يمين فقط اي جدول Child فقط فقط فقط :)
3- Full Outer join
هذي يقولك جيب كل شي من جدولين سواء يمين او يسار
تلاحظ هنا تمركز او تركيزنا كلها من يمين ويسار اي parent and child
عكس right and left
و كذا انتهينا الشرح و ان شاءالله يكون الشرح مبسط وسهل ومفهووم
هذا تلخيص عن الاوامر
أتمنى يكون شرح بسيط وسهل وخفيف
ولاتنسوني من دعائكم وشكرآ على اقتراحكم اني اكتب هنا لاني اشوفه جدآ مريح و اقدر اخذ راحتي بالشرح لانه مافيه حدود ابدآ هههه~
كان معاكم مستر عزيز
اشوفكم على خير ~
"IF someone tells you your can't, They'er showing you thier limit not yours "
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !