بسم الله الرحمن الرحيم اليوم نكمل في 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 و
بنستخدمها في انه نضيف tubules او روز جديدة على ال
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 هيصير هذا بدل تسعة عاش كام هيصيرعشرين لإنه
حيصير كمان واحد و بدل تلاتة فاصلة تمانية حيصير
تلاتة 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 two عشرين 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 لازم يعرضلي كام روح اتنين
كم رو عرض؟ ليش؟ لأنه ماعملناش كمّت في ال user
الأول عملنا insert و ال user الأول بيشوف اللي هو
عمله بس مافيش ولا أي user تاني بيشوف اللي هو عمله
ولا إذا عمل كمّت هنرجع ال user الأول نحكيله كمّت
إيش كتبلي كمّت كمّت تملأنه لما قاعد أعمل select
star from std1 أعطاني 2 rows عرفنا إيش هي الكمية و
إيش فايدتها كمية هاي لو احنا عملنا create table
بتتم automatic لو احنا سكرنا البرنامج من ال X هاي
برضه بيعمل برنامج auto كمية بشكل 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
بدي ايه انتجر ومصر انه يكون انتجر اش هعمل اتنين
فاصلة صفر اتنين يعني خنتين يعني معايا العمر يكون
لعين تسعة وتسعين مش هذا اقصى حد في الخنتين تسعة
وتسعين والكثر ماله صفر مافيش كسوء ال GBA برضه كمان
number بدي
اعمله مثلا واحد فاصلة واحد1.1 خانة للصحيحة وخانة
للكسور خلصنا من شكل ال table كامل بدي أطلع بدي
primary key مين ال primary key عندى حاجة يكتب عنده
primary key مش هتختصروها بكيه هتكتبوا primary key
بالكامل ال login مابديش طالبين لما يدخلوا على ال
portal بنفس ال email أو بنفس ال user مابدأجي أعمل
على ال login إيش دي أسوي
تمام؟ طيب إيش كمان بدنا؟ في إيش تاني بالزمن؟ النام
ممكن أنا أدخل طالب مالهوش اسم؟ بالداج يعمل؟ not
enough الاج و ال 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 و في نفس الوقت
كمان عمره 18and زي البرمجة مش خدتوا برمجة واحد
برمجة اتنين لما نعمل في ال 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 intoas 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 از 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 كم سطر كم روفي
اتنين طالبين واحد رقمه 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 بكتفي بهذا القدر نكمل المرة اللي جاي ان شاء
الله