Practical
Practical
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
)
اوال بعرف قاعدة البيانات بجمل اساسية في البرنامج
بقوله يعملي قاعدة بيانات وبعدين بسميها
بعدين هعمل الجداوال عن طريق الجملة بتاعت البرنامج وبعدين اسميه وهدخل
االعمدة الي بتمثلي الخواص زي االسم والعمر كل عمود همثلي حاجة فيهم على سبيل
المثال
3|Page
عرفت االسم بنوع var charالنه بيوفرلي مساحة فلو الشخص دخل اسمه بمحمد
هيحجزلي اربع اماكن بس ويسيب الباقي عكس التشار الي هتخلي الثالثين كلها
محجوزة
):صيغة الحذف( 2- Drop form
DROP TABLE table_name
EX: drope table student
DROP DATABASE database_name
EX:DROP DATABASE school
اللي عملناه هنا هو اننا حذفنا الجدول بعدين حذفنا قاعدة البيانات معاها واللي
الدروب بيعمله عموما هو محو الشيء تماما سواء كان قاعدة او جدول
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
ودية طريقة كتابته في الكود( .مشروح اكتر في نهاية الملخص عند العالقات)
Date:-
قولتله خليلي تاني عمود االعياد ميالد الموظفيين واديته نوع date
):المسؤولة عن بالبيانات(DML
)ادخال البيانات( INSERT INTO
)لتعديل على البيانات( UPDATE
)حذف البيانات المنتقاة( DELETE
7|Page
)لعرض بيانات مختارة( SELECT
ودول كلهم بيتعاملو مع الجدول بس
):مسؤول عن ادخال البيانات( - Insert into form
INSERT INTO table_name VALUES (value1, value2,
)value3,...
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%
*/كدة هيجبلي اسماء كل الطالب الي بيبتدوا بحرف ده*/
نيجي هنا ونسال سؤال مهم ايه الفرق بين الترانكيت والديليت مهو ممكن االتنين يفضو الجدول ؟
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
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لرامي
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فهيجبلي بيانات سامي الي رقمه
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بعديها ،وهيطلع لي اربع رواتب
17 | P a g e
هنا هيجمع العمود الرواتب كله عشان اشوف كشركة انا بدفع شهريا ً قد
= 6000ايه لموظفيني والناتج هيطلع عندي
هنا برضو ممكن استخدم ديستينكت لو عايزه يجمع لي الرواتب الي *
مش متكررة برضو بنفس الطريقة الي فوق
4-select avg form:
select avg (column) from table_name
select avg (salary) from employee
6000÷3هيطلعلي متوسط المرتبات الي عندي الي هو
= 2000هيبقى الناتج
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
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
عايز اطلع اسم المورد ،واسم المنتج وسعره ،يعني ثالث عواميد
اعملها ازاي ؟
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