0% found this document useful (0 votes)
12 views30 pages

Practical

Uploaded by

mhmod012100
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views30 pages

Practical

Uploaded by

mhmod012100
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 30

SQL

1|Page
‫‪DATA BASE SECTIONS‬‬
‫‪ :SQL‬اللغة اللي بصنع بيها قواعد البيانات واالهتمام بكل شؤونها‬
‫بتتكون من اية ‪:‬‬
‫بتعمل الهيكل االساسي =‪1-DDL‬‬
‫بتدخل البيانات جوا الهيكل وبتعدل عليها الخ=‪2-DML‬‬
‫بتتحكم في عرض القيم *كويري =‪3- DCL‬‬
‫‪ ):‬صنع هيكل البيانات( ‪1-DDL‬‬
‫قبل ما ندخل البيانات ونبدأ نتعامل معاها الزم في االول نعملها مكان تتحط فيه وهي‬
‫دي مهمة الفرع ده الي ليه اربع مصطلحات برمجية اساسية بنستخدمها في بناء الهيكل‬
‫‪DDL FUNCTIONS :‬‬
‫جدول ‪ ---> table‬او ‪ data basse‬بتعمل) ‪1- CREATE ( >-----‬‬
‫‪ ) --> data base& table‬بتحذف قاعدة البيانات او الجدول( ‪2- DROP‬‬
‫‪ )---> table‬بتعدل على الجداول( ‪3-ALTER‬‬
‫‪ )-->table‬بتحذف جمييع بيانات الجدول( ‪4-TRUNCATE‬‬

‫‪2|Page‬‬
‫‪):‬الصيغة الي بننشيء بها القاعدة والجدول( ‪1- Create form‬‬
‫‪Create data base data base_ name‬‬
‫‪Create table table_name‬‬
‫(‬
‫‪Column1 (data type),‬‬
‫)‪Column2 (data type‬‬
‫)‬
‫اوال بعرف قاعدة البيانات بجمل اساسية في البرنامج‬
‫بقوله يعملي قاعدة بيانات وبعدين بسميها‬
‫بعدين هعمل الجداوال عن طريق الجملة بتاعت البرنامج وبعدين اسميه وهدخل‬
‫االعمدة الي بتمثلي الخواص زي االسم والعمر كل عمود همثلي حاجة فيهم على سبيل‬
‫المثال‬

‫‪Create data base school‬‬


‫‪Create table student‬‬
‫(‬
‫‪Name varchare(40),‬‬
‫‪Age int,‬‬
‫)‪Id int‬‬

‫‪3|Page‬‬
‫‪ ‬عرفت االسم بنوع ‪var char‬النه بيوفرلي مساحة فلو الشخص دخل اسمه بمحمد‬
‫هيحجزلي اربع اماكن بس ويسيب الباقي عكس التشار الي هتخلي الثالثين كلها‬
‫محجوزة‬
‫‪):‬صيغة الحذف( ‪2- Drop form‬‬
‫‪DROP TABLE table_name‬‬
‫‪EX: drope table student‬‬
‫‪DROP DATABASE database_name‬‬
‫‪EX:DROP DATABASE school‬‬
‫اللي عملناه هنا هو اننا حذفنا الجدول بعدين حذفنا قاعدة البيانات معاها واللي‬
‫الدروب بيعمله عموما هو محو الشيء تماما سواء كان قاعدة او جدول‬

‫‪):‬صيغة التعديل على الجداول( ‪3-Alter form‬‬


‫)‪Alter  (add,drop‬‬
‫‪ALTER TABLE table_name‬‬
‫‪ADD (ColumnName_1 datatype,‬‬
‫‪ColumnName_2 datatype,‬‬
‫…‬
‫‪ColumnName_n‬‬ ‫)‪datatype‬‬
‫ده في حالة كنت عايز اضيف اكتر من عمود للجدول بتاعي زي هوايات الطالب مثال اورقم هاتف احد‬
‫االقارب الخ فبزود عواميد تانية توصف معلومات زيادة عن الطالب * مالحظة العمود فيه بيانات‬
‫الجميع او االغلبية حسب هل الخاصية دي مطلوبة اجباريا ً عن الطالب وال اختيارية فرقم الطالب‬
‫هتالقيه عمود مليان بالكامل وده عشان رقم الطالب اجباري اما مثال عمره فممكن متالقيش الجدول ده‬
‫مملي بالكامل الن دي خاصية اختيارية بينما الصف فيه معلومات طالب واحد‬
‫‪4|Page‬‬
Ex:
ALTER TABLE table_name
ADD Columnname_1 datatype
EX: ALTER TABLE Student
ADD AGE int
‫ده في حالة حابب ازود عمود واحد فقط‬

ALTER TABLE table_name DROP COLUMN COLUMN_NAME


Ex: ALTER TABLE Student DROP COLUMN COURSE
4-Truncate form (‫)صيغة التفريغ‬:
TRUNCATE TABLE TABLE_NAME
TRUNCATE TABLE student;
‫الي عملته هنا ببساطة هو اني فرغت الجدول بتاع الطالب من اي بيانات تماما ً وده مفيد‬
‫جداً فلو انا مثالً عامل قاعدة بيانات للكلية وكل سنة الطالب بينتقلو من سنة للي بعديها‬
‫فبعد ما احتفظ بالبيانات الالزمة بفرغ الجدول منها بحيث يبقى فاضي الدخال بيانات‬
‫الطالب الجداد‬
Primary_key:

1- Unique single property or combination of them that


unequally defines the filed * must be in every strong entity *
2-Can not be null ,

5|Page
‫المفتاح المميز للجدول ‪:‬هو عمود او اكتر يتم اختيارهم من بين اعمدة الجدول‬
‫لتمييز كل صف عن الصفوف االخرى ‪ ،‬وهو موجود في االنتيتيز القوية (االنتيتي‬
‫الضعيفة ملهاش مفتاح معرف او مميز )‬
‫شروطه‪:‬‬
‫الزم العمود بتاعها يبقي مملي بالكامل ومينفعش اديها قيمة بـ ‪null‬‬
‫و الزم ما يتكررش‬
‫‪Foreign _key‬‬
‫‪it is an original(primary) key in some table but it become an‬‬
‫‪attribute in other table to combine two table‬‬
‫‪And make one of them reference to the other‬‬
‫هو مفتاح مميز (برايمري كي ) في جدول لكن اتحط في جدول تاني كخاصية عشان‬
‫يربط بين الجدولين ويخلي واحد فيهم مرجع للتاني( وعشان هو راح من جدوله‬
‫االصلي لجدول تاني كمان سمينه في الجدول التاني‪) foreign key‬‬
‫ودية طريقة كتابته في الكود‪( .‬مشروح اكتر في نهاية الملخص عند العالقات)‬

‫‪primary key + identity data type date‬‬


‫‪Ex:‬‬
‫‪create database student_pk‬‬
‫(‪create table student‬‬
‫‪code int primary key ,‬‬
‫‪constraint c1 foreign key (lab_code) references lab‬‬
‫)‬

‫(‪create table lab‬‬


‫‪lab_code int primary key‬‬
‫‪6|Page‬‬
‫هتالقي في الكود انه معرف االتنين كبيرمري كي‪ ،‬و فوق في التابل بتاعة ال ‪student‬‬
‫رابطهم ببعض عن طريق ال‪ constraint‬اللي اسمه ‪c1‬‬
‫‪Identity:-‬‬
‫‪*/‬عملنا فيها جدول هحط فيه بيانات المدرسين*‪Create table teacher /‬‬
‫(‬
‫‪Id primary key identity (1,1),‬‬
‫‪Birth_date date ,‬‬
‫‪Name varchar(30),‬‬
‫) ‪Salary int‬‬
‫انا قلتله في العمود االول انه يخليها ال ‪ id‬يبقي ‪identity‬‬
‫يعني بقوله يعمل ترقيم من نفسه لكل صف يعني بدل ما اقعد ازود واحد كل مرة اضيف صف‬
‫جديد ال انا هنا بقوله يزود واحد من نفسه كل ما اضيف فكدة هقدر اوصل لعدد الصفوف‬
‫اللي انا دخلته فبقوله ابتدي برقم واحد وزود كل مرة واحد(‪)1,1‬‬

‫‪Date:-‬‬
‫قولتله خليلي تاني عمود االعياد ميالد الموظفيين واديته نوع ‪date‬‬

‫والداتا تايب دي بتحسب التاريخ وشكلها في الذاكرة بيبقى عبارة عن‬


‫’‪‘yyyy.mm.dd‬‬

‫‪):‬المسؤولة عن بالبيانات(‪DML‬‬
‫)ادخال البيانات( ‪ INSERT INTO‬‬
‫)لتعديل على البيانات(‪ UPDATE‬‬
‫)حذف البيانات المنتقاة(‪ DELETE‬‬
‫‪7|Page‬‬
‫)لعرض بيانات مختارة(‪ SELECT‬‬
‫ودول كلهم بيتعاملو مع الجدول بس‬
‫‪):‬مسؤول عن ادخال البيانات( ‪- Insert into form‬‬
‫‪INSERT INTO table_name VALUES (value1, value2,‬‬
‫)‪value3,...‬‬

‫‪EX: INSERT INTO STUDENT VALUES (MOHAMED,‬‬


‫)‪2017098, 19‬‬
‫هنا دخلت البيانات للصف االول بحسب ما رتبتها فوق وانا بعرف االعمدة فالعمود‬
‫االول هدخله اول قمية والعمود التانية القيمة التانية هتبقى جواه وهكذا‬
‫‪ ):‬التعديل( ‪- Update form‬‬
‫‪UPDATE table_name SET column1 = value1, column2‬‬
‫‪= value2 WHERE(CONDITION) COLMN_N=SOME value‬‬
‫‪EX:UPDATE STUDENT SET NAME= AHMED,‬‬
‫‪WHERE ID = 23456‬‬
‫التحديث عبارة عن تعديل على بيانات معينة وده بيتم من خالل‬
‫ال‪ primary key‬بتاعها غالبا ً فبقوله روح غيرلي االسم الاحمد في عمود‬
‫االسماء لما يبقى رقم الطالب كذا وكذا و'‪ 'where‬دي تعتبر الشرط بتاع حدوث‬
‫التغيير‬
‫‪):‬لحذف بيانات الصف( ‪- Delete form‬‬
‫;‪DELETE FROM table_name WHERE COLUMN=SOME VALUE‬‬
‫‪EX:DELETE FROM STUDENT WHERE ID= 34536‬‬
‫‪8|Page‬‬
‫هنا قلتله احذفلي من جدول الطالب لما يبقى عندك رقم الطالب كما سبق الصف كله ‪،‬‬
‫يعني نقدر نعتبرال‪ delete‬زي ال‪ truncate‬بس ال‪ truncate‬بتصفي‬
‫الجدول كله بس بينما ال‪ delete‬بتصفي الصفوف المختارة‪ ،‬يعني تلغي بيانات‬
‫طالب واحد بالكامل واحيانا الجدول كله لو عزت زي ماهو مكتوبت‬
‫‪DELETE FROM STUDENT‬‬
‫)لعرض بيانات مختارة( ‪- Select form‬‬
‫‪SELECT column1,column2 FROM table_name‬‬
‫‪SELECT NAME, ID FROM STUDENT‬‬
‫هنا قلتله هاتلي العمود بتاع االسم ورقم الطالب واعرضهملي من جدول الطالب‬
‫‪SELECT * FROM table_name‬‬
‫‪SELECT * FROM student‬‬
‫هنا عالمة النجمة تعني عرض كل عواميد (محتويات الجدول)‬
‫‪-SELECT FORM :SELECT top n column_name* FROM table name‬‬
‫(برضو بين ال ‪ top‬والرقم مسافه * وبين النجمة والرقم مسافة)‬
‫(لما ابقى عايز اعرف بيانات الناس الي عندي في بداية الجدول اول ثالثة أول خمسة اول عشرة‬
‫على حسب ما انا عايز )‬
‫‪Ex: SELECT top 3 name* FROM student‬‬
‫ممكن ابقى مرتب الطالب عندي في هنا هيجبلي اول ثالث اسماء في الجدول يعرضهم لي*‪/‬‬
‫الجدول على حسب الدرجات وعايز اشوف الثالثة األوائل فالموضوع ده هيساعدني ان شاء‬
‫‪ */‬هللا‬
‫طيب عايز بيانات الثالثة األوائل كلها مش بس اسمائهم عشان اعرف اتواصل معاهم ‪..‬ارقام‬
‫تليفوناتهم عناوينهم الخ هستخدم االتي‬
‫‪-SELECT FORM: SELECT top n * FROM table name‬‬
‫‪Ex: SELECT top 3 * FROM student‬‬

‫‪9|Page‬‬
‫من غير تكرار الي مختلفة عندي في الدفعة هستخدم األسماء طيب انا عايز اشوف كمان األسماء‬
‫‪-SELECT FORM: SELECT Distinct column_name * from table_name‬‬
‫‪: SELECT Distinct name * from student‬‬
‫) في الدفعة المختلفة ومش متكررة هنا هيجبلي كل األسماء(‬
‫‪#‬ديستينكت اختصاصها انها تعرضلي القيم اللي مش متكررة أيا كان نوعها اسم رقم الخ‪...‬‬
‫طيب عايز اشوف الطالب الي اسمائهم بتبدأ بحرف االلف‬
‫‪-SELECT FORM: SELECT * from table_name where column_name like‬‬
‫)‪(character%‬‬
‫)‪SELECT * from student where name like (A%‬‬
‫‪ */‬كدة هيجبلي اسماء كل الطالب الي بيبتدوا بحرف ده*‪/‬‬

‫بحرف ده طيب عايز اشوف الطالب الي اسمائهم تنتهي‬

‫)‪SELECT * from student where name like (%A‬‬


‫طيب عايز اشوف الطالب الي اسمائهم في وسطها حرفين ميم و ت‬

‫)‪SELECT * from student where name like (%mt%‬‬


‫طيب عايز دلوقتي الغي بيانات طالب معين‬

‫نيجي هنا ونسال سؤال مهم ايه الفرق بين الترانكيت والديليت مهو ممكن االتنين يفضو الجدول ؟‬
‫‪DELETE‬‬ ‫‪TRUNCATE‬‬
‫= فيها شرط عشان اقدر الغي ‪where‬‬ ‫مفيهاش شرط‬
‫يا اما صف يا اما الجدول كله تلغي‬ ‫الجدول كله تلغي‬
‫تبع ال‪DML‬‬ ‫تبع ال‪DDL‬‬

‫‪10 | P a g e‬‬
‫ عرض‬+ ‫هنتدرب فيه على الكويري اكتر يعني ( بحث في البيانات‬
‫البيانات الي بدور عليها) وده دور السليكت‬
SELECT:
1-AND
2- BETWEEN ..AND + NOT BETWEEN
3- IN + NOT IN
4- AGGREGATE FUNCTIONS

‫ ده الجدول بتاع الموظف الي هندور في محتوياته‬:


id Firs_ name Last_name salary
1 ‘ahmed’ ‘saleh’ 2000
2 ‘samy’ ‘belal’ null
3 ‘adel’ ‘sameh’ 1000
4 ‘ramy’ ‘mostafa’ 3000

11 | P a g e
‫‪1-And :‬‬
‫و هنفترض ان انا عايز اجيب بيانات موظف انا مش فاكر الرقم بتاعه‬
‫اللي هو البرايمري كي ‪..‬هعمل ايه ؟ هشوف البيانات التانية اللي فاكرها‬
‫عنه عشان اعرف اجيبه وساعتها هستخدم االند‬
‫‪Select and form‬‬
‫‪: select * from table_name‬‬
‫‪where column1_name= some value and‬‬
‫‪column2_name= some value‬‬
‫‪Select * from employee‬‬
‫‪where first_ name =’ahmed’ And salary= 2000‬‬
‫هنا هيظهر لي بيانات احمد كلها من غير ما احتاج اكتب رقمه وده الني‬
‫قعدت اقول للبرنامج معلومات اعرفها عنه صعب تتكرر كلها سوا في‬
‫حد تاني‬
‫_________________‬
‫‪2-between .. and :‬‬
‫قبل كده كنا نقدر نجيب القيمة اللي احنا عايزينها من‬
‫الجدول زي‬
‫‪Select *from employee where salary <2000‬‬

‫‪12 | P a g e‬‬
‫يعني هات لي كل الموظفين الي راتبهم اكثر من الفين ‪،‬طب انا لو مش‬
‫عايز الرواتب كلها الي اكبر من الفين ‪ ،‬عايز مثال الرواتب الي من ألفين‬
‫اال ربع تالف ؟ ساعتها هستخدم بتويين‬
‫‪Select Between form :‬‬
‫‪Select* from table_ name where column between‬‬
‫‪value1 and value2‬‬
‫وهنا انا بطلب منه يجيبلي القيم المحصورة بين قيمتين انا بحددهم قيمة‬
‫صغيرة بتمثلي الحد االدني الي ما ينفعش يجبلي اصغر منه وقيمة كبيرة‬
‫بتمثلي الحد االعلى ما ينفعش يجبلي اكبر منها‬
‫‪Select *from employee where salary between 2000‬‬
‫‪and 4000‬‬
‫في الجدول عندي قمتين ينطبق عليهم الشرط ده هيظهر ولي ‪( 2000‬‬
‫) االحمد و‪ 3000‬لرامي‬

‫‪Select *from employee where salary < 2000 and >4000‬‬


‫هل فيه فرق بين الجملة دي واللي فوق؟‬
‫اه (اوالً ان اند بتستخدم معاها اكبر واصغر والعمليات بس بتوين ال بديها‬
‫االرقام علطول)‬

‫‪13 | P a g e‬‬
‫ثانيا ً االند هيحسب لى األكبر من االلفين واصغر من االربعه بس‬
‫‪..‬االلفين واألربعة ال ‪ ...‬بتوين هتحسب األلفين واألربعة واللى بينهم‬
‫‪Not between :‬‬
‫‪Select *from employee where salary not between‬‬
‫‪2000 and 4000‬‬
‫هنا انا بقول للبرنامج ببساطة متجبليش الرواتب الي من ‪4000 2000‬‬
‫‪ 1000‬وهاتلي كل الرواتب الباقية فالناتج هيبقى عادل‬
‫طيب فرضا ً اتطلب مني اجيب بيانات موظفين مفيش ‪2-In + not in :‬‬
‫بينها رابط ؟ ال حد اعلى وال حد ادنى والقيم محصورة وال هم يحزنون‬
‫اعمل ايه ؟ هستخدم أين على طول كده هو‬
‫‪3-Select in form :‬‬
‫‪Select * from table_name where column_name in‬‬
‫)‪(value1, value2….‬‬
‫)‪Select * from employee where id in (1,4,3‬‬
‫هنا هيجبلي بيانات احمد ورامي وعادل‬
‫( كان عادي لو استخدمت *‪ And‬فهقوله هاتلي بيانات الموظف‬
‫الي رقمه واحد واللي رقمه ‪ 3‬واللي رقمه ‪ 4‬بس ده هياخد وقت ومش‬
‫)مستحب اوي‬

‫‪14 | P a g e‬‬
‫طب لو انا عايز بيانات الكل اال احمد ورامي وعادل ؟(ما انا خالص‬
‫عرفت بياناتهم عايزة اعرف عن الباقيين بقى) بكل بساطة هنسخ نفس‬
‫السطر الي فوق واحط قبل األن( نوت) زي كدة‬
‫)‪Select * from employee where id not in (1,4,3‬‬
‫‪ 2‬فهيجبلي بيانات سامي الي رقمه‬

‫)عمليات التجميع( ‪4-AGGREGAT FUNCTIONS‬‬


‫دي فانكشن (عمليات) رياضية موجودة جوا البرنامج بتساعدني في‬
‫‪:‬اجراء حسابات على البيانات بتاعتي الي من نوع انتيجر و جواها االتي‬
‫= ‪AGREAT‬‬
‫)البيانات بتجمع( ‪➔SUM‬‬
‫)بتجيب المتوسط( ‪➔AVG‬‬
‫)بتحسب العدد (‪➔CONT‬‬
‫)بتجيب اعلى قيمة(‪➔MAX‬‬
‫)بتجيب اقل قيمة( ‪➔MIN‬‬

‫‪15 | P a g e‬‬
‫‪1-min & max :‬‬
‫واالتنين ليهم صيغة متشابهة الي هي‪:‬‬
‫‪Select max + min form :‬‬
‫‪Select max(column) from table_name‬‬
‫‪Select max (salary )from employee‬‬
‫هنا بقوله يجبلي أكبر راتب من جدول الموظفين‬
‫‪Select min(column) from table_name‬‬
‫‪Select min(salary) from employee‬‬
‫هنا بقله يجبلي اصغر راتب في جدول الموظفين الي هو احمد‬
‫وارتبه مقداره الفين (طب ليه ماجابش سامي ؟ ببساطة‬
‫عشان ‪ Null‬ما يساويش صفر! النل بتقولي ان مفيش قيمة‬
‫من االساس او القيمة غير معروفة ممكن تبقى اي حاجة‬
‫هنا فازاي هقارن قيم بفراغ أو شيء مجهول ؟ لما يبقى فيه قيمة ابقى‬
‫) اقارن‬
‫‪2-Select count forms :‬‬
‫‪Select count (*) from table_name‬‬
‫‪Select count (*) from employee‬‬

‫‪16 | P a g e‬‬
‫هنا انا بقله يعدلي عدد الصفوف الي في الجدول فالناتج هيبقى ‪ 4‬طب ليه‬
‫‪ 4‬؟ عشان هو ما بيعدش اول صف الي فيه اقسام الجدول زي االسم‪،‬‬
‫والرقم‪ ،‬والمرتب ‪ ،‬الن دي تصنيفات مش بيانات‬
‫‪Form 2: Select count (column) from table_name‬‬
‫‪Select count (salary) from employee‬‬
‫هنا قلتله يعدلي عدد الرواتب وهيطلع عندي ‪ 3‬رواتب ‪،‬عشان‬
‫ماحسبتش نال النها مش قيمة ‪.Null‬‬
‫طيب لو عايز عدد الرواتب بس يجي الراتب مرة واحدة ميككروش تانى‬
‫‪ ....‬؟ هستخدم ديستينكت‬
‫‪Select distinct ( count (salary) )from employee‬‬
‫يعني لو افترضنا ان عندي خمس رواتب اتنين قيمتهم بتساوي ‪3000‬‬
‫هيعتبرهم قيمة واحدة النه بيعد المختلف بس فهيا خذ ‪ 3000‬واحدة بس‬
‫وهيتالشى اي ‪ 3000‬بعديها ‪ ،‬وهيطلع لي اربع رواتب‬

‫‪3-select sum form:‬‬


‫‪select sum(column) from table_name‬‬
‫‪select sum(salary) from employee‬‬

‫‪17 | P a g e‬‬
‫هنا هيجمع العمود الرواتب كله عشان اشوف كشركة انا بدفع شهريا ً قد‬
‫‪ = 6000‬ايه لموظفيني والناتج هيطلع عندي‬
‫هنا برضو ممكن استخدم ديستينكت لو عايزه يجمع لي الرواتب الي *‬
‫مش متكررة برضو بنفس الطريقة الي فوق‬
‫‪4-select avg form:‬‬
‫‪select avg (column) from table_name‬‬
‫‪select avg (salary) from employee‬‬
‫‪ 6000÷3‬هيطلعلي متوسط المرتبات الي عندي الي هو‬
‫‪ = 2000‬هيبقى الناتج‬

‫)العالقات بين الجداول( ‪Relations between tables‬‬


‫في النظري كنا اخدنا انوع العالقات بين ال ‪Entities‬‬
‫وهي ‪:‬‬
‫) ‪1=1-1 (one to one‬‬
‫)‪2=1-M (one to many‬‬
‫)‪3= M-N (many to many‬‬
‫‪4- multivalued +composite‬‬
‫‪5-practical‬‬
‫‪18 | P a g e‬‬
‫والهدف من دراسة العالقات دي في النهاية اننا نعرف نستخدم‬
‫ال‪primary key & foreign key‬في اماكنهم الصحيحة وقت البرمجة‬
‫عشان نعرف نربط بين الجداول صح‬
‫‪):‬واحد لواحد( ‪1=1-1‬‬
‫‪):‬فيه طريقتين عشان احلها( ‪Has two approach to solve‬‬
‫‪ 1- if there is total and partial participation‬‬
‫‪+‬هنزل مفتاح البارشيال عند التوتال‪+‬‬
‫(لو كانت واحدة من ال‪entities‬مشاركة بمشاركة جزئية والتانية‬
‫مشاركة بمشاركة كلية زي ايه ؟ الموظف الي بتربطه بالقسم عالقة‬
‫ادارة (مدير ليه يعني )‬

‫‪( From employee to department‬من الموظف للقسم( ‪:‬‬

‫‪19 | P a g e‬‬
‫هل كل موظف الزم يدير قسم ؟ ال مش الزم تبقى مشاركة االنتيتي بتاع‬
‫الموظفين في العالقة دي مشاركة جزئية مش كل‬
‫الموظفين الي فيه بيشاركوا باالدارة ‪Partial‬‬
‫(من القسم للموظف( ‪From department to employee‬‬
‫هل كل قسم الزم يديره موظف (مدير)؟ اه الزم يبقى كل‬
‫االقسام هتشارك فهتبقى مشاركة كلية ‪total‬‬
‫*والقسم بيديره موظف واحد ‪ ،‬والموظف الواحد ما بيديرش غير قسم‬
‫= عالقة واحد لواحد‬
‫هنستخدم المفاتيح في الحالة دي ازاي ؟ هناخد مفتاح االنتيتي الي‬
‫مشاركة بالعالقة الجزئية والي هي هنا( الموظفين ) واروح احطه كمفتاح‬
‫اجنبي عند االنتيتي الي العالقة عندها كلية وهي انتيتي (االقسام) بالمنظر‬
‫ده كدة‬
‫‪Employee‬‬
‫‪ssn‬‬ ‫‪Frist_name Last_name salary‬‬

‫‪Department‬‬
‫‪De_name De_number Manger_ssn location‬‬

‫هالحظ هنا ان السيكيورتي نمبر بتاع الموظف كان برايمري كي بس لما‬


‫راح جدول االقسام بقى مجرد خاصية عشان نربط الجدوليين وهنا انا‬
‫بسميه فوريان كي (مفتاح اجنبي )‬
‫*الدكتور اكدت اكتر من مرة محدش يحط خط تحت المفتاح االجنبي !‬
‫الني لو حطيت خط تحته ده معناه كاني بقول للبرنامج ان رقم القسم‬
‫ورقم الموظف بيمثلولي البرايمري كي بتاعي! وده مش صح ‪ ،‬الن‬
‫‪20 | P a g e‬‬
‫الهدف من ادخال المفتاح االجنبي هو الربط بين الجدوليين مش اني‬
‫اصنع المفتاح االساسي (البرايماري)‬
‫*السبب (ليه نقلت مفتاح البارشيال للتوتال مش العكس ؟) مش كل‬
‫الموظفين مدراء واضافة عمود رقم القسم الذي يديره الموظف لجدول‬
‫الموظفين هيوحيلي ان كل الموظفين مدراء! وده مش صحيح وبكدة‬
‫هتلخبط مين بيدير ايه ؟ ‪ ،‬بينما الي عملته بنقلي رقم المدير في جدول‬
‫االقسام مخلنيش اتلخبط بين عدد الموظفين الكتير وعرفت الموظف‬
‫الواحد الي بيديرلي القسم ده مين‬
‫‪)-if both are partial or total(2‬اذا االتنين مشاركين جزئية او‬
‫االتنين مشاركين كلية)‬
‫‪1-Both are partial:‬‬
‫هنا براحتك حط مفتاح اي ‪ Entity‬عند التانية وهتشتغل‬
‫‪2-Both are total:‬‬
‫االنتيتيز هنا كل العناصر بتاعتها من الطرفين مشاركة في‬
‫العالقة زي ‪:‬‬

‫هنا انا عامل جدولين جدول للعواميد وجدول للكليات كل عميد‬


‫الزم يبقى بيديركلية وكل كلية اكيد الزم يبقى ليها عميد‪..‬وحل‬
‫نوع المشاركة دي من عالقة واحد لواحد هي اني ادمج الجدولين‬
‫‪21 | P a g e‬‬
‫في جدول واحد ‪ ،‬بنقل كل الخواص بتاعت االتنين في جدول‬
‫بسميه عواميد الكليات وبخلي مفتاحي الرئيسي ( البرايماري كي‬
‫بتاعي)اما مفتاح العميد اومفتاح الكلية مينفعش االتنين طالما‬
‫اخدت واحد كمفتاح مميز للجدول بسيب التاني ومثال ده من‬
‫المحاضرة ‪:‬‬

‫عندي هنا أ و ب كيانات (‪ )Entities‬االتنين مرتبطين‬


‫بعالقة كلية يعني ‪ :‬كل واحدة من الطرفين مشاركة بكل‬
‫عناصرها في العالقة فلو افترضنا ان أ بيمثلي جدول العميد الي‬
‫خواصه (اسم العميد ‪ ،‬ورقمه = برايماري كي) و ب بيمثلي‬
‫جدول الكلية الي خواصه (اسم الكلية ‪+‬موقعها= برايماري كي ‪،‬‬
‫عدد طالبها ) فهيبقى عندي جدول واحد ليه برايمري كي واحد‬
‫من الجدولين الي فيهم‬
‫‪22 | P a g e‬‬
‫يا اما بتاع الكلية = اسمها ‪ +‬موقعها‬
‫او‬
‫بتاع العميد = رقمه‬
‫‪(:‬واحد لمتعدد)‪2=1-M‬‬
‫‪+‬هنزل المفتاح ‪ 1‬عند جدول المتعدد‪+‬‬
‫هنا حلها بسيط جداً دايما ً هاخد مفتاح الكيان ( ‪)Entity‬‬
‫الي ‪ 1‬اوديه في جدول ال ‪N‬‬
‫مثال‪ :‬فرع البنك والحساب‬

‫‪):‬العالقة من الفرع للحساب(‪From bank to account‬‬


‫الفرع الواحد فيه عدة حسابات اذا االكونت هيبقى ‪Many‬‬
‫‪):‬العالقة من الحساب للفرع (‪Frome account to bank‬‬
‫‪23 | P a g e‬‬
‫الحساب الواحد ليه فرع واحد بيقى الفرع ‪1‬‬
‫الفرع عندي نوعه واحد فهنزل البرايمري كي بتاعه في جدول‬
‫(الحسابات) الي نوعه ميني‬
‫‪Bank_branch‬‬
‫‪Bank_code‬‬ ‫‪Branch_no‬‬ ‫‪adders‬‬

‫‪Account‬‬
‫‪Acc_no balance‬‬ ‫‪type Bank_no Branch_no‬‬
‫نقلت البرايماري كي بتاع الفرع لل حسابات‬
‫السبب(ليه مش العكس؟)‪:‬لما نقلت البرايمري كي بتاع الفرع للحسابات‬
‫عرفت كل حساب موجود في بنك ايه وانهي فرع‬
‫لكن لو عملت العكس ونقلت رقم الحساب لجدول الفروع هتحصل مشكلة‬
‫‪،‬الن عندي حسابات كتير ‪ ،‬وهكرر البيانات واخد مكان في الذاكرة كان‬
‫ممكن اوفره‬
‫‪):‬متعدد لمتعدد(‪3- M:N relation‬‬
‫‪+‬صنع جدول جديد‪+‬‬
‫وده زي عالقة الطالب والمادة ‪ :‬المادة ممكن ياخدها اكتر من طالب ‪،‬‬
‫والطالب ممكن ياخد اكثر من مادة دي عالقة متعدد لمتعدد بعملها جدول‬

‫‪24 | P a g e‬‬
‫جديد واسميه مواد الطالب واخليه الرابط بين جدول الطالب والمادة من‬
‫خالل اني انزل البرايمري بتاع الجدولين فيه‬
‫‪4- multivalued + composite:‬‬
‫الخاصية الي ليها اكتر من قيمة لما باجي امثلها برمجيا ً بعملها جدول‬
‫لوحدها واكثر مثالين شائعين عن كدة هما ال‬
‫‪Phone + location‬‬
‫وهنا ده جدول هاتف الموظف‪ :‬الرقم االول ‪ ،‬الرقم الثاني ‪ ،‬البرايماري‬
‫كي بتاع جدول الموظف (الجدول الي المالتي فاليود اتربيوت مطلوبة فيه‬
‫)‬
‫‪Emp_number1 Emp_number2‬‬ ‫‪Emp_no‬‬
‫‪010444444‬‬ ‫‪01200000‬‬ ‫‪201700000‬‬

‫وده مثال المحاضرة عنه ‪:‬‬

‫عملت للموقع جدول لوحده ‪ ،‬ونزلت البرايمري كي بتاع القسم عنده‬

‫‪25 | P a g e‬‬
Composite: ‫لما بيبقى عندي قيمة ليها فروع كتيرة زي االسم بمثلها‬
‫برمجيا ً بعواميد لكل فرع‬
‫جدول الموظف‬: ‫زي كدة‬
First_name Middle_name Last_name id

5-practical‫حاليا ً هنطبق ماسبق بسهولة ان شاء هللا‬:


praimary key constraint (‫)تثبيت مفتاح رئيسي‬:
Form1 :
Create table table_name
(
Column/* type*/not null,
Column data type
Constraint constraint_name primary key
(column1,column2...)
)
Ex: create table student
(
Id int not null,
26 | P a g e
Name varchar (40),
Constraint spk primary key (id)
)
‫ كمفتاح رئيسي‬، )‫(االسم الي اديته للمفتاح‬spk ‫في اخر سطر قلتله ثبتلي‬
‫للجدول وقيمته (العمود اللي هيعتمد عليه) هي رقم الطالب‬
2-: column data type primary key
‫او ممكن اكتبه جنب العمود على طول كدة‬
Id int not null primary key
‫او لو حصل اني نسيت او اجلت الخطوة دي والجدول خالص اتعمل‬
‫هنفذ الطريقة دي‬
3-:alter table table_name Constraint constraint_name
primary key (column1,column2...)
Foreign key:
Cerate table subject
(
Sup_id sub int not null,
Name varchar(30)
S_id int
27 | P a g e
‫‪Constraint sup_s_k foreign key (s_id)reference student‬‬
‫)‪(id‬‬
‫هنا قلتله ثبتلي المفتاح الي اسمه طويل ده كمفتاح اجنبي للجدول ده *‪/‬‬
‫‪*/‬وقلتله حطيلي فيه العمود الي اسمه رقم الطالب‬
‫)‬
‫‪):‬ترتيب تصاعدي وتنازلي ( ‪Order by‬‬
‫)تصاعديا ً ‪ :‬من الكبير للصغير(‪ Asc‬‬
‫(تنازليا ً ‪ :‬من الصغير للكبير) ‪ Desc‬‬
‫‪Form: select from table_name order by‬‬
‫)‪column_name asd(or=desc‬‬
‫‪Ex: : select from employee order by salary asd‬‬
‫‪select from employee order by salary desc‬‬
‫هنا مرة قلتله هاتلي الراتب تصاعديا ً وتنازليا ً (بيستخدم في العواميد الي‬
‫نوعها انتيجر)‬
‫‪):‬عرض اكثر من جدول في وقت واحد( ‪Join‬‬
‫‪Form : select column from table1 join table2on‬‬
‫‪table1.join field= table1.join field‬‬
‫بقله هاتلي العواميد كذا وكذا من جدول واحد واتنين بشرط المفتاح‬
‫االجنبي الي بينهم‬
‫‪28 | P a g e‬‬
‫المورد والمنتج (المورد ممكن يوردلي اكتر من منتج)‪Ex:‬‬

‫عايز اطلع اسم المورد ‪ ،‬واسم المنتج وسعره ‪ ،‬يعني ثالث عواميد‬
‫اعملها ازاي ؟‬

‫‪Inner join:‬‬
‫ده بيجيب العواميد المشتركة بين الجدولين‬
‫‪SELECT column_name FROM table1 INNER JOIN table2‬‬
‫‪ON table1.column_name=table2.column_name‬‬
‫‪Lift outer join:‬‬
‫بيجبلي عواميد الجدول الشمال والي مرتبط بيها من اليمين‬
‫‪SELECT column_name FROM table1 LEFT OUTER JOIN‬‬
‫‪table2 ON table1.column_name=table2.column_name‬‬
‫‪29 | P a g e‬‬
right outer join:
‫عكس الي فوق بيجيب العامود من الجدول اليمين والي مرتبط بيه من‬
‫الجدول الشمال‬
SELECT column_name FROM table1 RIGHT OUTER JOIN
table2 ON table1.column_name=table2.column_name
full outer join:
‫بيجيب العواميد بتاعت الجدولين يمين وشمال حتى لو مفيش بينهم‬
)‫حاجة مشتركة (رابط‬
SELECT * FROM table1 FULL JOIN table2 ON
table1.column_name=table2.column_name
: ‫مقاطع ينصح بها‬
https://www.youtube.com/watch?v=bEzx4jNu4wM

30 | P a g e

You might also like