بسم الله الرحمن الرحيم اليوم نكمل في chapter 3 ال
database relational model المرات السابقة شرحنا
جملة أو الـ command الـ create table بشكل تفصيلي
اتكلمنا عن كل الـ constraints اللي ممكن نستخدمها
فيه زي الـ primary key و الـ foreign key الـ not null
الـ unique و اتكلمنا كمان عن الـ check كيف ممكن
نستخدمها في داخل الـ create table command أو ممكن
نطلعها خارج و نعمل create domain ننشأ type جديد
زي ما أنشأنا type للـ country في المثال اللي عملناه
للـ country أنه أنشأنا type للـ country و حددنا فيه
أسماء الدول اللي ممكن نستخدمها وشرحنا كمان في نهاية
المحاضرة الماضية جزء من الـ commands الـ DML الـ data
manipulation language اتكلمنا عن الـ insert و
بنستخدمها في أنه نضيف tuples أو rows جديدة على الـ
table وشفنا كيف أن الـ insert into students بنحدد
فيها أسماء الـ columns اللي بندخل فيها values قيم
يكون القيم المرتبة الـ values بنفس ترتيب الـ columns
اللي حطيناها في جملة insert إلا إذا بدأ أدخل كل الـ
columns اللي في الـ table ممكن أستغنى عن أسماء الـ
columns و أحط القيم بنفس ترتيب الجدول في جملة
create table الكلام هذا حكيناه صحيح؟ حكينا كمان أن
جملة الـ insert هي عشان تكون ناجحة و تطبقها الـ DBMS
لازم تراعي الـ constraints اللي موجودة في الجدول
يعني لو في عندي primary key على رقم الطالب و أنا
في جملة الـ insert الـ value بتاعة الـ SID كانت مكررة
موجودة مسبقا الـ DBMS هيرفض الـ insert يعملها إيش
reject بعدها
اتكلمنا على الـ delete الـ delete حكيناسهل جدا بس
مجرد أن نعمل delete from بنحدد اسم الـ table و بنحط
where clause عشان نحط فيها شرط حكي أن لو ماحطناش
الـ where clause و انسيناها هتحذف كل الـ rows اللي
موجودة في الـ table يعني هتحذف الـ instance كاملة و
هيضل الـ table schema تابِل سكيمة ماتنحذفش وهذا
الكلام عكس اللي بيصير في الـ drop الـ drop هتحذف الـ
schema معاها الـ instance الـ drop جزء من الـ DDL
commands بينما الـ delete جزء من الـ data
manipulation language DML و أعطينا مثله delete from
students where الاسم بيساوي Smith وشوفنا بأنه في
طالبين اسمهم Smith معناته two rows حيصيرلهم delete
بينما لو عملنا الـ where كانت الـ S SID اعتمدنا على
الرقم وبأنه الرقم unique لإنه primary key حددنا
الرقم هيحذف كام رو رو واحد اللي هيكون الرقم تبعه
حسب الشرط أو الـ condition اللي احنا مدخلينه الـ
update بتلزمني أن أنا بتغير قيمة أو value of row
موجود أصلا الـ delete بأخذ في الـ row كله الـ insert
بدخل الـ row جديد بشكل كامل لكن أحيانا بلزمني أغير
field معين أنا عند طالب موجود من أول بدنا نغير
رقمه أو بدنا نغير الـ login name زاد معدل أو نقص
معدل وبتغير المعدل تبعه هذه عملية التغيير لـ value
موجودة أو value كانت null و أضيفها هذه العملية
نسميها update update للـ tuples أو للـ records شكل
الـ command أن update و أحط اسم الـ table students
set update اسم الـ table set في الـ set بحط للـ
fields أو الـ columns اللي بده أعمل عليهم تغيير في
المثال اللي عندي بده أعمل الـ S.H الـ S من وين اجت
الـ S الـ الياس تبع الـ student اللي أنا كتبته S.H
بيساوي كام الـ S.H زائد واحد يعني قيمته السابقة
بتضيف عليها واحد يعني اللي كان عمره 18 كم هيصير 19
و اللي كان عمره 19 هيصير 20 طيب عملنا فاصلة S.GPA
بيساوي كام الـ GPA ناقص نص يعني نفس المعدل السابق
بس نزل إيش نص هل عملنا update لكل الـ students لأ
حطينا where close عشان نحدد شرط حكي أن لازم يكون
الـ S SID number تبع الطالب بيساوي كام تلاتة و
خمسين ألف ستمية تمانية تمانية فهتيجي الـ database
تطلع الشرط ده بنطبق على مين بنطبق على Smith اللي في
الـ road 10 صحيح فهنجي عليه ع الـ age بدل 18 هتصير
كام 19 و المعدل 3.2 ناقص نص كام بيصير 2.7 هيصير
شكل الجدول زي الشكل الجدول تحت اتغير عمره 19
ومعدله 2.7 لو احنا ماحطيناش جملة الـ where هاي كل
طالب من الطلاب هيزيد عمره سنة هينقص معدله نص لو
أنا حاطط الـ where هادي where s dot 2 بيساوي smith
هيغير اتنين لأن في اتنين بنطبق عليهم الشرط two
rows هيصير هذا بدل تسعة عاشر كام هيصير 20 لإنه
حيصير كمان واحد و بدل تلاتة فاصلة تمانية حيصير
تلاتة point تلاتة صحيح لأن كيف نحل المشكلة هذه
مشكلة أن two tables الاتنين بقشروا على بعض في نفس
اللحظة بـ foreign key بنعمل suspension لـ integrity
constraints من خلال كمّات set constraint all يعني
كل الـ constraints كلها primary key foreign key
whatever كله بدعمله عملية suspension إيقاف و أحطها
deferred deferred يعني بس يفحص لما أجي أعمل commit
في نهاية الـ transaction بس في نهاية الـ transaction
هيك هيسمح لي أن أدخل مجموعة من الـ rows و أكون مجهز
مجموعة من الطلاب و مجموعة من المدرسين و بعدين يفحص
الـ integrity constraints بس أخلص برجع الحالة الوضع
الطبيعي بكتب له set constraints all immediate برجع
الوضع الطبيعي اللي هو مع كل insert و مع كل delete
و مع كل update تفحص الـ DBMS الـ constraints مباشرة
ممكن بدل ما أستخدم all أحدد constraint معين all
بتوقف كل الـ constraints اللي في الـ database كلها
لكن أنا ممكن فقط أعمل suspension بس للـ foreign key
تبع الـ teacher ID و تبع الـ student ID فبكتب
أسماءهم set constraint واسم الـ constraint
different ولما أخلص set constraint اسم الـ
constraint immediate الاسم هاد من وين بنجيبه تذكر
لما عملنا create table حكينا بينفع أن نيجي في
الآخر و نكتب constraint واسم و بعدين الـ primary
key أو foreign key متذكرينها؟ شكل الجملة كان بهذا
الشكل
هي كان بهذا الشكل عملنا الـ table و كتبنا
constraint students key primary key فانا هذا صار
اسم الـ constraint فبجعل اسم هذا بحكي set
constraint students key دي فرض لما بخلص برجع بعمله
إيش immediately أو إذا أنا مش عارف الأسماء و بدي
أوقف كل الـ constraints مرة واحدة بعمل all
إذن كمان مرة set constraint واسم الـ constraint أو
all و بعملها default أو immediate بفحص بعد كل DML
و default بعد نهاية الـ transaction في حالة ثانية
ممكن أستخدم شيء شبيه موجود في Oracle مش في SQL بشكل
عام اللي هي نعمل disable للـ constraint بعدين بعمل
alter table يعني أعدل الـ table واسم الـ table هو
مثلا الـ students فاحكيله بدي أعمل disable بدي أعطل
الـ constraint و بحط اسمه لو كان الـ students key
مثلا أو الـ teacher key ولما أخلص إيش ورد بعمل
alter table اسم الـ table بدل disabled إيش بيصير
إيش عكس disabled enable بعملها enable constraint
اسم الـ constraint طريقتين بيقدوا نفس الغرض أن نعمل
disable للـ constraint أو أن أخل الـ constraint تفحص
في نهاية الـ transaction من خلال الـ deferred
command الـ
commit زي ما حكينا أي تغيير احنا بنعمله بنعمله في
DML commands بشكل مؤقت temporary بيظهر بس لـ same
user session بس لنفس الـ user user الثاني مابتظهرش
عندهم إلا إذا عملنا الـ command بتصير الـ changes
permanent دائمة و الكل بيشوفها الـ DBMS بيفحص الـ
constraints دول بعد كل DML إلا إذا احنا حددنا له
الـ command differed تشوف الكلام هذا مثال عملي عشان
يوضح للذهن هفتح أنا القراك اللي عندي على virtual
machine
هشغّل عندي virtual machine فيها عليها الـ Oracle و
SQL plus المفروض
أنكم تعرفتوا على ايقونة برنامج Oracle في المختبر
مع المعيدة صحيح الآن أنا في عندي user باسم المعيدة
اسم المعيدة عندنا لا وهو user باسمه
الآن دخلنا على الـ database إيش كتبلي connected to
Oracle Database صحيح ده شوف إيش الـ tables اللي
عندي مش عارف أنا إيش في عندي tables بدي أعمل
select star from tab في عندي table إيش اسمه std1
إيش نوعه الـ table مبين؟ طيب الـ table هذا أنا كمان
مش عارف إيش الـ columns اللي فيه بدي أتعرف عليهم
كيف بدي أعمل description لاسم الـ table scd1 بدي
أعمله description أشوف ايش أسماء الـ columns desk
scd1 هيعطيني أن هذا الـ table موجود فيه column اسمه
SID و column اسمه name الـ SID نوعه ايش و الـ name
ايش نوعه variable character عشرين character طيب
بدي أشوف ايش فيه بيانات جوا الـ table select star
from std1 المفروض تعرضلي كل البيانات اللي وين جوا
الـ table اسمه std1 كام row عندي one row بس طالب
ايش رقمه 151 ايش اسمه حمد طيب لو أجيت أنا بدي أدخل
row جديد بدي أعمل insert
انتوا اسم الـ table ايش STD one ايش بده يدخل SID
وايش كمان و name بده
أحكيله هدول بده يدخل فيهم قيم values كم قيمتهم فين
دي طالب جديد رقم 152 واسمه سعيد تمام
إيش كتبلي؟ one row created يعني في عندي سطر واحد
تم إدخاله لو رجعت أعمل select all select star from
std one هيطلعلي كام row؟ المفروض الآن سطر اثنين
152 و 151
لأن على فرض في user ثاني شابك على الـ database هاي
كمان user حتى لو كان بنفس الاسم بس session جديدة
تمام هالـ user الثاني شبك connected to Oracle و
بدنا نيجي نحكيله select star select غلط select
star from scd1 لازم يعرضلي كام رو اثنين
كم رو عرض؟ ليش؟ لأنه ما عملناش commit في الـ user
الأول عملنا insert و الـ user الأول بيشوف اللي هو
عمله بس ما فيش ولا أي user ثاني بيشوف اللي هو عمله
ولا إذا عمل commit هنرجع الـ user الأول نحكيله commit
إيش كتبلي commit commit تملأنه لما قاعد أعمل select
star from std1 أعطاني 2 rows عرفنا ايش هي الـ commit و
ايش فايدتها commit هاي لو احنا عملنا create table
بتتم automatic لو احنا سكرنا البرنامج من الـ X هاي
برضه بيعمل برنامج auto commit بشكل automatic لكن
أثناء الـ session اللي احنا شغالين فيها بيعتبر حاله
أنه فاتح transaction ما بيعملش save و ما بيعملش
commit إلا إذا احنا حاولنا نعمل commit هذه معلومة
مهمة للناس اللي بديها تعمل الـ project لأن في
المفروض معاكم project في الـ lab ولما حيصير مطلوب
أنكم تدخلوا بيانات في الـ project احنا دخلنا بيانات
و مش عارفين و وين راحت مش مبينة مش ظاهرة ليش و
ما فيش commit للـ transaction
نرجع لشرحنا الآن
على فرض عندي table بهذا الشكل سؤال
من أسئلة الامتحانات التقليدية أن أنا بجيب table و
بحكيلكم بدنا ننشئ الـ table هذا في الـ database
فالجواب مباشرة ايش بيكون ايشكم بتعمله create table
هنحجي نكتب نكتب create table
تمام؟ ايش ده سميته؟ فيه مذكور له اسم؟ بختار له أنا
اسم مناسب ايش هذا؟ احنا شايفين الـ students يمكننا
نسميه students ده قصر نسميه std هنفتح ايش؟ قوسين
هبدأ أدخل أسماء ايش؟ الـ columns أول column عنده
ايش؟ اللي بعده جي بي إيه؟
الـ types ملاحظين أنا أنه أرقام هو ما حكاليش ايش في
السؤال مش شارح إذا في السؤال شارح في كلام كتابة
أنه الـ SID عبارة عن number هنعمل زي ما هو كاتب بس
مش كاتب في عندي بس زي ما احنا شايفين instances بدي
أستنتج هستنتج إن هم ايش هدول أرقام يا ما أبدأ أروح
أعملوا integer يا أبدأ أعملوا number و بنفع كمان
أعملوا character للعلم لأن الأرقام في النهاية برضه
characters بس احنا ما بدأنا نعملوا number عملنا
number الـ name character لو عملنا character أو
variable character نفس الشيء variable character تو
بتعمله أربعين حرف ثلاثين حرف حيث أنه يوسع الاسم الـ
login نفس الشيء ثلاثين
حرف على فرض الـ age number
بدي ايه integer و مصر أنه يكون integer ايش هأعمل اثنين
فاصلة صفر اثنين يعني خانتين يعني معايا العمر يكون
لعين تسعة وتسعين مش هذا أقصى حد في الخانتين تسعة
وتسعين و الأكثر ما له صفر ما فيش كسور الـ GBA برضه كمان
number بدي
أعمله مثلًا واحد فاصلة واحد 1.1 خانة للصحيحة وخانة
للكسور خلصنا من شكل الـ table كامل بدي أطلع بدي
primary key مين الـ primary key عندي حاجة يكتب عندها
primary key مش هتختصروها بكيه هتكتبوا primary key
بالكامل الـ login ما بديش طالبين لما يدخلوا على الـ
portal بنفس الـ email أو بنفس الـ user ما بدي أجي أعمل
على الـ login ايش دي أسوي
تمام؟ طيب ايش كمان بدنا؟ في ايش ثاني بالزمن؟ الـ name
ممكن أنا أدخل طالب ما لهوش اسم؟ بالدايج يعمل؟ not
enough الـ age و الـ GPA ممكن ما يكونش داخل لأنه ممكن
يجيني طالب لسه مش جاي بشهادات ميلاده طالب لسه جديد
ما أخذش مواد عشان يكون له معدل هيك أنا عملت الـ table
بس أجبت على أول فرع من السؤال حطينا شكل table و
حكينا بدنا ننشئ هاي الـ relation فهنكتبوا الـ
command هذا مش هحكي إنه بدنا create table المفروض
واحد لحاله يعرف إنه إنشاء الـ relation بده create
table فبعد ما عملنا الكلام هاد هنحجي نحكي إنه بدنا
تكتبوا الـ commands اللازمة لإنه ندخل الطالب Dave
في الجدول و نحط بياناته answer هنحجي نكتب insert
into سمينا احنا الـ CD أو students whatever يا إما
بكتب مباشرة values و بدي ألتزم بنفس الترتيب تبع الـ
create table أو بدي أحط اسم الـ columns اللي أعملها
هنحجي نحط القيم بتاعته خمسة تلاف اسمه Dave و الـ
login اللي له الـ age و الـ GPA بالكامل و نحط
semicolon حاجة في الفرع اللي بعده في السؤال أحكي
أنه بدنا نحذف الـ student اللي اسمه Smith و ترسموني
شكل الجدول بعد عملية الحذف هنحجي نعمل ايش delete
بالحذف delete drop احنا نشيل بس Smith نعمل drop
أروح كل الـ table delete from الشيء اسمه الـ cd الـ
table أعمله aliases عشان أسهل على حالي و أكتب ايش
where clothes عشان أحدد ايش بدي أحذف where الـ S
.SID أنا كنت أحدث الطالب اسمه Smith أنا أعطيتك
معلومة على الاسم ما أعطيش معلومة على رقمك S.2 بسوء
ايش Smith لاحظوا احنا في الـ .. في الـ strings بنحطهم
بين ايه ايش single أو double بنفع في القرار كل
اثنين بنفع الـ double بيعطي قرار نحن بنشوف بنجرب
تمام الـ where الـ S name بتساوي Smith هذا هيعمل ايش
هيروح يحذف مين هيحذف اثنين فلما ترسم شكل الجدول
الجديد يكون اثنين محذوفين مش واحد طيب بعدها بدنا
نطلب في فرع ثاني من السؤال أنه بدنا نعمل تغيير
لمعدل طالب و الطالب هذا رقمه خمسة ثلاثة ستة ستة
ستة نعمل update هنحجي نكتب update
ايش اسم الـ table? STD أو student الاسم اللي أنتو
سميتوه في الـ create update STD نرمز له بـ S 6 ايش
نحكيله 6 مين؟ نغير الـ GPA ايش لازم أكتب؟ S.GPA
نخلي معدله بيساوي 4 ايش هتكتب؟ بيساوي أربع تمام أو
أربع point zero الاثنين هياخدهم مش مشكلة نفسه سواء
كتب من أربع أو أربع point zero لمين where بدنا
نكتب where الـ S.A SID رقم الطالب بيساوي الرقم اللي
احنا طلبناه هو خمسة ثلاثة ستة ستة ستة وين التغيير
هيصير حكينا لكم حط دائرة على المعدل اللي بده يتغير
هيكون جونز هيصير معدله أربع لأن احنا حددنا رقمه
تمام؟
طيب لو كانت الـ where هذه الـ S.SID الرقم هذا وبعدها
or حددنا كمان رقم هي عمل .. مش حذف احنا بنعمل
update هي عدل بس على واحد هي عدل على اثنين الأول
أو الثاني نفرض الثاني كان رقم خمسة ثلاثة ثمانية
ثلاثة اثنين تمام هيجي على الرقمين هدول jones و golden
ويغير معدلهم لـ 4 لو كانت and مش هعدل ولا واحد فيهم
ليش؟ مين في طالب له رقمين؟ ما فيش ولا طالب له رقمين
لو كانت and يعني أنا الشرط تبعي أن الـ SID تكون
قيمتها كذا and كذا ما فيش آه ممكن نعمل الـ S مش الـ
SSID دعنا نشوف شيء ثاني ممكن أعمل الـ S.NAME بيساوي
Smith and
وكمان شرط مش بس اسمه Smith بدي الـ age s.age بيساوي
18 التغيير مش هيصير على اثنين زي ما عملنا في الـ
delete بس على واحد اللي اسمه Smith و في نفس الوقت
كمان عمره 18 and زي البرمجة مش أخذتو برمجة واحد
برمجة اثنين لما نعمل في الـ if and يعني الشرطين
اللي بدهم يكونوا or أي واحد فيهم بظبط هذا نموذج على
كيف ممكن تيجي الأسئلة تاعت اللي هي commands الـ DDL
و الـ DML في الامتحان طبعا ممكن بنفس الأسلوب يكون
multiple choice يعني بدل ما تكتب كل العبارة كتابة
ممكن تكون multiple choice، تكون فيه فروقات في ال ..
في الـ choices حيث يكون شيء منها صح و شيء غلط أستاذ
إذا ما حطينا or إذا ما حطينا إيش؟ الـ or الإثنين،
هيعمل update للإثنين
الآن بدنا نتكلم عن الـ views احنا هيك شرحنا الـ
tables شرحنا شوية data manipulation كيف ممكن نعمل
insert بسيطة أو delete بسيطة أو update بسيطة في الـ
SQL اه بسيطة لأن احنا دخلنا بس insert واحدة لـ user
واحد ممكن نيجي نعمل insert لـ 100 طالب مرة واحدة
كيف ممكن نعملهم في insert into ومش بحط قيم values
insert into as select بعمل select من جدول ثاني
بيكون موجود فيه الأسماء جاهزة ومثلا الأرقام
وبنسخهم وبنسخهم وبحطهم طيب
الـ only views شرحنا احنا سابقا في الشباتر السابقة
وبداية هذا الشبطر أنه لها خدمة في مجال الـ security
وسميناها الـ external schema من فوائدها أنه ممكن
يكون نفس الـ table نفس البيانات لكن users مختلفين
أنهم الـ views مختلفة كل واحد يشوف بيانات معينة
يعني عندي مثلا الـ table الـ employees في أسماءهم
معلوماتهم الـ salary الراتب بدي أنا موظف شؤون
إدارية يشوف معلومات الموظف إيش معه شهادة اسمه
عنوانه رقم جواله لكن ما يتطلع على راتبه و مش شغله لكن
الموظف المالية بدي أشوف الراتب بدي أشوف راتب الموظف
فكيف ممكن أعمل هذا الكلام أروح أعمل two tables و
أظن أنسخ البيانات بينهم بين بعض عشان هذا يشوف الـ
seller و هذا الـ table بدون seller لأ الحل أني بعمل
table واحد و بروح بعمل جوا views فالـ view عبارة عن
table لكن ما بنخزن في instances أسطور لأ احنا بتكون
هي مخزنة في الـ table و بس بنعرضها وبالتالي احنا بس
بنخزن الـ definition تبع الـ view تعريف تبعها بنخزن
في الـ database فقط الـ definition أنه أنا بدي view
تشوف كل الـ columns في الـ table تبع الـ employee ما
عدا الـ salary ما عدا الـ salary فهو ما بيروح بنسخ
البيانات و بخزنهم في الـ view لأ بس بيخزن التعريف
تبعها أن احنا بدنا view اسمها كذا بدون الـ salary
فلما بيجي الموظف اللي حتكون له صلاحية يهدي الـ view
الـ view بتروح و بتعمل select و بتختار البيانات و
بتعرض له إياها المثال
اللي عندي لو أنا عندي students و enrolled طلاب
وجدول تسجيلهم في الـ course وإن احنا عادة الـ name
ساعة الـ students والـ identifiers اللي هم الأرقام
تقريبا الـ students بياخدوا علامات بيه في بعض
الكورسات بدنا نعرضهم لحال بدنا نتعامل معهم بشكل
مستقل أو الطلاب اللي بياخدوا إيه الطلاب المميزين
في عندي مثلا مشرف على الطلاب المميزين بدنا نعطيه
قائمة باسمهم بس بدون ما يطلع على باقي الطلاب في
الجامعة و علاماتهم وإيش ماخدين مواد بدي أعطي
الموظف هذا صلاحية أنه يشوف من جدول الطلاب كل
معلومات ملاقية لمن بس الفئة اللي ماخدها إيه فكيف
أنا انفذ هذا الكلام برضه من خلال الـ views شوف كيف
هنعمله الـ view بننشئها command بسيط اللي هو create
view زي ما عملنا create table create view حاجة
أعمل create view سيبقوا من هذا الصدر حاجة أشرحه
كمان شوية create view بدل create table أعطيناها اسم
young active students بدي أسجل اسم الطلاب النشطين
المعدلاتهم ممنيحة إيش بده أعرض بده أعرض بس اسمه و
علامته من هنا تجيب معلوماتهم as select الـ name of
the grade من جدول الـ students والـ enroll بحيث أنه
رقم الطالب في الـ students هو نفسه في الـ enroll
عشان نشبك الـ primary key مع الـ foreign key ويكون
الـ age مثلا أقل من 21 لو أنا بدي view للطلاب
المميزين الـ excellent students حاجة أحكيله and الـ
GPA أكبر من 3.5 إيش
اللي حيصير هاي الـ select زي الـ select العادية حتجي
تطلع لي الـ name والـ grade العلامة من جدول الـ
students والـ enrolled بالشرط اللي أنا حاطه و تجيب
البيانات اللي طلعت عندي نفرة طلع عندي أربعة rose
و تروح تخزنهم و تعطيهم لمين للـ view هذه حيصير الـ
user اللي له صلاحية على هذه الـ view ممكن بكل شغل
يعمل select star from واسمها young active
students وروح يعرض له مين ردوا الـ أربعة students
دول اللي عمرهم أقل من واحد وعشرين ليش
الـ replace هي موجودة هي لو بدي أعدل لو بدي أعدل
على الـ view احنا الـ view مش مخزن جواها بيانات مخزن
جواها بيانات لأ لو بدي أعدل بدي أضيف مثلا مش بس الـ
name والـ grade بحط كمان الرقم الـ SID كيف أعدل بأجيب
أعمل create or replace بكتب كلمة or replace يعني
إذا موجودة أعملها replace غيرها وإذا مش موجودة
أنشئها create or replace view بخلي نفس الاسم و
بضيف كلمة جديدة name و age و إيش الكلمة الجديدة اللي
حكينا بضيفه رقم الطالب هأعمل فاصلة SID as select الـ
name والـ grade والـ S.SID لازم أحط الـ S ليش؟ لأنه
أنا عندي كم table؟ two tables بدي أحدد من أنه
table بدي أجيب الرقم بدي أجيبه من table الـ
students S SID هيك أنا هأكون هغير الـ view اللي
موجود عندي من أول بس هأضيف عليها كلمة جديدة بفعل
اللي هي مين الـ replace or replace هاي الـ or
replace بس بس تخدمها لما أكون بدي أعدل بديش أعدل و
بدي أنشئ واحدة من جديد create لو جيت أعمل create
وهي موجودة من أول وما حطتش كلمة on replace هيمنعني
أعدل أن هو هيفكر أن أنا بدأ أنشق من جديد هاكي لأ
في واحدة بنفس الاسم young active students لكن لو
حكيت on replace حيكون هو عارف أن أنا فاهم أن في
واحدة موجودة وأنا بدأ أعملها تعديل replace تمام
فهي فعليا الـ create الـ view عبارة عن select
statement واحنا أخذنا الـ select statement أن أنا بس
بدي أسترجع بيانات من الـ table اللي بدي أنشق عليه
الـ view مش الـ view بدي تعرض لي بيانات في table
احنا كيف في الوضع الطبيعي بنعرض بيانات في table
بالـ select صح فنفس الشيء أنا بس جملة select وبضيف
على جملة select السطر اللي فوق create view تعرض
بهذا الشكل نشوف إيش عملي عشان نستوعب الفكرة شوية
على نفس الـ table اللي عملناه للـ CD1 في الـ Oracle
الآن
هي عندي select star from CD1 عندي two rows طبعا
طالبين عفرض تعمل view جديدة بس تشوف الطالب اللي
رقمه 151 هاجي أعمل create view إيش اسمها مثلا
بتسميها S عشان أسهل على حالي أ create view S بدنا
نعطيها إيش الكولوم بدنا نعطيها هيهم الـ SID والـ name
هيك
شايفين مشكلة
مش عارف كيف هكبر الخط
فيه font size font
.. font .. ما فيش font size
ما فيش from size ما فيش مجال من هنا أغير تمام هاي
عندي أنا عندي حطيت creative US SID و name هبدأ
أعمل SID و name هاي بدا أنشئها as select from
اللي هم الـ CD one ما عنديش غير الجدول هذا اللي بدي
أختار منه اللي هو إيش هأختار منه الـ .. الـ std1.sid
والـ std1.name و
بدي أحدد أنه بس بده يشوف where الـ std1.sid
بساوي مية واحد وخمسين في error as select from في
error at line two missing expression create view
as sid name as select from std one
أي إيه الـ view صح وحط على الـ star وحط على الـ
select from المشكلة
هو حطتها في الـ select from السلكت أسماء الـ tables
الـ columns بعدين طيب ماشي هو بده أسماء الـ columns
وبعدين أسماء الـ .. أسماء الـ .. اسم الـ table create
view كمان مرة create view S SID و name as
select S
dot SID فاصلة S dot name
from scd1 where
scd1.scd1
.scd1.scd1.scd1.scd1.scd1.scd1.scd1.scd1.scd1.scd1
.scd1.
هي كمان مرة هي الـ command اللي كتبته create view
إيش سميت الـ view S ده حط فيها رقم و name بدي
اعملها من خلال الـ column الـ SID في الـ table S و ال
name في الـ table S الـ table S له و الـ table CD1
from الـ CD1 الشرط أن يكون رقم الطالب 151 فقط 151
الآن لو عملت أنا select start from tab عشان نشوف
الجداول اللي أنا منشئها صار عند الـ std one وعند
مين الـ S الـ std one ايش نوعه و الـ S ايش نوعها view
لو عملنا select start from std one كم سطر كم row
اتنين طالبين واحد رقمه 151 واحد رقمه 152 لكن لو
عملنا select من الـ view select star from ايش سمينا
الـ view احنا؟ S طلع لي كام طالب بس الطالب رقمه 151
فاهمين ايه ايش فكرة الـ view؟ الـ view عبارة عن
select من table و بنحدد له احنا شروط وممكن مانعرضش
كل الـ columns أنا عندي الـ table بسيط بس 2 columns
لو كان الـ table خمسة columns بدي استثني المعدل
مثلاً بدي أخليه يشوف في الـ view كل معلومات الطالب
مع معدله ف أنا في أسماء الـ columns في الـ view
ما بحطش المعدل واضحة الصورة ايش يعني الـ view الآن
أي تغيير بيصير على الـ table بينعكس على الـ view يعني لو
كانت الـ view هذه أنا حددتها برقم الرقم مش هيتغير
فحضرها الـ view طالب واحد لو كان احنا عاملين الـ
view على الـ edge لما أضيف طلاب جداد الـ edge تبعهم
بتناسب مع الشرط تبع الـ view و الـ view مالها هتكبر
و هتزيد الـ entries اللي فيها أخر
شيء بدي احكيّه في موضوع الـ views اللي هو الـ drop بعد
ما أنشأنا الـ view إذا بدى أعدّل عليها create or
replace إذا بدى أحذفها زي ما في drop table في drop
view command drop view و بحط اسمها بتروح الـ view
بتروح البيانات اللي جواها في drop table بتروح ال
schema تحت الـ table و الـ instances في drop view
بتروح الـ definition الـ schema بيروح الـ instances
بيروحوا؟ لا بيروحوش، يعني ما فيش فيها instances،
احنا حكينا هو ايش بيخزن، حكينا بيخزن بس لـ view
definition، ما بيخزنش instances وبالتالي لما بعمل
drop ل الـ view المعلومات مخزنة في الـ table مش في
الـ view ما بتروحش أسماء الطلاب وأرقامهم ما بتروح
بتضلها في الـ table بس الـ view اللي بتروح لو أنا
الآن على الـ Oracle فتحت وعملت drop view S اللي أنا
عملتها الطالبين هيضلهم موجودين في الـ table تمام
فهي اللي مهم إنكم تنتبهوا هي الكلام هذا مشروع إن ال
table لما نعمله drop كل المعلومات بتروح لكن الـ view
مالها الـ view لو راحت ما بيروحش ايش الـ table
ومحتوياته وكمان نقطة إن لو أنا عملت drop للـ table
العكس الـ view بتظل الـ view بتظل بس بيكون جواها ايش
معلومات لا لإن هو من و منين بيجيب معلوماتها من ال
table وبالتالي إن لو عملت drop للـ table الـ view
هتظل بس هتكون فاضية و بنسميها invalid state يعني
مش فاضية فاضية والجدول اللي بتأشر عليه مش موجود
invalid state الـ view لكن لو رجعنا أنشأنا الجدول و
رجعنا حاطينا فيه بيانات طول تظهر البيانات في ال
view بكتفي بهذا القدر نكمل المرة اللي جاي إن شاء
الله