You are on page 1of 15

‫‪23/09/1442‬‬

‫‪Advanced Database Systems-IT319‬‬


‫قواعـد البيانات المتقدمة‬

‫االستعالمات ‪Views‬‬
‫‪Department : Software Engineering – SE : 5‬‬
‫(‪Amal Saad )MSc of Computer Science )Information System)- UM‬‬
‫الخريف ‪2021-2020‬‬

‫االستعالمات ‪Views‬‬
‫• قبل التعرف على االستعالمات يجب علينا اوالً ان نتعرف على جملة )‪.)SELECT‬‬
‫• جملة (‪:)SELECT‬هي عبارة عن جملة او تعبير يستخدم في استدعاء السجالت من‬
‫الجداول‪.‬‬

‫‪ ‬الصيغة العامة لها هي‪-:‬‬


‫)‪SELECT (expression) FROM (tables name‬‬
‫‪ ‬تعريف االستعالم‪:‬‬
‫‪ ‬وهو عبارة عن جملة ‪ SELECT‬مخزنة في قاعدة البيانات يمكن استدعائها‬
‫في أي وقت وهي مرتبطة بالجداول التي تستخرج منها بياناتها فاذا ما قمنا‬
‫بحذف هذه الجداول اصبحت هذه االستعالمات ال معنى لها‪.‬‬

‫‪1‬‬
‫‪23/09/1442‬‬

‫قم بتنفيذ االستعالمات اآلتيــة‪-:‬‬


‫‪ -1‬عرض جميع السجالت داخل الجدول ‪.Course‬‬
‫‪ -2‬عرض الثالثة االعمدة االولى في الجدول ‪.Student‬‬

‫‪ ‬االجــــابة‪-:‬‬

‫‪ -1‬االستعالم االول‪:‬‬
‫‪Use StudentDB‬‬
‫‪Select * From course‬‬

‫‪ -2‬االستعالم الثاني‪:‬‬
‫‪Use StudentDB‬‬
‫‪Select matricNo , stName, mobileNo From student‬‬

‫التعبيرات الرياضية (‪-:)arithmetic expressions‬‬


‫‪ ‬يمكن اضافة التعبيرات الرياضية الى جملة (‪ )SELECT‬ولكن اثناء التنفيذ‬
‫يجب مراعاة األولويات في التنفيذ وهي كما هو متعارف عليها تكون‬
‫كاألتي ‪-:‬‬
‫االقواس ‪ -‬الضرب ‪ -‬القسمة – الجمع ‪ -‬الطرح‪.‬‬ ‫❖‬
‫‪ ‬كما ان العمود الناتج ال يعتبر مخزن ضمن الجدول االصلي‪.‬‬

‫مثال ‪ :1‬في الجدول السابق ‪ Course‬قم بإنشاء استعالم يقوم بعرض اسم‬
‫المادة ‪ CName‬وكذلك عدد الوحدات مضافا ً اليه العدد (‪.)2‬‬
‫‪Use StudentDB‬‬
‫‪Select cName, Unit+2‬‬
‫‪From Course‬‬

‫‪2‬‬
‫‪23/09/1442‬‬

‫مثال ‪ : 2‬اعد كتابة االستعالم السابق بالشكل التالي وتوقع النتائج ‪-:‬‬

‫‪Use StudentDB‬‬
‫‪Select cName, 2*Unit+2‬‬
‫‪From Course‬‬

‫مثال ‪: 3‬اعد كتابة االستعالم السابق بالشكل التالي وتوقع النتائج‪-:‬‬

‫‪Use StudentDB‬‬
‫) ‪Select cName, 2*(Unit+2‬‬
‫‪From Course‬‬

‫‪ ‬القيمة الخالية (‪:)Null‬‬


‫إذا كانت القيمة الموجودة في حقل معين تحتوي على القيمة الخالية (‪)Null‬‬
‫‪ ‬فأنه عند استرجاع القيمة عن طريق االستعالم سوف ترجع (‪.)null‬‬
‫‪ ‬وإذا قمنا بإضافة قيمة معينة لحقل وكانت القيمة االصلية له (‪ )null‬فانة‬
‫سوف يرجع القيمة الخالية‪.‬‬

‫‪ ‬ســـؤال‪ :‬كون جدول يحتوي على القيمة الخالية (‪ )Null‬ثم انشاء استعالم‬
‫يرجع تلك القيمة وأضف إليها الرقم (‪)5‬؟‬

‫‪3‬‬
‫‪23/09/1442‬‬

‫‪ ‬معامل التوصيل النصوص‪-:‬‬


‫ويقصد به إمكانية دمج قيمتين وعرضهما في عمود واحد وذلك من خالل المعامل‬
‫(‪.)+‬‬
‫‪ ‬مثال ‪ :4‬عرض اسم الطالب واللقب في حقل واحد؟‬
‫جملة ( ‪ )Select‬في هذه الحالة تكتب بهذه الطريقة‬
‫‪Select stName + l_Name‬‬
‫‪From student‬‬
‫‪ ‬الثوابت النصية (‪-:)literals‬‬
‫وهي عبارة عن نص يتم عرضة في كل صف من الصفوف القادمة من جملة‬
‫(‪.)Select‬‬
‫‪ ‬في المثال السابق اكتب جملة (‪ )Select‬بالشكل التالي‪:‬‬
‫‪Select ‘ The student name is:'+ stName+‘ - The last‬‬
‫‪name is: '+L_Name‬‬
‫‪From student‬‬

‫جملة ‪WHERE‬‬

‫‪ ‬في الجمل السابقة كان يتم استرجاع البيانات بطريقة مباشرة وبسيطة‪،‬‬
‫ولكن ماذا لو كان هناك شرط معين السترجاع البيانات !!!‬

‫‪ ‬في هذه الحالة نستخدم جملة (‪ )Where‬والتي تكتب بعد السطر الخاص‬
‫بـ (‪ )From‬حيث يكتب الشرط المطلوب ‪.‬‬
‫‪ -‬الصيغة العامة لها هي‪-:‬‬
‫)‪SELECT (expression) FROM (table name) WHERE (condition‬‬

‫‪ ‬مثال ‪ :5‬في الجدول السابق ‪ student‬قم باسترجاع أسم الطالب عندما يكون‬
‫‪st_ID=70‬؟‬

‫‪4‬‬
‫‪23/09/1442‬‬

‫‪Select stName,BOD,stAdress‬‬
‫‪From student‬‬
‫‪Where st_ID=70‬‬

‫مالحظة ‪-:‬‬
‫‪ ‬يمكن استخدام النصوص ايضا ً كشرط للمقارنة مع مالحظة انه اليوجد‬
‫مشكلة اذا كانت الحروف كبيرة وتم كتابتها في الشرط بصورة صغيرة‬
‫على ان تكتب بين عالمتي اقتباس ‘ ‘‪.‬‬

‫‪ ‬قم بكتابة المثال السابق مع استخدام النصوص في الشرط‪.‬‬


‫‪Select stName + l_Name ,BOD,stAdress‬‬
‫‪From student‬‬
‫’‪Where gender= ‘f‬‬

‫الشروط ومعامالت المقارنة‬


‫‪comparison operators‬‬
‫‪ ‬الشروط ومعامالت المقارنة ‪comparison operators‬‬
‫◦ معامل > أكبر من‬
‫◦ معامل => أكبر من او يساوي‬
‫◦ معامل < أصغر من‬
‫◦ معامل =< أصغر من او يساوي‬
‫◦ معامل = يساوي‬
‫◦ معامل >< ال يساوي‬
‫‪ ‬سؤال ‪ :‬قم بتنفيذ المعامالت السابقة على المثال السابق ؟‬

‫‪5‬‬
‫‪23/09/1442‬‬

‫‪Use studentDB‬‬
‫* ‪Select‬‬
‫‪From cTaken‬‬
‫‪Where grade > 65‬‬

‫‪ -‬شروط ومعامالت المقارنة الخاصة‪-:‬‬


‫‪ .1‬المعامل ‪: Between - and‬‬
‫وهو يستخدم السترجاع البيانات التي الموجودة بين قيمتين مع مالحظة ان‬
‫القيمة الصغرى تاتي مباشرتا ً بعد (‪ )between‬والكبرى بعد (‪.)and‬‬

‫مثال ‪ :6‬في الجدول السابق قم باسترجاع رقم القيد ‪ matricNo‬و وتاريخ ‪ date‬لدرجات‬ ‫‪‬‬
‫المحصورة بين ‪ 75‬و ‪84‬‬
‫‪Select matricNo,date‬‬
‫‪From cTaken‬‬
‫‪Where grade Between 75 And 84‬‬

‫‪ .2‬المعامل ‪-: IN‬‬


‫وفيه يتم مقارنة قيمة معينة بحيث تكون من ضمن مجموعة قيم محددة اما‬ ‫‪‬‬
‫ال وهي تختلف عن المعامل السابق والذي تكون فيه القيم محصورة بين‬
‫مدى محدد ‪ ،‬كما ان الترتيب غير‪ ،‬ال يوجد فيه مشكلة‪.‬‬

‫‪ ‬مثال ‪ :7‬في جدول ‪ Course‬قم باسترجاع أسماء المواد التي بها عدد‬
‫ساعات العطاء أحدى القيم التالية (‪)2، 4 ، 6‬‬

‫‪Select Cname‬‬
‫‪From course‬‬
‫)‪Where CreditHour in (2,4,6‬‬

‫‪6‬‬
‫‪23/09/1442‬‬

‫‪ .3‬المعامل ‪: like‬‬
‫يستخدم هذا المعامل في البحث عن أجزاء من النصوص وتستخدم‬
‫معه المعامالت التالية‪-:‬‬
‫‪ .1‬المعامل (‪ :)%‬ويتم التعويض عنه بأي حرف او مجموعة‬
‫حروف او الشيء‬
‫‪ .2‬المعامل ’_ ‘ ‪ :‬ويتم التعويض عنه بحرف واحد فقط‬
‫‪ .3‬المعامل ] [ ‪ :‬وهو يعبر عن أي مدى من الحروف او‬
‫مجموعة حروف محددة‪.‬‬
‫‪ .4‬المعامل ]^ [‪ :‬وهو يعبر عن مدى حروف او مجموعة‬
‫حروف غير موجودة‬

‫‪ ‬مثال ‪ :8‬من الجدول ‪ Course‬قم باسترجاع جميع البيانات على المواد‬


‫التي تدرس بناءا ً على‪-:‬‬

‫‪ ‬عندما اسم المادة يبدأ (‪:)j‬‬


‫‪SELECT‬‬ ‫*‬ ‫'‪FROM Course where cName like 'j%‬‬

‫‪ ‬عندما اسم المادة يتميز بوجود الحرفين (‪:)pr‬‬


‫‪SELECT‬‬ ‫*‬ ‫'‪FROM Course where cName like '% pr %‬‬

‫‪ ‬عندما يكون اسم المادة على األقل حرفين والحرف الثاني (‪:)T‬‬
‫‪SELECT * FROM‬‬ ‫'‪Course where cName like '_T%‬‬

‫‪7‬‬
‫‪23/09/1442‬‬

‫‪ ‬اول حرف في االسم البد وان يكون احد الحروف من (‪ )a‬الى (‪ )e‬وبعد‬
‫ذلك أي شيء‪.‬‬

‫‘‪SELECT * FROM Course where cName like '[a-e]%‬‬

‫‪ ‬عكس السابقة‪:‬‬
‫'‪SELECT * FROM Course where cName like '[^a-e]%‬‬

‫‪ ‬اول حرف من االسم البد وان يكون (‪ )b,c,a‬وبعد ذلك أي شيء‬


‫'‪SELECT * FROM Course where cName like '[cba]%‬‬

‫‪ .4‬المعامل ‪:is Null‬‬


‫‪ ‬ويقصد به البحث عن القيم الخالية حيث ان (‪ )null‬تعتبر قيمة غير معرفة‬
‫أي انه اذا استخدمت مع المعامل (=) فان الناتج ال يمثل شيء ابدا ً‪.‬‬

‫‪ ‬مثال ‪ :9‬في الجدول ‪ cTaken‬قم باسترجاع رقم القيد ورقم المادة للمواد‬
‫التي لم ترصد لطالب؟‬

‫‪Select matricNo,courseID From cTaken‬‬


‫‪Where grade is Null‬‬

‫‪ ‬قم بتجربة المعامل (=) بدل من (‪ )is‬وتوقع النتائج ؟‬

‫‪8‬‬
‫‪23/09/1442‬‬

‫‪ -‬المعامالت المنطقية ‪-:logical operators‬‬


‫وهناك ثالث أنواع من المعامالت المنطقية وهي (‪.)and-or-not‬‬
‫‪ -1‬المعامل (‪:)and‬‬
‫‪ ‬وهو يستخدم عندما يكون هناك مجموعة من الشروط والتي يجب ان تحقق جميعها‬
‫لكي يتم استرجاع البيانات المطلوبة‪.‬‬
‫‪1‬‬ ‫‪2‬‬

‫‪ ‬مثال ‪ :10‬في الجدول ‪ Course‬قم باسترجاع اسم المواد وذلك عندما تكون عدد الساعات أكثر من‬
‫‪ 4‬وعدد الوحدات يساوي ‪.4‬‬
‫‪Use zStudent‬‬
‫‪Select courseID,cName From Course‬‬
‫‪Where CreditHour >4 and Unit =4‬‬

‫‪ -2‬المعامل (‪:)or‬‬
‫‪ ‬وهو يستخدم عندما يكون هناك مجموعة من الشروط والتي يجب ان يتحقق‬
‫على االقل شرط واحد منها لكي يتم استرجاع البيانات المطلوبة‪.‬‬

‫‪1‬‬ ‫‪2‬‬

‫‪ ‬مثال‪ :11‬في الجدول ‪ Course‬قم باسترجاع اسم المواد وذلك عندما تكون‬
‫عدد الساعات أكثر من ‪ 4‬أوعدد الوحدات يساوي ‪.4‬‬
‫‪Use StudentDB‬‬
‫‪Select courseID,cName From Course‬‬
‫‪Where CreditHour >4 Or Unit =4‬‬

‫‪9‬‬
‫‪23/09/1442‬‬

‫‪ -3‬المعامل (‪:)not‬‬
‫‪ ‬وهو يستخدم عندما يكون هناك حاجة إلي نفي شرط معين لكي يتم استرجاع‬
‫البيانات المطلوبة‪.‬‬

‫‪ ‬مثال ‪ :12‬في الجدول السابق ‪ Course‬قم باسترجاع اسم المادة و رمزها وذلك‬
‫عندما تكون عدد الوحدات أي قيمة عدا القيم التالية (‪)2،5،3‬‬

‫‪Use StudentDB‬‬
‫‪Select courseID,cName From Course‬‬
‫)‪Where Unit not in (2,5,3‬‬

‫‪ ‬الترتيب (‪:ASC |DESC -- )Order By‬‬

‫‪ ‬ويقصد بها أن يتم ترتيب البيانات التي يتم استدعها بنا ًءا على أحد الحقول‪.‬‬

‫‪ ‬مثال ‪ :13‬في الجدول السابق قم باسترجاع اسماء الطلبة مرتبة ابجديا ً من‬
‫‪.A to Z‬‬

‫‪Use StudentDB‬‬
‫‪Select * From Student Order by stName‬‬ ‫)‪-- > ( ASC‬‬

‫‪ ‬في هذا المثال نالحظ ان الترتيب يكون تصاعدي ولكن إذا اردنا أن يكون‬
‫الترتيب بصورة تنازلية فنكتب جملة (‪ ) desc‬بعد اسم الحقل مباشرة‪.‬‬
‫‪Order by stName desc‬‬

‫‪10‬‬
‫‪23/09/1442‬‬

‫األرتباط (‪: )join‬‬


‫‪ ‬ويعرف على أنه استدعاء بيانات من أكثر من جدول بحيث تكون تلك البيانات ذات معنى‪.‬‬
‫‪ ‬أنواع األرتباط ‪ :‬توجد هناك العديد من أنواع األرتباط نذكر منها‪-:‬‬

‫‪ .1‬النوع (‪ :)equijoin‬وهذا هو النوع األساسي لالرتباط والذي يستخدم في حالة وجود‬


‫عالقة بين الجداول والتي نرغب في استرجاع البيانات منها‪.‬‬

‫‪ ‬مثال ‪ :14‬قم باسترجاع اسم الطالب والمواد التي تم تنزيلها من الجداول ‪ Student‬و ‪ cTaken‬و‬
‫‪ Course‬؟‬
‫‪Use StudentDB‬‬
‫‪Select Student.matricNo,stName,cName‬‬
‫‪From Student,Course,cTaken‬‬
‫‪Where student.matricNo = cTaken.matricNo‬‬
‫‪And Course.CourseId = cTaken.CourseID‬‬

‫‪ .2‬النوع (‪:)inner join‬‬


‫وهو نوع اخر من (‪ )equijoin‬بمعنى ان تطبيق هذا النوع سوف ينتج عنه نفس‬
‫النتائج السابقة في النوع االول ‪.‬‬

‫‪ ‬أعرض جميع المواد والدرجات التي رصدت لطلبة بهذه المواد ؟‬

‫‪Use StudentDB‬‬
‫‪Select matricNo,cName,grade‬‬
‫‪From Course inner join cTaken‬‬
‫‪On Course.CourseID= cTaken.CourseID‬‬

‫‪ ‬أعرض جميع الدرجات التي رصدت لطلبة بمادة ‪ HTML‬؟‬

‫‪11‬‬
‫‪23/09/1442‬‬

‫‪ .3‬النوع (‪:)cross join‬‬


‫ويقصد به عملية الضرب الكارتيزي بمعنى انه سوف يكرر كل السجالت في‬
‫الجدول االول مع السجالت في الجدول الثاني‪.‬‬

‫مثال ‪ : 15‬أعرض جميع المواد والدرجات التي رصدت لطلبة بهذه المواد ؟‬

‫‪Use StudentDB‬‬
‫‪Select matricNo,cName,grade‬‬
‫‪From Course cross join cTaken‬‬

‫‪ .5‬النوع (‪-:)except‬‬
‫ويقصد االستثناء أي انه لو كان لدينا مدى معين من الحقول ونريد ان نستثني جزئية‬
‫معينة من هذا المدى فاننا نستخدم هذا النوع ( أي البيانات التي تنتمي للجملة االولى‬
‫وبشرط ان التنتمي الى الثانية)‪.‬‬
‫‪ ‬مثال ‪ :16‬قم بعرض اسماء الطلبة ودرجاتهم واستني من ذالك الطلبة الذين‬
‫تحصلوا على درجات بين ‪ 50‬و ‪( 54‬مقبول)؟‬

‫‪Use StudentDB‬‬
‫‪Select student.matricNo,stName,courseID,grade‬‬
‫‪From student,cTaken‬‬
‫‪Where grade between 0 and 100‬‬
‫‪EXCEPT‬‬
‫‪Select student.matricNo,stName,courseID,grade‬‬
‫‪From student,cTaken‬‬
‫‪Where grade between 50 and 54‬‬

‫‪12‬‬
‫‪23/09/1442‬‬

‫النوع (‪:)intersect‬‬ ‫‪.6‬‬

‫وهو عكس النوع السابق بحيث يقوم باسترجاع البيانات المطلوبة في المدى المحدد‬ ‫‪‬‬

‫االول والمدى المحدد الثاني( اى بمعنى استرجاع البيانات التي تنتمي الى الجملة‬
‫االولى والجملة الثانية)‪.‬‬
‫مثال ‪ : 17‬نفذ المثال السابق مع وضع (‪ )intersect‬بدالً من (‪ )except‬وتوقع النتائج‪.‬‬ ‫‪‬‬

‫‪ ‬مثال ‪ : 18‬قم بعرض اسماء الطلبة ودرجاتهم الذين تحصلوا على على درجات بين‬
‫‪ 50‬و ‪( 54‬مقبول)؟‬
‫‪Use StudentDB‬‬
‫‪Select student.matricNo,stName,courseID,grade‬‬
‫‪From student,cTaken‬‬
‫‪Where grade between 0 and 100‬‬
‫‪INTERSECT‬‬
‫‪Select student.matricNo,stName,courseID,grade‬‬
‫‪From student,cTaken‬‬
‫‪Where grade between 50 and 54‬‬

‫إنشاء إستعالم ‪Create View‬‬

‫األمر‬ ‫‪ ‬كيف يتم انشاء االستعالم ‪ :‬يتم انشاء االستعالم وذلك باستخدام‬
‫(‪.)CreateView‬‬

‫‪Use StudentDB‬‬
‫‪GO‬‬
‫‪Create View view_student‬‬
‫‪AS‬‬
‫‪Select * From student‬‬

‫‪ ‬قم بكتابة عدد من االستعالمات وتخزينها بنا ًءا على ما تم دراسته سابقا ً‪.‬‬

‫‪13‬‬
‫‪23/09/1442‬‬

‫تعديل االستعالم ‪:Update View‬‬


‫‪ ‬لتعديل استعالم (‪ )View‬تم تخزينه فانة يتم استخدام االمر (‪.)Alter‬‬
‫‪ ‬مثال ‪ :18‬قم بتعديل االستعالم السابق بحيث يتم العرض طلبة قسم المواقع‬
‫‪.WD‬‬
‫‪Use StudentDB‬‬
‫‪GO‬‬
‫‪alter view view_student‬‬
‫‪AS‬‬
‫‪Select stName,L_Name,stAdress‬‬
‫‪From student‬‬
‫’‪Where Dept_ID= ‘WD‬‬
‫‪ ‬لحذف االستعالم نستخدم االمر (‪)Drop‬‬

‫‪drop view view_student‬‬

‫تمارين‪:‬‬
‫‪ ‬استخدم قاعدة البيانات ‪ Northwid‬إليجاد التالي ‪:‬‬
‫من الجدول ‪ Customer‬قم باسترجاع اسم الشركة واسم المندوب و رقم الهاتف‬ ‫‪.1‬‬
‫وذلك عندما يكون أسم المنتج يبدأ بالحرفين ’‪ ‘CO‬؟‬
‫في الجدول السابق قم باسترجاع اسم المنتج وسعر الوحدة و الوصف الخاص بالمنتج‬ ‫‪.2‬‬
‫وذلك عندما تكون الكمية اكبر من ‪ 100‬وسعر الوحدة يساوي ‪.8.50‬‬
‫في الجدول السابق قم باسترجاع اسم المنتج وسعر الوحدة و الوصف الخاص بالمنتج‬ ‫‪.3‬‬
‫وذلك عندما تكون الكمية أي قيمة عدا القيم التالية (‪)10،200،1000‬‬
‫في الجدول السابق قم باسترجاع اسم المنتج وسعر الوحدة و الوصف الخاص بالمنتج‬ ‫‪.4‬‬
‫بحيث تكون البيانات مرتبه بنا ًءا على اسم المنتج‪.‬‬
‫قم باسترجاع اسم الزبون والطلب الخاص به من الجدولين ‪ customers‬و‬ ‫‪.5‬‬
‫‪C_Order‬؟‬
‫قم بعرض اسماء الزبائن والطلبات التابعة لهم من جدول ‪ customers‬و ‪C_order‬‬ ‫‪.6‬‬
‫وذلك باستخدام هذا النوع؟‬

‫‪14‬‬
23/09/1442

Questions?

29

15

You might also like