الدرس اليوم: Relational Algabra for SQL database

اليوم راح اشرح لكم كيفية تعامل مع queries او استدعاء بيانات من جداول يسمى Relational Algabra

Mr.Azizمنذ 4 سنوات

السلام عليكم

 

اليوم راح اشرح لكم عن موضوع جدآ مهم و مفضل بالنسبه لي لانه كل الشغل بيكون عن طريق  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 "

 

كلمات دليلية: sql
0
إعجاب
857
مشاهدات
0
مشاركة
1
متابع

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !