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

‫‪1‬‬

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

‫فهرس الكتاب‬
‫الموضوع‬

‫م‬

‫الفصل الول‪ :‬أساسيات لغة الستفسارات الهيكلية‬

‫الصفحة‬
‫‪4‬‬

‫‪1-1‬‬

‫•مقدمة‬

‫‪1-2‬‬

‫•لغة الستفسارات الهيكلية ‪SQL‬‬

‫‪10‬‬

‫‪1-3‬‬

‫•استخدام ‪SQL*PLUS‬‬

‫‪13‬‬

‫‪1-4‬‬

‫•جملة ‪SELECT‬‬

‫‪15‬‬

‫‪1-5‬‬

‫•جملة الشرط ‪Where‬‬

‫‪21‬‬

‫‪1-6‬‬

‫•ترتيب النتائج باستخدام ‪order by‬‬

‫‪36‬‬

‫‪1-7‬‬

‫•القيمة ‪ null‬وتأثيراتها‬

‫‪40‬‬

‫‪1-8‬‬

‫•استخدام محرر النصوص في ‪SQL*PLUS‬‬

‫‪42‬‬

‫‪1-9‬‬

‫•السئلة والتمارين‬

‫‪43‬‬

‫‪5‬‬

‫الفصل الثاني‪ :‬تقنيات لغة ‪SQL‬‬

‫‪50‬‬

‫‪2-1‬‬

‫•الربط بين جدولين أو أكثر‬

‫‪53‬‬

‫‪2-2‬‬

‫•استخدام ‪Multi-row functions‬‬

‫‪65‬‬

‫‪2-3‬‬

‫•استخدام ‪single-row functions‬‬

‫‪71‬‬

‫‪2-4‬‬

‫•استخدام ‪group by clause‬‬

‫‪82‬‬

‫‪2-5‬‬

‫•استخدام ‪having clause‬‬

‫‪86‬‬

‫‪2-6‬‬

‫•استخدام و عمل إستعلم فرعي ‪sub query‬‬

‫‪89‬‬

‫‪2-7‬‬

‫•السئلة والتمارين‬

‫‪99‬‬

‫‪3-1‬‬

‫الفصل الثالث‪ :‬معالجة البيانات باستخدام ‪SQL‬‬

‫‪105‬‬

‫مقدمة‬

‫‪108‬‬

‫‪3-2‬‬

‫•إضافة سجلت جديدة للجداول‬

‫‪110‬‬

‫‪3-3‬‬

‫•حذف بيانات موجودة في قاعدة البيانات‬

‫‪113‬‬

‫‪3-4‬‬

‫•تعديل بيانات موجودة في قاعدة البيانات‬

‫‪115‬‬

‫‪3-5‬‬

‫•إنشاء الجداول وإضافة المحددات لها‬

‫‪121‬‬

‫‪3-6‬‬

‫•السئلة‬

‫‪136‬‬

‫‪4-1‬‬

‫الفصل الرابع ‪:‬ورشة عمل‬

‫‪143‬‬

‫التدريب العملي‬

‫‪147‬‬
‫‪2‬‬

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

‫م‬

‫الصفحة‬

‫الفصل الخامس ‪:‬مصمم النماذج‬

‫‪150‬‬

‫‪5-1‬‬

‫مقدمة عن ‪oracle developer‬‬

‫‪154‬‬

‫‪5-2‬‬

‫أدوات البناء في ‪oracle developer‬‬

‫‪155‬‬

‫‪5-3‬‬

‫المكونات الساسية لمنشيء النماذج‬

‫‪159‬‬

‫‪5-4‬‬

‫إنشاء النماذج باستخدام المعالج‬

‫‪165‬‬

‫‪5-5‬‬

‫تنفيذ تطبيق منشيء النماذج‬

‫‪175‬‬

‫‪5-6‬‬

‫خصائص الكائنات الموجودة علي النموذج‬

‫‪180‬‬

‫‪5-7‬‬

‫السئلة‬

‫‪192‬‬

‫‪3‬‬

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

‫الفصل الول‬
‫أساسيات لغة الستفسارات الهيكلية‬

‫‪SQL‬‬

‫‪4‬‬

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

‫الهداف‪:‬‬
‫إعطاء الطالب صورة موض حة عن أ ساسيات ل غة ال ستعلمات الهيكل ية ‪SQL‬وكيف ية‬
‫مة جملة ‪SELECT‬‬
‫مة كتابم‬
‫مج ‪ SQL*PLUS‬وإدخال تعليمات ‪SQL‬وكيفيم‬
‫الدخول إلي برنامم‬
‫واستخدام كل من ‪ WHERE, ORDER BY‬مع جملة ‪SELECT‬‬

‫المحتويات‪:‬‬
‫‪5‬‬

‫مقدمة قواعد البيانات‬
‫‪-1‬مقدمة‬
‫‪-2‬الولوج إلي برنامج ‪SQL*PLUS‬‬
‫‪-3‬إدخال تعليمات ‪SQL‬‬
‫‪-4‬استخدام جملة ‪ ،Select‬تعريف ‪Alias‬‬
‫‪-5‬جملة الشرط ‪Where‬‬
‫‪-6‬ترتيب النتائج باستخدام ‪Order by Clause‬‬
‫‪-7‬مفهوم القيمة ‪Null‬وتأثيراتها‬
‫‪-8‬استخدام محرر النصوص في برنامج ‪SQL*PLUS‬‬

‫‪6‬‬

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

‫ماذا سنتعلم في هذا الفصل‪:‬‬
‫في نهاية هذا الفصل يكون الطالب قد اكتسب المهارات والمعارف التالية‪:‬‬

‫‪)1‬التفرقة بين قواعد البيانات ونظم إدارة قواعد البيانات‬
‫‪)2‬التعرف علي لغة الستعلمات الهيكلية(‪)SQL‬‬
‫‪)3‬التفرقة بين ‪SQL Statement، SQL*Plus‬‬
‫‪)4‬استخدام جملة ‪ ،Select‬تعريف ‪Alias‬‬
‫‪)5‬استخدام جملة الشرط ‪Where‬‬
‫‪)6‬ترتيب النتائج باستخدام ‪Order by‬‬
‫‪)7‬استخدام القيمة ‪ NULL‬في التعبيرات الحسابية‬
‫‪)8‬استخدام محرر النصوص في برنامج ‪SQL*PLUS‬‬

‫‪7‬‬

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

‫مقدمة‬
‫برا مج قوا عد البيانات من أو سع برا مج الحا سب انتشارا ويم كن أن ت ستخدم سواء في‬
‫المجالت التجاريمة أو الصمناعية ومنهما علي سمبيل المثال مجالت النظمم المحاسمبية والماليمة‬
‫ومجال شئون الفراد والمشتريات‪ ،‬وتعتمبر لغمة السمتعلمات الهيكليمة ممن أهمم وأشهمر اللغات‬
‫المستخدمة في برم جة قوا عد البيانات من ح يث إنشاء ملفات قوا عد البيانات واسترجاع البيانات‬
‫من ها بطرق مختل فة ومتعددة تلئم مع ظم احتياجات ال مبرمجين وتتم يز ب سهولة تركيب ها و سهلة‬
‫الفهم للجميع‪.‬‬
‫وتسمتخدم لغمة السمتعلم ممع الكثيمر ممن التطمبيقات حيمث صمممت فمي الصمل لتسمتخدم لغات‬
‫البرمجة الخرى‪ ،‬ولقد استطاعت ‪SQL‬أن تحقق طموحات معظم مطوري أنظمة قواعد البيانات‬
‫حيث أنها لغة قياسية وفعالة في نفس الوقت لبناء ومعالجة قواعد البيانات‪ ،‬ولهذا السبب فإن أي‬
‫ش خص ير يد الدخول عالم قوا عد البيانات أن يتعلم أول ‪ ،SQL‬ويع تبر نظام أورا كل من أف ضل‬
‫نظمم قواعمد البيانات العلئقيمة وهمو يتميمز بإمكانيمة إدارة قواعمد البيانات العلئقيمة وهمو يتميمز‬
‫بإمكانيمة إدارة قواعمد بيانات كمبيرة جدا ممن المعلومات والتمي قمد تصمل حتمى تيرابايمت ممن‬
‫المعلومات وإمكان ية التعا مل مع عدد كبير جدا من الم ستخدمين بش كل متزا من بالضا فة إلي‬
‫ميزات المان والوثوقية العالية جدا‪ ،‬وظهرت عدة إصدارات من ‪Oracle Developer‬‬
‫وأخرها هو ‪ oracle9i‬وهو البيئة التي سنقوم بدراسة لغة الستعلمات الهيكلية من خللها‪.‬‬

‫‪8‬‬

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

‫‪ -1‬قواعد البيانات‬
‫‪ 1-1‬المقصود بقاعدة البيانات‬
‫هي مجموعة متراب طة من البيانات يم كن استخدامها ل ستخراج المعلومات ال تي تريد ها‬
‫أو هي عبارة عن تجمع لكمية كبيرة جدا من البيانات والمعلومات وعرضها بطريقة تسهل من‬
‫الستفادة منها فعلي سبيل المثال فإن دليل الهاتف هو أبسط قاعدة بيانات يمكن أن تتعامل معها‬
‫فيمك نك ت سجيل أ سماء أ صدقائك وأرقام التليفونات الخا صة ب هم ح تى يمك نك في ما ب عد أن تب حث‬
‫عن اسم أحد الصدقاء بإدخال رقم الشراك أو العنوان ……وهكذا‪.‬‬

‫‪ 1-2‬نظم إدارة قواعد البيانات‬
‫نظم إدارة قواعد البيانات ( ‪ )DBMS‬هي مجموعة من البرامج الجاهزة التي تقوم بتنفيذ‬
‫جميع الوظائف والمهام المطلوبة من قاعدة البيانات فعلي سبيل المثال بعد إدخال بيانات العاملين‬
‫إلي قاعدة بيانات شئون العامل ين فإ نك قد تحتاج إلي ترت يب أ سماء العامل ين أبجديا فإن م ثل هذا‬
‫العممل يطلق عليمه إدارة قاعدة البيانات‪ ،‬ويتكون نظام إدارة قواعمد البيانات ممن مجموعمة ممن‬
‫البراممج والملفات التمي تتشابمك ممع بعضهما لحمل مشكلة أو تحويمل نظام يدوي إلي نظام يعممل‬
‫بالحاسمب مثمل تحويمل حسمابات المخازن ممن أنظممة ودفاتمر يوميمة إلي نظام وملفات تسمتخدم‬
‫بواسطة الحاسب اللي‪.‬‬

‫‪ 1-3‬أنواع قواعد البيانات‬
‫•قواعد بيانات هرمية (‪)Hierarchy Database‬‬
‫•قواعد بيانات شبكية ( ‪)Network Database‬‬

‫‪9‬‬

‫مقدمة قواعد البيانات‬
‫•قواعد بيانات علئقية (‪)Relational Database‬‬
‫يقت صر ا ستخدام كلً من قوا عد البيانات الهرم ية والشبك ية علي الحا سبات ال كبيرة‪ ،‬أ ما‬
‫قواعد البيانات العلئقية‬

‫‪Relational Database‬فإنها أكثر استخدما وشهرة مع‬

‫الحاسب وإليها ينتمي ‪Oracle For Windows‬‬

‫‪ -2‬لغة الستفسارات الهيكلية(‪)SQL‬‬
‫تمكنمك لغمة )‪ SQL‬اختصمارا للكلمات ‪Structured Query Language‬‬
‫( من إدارة قوا عد البيانات بش كل كا مل وإجراء جم يع العمليات القيا سية كإنشاء الجداول وتعبئت ها‬
‫بالبيانات‪ ،‬أو إجراء ال ستعلمات علي ها وكذلك الر بط ب ين الجداول المختل فة‪ ،‬ول كن ك يف يمكن نا‬
‫عمل ذلك بها؟‬
‫كما وضحنا سابقا فإن قاعدة البيانات عبارة عن مكان أو مستودع كبير لتخزين البيانات‬
‫المختلفة‪ ،‬تريحك قاعدة البيانات من عناء تخزين بياناتك في ملفات منفصلة وكما أنك تحتاج إلى‬
‫إجراء عمليات البحث والتصنيف لهذه البيانات عن طريق خوارزميات البحث المعقدة فتسهل لك‬
‫ذلك بأنها تعطيك واجهة سهلة للتعامل مع البيانات‪ ،‬بحيث ل تحتاج إلى كل هذا وتكون البيانات‬
‫فمي قاعدة البيانات مخزنمة فمي عدة جداول ‪ Tables‬وكمما نعلم فالجدول يتكون ممن صمفوف‬
‫‪ Rows‬وأعمدة ‪ Columns‬هكذا‪:‬‬

‫‪10‬‬

‫مقدمة قواعد البيانات‬
‫الجدول السابق يتكون من ثلثة صفوف وثل ثة أعمدة‪ ،‬وفي قواعد البيانات فإننا نسمي‬
‫ال صفوف بال سجلت ‪ Records‬ون سمي العمدة بالحقول ‪ ،Fields‬ف ما هي الحقول و ما‬
‫هي السجلت ؟‬
‫يقوم الحقمل الواحمد فمي الجدول بتخزيمن معلوممة معينمة‪ ،‬فمثل عندمما يكون لدينما قاعدة‬
‫بيانات بأرقام الهواتف فإننا سنحتاج إلى حقلين ( أو عامودين ) واحد للسم والثاني لرقم الهاتف‪،‬‬
‫أ ما ال سجلت ( أو ال صفوف ) فيحتوي كل من ها على مجمو عة من الحقول‪ ،‬فترى بأن ال سجل‬
‫الواحد في مثالنا يحتوي على معلومتين مختلفتين هما السم ورقم الهاتف‪ ،‬لذلك يمكننا القول بأن‬
‫قاعدة البيانات تتكون من الجداول والجداول تتكون من ال سجلت والسجلت تتكون من الحقول‪،‬‬
‫وكل حقل يحتوي على معلومة واحدة‪ ،‬أي أن الحقل هو أصغر وحدة قاعدة البيانات‪.‬‬

‫‪2-1‬عبــارات ‪SQL‬‬
‫تنقسم عبارات ‪ SQL‬إلي ثلث فئات رئيسية وهي كالتالي‪:‬‬
‫‪ 2-1-1‬لغة تعريف البيانات ‪DDL‬‬
‫هي مجموعة من أوامر ‪ SQL‬تستطيع من خللها إنشاء وتعريف الكائنات في قاعدة‬
‫البيانات‪ ،‬وتقوم هذه الواممر بإنشاء أو إسمقاط أو تغييمر كائن قاعدة البيانات‪ ،‬وهمي اختصمارا‬
‫للكلمات(‪Language‬‬

‫‪Definition‬‬

‫‪ ،)Data‬وممن أهمم أوامرهما ‪Create,‬‬

‫‪Alter, Drop, Rename, Truncate‬‬

‫‪ 2-1-2‬لغة معالجة البيانات ‪DML‬‬
‫‪11‬‬

‫مقدمة قواعد البيانات‬
‫هي مجمو عة من العبارات ال تي ت ستطيع من خلل ها معال جة البيانات الموجودة في‬
‫قاعدة البيانات من إدراج البيانات وتحديثها أو تحديد أو حذف البيانات‪ ،‬وهي اختصارا للكلمات(‬
‫‪Language‬‬

‫‪Manipulation‬‬

‫ما ‪Insert,‬‬
‫مم أوامرهم‬
‫من أهم‬
‫‪ ،)Data‬ومم‬

‫‪Update, Delete‬‬

‫‪ 2-1-3‬لغة التحكم والصلحيات ‪DCL‬‬
‫هي مجمو عة من أوا مر ‪ SQL‬ت ستطيع من خلل ها م نح أو سحب إمتيازات ا ستخدام‬
‫كائن قاعدة البيانات‪ ،‬وهمي اختصمارا للكلمات‪ ،‬وهمي اختصمارا للكلمات(‪Data Control‬‬
‫‪ ،)Language‬ومن أهم أوامرها ‪Grant, Revoke‬‬

‫وإيجازا للقول فإن الشكل التالي يوضح الفئات الرئيسية لعبارات ‪SQL‬‬

‫‪12‬‬

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

‫‪INSERT‬‬

‫لغـة معالجة البيانات‬

‫‪UPDATE‬‬
‫‪DELETE‬‬
‫‪CREATE‬‬

‫‪ALTER‬‬
‫‪DROP‬‬

‫لغة تعريف البيانات‬

‫‪RENAME‬‬
‫‪TRUNCATE‬‬
‫‪GRANT‬‬

‫لغة التحكم والصلحيات‬

‫‪REVOKE‬‬
‫‪COMMIT‬‬

‫لغـة معالجة البيانات‬
‫‪Transaction control‬‬

‫‪ROLLBACK‬‬
‫‪SAVEPOINT‬‬

‫‪ -3‬استخدام ‪SQL*Plus‬‬
‫يعتبر برنامج ‪ SQL*PLUS‬أحد منتجات شركة ‪ ،Oracle‬وهو واجهة التخاطب مع‬
‫قاعدة البيانات‪ ،‬وي ستخدم في إنشاء قوا عد البيانات وم نح ال سماحيات‪ ،‬وإنشاء الجداول وتعديل ها‬
‫واسترجاع البيانات من الجداول‪.‬‬
‫‪ 3-1‬استخدام ‪SQL*Plus‬‬
‫يعممد اسممتخدام ‪SQL*Plus‬مممن أسممهل الطرق لتعلم لغممة ‪ ،SQL‬للدخول علي‬
‫‪ SQL*Plus‬يتم ذلك بالطريقة التالية‪:‬‬

‫‪13‬‬

‫مقدمة قواعد البيانات‬
‫‪‬ممن قائممة ‪start‬أشمر إلي ‪ ،Programs‬ثمم ‪-‬‬

‫‪Oracle‬‬

‫‪ ،OraHome9i‬ومنمه ‪،Application Development‬‬
‫ثم ‪ SQL*Plus‬ستظهر لك الشا شة التال ية ت سأل عن ا سم الم ستخدم‬
‫وكلمة المرور‬
‫•اسمم المسمتخدم(‪:)user name‬إسمم معرف حسماب مسمتخدم‬
‫‪ oracle‬الذي تم تحديده للمستخدم‪.‬‬
‫•كلممة المرور (‪ :)password‬كلممة المرور الخاصمة بحسماب‬
‫المستخدم‪.‬‬
‫• سلسلة الم صنف(‪ :)Host‬سلسلة الحرف ال تي تحدد مكان توا جد‬
‫ممال (‪connect‬‬
‫مملسلة التصم‬
‫مممي بسم‬
‫قاعدة البيانات‪ ،‬وتسم‬
‫‪ )string‬وتسمتخدم عندمما تكون متصملً بشبكمة و ‪oracle‬‬
‫الذي تريد الوصول إليه قد تم إعداده علي جهاز أخر غير الحاسب‬
‫الذي تقوم بالتعامل منه مع ‪oracle‬‬

‫‪ -4‬جملة ‪Select‬‬
‫‪14‬‬

‫مقدمة قواعد البيانات‬
‫الممر ‪ Select‬يمكنمك ممن اسمتعادة البيانات ممن داخمل قاعدة البيانات‪ ،‬وتأخمذ جملة‬
‫‪ Select‬الشكل التالي‬
‫‪SELECT‬‬
‫‪[DISTINCT] {*, column‬‬
‫}‪[alias],...‬‬

‫‪ 4-1‬اختيار كافة العمدة‬
‫تمثمل عبارة ‪ * Select‬طريقمة مختصمرة لخبار ‪ SQL‬بأننما نريمد إظهار جميمع‬
‫أعمدة الجدول‪ ،‬فعلي سبيل المثال‬
‫* ‪SQL> SELECT‬‬
‫;‪2 FROM emp‬‬

‫‪ :Select)1‬تحدد ماهي العمدة المراد إظهارها‪.‬‬
‫‪ :From)2‬تحدد المكان الذي نريد استعادة البيانات منه (جدول أو‬
‫أكثر)‬
‫‪)3‬الفاصلة المنقوطة‪ :‬تخبر ‪ SQL‬بأن العبارة كاملة وجاهزة للتنفيذ‪.‬‬
‫‪)4‬القواس [‬

‫] تشير علي أن ما بداخل هذه القواس اختياريا‪.‬‬
‫‪15‬‬

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

‫‪ 4-2‬اختيار أعمدة محددة‬
‫يمكننا اختيار أعمدة محددة‪،‬وهو أمر في غاية السهولة حيث تقوم بكتابة أسماء العمدة‬
‫بعد عبارة ‪ ،Select‬مع وضع فاصلة بين أسماء العمدة‪ ،‬ثم تحدد الجدول بعد ‪From‬‬
‫مثال‪2‬‬

‫‪SQL> SELECT empno, ename, job‬‬
‫‪2 FROM‬‬
‫;‪emp‬‬

‫تلميح‬

‫‪‬ل تنس إنهاء جملة ‪ Select‬بالفاصلة المنقوطة لكي تخبر ‪ SQL‬بأن‬
‫الجملة كاملة وجاهزة للتنفيذ‪.‬‬
‫‪‬تظهر العمدة المطلوبة بدءا من اليسار إلي اليمين بنفس ترتيب كتابتها في‬
‫عبارة ‪Select‬‬

‫مثال‪3‬‬

‫‪SQL> SELECT deptno, dname, loc‬‬
‫‪2 FROM‬‬
‫;‪dept‬‬

‫‪16‬‬

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

‫‪ 4-3‬التعبيرات الحسابية (‪)Arithmetic Expressions‬‬
‫•ضع التعبيرات الحسابية بعد عبارة ‪ Select‬كأي عمود تريد استعادة بياناته‪،‬‬
‫حيث تستخدم التعبيرات الحسابية مع تلك العمدة التي نوع معطياتها عددي مثل‬
‫الرقام والتاريخ‪.‬‬
‫•يجب عليك النتباه لسبقية المعاملت (‪)Operator Precedence‬في‬
‫التعبيرات الحسابية وفيما يلي بيان بأسبقية المعاملت في التعبيرات الحسابية‬
‫‪)1‬ينفذ أول الضرب أو القسمة أول‪ ،‬ومن اليسار إلي اليمين‬
‫‪)2‬بعد ذلك ينفذ الجمع أو الطرح لحقا‪ ،‬ومن اليسار إلي ومن اليسار‬
‫إلي ليمين‪.‬‬
‫تلميح‬
‫‪‬عند استخدام التعبيرات الحسابية يمكنك تغيير تسلسل أسبقية المعاملت‬
‫الحسابية باستخدام القواس((‪ ،Parentheses‬حيث تأخذ القواس‬
‫السبقية في التعبيرات الحسابية‪.‬‬

‫‪ 4-3-1‬أمثلة علي التعبيرات الحسابية‬
‫مثال‪1‬‬

‫‪SQL> SELECT ename, sal, sal+500‬‬
‫;‪2 FROM emp‬‬

‫‪17‬‬

‫مقدمة قواعد البيانات‬
‫في هذا المثال يقوم باستخدام معامل الجمع لزيادة مرتبات جميع الموظفين ب ‪ 500‬ر‪،‬‬
‫ويقوم بعرض الناتج في عمود جديد‪.‬‬

‫تلميح‬

‫تلميح‬
‫‪SQL> SELECT ename, sal, 12*sal+500‬‬
‫‪2 FROM‬‬
‫;‪emp‬‬

‫‪‬تتجاهل ‪ SQL*Plus‬المسافات ‪ Blank Spaces‬قبل وبعد‬
‫المعاملت الحسابية‪.‬‬

‫في هذا المثال سيقوم طبقا لسبقية المعاملت كما وضحنا سابقا بحساب عملية الضرب‬
‫أولً وهي ‪ ،sal*12‬ثم إجراء عملية الجمع ثانيا وهي إضافة ‪ 500‬ر‬

‫تلميح‬
‫تلميح‬

‫‪18‬‬

‫مقدمة قواعد البيانات‬
‫‪‬كمما تعلمنما سمابقا يمكنمك تغييمر تسملسل أسمبقية المعاملت الحسمابية‬
‫باستخدام القواس((‪ ،Parentheses‬حيث تأخذ القواس السبقية‬
‫في التعبيرات الحسابية‪ ،‬ويتم ذلك علي النحو التالي‬
‫)‪SQL> SELECT ename, sal,12*(sal+500‬‬
‫‪2 FROM‬‬
‫;‪emp‬‬
‫‪-5‬تعريف ‪A column Alias‬‬

‫يمكن نا إعادة ت سمية روؤس العمدة با ستخدام ‪ ،a column alias‬بمع ني إبدال‬
‫ال سم الفعلي للح قل با سم اعتباري ي تم تحديده بوا سطة الم ستخدم ويكون ذلك مفيدا وخا صة ع ند‬
‫التعا مل مع الت عبيرات الح سابية‪ ،‬وفي ما يلي عدة اعتبارات ل بد من مراعات ها ع ند إعادة ت سمية‬
‫روؤس العمدة‬
‫‪)1‬يتم كتابة ‪ alias‬في جملة ‪ Select‬يلي اسم العمود أو التعبير الحسابي المراد‬
‫إعادة تسميته مع ترك مسافة‪.‬‬
‫‪)2‬يتم استخدام‬

‫‪as‬بين اسم العمود وال ‪ ،alias‬ويكون ذلك اختياريا‪.‬‬

‫‪)3‬إذا احتوي ‪ alias‬علي مسافات أو أحرف وعلمات خاصة مثل (‪)$or #‬‬

‫‪19‬‬

‫مقدمة قواعد البيانات‬
‫من وضعة بين علمتي تنصيص ("‬
‫مثال‪1‬‬

‫")‪double quotation‬‬

‫مثال‪1‬‬
‫‪SQL> SELECT ename, sal AS Salary‬‬
‫‪2 FROM‬‬
‫;‪emp‬‬

‫تلميح السابق تم إعادة تسمية عمود ‪ Sal‬في جدول ‪ emp‬ب‬
‫‪‬في المثال‬
‫‪salary‬‬
‫‪‬تم وضع كلمة ‪ AS‬فبل ‪ ،alias name‬وكما تعلمنا أن ذلك‬
‫اختياريا‪.‬‬
‫‪‬يتم ظهور ‪ alias name‬بحالة أحرف كبيرة ‪Uppercase‬‬
‫مثال‪2‬‬
‫"‪SQL> SELECT ename, sal*12 "annual salary‬‬
‫‪2 FROM‬‬
‫;‪emp‬‬
‫فممي هذا‬
‫المثال تممم إعادة‬
‫مبير‬
‫ممية التعم‬
‫تسم‬
‫الحسمممممابي‬
‫‪20‬‬

‫مقدمة قواعد البيانات‬
‫‪ sal*12‬ب ‪ ،Annual Salary‬كما نلحظ تم وضع "‪ "Annual Salary‬بين‬
‫علمتي تنصيص لنة‬

‫يحتوي مسافات ‪. Spaces‬‬

‫‪ -6‬جملة الشرط ‪Where Clause‬‬
‫كان اختيارنما سمابقا للعمدة يجري علي كافمة الصمفوف التمي يحتويهما الجدول‪ ،‬أردنما‬
‫إظهار صفوفا تحتوي علي قيما معي نة‪ ،‬كإظهار الموظف ين الذ ين تتجاوز مرتبات هم ‪3000‬ر أو‬
‫الذيمن يقطنون مدينمة مما‪ ،‬لفعمل مثمل ذلك سمنحتاج إلي وضمع كلممة ‪ Where‬ضممن عبارة‬
‫‪ ،Select‬يأخذ الختيار الشرطي الشكل التالي‬
‫}‪[DISTINCT] {*, column [alias], ...‬‬
‫‪table‬‬
‫;])‪condition(s‬‬

‫‪SELECT‬‬
‫‪FROM‬‬
‫‪[WHERE‬‬

‫تلميحجملة ‪ Where Clause‬بعد جملة ‪From‬‬
‫‪‬تأتي‬
‫‪Clause‬‬
‫‪‬يلي ‪Where‬شرط أوعدة شروط‬
‫‪‬توجه عبارة ‪ Where‬المر إلي أوراكل بالبحث في قاعدة‬
‫البيانات واستعادة الصفوف التي تتوافق مع شرط البحث‪.‬‬
‫مثال‪1‬‬

‫* ‪SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫‪3 WHERE‬‬
‫;'‪ename='tarek‬‬

‫في هذا المثال نريد استرجاع جميع العمدة بجدول ‪ ،emp‬ولكن بشرط أن يكون‬
‫اسم الموظف ‪tarek‬‬

‫‪21‬‬

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

‫في هذا المثال نريد استرجاع جميع العمدة بجدول ‪ ،emp‬ولكن بشرط أن يكون تاريخ‬
‫تعيين الموظف هو'‪'JAN-82-23‬‬
‫تلميح‬

‫‪‬الحرف النصية ‪ ،Character Strings‬والتاريخ في‬
‫جملة ‪ Where‬لبد من وضعها بين علمتى تنصيص (' ')‪.‬‬
‫‪Single quotation‬‬
‫مثال‪3‬‬

‫‪SQL> SELECT ename, job, deptno‬‬
‫‪FROM‬‬
‫‪emp‬‬
‫;'‪WHERE ename = 'MILLER‬‬

‫‪ 6-1‬استخدام عوامل المقارنة(‪)Comparison Operators‬‬
‫تمحنما ‪ SQL‬سمتة عواممل للمقارنمة نسمتطيع اسمتخدامها مع ‪ ،Where‬كمما هو ممبين‬
‫بالجدول التالي‬
‫المعني ‪Meaning‬‬

‫المعامل ‪Operator‬‬

‫يسممماوي‬

‫=‬

‫أكبرمن أو أقل من‬

‫>‪< or‬‬
‫‪22‬‬

‫مقدمة قواعد البيانات‬
‫أكبرمن أو يساوي‬

‫>=‬

‫أقل من أو يساوي‬

‫<=‬

‫ل يساوي‬

‫<> ‪= ! Or‬‬

‫مثال‪1‬‬

‫‪SQL> SELECT ename, job, sal‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫‪3 WHERE‬‬
‫;‪sal >= 3000‬‬

‫فمي هذا‬
‫المثال قممممد‬
‫اسمتخدمنا أحمد‬
‫عوامل المقار نة‬
‫في جملة ‪ ،Where‬حيث يتم استعادة‬

‫‪ ename, job, sal‬عندما يكون ‪sal‬أكبرمن أو يساوي ‪3000‬ر‪.‬‬
‫مثال‪2‬‬
‫‪SQL> SELECT ename, job, sal‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫‪3 WHERE‬‬
‫;‪sal <> 3000‬‬
‫;‬

‫‪23‬‬

‫مقدمة قواعد البيانات‬
‫‪6-2‬استخدام عوامل القارنة الخرى‬
‫(‪)Other Comparison Operator‬‬
‫تتضمن ‪ SQL‬أربعة معاملت أخري بالضافة للمعاملت التي الشارة إليها في النقطة‬
‫السابقة يمكن استخدامها مع جملة ‪ ،Where‬كما هو مبين بالجدول التالي‬
‫المعني ‪Meaning‬‬

‫المعامل ‪Operator‬‬

‫بين قيمتين‬

‫‪……BETWEEN…..AND‬‬

‫تتيح لك اختيار أي قيمة من ‪List‬‬

‫‪)IN(list‬‬

‫يشابه أو يماثل‬

‫‪LIKE‬‬

‫فارغا‬

‫‪IS NULL‬‬

‫‪6-2-1‬استخدام معامل ‪Between‬‬
‫يمكنمك إجراء عمليات البحمث داخمل نطاق معيمن ممن القيمم وذلك باسمتخدام معاممل‬
‫‪ Between‬ممع جملة ‪ ،Where‬فعلي سمبيل المثمل قمد ترغمب فمي اسمتعادة بيانات جميمع‬
‫الموظفين الذين يتقاضون راتب مابين ‪ 5000 ،2000‬يمكنك القيام بهذا وذلك بإجراء المثال‬
‫التالي‬
‫مثال‬

‫قيمة أعلي‬

‫* ‪SQL> SELECT‬‬
‫‪FROM‬‬
‫‪emp‬‬
‫;‪WHERE sal BETWEEN 2000 AND 5000‬‬
‫قيمة أدني‬

‫في هذا المثال تم استخدام معامل ‪ Between‬مع جملة ‪ Where‬لستعادة السجلت‬
‫التي تقع نطاق معين من القيم‬

‫‪24‬‬

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

‫‪ 6-2-2‬استخدام معامل ‪IN‬‬
‫يمك نك معا مل ‪ IN‬القيام بعمليات الب حث عن بنود دا خل إحدى القوائم‪ ،‬ح يث يمك نك‬
‫استرجاع السجلت التي قيم عمود فيها (محدد في جملة ‪ ) Where‬تساوي إحدى القيم المحددة‬
‫ضممن مجموعمة‪ ،‬فعلي سمبيل المثال لظهار كافمة السمجلت الخاصمة بالموظفيمن ذوي الرقام‬
‫‪7369‬أو ‪7499‬أو ‪7521‬يتم إجراء المثال التالي‬
‫*‬
‫‪emp‬‬
‫;)‪empno IN (7369, 7499, 7521‬‬

‫مثال‪1‬‬

‫‪SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪3 WHERE‬‬
‫;‬

‫في هذا المثال السابق تم استرجاع السجلت التي فيها العمود ‪ empno‬يساوي إما‬
‫‪7369‬أو ‪7499‬أو ‪ ،7369‬فنجد أن ‪ IN‬تكافيء سلسلة مقارنات مربوطة بالمعامل ‪،Or‬‬
‫فيمكنك إجراء المثال السابق باستخدام ‪ or‬علي النحو التالي‬
‫* ‪SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫‪3 WHERE‬‬
‫‪empno=7369 or empno=7499‬‬
‫;‪or empno=7369‬‬
‫مثال‪2‬‬
‫‪25‬‬

‫مقدمة قواعد البيانات‬
‫* ‪SQL> SELECT‬‬
‫‪2 FROM emp‬‬
‫;)'‪3 WHERE ename IN ('tarek','ayman', 'said‬‬
‫في هذا المثال سيتم استعادة كافة السجلت الخاصة بالموظفين الموجودين في القائمة التي‬
‫تلي معا مل ‪ ،IN‬ح يث ي تم ا ستعادة جم يع ال سجلت من جدول ‪ emp‬عند ما يكون ‪ename‬‬
‫يساوي إما '‪'tarek' Or 'ayman' Or 'said‬‬

‫تلميح‬
‫وفيما يلي عدة اعتبارات لبد من مراعاتها عند إعادة استخدام معامل ‪ IN‬مع جملة ‪Where‬‬
‫‪‬وضع قيم المجموعة بين قوسين‪.‬‬
‫‪‬فصل قيم المجموعة عن بعضها بالفاصلة‪.‬‬
‫‪‬يمكن وضع القيم بأي ترتيب‪.‬‬
‫‪‬عندما تكون قيم المجموعة حرفية أو تاريخ لبد من وضعها بين‬
‫علمتي تنصيص(' ') ‪.‬‬
‫‪‬يمكن استخدام ‪NOT IN‬لعكس الختيار‬
‫‪ 6-2-3‬استخدام معامل ‪Like‬‬
‫يمك نك ا ستخدام ‪ Like‬مع جملة ‪ Where‬ل ستعادة وا سترجاع ال سجلت ال تي ق يم‬
‫عمود فيها تشابه سلسلة أحرف نبحث عنها‪ ،‬ليس هذا فحسب بل يمكننا من استرجاع السجلت‬
‫التي تكون قيم عمود فيها مطابقة جزئيا لمجموعة أحرف نبحث عنها‬

‫مثال‪1‬‬
‫لسترجاع جميع السماء التي تبدأ بحرف (‪ )A‬يتم كتابة الكود التالي‬
‫‪26‬‬

‫مقدمة قواعد البيانات‬
‫‪ename‬‬
‫‪emp‬‬
‫;'‪ename LIKE 'A%‬‬

‫‪SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪3 WHERE‬‬

‫مثال‪2‬‬

‫للبحث عن السماء التي تشتمل علي أحرف ‪ are‬يتم ذلك من خلل كتابة الكود التالي‪:‬‬
‫*‬
‫‪emp‬‬
‫;'‪ename LIKE '%are%‬‬

‫‪SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪3 WHERE‬‬

‫مثال‪3‬‬
‫لسترجاع بيانات السم والوظيفة والمرتب للموظفين الذي تم تعينهم خلل عام ‪1982‬‬
‫من شهر يناير إلي شهر ديسمبر يتم كتابة الكود التالي‬
‫‪SQL> SELECT ename,job,sal,hiredate‬‬
‫‪2 FROM emp‬‬
‫;'‪3 WHERE HIREDATE LIKE '%1982‬‬
‫مثال‪4‬‬

‫لسترجاع جميع السماء التي يكون حرف (‪ )A‬فيها يأخذ الترتيب الثاني يتم كتابة الكود‬
‫التالي‪:‬‬
‫‪27‬‬

‫مقدمة قواعد البيانات‬
‫‪ename‬‬
‫‪emp‬‬
‫;'‪ename LIKE '_A%‬‬

‫‪SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪3 WHERE‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬

‫تلميح‬
‫‪‬تستخدم ‪ LIKE‬مع العمدة التي يكون نوع بياناتها‬
‫حرفي‪.‬‬

‫‪ %‬اختصار لي تتابع من سلسلة أحرف غير معينة مؤلفة‬
‫من أي قيمة وبأي طول‬
‫‪ _‬اختصار لي حرف وحيد‬
‫‪ 6-2-4‬استخدام معامل ‪IS NULL‬‬
‫قبمل اسمتخدام معاممل ‪ IS NULL‬ممع ‪Where‬لبمد ممن الجابمة علي ماهمي القيممة‬
‫‪ NULL‬؟ تستخدم القيمة ‪ NULL‬للشارة إلي عمود ل يحتوي علي بيانات‪ ،‬حيث ل تعني القيمة‬
‫‪ NULL‬صفر أو مسافة ‪Blank Space‬‬
‫مثال‪1‬‬

‫‪28‬‬

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

‫لسترجاع جميع بيانات الموظفين الذين ل يتقاضون حوافز ‪ Commission‬يتم‬
‫كتابة الكود التالي‬
‫*‬
‫‪emp‬‬
‫;‪comm IS NULL‬‬

‫‪SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪3 WHERE‬‬

‫‪ 6-3‬استخدام عوامل المقارنة الخرى(‪)Logical Operators‬‬
‫تتضمن ‪ SQL‬ثلثة معاملت منطقية بالضافة للمعاملت التي الشارة إليها في سابقا‬
‫يمكن استخدامها مع جملة ‪ ،Where‬كما هو مبين بالجدول التالي‬
‫المعني ‪Meaning‬‬

‫المعامل ‪Operator‬‬

‫و‬

‫‪AND‬‬

‫أو‬

‫‪OR‬‬

‫النفي‬

‫‪NOT‬‬

‫‪ 6-3-1‬استخدام معامل ‪AND‬‬

‫‪29‬‬

‫مقدمة قواعد البيانات‬
‫يستخدم ‪ AND‬مع ‪ Where‬لستعادة السجلت التي تحقق كافة الشروط المحددة في‬
‫جملة ‪ ،Where‬حيث يعني ‪ AND‬أنه لستعادة السجلت لبد من تحقق كافة الشروط‪.‬‬
‫مثال‪1‬‬
‫لسترجاع جميع بيانات الموظفين بالدارة رقم ‪ 10‬الذين يتقاضون مرتبا أكبر من‬
‫‪ 3000‬ر يتم كتابة الكود التالي‪:‬‬
‫‪* SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫‪3 WHERE sal >3000‬‬
‫‪4 AND‬‬
‫;‪deptno=10‬‬
‫مثال‪2‬‬

‫لسترجاع جميع بيانات محللي النظم الذين يتقاضون مرتبا أكبر من ‪3000‬ر يتم كتابة‬
‫الكود التالي‬

‫‪SQL> SELECT ename, job, sal‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫‪3 WHERE sal>1000‬‬
‫‪4 AND‬‬
‫;'‪job='analyst‬‬

‫‪ 6-3-2‬استخدام معامل ‪OR‬‬
‫نستخدم معامل ‪ Or‬مع ‪ Where‬لستعادة السجلت التي تحقق شرطا واحدا من عدة‬
‫شروط‪ ،‬حيث يعني المعامل ‪ Or‬أن استعادة البيانات تتم إذا تحقق أي شرط من الشروط‬
‫‪30‬‬

‫مقدمة قواعد البيانات‬
‫مثال‪1‬‬
‫لسترجاع بيانات الموظفين(السم‪ ،‬الوظفية‪ ،‬المرتب) يتقاضون مرتبا أكبر من‬
‫‪ 3000‬ر أو الوظيفة ‪ ،analyst‬يتم كتابة الكود التالي‬
‫‪SQL> SELECT ename, job, sal‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫‪3 WHERE sal>3000‬‬
‫;'‪4 OR job='ANALYST‬‬
‫تلميح‬

‫‪ ‬تم عرض بيانات الموظف ين الذ ين يتقاضون مرتبا أ كبر من‬
‫‪ 3000‬أو الوظيفة ‪Analyst‬‬
‫‪ 6-3-3‬استخدام معامل ‪NOT‬‬
‫استخدام المعامل ‪ NOT‬يمكننا من استثناء سجلت معينة من اختيارنا‪ ،‬حيث يمكننا من‬
‫ا سترجاع ال سجلت المعاك سة لختيار نا‪ ،‬فعلي سبيل المثال لختيار كا فة ال سجلت من جدول‬
‫‪ emp‬باستثناء التي يكون ال ‪Commission‬بها قيمته ‪ NULL‬يتم كتابة الكود التالي‬
‫مثال‪1‬‬

‫‪SQL> SELECT ename, job‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫;‪3 WHERE comm IS NOT NULL‬‬

‫مثال‪2‬‬

‫‪31‬‬

SQL> SELECT ename, job
‫مقدمة قواعد البيانات‬
2 FROM
emp
3 WHERE job NOT IN
('ANALYST','ACCOUNTANT','ENGINEER');
analyst, ‫ باستثناء الوظيفة‬،)‫ المرتب‬،‫ الوظفية‬،‫لسترجاع بيانات الموظفين(السم‬
:‫يتم كتابة الكود التالي‬

engineer, accountant

‫تلميح‬
‫ مع المعاملت الخرى مثل‬NOT ‫يتم استخدم معامل‬
)BETWEEN, LIKE, and NULL(
:‫وإليك التلميح التالي‬
…..
…..
…..
…..

Where
Where
Where
Where

sal NOT BETWEEN 3000 AND 4000
ename NOT LIKE '%T%'
job NOT
IN ('analyst','accountant')
comm IS NOT NULL

Rules of Precedence ‫ قواعد أسبقية المعاملت‬6-4
32

‫مقدمة قواعد البيانات‬
‫الجدول التالي يوضح قواعد أسبقية المعاملت‬
‫المعامل ‪Operator‬‬

‫الترتيب ‪Order Evaluated‬‬

‫جميع عوامل المقارنة‬

‫‪1‬‬

‫‪NOT‬‬

‫‪2‬‬

‫‪AND‬‬

‫‪3‬‬

‫‪OR‬‬

‫‪4‬‬

‫مثال‪1‬‬

‫تلميح‬
‫‪‬كما تعلمنا سابقا يمكنك تغيير تسلسل أسبقية المعاملت باستخدام القواس((‬
‫‪ ،Parentheses‬حيث تأخذ القواس السبقية في التعبيرات الحسابية‬
‫مثال‪1‬‬

‫‪SQL>SELECT ename, job, sal‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫'‪3 WHERE job='ANALYST‬‬
‫‪4 OR‬‬
‫'‪job=' MANAGER‬‬
‫‪5 AND‬‬
‫;‪sal >3000‬‬

‫الثاني‬
‫الول‬
‫‪ ‬الشرط الول هو‬
‫تلميح‬

‫‪ Job‬تكون ‪ MANAGER‬و ‪ Sal‬أكبر من ‪3000‬ر‬

‫‪‬الشرط الثاني هو‬

‫‪ job‬تكون ‪ANALYST‬‬

‫‪ -7‬ترتيب النتائج باستخدام ‪Order by‬‬
‫‪33‬‬

‫مقدمة قواعد البيانات‬
‫ترتب السجلت باستخدام ‪ Order by‬وفقا لقيم العمود الذي نحدده ترتيبا تصاعديا أو‬
‫تنازليا‪ ،‬ويمكن الترتيب بناءا علي قيم عمود أو عدة أعمدة‪ ،‬وعند كتابة جملة ‪Order by‬‬
‫يجب إتباع التي‪:‬‬
‫‪ Order by‬تتبع جملة ‪ }from{table name‬مباشرة في‬
‫حالة عدم وجود ‪})Where {Condition(s‬‬
‫‪ Order by‬تتبع جملة ‪})Where {Condition(s‬‬
‫مباشرة‪.‬‬
‫‪‬يوجد لدينا خياران عند استخدام ‪Order by‬‬
‫‪:Order by {column name} ASC)1‬‬
‫يسمح هذا الخيار بالترتيب التصاعدي‬
‫‪:Order by {column name} desc)2‬‬
‫يسمح هذا الخيار بالترتيب التنازلي‪.‬‬
‫‪‬يمكن الترتيب علي أساس عدة أعمدة‪ ،‬ويجب الفصل بين أسماء‬
‫العمدة بفاصلة (‪),‬‬

‫‪‬يوجد لدينا طريقتان لكتابة جملة ‪ Order by‬وهما‬
‫‪.1‬عن طريق اسم العمود‬
‫‪.2‬عن طريق رقم العمود النسبي (موقعه في جملة‬
‫‪)SELECT‬‬

‫‪34‬‬

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

‫‪ 7-1‬الترتيب التصاعدي باستخدام ‪Order by‬‬
‫مثال‪1‬‬
‫لستعادة بيانات جميع الموظفين مرتبة علي أساس تاريخ التعيين‪ ،‬يتم كتابة الكود التالي‬
‫* ‪SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫;‪3 ORDER BY hiredate asc‬‬

‫مثال‪2‬‬
‫* ‪SQL>SELECT‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫;‪3 ORDER BY hiredate DESC‬‬

‫‪ 7-2‬الترتيب التنازلي باستخدام ‪Order by‬‬

‫لستعادة بيانات جميع الموظفين مرتبة تنازليا علي أساس تاريخ التعيين‪ ،‬يتم كتابة‬

‫الكود التالي‬
‫*‬
‫‪emp‬‬
‫;‪hiredate desc‬‬
‫تلميح‬

‫‪35‬‬

‫‪SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪3 ORDER BY‬‬

‫مقدمة قواعد البيانات‬
‫‪‬الترتيمب الفتراضمي فمي جملة ‪by‬‬

‫‪ Order‬همو الترتيمب‬

‫التصاعدي مللم نصرح عكس ذلك بالكلمة ‪DESC‬‬
‫‪‬ي تم عرض الق يم ‪ null‬مؤخرا ع ند الترت يب الت صاعدي‪ ،‬والع كس‬
‫ل عند الترتيب التنازلي‪.‬‬
‫يتم ظهور القيم ‪ null‬أو ً‬
‫مثال‪3‬‬
‫يمكنك إجراء الترتيب باستخدام ‪ Order by‬علي أساس قيم أعمدة ليست بجملة‬
‫‪ ،SELECT‬كما بهذا المثال‬
‫‪ename, sal‬‬
‫‪emp‬‬
‫;‪deptno, sal DESC‬‬
‫تلميح‬

‫‪‬يمكننا إجراء الترتيب باستخدام ‪ Order by‬علي أساس قيم‬
‫أكثر من عمود‪.‬‬
‫‪36‬‬

‫‪SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪3 ORDER BY‬‬

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

‫‪ 7-3‬الترتيب باستخدام ‪A Column Alias‬‬

‫يمكننا إجراء الترتيب في جملة ‪ Order by‬باستخدام ‪ A column Alias‬كما‬
‫بالمثال التالي‪:‬‬
‫مثال‬

‫‪SQL> SELECT‬‬
‫‪empno, ename, sal*12 total‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫;‪3 ORDER BY total‬‬

‫‪ -8‬القيمة ‪ Null‬وتأثيراتها‬
‫تستخدم القيمة ‪ null‬للشارة إلي عمود ل يحتوي علي بيانات بمعني وجود قيم فارغة‬
‫داخل الحقول ومن أشهر عيوب القيمة ‪ null‬صعوبة إجراء أي عمليات حسابية على‬
‫سجلت تحتوى بعضها على قيم فارغة‬

‫‪ 8-1‬استخدام القيمة ‪Null‬‬

‫‪37‬‬

‫مقدمة قواعد البيانات‬
‫‪)1‬تسمتخدم القيممة ‪ null‬للشارة إلي عمود ل يحتوي علي بيانات‪،‬‬
‫ول تعنمي القيممة ‪ null‬الصمفر أو المسمافة الفارغمة ‪blank‬‬
‫‪space‬‬
‫‪)2‬عنمد اسمتخدام القيممة ‪null‬فمي التعمبيرات الحسمابية يكون الناتمج‬
‫‪null‬‬

‫مثال‪1‬‬
‫‪SQL> SELECT ename, sal, comm‬‬
‫‪2 FROM‬‬
‫;‪emp‬‬
‫مثال‪2‬‬
‫في هذا المثال نجد أن العمود ‪ comm‬يحتوي قيما من النوع ‪null‬‬
‫‪SQL> select ename,sal,comm,sal+comm‬‬
‫‪2 from‬‬
‫‪emp‬‬
‫;'‪3 WHERE ename='SMITH‬‬

‫في هذا المثال تم تناول العمليات الحسابية علي القيم ‪ ،null‬حيث أن ال ‪comm‬الخاص‬

‫‪38‬‬

‫مقدمة قواعد البيانات‬
‫بالموظف ‪SMITH‬يأخذ القيمة ‪ ،null‬وكما تعلمنا أن ناتج أي عملية حسابية طرفها القيمة‬
‫‪ null‬يكون ‪null‬‬

‫‪ -9‬استخدام محرر النصوص في البرنامج ‪SQL*PLUS‬‬
‫بعد إدخال تعليمة ما في محث ‪ SQL‬فإنها تبقي في الذاكرة المؤقتة (‪ ،)BUFFER‬نقوم بكتابة‬
‫التعليمة ‪ List‬أو الحرف ‪ L‬لظهار آخر تعليمة أرسلت إلي ‪ ،ORACLE‬ويمكن إعادة تنفيذها‬
‫بإدخال الكلمة ‪ RUN‬أو الحرف (‪ ،)r‬ويمكنك تعديل التعليمات التي تم إدخالها إلي الذاكرة‬
‫المؤقتة ‪ ،‬حيث يمتلك ‪ sql*plus‬سلسلة من التعليمات التي تسمح للمستخدم بتعديل محتوي‬
‫التعليمات المخزنة في الذاكرة المؤقتة كما هو موضح في الجدول التالي ‪:‬‬
‫التعليمة‬
‫‪l‬‬
‫‪I‬‬

‫الوظيفة‬
‫إظهار محتوي الذاكرة المؤقتة‬
‫السماح للمستخدم بالبدء بإدخال‬

‫مثال‬
‫‪l‬‬
‫‪I‬‬

‫نص بعد السطر الحالي‬
‫تنفذ التعليمة المخزنة حاليا في‬

‫‪/‬‬
‫‪RUN‬‬

‫‪R‬أو ‪run‬أو ‪/‬‬
‫‪Save filename‬‬

‫حفظ التعليمة الحالية في ملف‬

‫‪Save c:\t.sql‬‬

‫‪Get filename‬‬

‫تحمل محتوي ملف ما إلي الذاكرة‬

‫‪get c:\t.sql‬‬

‫الذاكرة المؤقتة‬

‫المؤقتة‬
‫‪Start filename‬‬
‫أو @‪filename‬‬
‫‪Edit filename‬‬

‫تحميل الملف إلي الذاكرة المؤقتة‬

‫‪start c:\t.sql‬‬

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

‫‪39‬‬

‫‪edit c:\t.sql‬‬
‫أو ‪edit‬‬
‫أو ‪ed‬‬

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

‫المجموعة الولي‪:‬‬
‫ضع علمة (‬

‫السئلة‬

‫) أمام العبارة الصحيحة وعلمة (×) أمام العبارة الخاطئة مع‬

‫تصحيح الخطأ‪.‬‬

‫‪)1‬لغة ‪DDL‬تستطيع من خللها معالجة البيانات الموجودة في قاعدة البيانات من‬
‫إدراج البيانات وتحديثها أو تحديد أو حذف البيانات‪.‬‬
‫‪)2‬تمثل عبارة ‪ *Select‬طريقة مختصرة لسترجاع أعمدة محددة من الجدول‪.‬‬
‫‪)3‬تظ هر العمدة المطلو بة بدءا من الي سار إلي اليم ين بن فس ترت يب كتابت ها في‬
‫عبارة ‪.Select‬‬

‫‪40‬‬

‫مقدمة قواعد البيانات‬
‫‪)4‬تتجا هل ‪ SQL*Plus‬الم سافات ‪ Blank Spaces‬ق بل وب عد المعاملت‬
‫الحسابية‪.‬‬
‫‪)4‬إذا احتوي ‪ alias‬علي مسافات أو أحرف وعلمات خاصةلبد من وضعة بين‬
‫علمتي تنصيص ("‬

‫")‪.‬‬

‫‪)5‬تأتي جملة ‪ Where‬قبل جملة ‪. From‬‬
‫‪)6‬يلي ‪Where‬شرط أوعدة شروط‪.‬‬
‫‪)7‬نستخدم معامل ‪ Between‬مع جملة ‪ Where‬لستعادة السجلت التي تقع نطاق‬
‫معين من القيم‪.‬‬
‫‪)8‬يمكنك معامل ‪ LIKE‬القيام بعمليات البحث عن بنود داخل إحدى القوائم‪ ،‬بيمنا‬
‫يمكنك استخدام ‪ IN‬استعادة واسترجاع السجلت التي قيم عمود فيها تشابه سلسلة‬
‫أحرف نبحث عنها‬
‫‪)9‬تستخدم معامل ‪ LIKE‬مع العمدة التي يكون نوع بياناتها رقمي‪.‬‬
‫‪)10‬يعني معامل ‪ AND‬أنه لستعادة السجلت لبد من تحقق كافة الشروط‬

‫المجموعة الثانية‪:‬‬
‫أسئلة لتدريب الطلب على أسئلة الختيار المتعدد‪:‬‬
‫‪)1‬المصطلح ‪ DDL‬هو‪:‬ـ‬
‫‪.1‬اختصار ‪.data definition language‬‬
‫‪.2‬بناء ‪ SQL‬المستخدم لتعريف البيانات في قاعدة البيانات‪.‬‬
‫‪.3‬بناء ‪ SQL‬المستخدم لمعالجة البيانات في قاعدة البيانات‪.‬‬
‫‪. 2&1.4‬‬
‫‪41‬‬

‫مقدمة قواعد البيانات‬
‫‪ )2‬المصطلح ‪ DML‬هو‪:‬ـ‬
‫‪.1‬بناء ‪ SQL‬المستخدم لمعالجة البيانات في قاعدة البيانات ‪.‬‬
‫‪.2‬اختصار ل ‪. Data Manipulation Language‬‬
‫‪.3‬بناء ‪ SQL‬المستخدم لتعريف البيانات ‪.‬‬
‫‪. 2&1.4‬‬
‫‪)3‬المر ‪:update‬ـ‬
‫‪.1‬من أوامر ‪.DML‬‬
‫‪.2‬يستخدم لتحديث البيانات في جدول‪.‬‬
‫‪.3‬من أوامر ‪.DQL‬‬
‫‪. 2&1.4‬‬

‫‪)4‬المر ‪:Insert‬ـ‬
‫‪)1‬من أوامر ‪.DML‬‬
‫‪)2‬من أوامر ‪.DDL‬‬
‫‪)3‬يستخدم في إدراج البيانات في جدول‪.‬‬
‫‪. 3&1)4‬‬

‫‪)5‬المر ‪:drop‬ـ‬
‫‪.1‬من أوامر ‪.DML‬‬
‫‪.2‬من أوامر ‪.DDL‬‬
‫‪.3‬يستخدم لحذف حقل من جدول‪.‬‬
‫‪42‬‬

‫مقدمة قواعد البيانات‬
‫‪. 3&2.4‬‬
‫‪ )7‬المر ‪ Revoke‬من‪:‬‬
‫‪-1‬أوامر ‪.DDL‬‬
‫‪-2‬أوامر ‪. DML‬‬
‫‪-3‬أوامر ‪. DQL‬‬
‫‪-4‬أوامر ‪PL/SQL‬‬
‫(‪8‬المر ‪ GRANT‬من‪:‬‬
‫‪1‬م أوامر ‪.DDL‬‬
‫‪2‬م أوامر ‪.DML‬‬
‫‪3‬م أوامر ‪.DQL‬‬
‫‪4‬م أوامر ‪.PL/SQL‬‬

‫‪)9‬المر ‪ insert‬من ‪:‬‬
‫‪1‬م أوامر ‪.DML‬‬
‫‪2‬م أوامر‬

‫‪.DQL‬‬

‫‪3‬م أوامر‪DDL .‬‬
‫‪4‬م أوامر ‪.PL/SQL‬‬

‫‪)10‬المـر ‪ Truncate‬يستخـدم في‪:‬‬
‫‪)1‬حمذف العممدة في الجمدول‪.‬‬
‫‪)2‬حمذف كمافمة الصفموف المموجمودة في الجمدول‪.‬‬
‫‪43‬‬

‫مقدمة قواعد البيانات‬
‫‪)3‬حمذف عممود واحمد‪.‬‬
‫‪)4‬حمذف صمف واحمد‪.‬‬

‫‪)11‬بفمرض أن لمديمك الجمدول ‪ emp‬التمالي ‪:‬‬

‫‪Sal‬‬
‫‪1000‬‬
‫‪2000‬‬
‫‪1500‬‬
‫‪1200‬‬

‫‪name‬‬
‫‪Ali‬‬
‫‪Hani‬‬
‫‪Mohammed‬‬
‫‪Ayman‬‬

‫‪empno‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫يكمون نماتج الواممر التماليمة هي ‪:‬‬
‫‪; select * from emp where sal > 1500‬‬
‫‪)1‬سجمل ‪1‬‬
‫‪)2‬سجمل ‪2‬‬
‫‪)3‬كمل السجملت‬
‫‪)4‬سجمل ‪4‬‬

‫‪; )select * from state where empno not in (1 , 2‬‬

‫‪)1‬سجمل ‪ 3‬و ‪4‬‬
‫‪)2‬سجمل ‪ 1‬و ‪4‬‬
‫‪)3‬سجمل ‪3‬‬
‫‪44‬‬

‫مقدمة قواعد البيانات‬
4 ‫)سجمل‬4

; select * form state where sal between 1000 and 1300

4 ‫ و‬2 ‫)سجمل‬1
4 ‫ و‬1 ‫)سجمل‬2
3 ‫)سجمل‬3
4 ‫)سجمل‬4

; ' %select * from state where name like ' A
4 ‫ و‬2 ‫)سجمل‬1
4 ‫ و‬1 ‫)سجمل‬2
3 ‫ و‬2 ‫)سجمل‬3
4 ‫)سجمل‬4

; select*from state where sal not between 1000 and 1500

2 ‫)سجمل‬1
4 ‫ و‬1 ‫)سجمل‬2
3 ‫)سجمل‬3
4 ‫)سجمل‬4

45

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

‫الفصل الثاني‬
‫تقنيات لغة ‪SQL‬‬

‫‪46‬‬

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

‫الهداف‪:‬‬
‫إعطاء الطالب صورة موض حة عن أ ساسيات الر بط ب ين الجداول في ‪ ،SQL‬ا ستخدام‬
‫الدوال ‪ Functions‬فمي ‪ ،SQL‬كيفيمة إنشاء مجموعات ممن السمجلت باسمتخدام كل ممن‬
‫‪ having, group by‬ممع جملة ‪ ،SELECT‬بالضافمة إلي إمكانيمة إنشاء اسمتعلم‬
‫فرعي ‪sub query‬‬

‫المحتويات‪:‬‬
‫‪.1‬الربط بين جدولين أو أكثر‬

‫‪47‬‬

‫مقدمة قواعد البيانات‬
‫‪.2‬اسمممممممممتخدام ‪multi-row‬‬
‫‪functions‬‬
‫‪.3‬اسممممتخدام ‪Row‬‬

‫‪Single‬‬

‫‪Functions‬‬
‫‪.4‬استخدام ‪Group by clause‬‬
‫‪.5‬استخدام ‪Having clause‬‬
‫‪.6‬اسمتخدام وعممل اسمتعلم فرعمي ‪sub‬‬
‫‪query‬‬

‫‪48‬‬

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

‫ماذا سنتعلم في هذا الفصل‪:‬‬
‫في نهاية هذا الفصل يكون الطالب قد اكتسب المهارات والمعارف التالية‪:‬‬
‫‪.1‬الربط بين جدولين أو أكثر‬
‫‪.2‬التعرف علي أنواع العلقات بين الجداول‬
‫‪.3‬استعادة بيانات من جدولين أو أكثر‬
‫‪.4‬استخدام ‪group functions‬‬
‫‪.5‬استخدام ‪Single Row Functions‬‬
‫‪.6‬إنشاء مجموعات ممن السمجلت باسمتخدام ‪group‬‬
‫‪by، Having‬‬
‫‪.7‬استخدام وعمل استعلم فرعي ‪Sub query‬‬

‫‪49‬‬

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

‫‪ -1‬الربط بين جدولين أو أكثر‬
‫كثيرا ما نحتاج إلي استرجاع بيانات من جدولين أو أكثر في استعلم واحد ‪ ،Query‬لجراء‬
‫مثل ذلك يتطلب منا إنشاء علقة بين الجدولين أو الجداول‪ ،‬حيث تكمن القوة الحقيقية لقاعدة‬
‫بيانات علئقية في قدرتها علي استرجاع سجلت من جداول مختلفة في استعلم واحد‪،‬وتوجد‬
‫لدينا العديد من السباب التي تدعونا إلي إنشاء علقة بين الجداول منها‪:‬‬
‫‪)1‬دمج العمدة من جدولين أو أكثر‪.‬‬
‫‪)2‬اختيار أعمدة موجودة في جدول واحد بناء علي شرط يطبق علي عمود أخر(‬
‫‪.)self join‬‬

‫‪1-1‬‬

‫استرجاع بيانات من جدولين أو أكثر(‪Displaying Data from‬‬

‫‪)Multiple Tables‬‬
‫عند استرجاع بيانات من جدولين أو أكثر هناك عدة اعتبارات يجب مراعاتها‬
‫‪)1‬وضع أسماء العمدة في جملة ‪.Select‬‬
‫‪)2‬وضع أسماء الجداول في جملة ‪ ،From‬علي أن يتم الفصل بينها بالفاصلة‪.‬‬
‫‪)3‬إضافة شرط الربط في جملة ‪.Where‬‬
‫‪)4‬الصيغة العامة لسترجاع بيانات من جدولين‬
‫‪table1.column, table2.column‬‬
‫‪table1, table2‬‬
‫;‪table1.column1 = table2.column2‬‬

‫‪SELECT‬‬
‫‪FROM‬‬
‫‪WHERE‬‬

‫مثال‪1‬‬
‫‪SQL>SELECT emp.empno,emp.ename,dept.dname‬‬
‫‪2 FROM‬‬
‫‪emp, dept‬‬
‫‪3 WHERE‬‬
‫;‪emp. deptno=dept.deptno‬‬

‫‪50‬‬

‫مقدمة قواعد البيانات‬
‫في هذا المثال تم استرجاع بيانات من جدولي ‪ dept, emp‬بينهما علقة‪ ،‬حيث تم كتابة‬
‫إسم الجدول قبل إسم العمود مع الفصل بينهما بنقطة في جملة ‪،select‬كتابة الجداول‬
‫مصدر البيانات في جملة ‪ ،from‬مع كتابة شرط الربط في جملة ‪.Where‬‬
‫تلميح‬

‫في المثال السابق نجد أن أعمدة الربط لها نفس السم‬

‫‪ deptno‬وهذا يسبب ‪،‬‬

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

‫‪ 1-2‬أنواع العلقات‬
‫‪.1‬الرابطة المتكافئة ‪ :equijoin‬لبد أن كل سجل في الجدول الرئيس‬
‫الب يقابله سجل أو سجلت في الجدول المرتبط به البن‬
‫‪.2‬الرابطة غير المتكافئة ‪:nonequijoin‬ل تمتلك الجداول أعمدة‬
‫وقيما مشتركة‬
‫‪51‬‬

‫مقدمة قواعد البيانات‬
‫‪.3‬الرابطة الخارجية ‪:outerjoin‬تمتلك الجداول المرتبطة أعمدة‬
‫مشتركة‪ ،‬ولكن السجلت المرتبطة يمكن أن تحتوي قيم مشتركة ويمكن أن ل‬
‫تحتوي‪ ،‬بمعني أن الجدول الرئيس الب يحتوي سجل أو سجلت ل يقابلها‬
‫سجل أو سجلت في الجدول المرتبط به البن‬
‫‪.4‬الروابط الذاتية ‪:Self join‬يمكننا عمل رابطة ذاتية عند ربط‬
‫الجدول مع نفسه‬
‫‪.5‬الرابطة الديكارتية ‪:Cartesian joins‬‬
‫للحصول علي الرابطة الديكارتية قم بحذف شرط الربط بين الجدولين في جملة ‪،Where‬‬
‫سيقوم أوراكل بربط كل سجل في الجدول الول مع كل سجل في الجدول الثاني مع نفسه‬

‫‪ 1-2-1‬الرابطة المتكافئة‬
‫فعلي سبيل المثال إذا أردت تحديد اسم الدارة لكل موظف فما عليك سوي المقارنة بين قيم فإذا‬
‫عمود ‪ deptno‬في جدول الموظفين وقيم‬

‫‪ deptno‬في جدول ‪ dept‬كانت‬

‫متساوية بمعني أن جدول ‪dept‬ل يوجد به إدارة ليس بها عاملين‪ ،‬بمعني أن كل الدارات‬
‫‪.‬يتم اختيارها في استعلم يربط الجدولين‪ ،‬إن مثل تلك العلقة تسمي بالرابطة المتكافئة‬

‫مثال‪1‬‬
‫‪SQL>SELECT emp.empno, emp. ename, emp.deptno,‬‬
‫‪Dept.deptno, dept.loc‬‬
‫‪FROM emp, dept‬‬
‫;‪WHERE emp.deptno=dept.deptno‬‬
‫‪52‬‬

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

‫‪.1‬في هذا المثال نجد أن جدول ‪ dept‬ل يوجد به إدارة ليس بها عاملين في‬
‫جدول ‪ ،emp‬حيث في هذا الستعلم تم استرجاع بيانات لجميع الدارات‪.‬‬
‫‪.2‬حيث أن عمود ‪ deptno‬له نفس السم في كل الجدولين‪ ،‬تم وضع اسم‬
‫الجدول قبل اسم العمود‪ ،‬مع الفصل بينهما بنقطة‪.‬‬
‫‪.3‬يطلق علي العلقة ‪ equijoin‬أيضا ‪ simple join‬أو ‪inner‬‬
‫‪join‬‬
‫استخدام أكثر من شرط في جملة ‪WHERE1-2-1-1‬‬
‫يمكننا عند استرجاع بيانات من أكثر من جدول‪ ،‬يمكننا إضافة أكثر من شرط في جملة الشرط‬
‫‪،‬بعد شرط الربط‪ ،‬كما بالمثال التالي‪ ،‬فمثلً لسترجاع بيانات محللي النظم من الرقم‪ ،‬السم‬
‫الوظيفة‪ ،‬رقم الدارة‪ ،‬موقع الدارة‪ ،‬لبد من إضافة شرط في ‪:where‬كما بالمثال التالي‬
‫‪SQL>SELECT empno, ename, emp.job,emp.deptno, loc‬‬
‫‪FROM emp, dept‬‬
‫‪53‬‬

‫مقدمة قواعد البيانات‬
‫‪WHERE emp.deptno=dept.deptno‬‬
‫;'‪And job='ANALYST‬‬

‫استخدام ‪ TABLE Aliases1-2-1-2‬في جملة ‪Where‬‬
‫كما سبق وتعلمنا أنه يمكن استخدام اسم اعتباري للعمود‪ ،‬يمكننا أيضا اسم اعتباري للجدول‬
‫‪ Table Aliases‬في جملة ‪WHERE‬فعلي سبيل المثال يمكننا إجراء مثال ‪ 1‬السابق ‪،‬‬
‫باستخدام السماء العتبارية للجداول‬
‫‪SQL>SELECT e.empno, e.ename, e.deptno,‬‬
‫‪d.deptno, d.loc‬‬
‫‪FROM emp e, dept d‬‬
‫;‪WHERE e.deptno=d.deptno‬‬
‫تلميح‬
‫هناك عدة اعتبارات يجب مراعاتها عند استخدام السماء العتبارية‬
‫‪)1‬السم العتباري للجدول ل يزيد عن ‪ 30‬حرفا‪.‬‬
‫‪)2‬لبد أن يستخدم السم العتباري أولً في جملة ‪WHERE‬‬
‫‪)3‬يفضل أن يكون السم العتباري معبرا‬

‫‪54‬‬

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

‫استرجاع بيانات من عدة جداول ‪)More than two tables(1-2-1-3‬‬
‫أحيانا ما نريد استرجاع بيانات من أكثر من جدولين‪ ،‬فعلي سبيل المثال نريد استرجاع‬
‫بيانات السم ورقم الطلبية والصناف وإجمالي الصناف‪ ،‬إجمالي الطلبيات للعميل‬
‫‪ ،Tarek‬يمكن استرجاع تلك البيانات من ثلث جداول هي ‪customer, ord,‬‬
‫‪ ،item‬كما بالمثال التالي‬
‫‪SQL>SELECT c.name, o.ord,i.item,i.itemtot,o.total‬‬
‫‪FROM customer c,ord o,item i‬‬
‫‪WHERE c.custid=o.custid‬‬
‫‪And o.ordid=i.ordid‬‬
‫;'‪And c.name='Tarek‬‬
‫‪EMPNO ENAME‬‬
‫‪SAL‬‬
‫‪------ ------- -----‬‬‫الرابطةغيرالمتكافئة ‪nonequijoin1-2-2‬‬
‫‪1‬‬
‫‪tarek‬‬
‫‪4000‬‬
‫مشتركة‪.‬إن مثل تلك‪2‬‬
‫‪2850‬أعمدة ولقيما‪ayman‬‬
‫نادرا ما نحتاج إلي ربط سجلت من جدولين ل يمتلكان‬
‫‪3‬‬
‫‪said‬‬
‫‪2450‬‬
‫‪RADE‬‬
‫‪LOSAL‬‬
‫رابطة غير متكافئة‪،‬كما بالمثال التالي‬
‫الرابطة تسمي‬
‫‪4‬‬
‫‪ali‬‬
‫‪2998‬‬
‫‪HISAL‬‬
‫‪emp‬‬
‫‪salgrade‬‬
‫‪5‬‬
‫‪ahmed‬‬
‫‪1350‬‬
‫‪----- ----- -----‬‬‫‪6‬‬
‫‪helal‬‬
‫‪1700‬‬
‫‪1‬‬
‫‪800 1300‬‬
‫‪7‬‬
‫‪ebrahim‬‬
‫‪160055‬‬
‫‪2‬‬
‫‪1301 1400‬‬
‫‪...‬‬
‫‪3‬‬
‫‪1401 2500‬‬
‫‪25 rows selected.‬‬
‫‪4‬‬
‫‪2500 9999‬‬

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

‫المرتب في جدول ‪emp‬يقع بين‬
‫أقل مرتب وأكبر مرتب في‬
‫جدول ‪SALGRADE‬‬
‫تلميح‬
‫‪‬العلقة بين الجدولين في عمود ‪ sal‬في جدول ‪emp‬ينحصر‬
‫بين عمودي‬
‫‪Losal,hisal‬في جدول ‪.Salgrade‬‬
‫‪‬في الروابط غير المتكافئة ل تستخدم معامل المساواة‬
‫مثال‬
‫‪SQL>SELECT emp.ename, emp.sal, salgrade.grade‬‬
‫‪FROM emp, salgrade‬‬
‫‪WHERE‬‬
‫‪emp.sal‬‬
‫;‪BETWEEN salgrade.losal AND salgrade.hisal‬‬

‫‪56‬‬

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

‫الرابطة الخارجية ‪outerjoin1-2-3‬‬

‫تمتلك الجداول المرتبطة أعمدة مشتركة‪ ،‬ولكن السجلت في الجداول المرتبطة يمكن‬
‫أن تحتوي فيم مشتركة ويمكن أن ل تحتوي‪ ،‬فعلي سبيل المثال إذا احتوي جدول ‪dept‬‬
‫علي إدارة ل يوجد بها عاملين‪ ،‬معني ذلك أن تلك الدارة لن يتم اختيارها في استعلم يربط‬
‫‪ .‬بين الجدولين‪ ،‬فعلي سبيل المثال في الشكل التوضيحي التالي نجد أن ل يوجد موظفين في‬
‫الدارة ‪ENGINEERING‬‬
‫‪dept‬‬

‫‪emp‬‬
‫‪ENAME DEPTNO‬‬
‫‪------ ---------‬‬‫‪Tarek‬‬
‫‪1‬‬
‫‪Ayman‬‬
‫‪1‬‬
‫‪Said‬‬
‫‪3‬‬
‫‪Ali‬‬
‫‪2‬‬
‫الدارة‬
‫في‬
‫موظفين‬
‫ل يوجد‬
‫‪...‬‬
‫‪ENGINEERING‬‬

‫‪DEPTNO DNAME‬‬
‫‪------ ---------‬‬‫‪1‬‬
‫‪ACCOUNTING‬‬
‫‪2‬‬
‫‪SALES‬‬
‫‪3‬‬
‫‪RESEARCH‬‬
‫‪...‬‬
‫‪10‬‬
‫‪ENGINEERING‬‬

‫فاذا قمنا بكتابة الكود التالي‪:‬‬
‫‪SQL> SELECT e.ename, d.deptno, d.dname‬‬
‫‪2 FROM emp e, dept d‬‬
‫‪57‬‬

‫مقدمة قواعد البيانات‬
‫‪3 WHERE e.deptno = d.deptno‬‬

‫نجد أن هناك سجلت ل تحقق شرط الربط( ‪)WHERE e.Deptno = d.deptno‬‬
‫وبالتالي لن يتم استرجاعها في نتيجة الستعلم‪ ،‬و حيث ل يوجد موظفين بالدارة‬
‫‪ ،ENGINEERING‬وبالتالي لن تظهر في نتيجة الستعلم طبقا لل ‪،Equijoin‬لكي نعالج‬
‫ذلك لبد من إنشاء رابطة خارجيةوذلك بوضع إشارة الجمع (‪ )+‬محاطة بقوسين وذلك بعد إسم‬
‫محدد شرط الربط في جملة ‪ Where‬وذلك للجدول الذي يحتوي السجلت التي ل يقابلها سجل‬
‫أو سجلت في الجدول المرتبط‪.‬‬

‫مثال‬
‫‪SQL>SELECT e.ename, d.deptno,‬‬

‫‪d.dname,d.loc‬‬
‫‪FROM emp e, dept d‬‬
‫;‪WHERE e.deptno(+) = d.deptno‬‬
‫‪58‬‬

‫مقدمة قواعد البيانات‬
‫في هذا المثال الدارة ‪ ENGINEERING‬سيتم عرضها في نتيجة هذا الستعلم‪ ،‬وذلك من‬
‫خلل إنشاء رابطة خارجية وذلك بوضع إشارة الجمع (‪ )+‬محاطة بقوسين بعد اسم محدد شرط‬
‫الربط في جملة ‪ Where‬وذلك للجدول الذي يحتوي السجلت التي ل يقابلها سجل أو سجلت‬
‫في الجدول المرتبط وهو في مثالنا جدول ‪.emp‬‬

‫الرابطة الذاتية ‪Selfjoin1-2-4‬‬

‫يمكننا عمل الرابطة الذاتية عند ربط جدول ما مع نفسه‪ ،‬فعندما تربط جدولً مع نفسه سوف‬
‫تكتب اسم نفس الجدول عدة مرات في جملة ‪ ،Where‬فيجب علينا استخدام أسماء اعتبارية‬
‫‪ ،Aliases‬وفي المثال الموضح بالشكل التالي حالة جدول ‪emp‬الذي يحتوي علي عمود(‬
‫‪ )mgr‬حيث يحدد رقم المدير الرقم في عمود المفتاح الرئيسي ‪ empno‬بجدول ‪،emp‬لذلك‬
‫توجد علقة من ‪ Selfjoin‬بين عمود ‪ mgr‬وعمود ‪.empno‬‬
‫(‪EMP )MANAGER‬‬
‫‪)EMP‬‬
‫‪EMPNO ENAME‬‬
‫‪MGR)WORKER EMPNO ENAME‬‬
‫‪------ ------- -----‬‬‫‪------ ------‬‬‫‪1‬‬
‫‪tarek‬‬
‫‪2‬‬
‫‪ayman‬‬
‫‪1‬‬
‫‪1‬‬
‫‪tarek‬‬
‫‪3‬‬
‫‪said‬‬
‫‪1‬‬
‫‪1‬‬
‫‪tarek‬‬
‫‪4‬‬
‫‪ali‬‬
‫‪1‬‬
‫‪1‬‬
‫‪tarek‬‬
‫‪5‬‬
‫‪ahmed‬‬
‫‪2‬‬
‫‪2‬‬
‫‪ayman‬‬
‫‪6‬‬
‫‪ebrahim‬‬
‫‪2‬‬
‫‪2‬‬
‫‪ayman‬‬

‫" ‪MGR‬في جدول ‪ WORKER‬تساوي ‪ EMPNO‬في جدول ‪" MANAGER‬‬

‫مثال‬
‫‪59‬‬

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

‫‪SQL>SELECT worker.ename,manager.ename‬‬
‫‪FROM emp worker, emp manager‬‬
‫‪WHERE worker.mgr = manager.empno‬‬

‫الرابطة الديكارتية ‪Cartesian joins1-2-4‬‬
‫للحصول علي الرابطة الديكارتية قم بحذف شرط الربط بين الجدولين في جملة ‪،Where‬‬
‫سيقوم أوراكل برط كل سجل في الجدول الول مع كل سجل في الجدول الثاني‪،‬هذا يجعل‬
‫أوراكل يقوم بإنشاء ومعالجة كمية كبيرة جدا من البيانات ل قيمة لها‪ ،‬فعلي سبيل المثال إذا كان‬
‫جدول ‪ dept‬يحتوي ‪10‬سجلت وجدول ‪ emp‬يحتوي ‪30‬سجل ‪،‬فإذا تم حذف شرط الربط‬
‫من جملة ‪Where‬في نتيجة الستعلم تكون (‪)30*10‬وهي ‪300‬سجل ‪،‬ولحساب السجلت‬
‫المسترجعة من رابطة ديكارتية للجدولين ‪ emp,dept‬يتم كتابة الستعلم التالي‬

‫;‪SQL>SELECT count(*) from dept,emp‬‬
‫‪60‬‬

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

‫‪2‬‬
‫‬‫استخدام الدوال ‪Functions‬‬

‫‪ 2-1‬إستخدام ‪Multi row Functions‬‬
‫تزودنا ‪ SQL‬بعدة دوال تجميع ‪ Group Functions‬يمكن أن تنفذ علي مجموعة من‬
‫السجلت وهي‪:‬‬

‫الدالة‬

‫الستخدام‬

‫‪COUNT‬‬

‫عدد السجلت في جدول ما‬

‫‪MAX‬‬

‫تحديد القيمة العظمي لعمود ما‬

‫‪MIN‬‬

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

‫‪AVG‬‬

‫المتوسط الحسابي لعمود ما‬

‫‪STDDEV‬‬

‫النحراف المعياري لعمود ما‬

‫‪SUM‬‬

‫المجموع الكلي لعمود ما‬

‫‪VARIANCE‬‬

‫حساب التغاير لعمود ما‬

‫تقوم الدوال التجميعية ‪ Group Functions‬بمعالجة قيم العمود المختار من الجدول‬
‫وتقدم النتيجة في شكل قيمة وحيدة تخص العمود المختار‪ ،‬ويجب عليك إتباع التعليمات التالية‬
‫عند إستخدام ‪Group function‬‬
‫‪)1‬وضع إسم العمود بين قوسين( ) بعد الدالة مباشرة‬
‫‪;Select MAX(sal)From emp‬‬
‫‪)2‬يمكن لجميع العمدة في جملة ‪ Select‬أن تكون كلها دوال تجميعية‬
‫‪;)Select MAX(sal),MIN(SAL),SUM(sal‬‬
‫‪)3‬إستخدام دالة تجميعية أخري غير مسموح به في ‪SQL‬‬
‫‪61‬‬

‫مقدمة قواعد البيانات‬
‫‪;Select MAX(avg(sal))from emp‬‬
‫‪)4‬الدوال التجميعية تتجاهل القيم الفارغة ‪NULLVALUES‬‬
‫‪)5‬يمكن إستخدام الدوال التجميعية ضمن التعابير الحسابية‬
‫‪ 2-1-1‬استخدام ‪count‬‬
‫نستخدم الدالة ‪ count‬لحساب عدد السجلت التي تحتوي قيما غير فارغة(‪not‬‬
‫‪)null‬في العمود المحدد في المجموعة‪ ،‬فمثلً لحساب عدد السجلت في جدول ‪emp‬الذي‬
‫يمتلك قيما غير فارغة في العمود ‪ ename‬يتم كتابة الكود التالي‪:‬‬
‫;‪SQL>SELECT count (ename) from emp‬‬

‫تلميح‬

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

‫‪ 2-1-1-1‬استخدام ‪)*(count‬‬
‫عندما نستبدل إسم العمود بالنجمة (*) فعندئذ تقوم الدالة ‪ count‬بحساب عدد السجلت بما‬
‫فيها السجلت التي تحتوي علي قيم فارغة‪ ،‬فعلي سبيل المثال‪:‬‬
‫)*( ‪COUNT‬‬
‫‪emp‬‬
‫;‪deptno = 10‬‬

‫‪62‬‬

‫‪SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪3 WHERE‬‬

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

‫‪ 2-1-1-2‬استخدام ‪distinct‬مع ‪count‬‬
‫يمكننا استخدام كلمة ‪ distinct‬مع ‪ ،count‬حيث تقوم باستبعاد السجلت المكررة‪،‬فعلي‬
‫سبيل المثال لحساب عدد السجلت في جدول ‪emp‬مع عدم استبعاد القيم الفارغة في العمود‬
‫‪ ename‬يتم كتابة الكود التالي‪:‬‬
‫;‪SQL>SELECT count (distinct (ename)) from emp‬‬
‫‪ 2-1-2‬استخدام ‪max‬‬
‫نستخدم الدالة ‪ MAX‬لحساب أكبر قيمة في مجموعة ما‪ ،‬يمكن استخدام الدالة ‪ MAX‬مع القيم‬
‫العددية أو النصية أو التاريخ والوقت‪ ،‬فعلي سبيل المثال‪:‬‬
‫)‪SQL> SELECT MAX(SAL), MAX(hiredate), MAX(ename‬‬
‫;‪2 FROM emp‬‬
‫تلميح‬
‫‪‬يمكن استخدام ‪ max‬مع أي نوع من البيانات‪.‬‬
‫‪‬عند استخدام ‪ MAX‬مع البيانات الحرفية تعيد أعلي قيمة‬
‫‪ ،ASCII‬وعند استخدامها مع العمدة العددية تعيد أعلي قيمة‬
‫جبرية‪ ،‬وعند استخدامها مع التاريخ والوقت تعيد القيمة الحد‬
‫ث في العمود‪.‬‬
‫‪‬تهمل الدالة ‪ MAX‬القيم ‪.NULL‬‬
‫‪ 2-1-3‬استخدام ‪MIN‬‬
‫تعيد الدالة ‪ MIN‬أصغر قيمة ل تساوي ‪ ،NULL‬كما أنها تستخدم مع أي نوع من البيانات‪،‬‬
‫فعلي سبيل المثال نستخدم الدالة ‪ MAX‬لتحديد أقل مرتب في الدارة رقم ‪10‬‬

‫‪63‬‬

‫)‪SQL> SELECT MIN(SAL‬‬
‫‪FROM emp‬‬
‫;‪WHERE deptno=10‬‬

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

‫‪ 2-1-4‬استخدام ‪AVG‬‬
‫نستخدم ‪ AVG‬لحساب المتوسط الحسابي لعمود ما‪ ،‬حيث يعيد ‪ AVG‬القيمة الوسطي لجميع القيم‬
‫التي ل تساوي ‪ NULL‬في العمود‪ ،‬وهناك عدة اعتبارات يجب مراعاتها عند استخدام ‪AVG‬‬
‫‪‬يستخدم ‪ AVG‬مع القيم العددية فقط‪.‬‬
‫‪‬يهمل ‪ AVG‬القيمة ‪ NULL‬عند حسابه للقيمة الوسطي‪.‬‬
‫‪‬يهمل ‪ AVG‬القيم المتكررة في العمود عند حسابه للقيمة الوسطي وذلك إذا‬
‫صرحنا بكتابة ‪ DISTINCT‬قبل إسم العمود‪.‬‬
‫مثال‪1‬‬

‫يمكننا حساب المتوسط الحسابي لعمود ‪ SAL‬في جدول ‪ ،EMP‬وذلك بكتابة الكود التالي‪:‬‬
‫‪SQL>SELECT‬‬
‫)‪AVG(SAL‬‬
‫; ‪FROM emp‬‬

‫يمكننا‬

‫مثال‪2‬‬

‫)‪SQL> SELECT MAX(SAL), MIN(SAL), AVG(SAL‬‬
‫;‪FROM emp‬‬

‫حساب كل أعلي‬
‫قيمة‬

‫وأدني قيمة والمتوسط الحسابي لعمود ‪ SAL‬بالكود التالي ي‬
‫مثال‪3‬‬

‫‪64‬‬

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

‫ي‬

‫مثال‪3‬‬
‫يمكننا حساب المتوسط الحسابي لعمود ‪ COMM‬في جدول ‪ ،EMP‬وذلك بكتابة الكود التالي‬
‫‪SQL>SELECT‬‬
‫)‪AVG(SAL‬‬
‫; ‪FROM emp‬‬

‫نلحظ في هذا المثال أن ‪ avg‬تتجاهل القيم ‪.null‬‬
‫‪ 2-1-4‬استخدام ‪SUM‬‬
‫نستخدم ‪ sum‬لحساب المجموع الكلي لقيم عمود ما‪ ،‬وهناك عدة اعتبارات يجب مراعاتها عند‬
‫استخدام ‪sum‬‬
‫‪‬يستخدم ‪ sum‬مع القيم العددية فقط‪.‬‬
‫‪‬تهمل ‪ sum‬القيمة ‪ NULL‬عند حسابه المجموع الكلي‪.‬‬
‫‪‬تهمل ‪ sum‬القيم المتكررة في العمود عند حسابه المجموع الكلي وذلك‬
‫إذا صرحنا بكتابة ‪ DISTINCT‬قبل إسم العمود‪.‬‬
‫مثال‬
‫يمكننا حساب المجموع الكلي لعمود ‪ SAL‬في جدول ‪ ،EMP‬وذلك بكتابة الكود التالي‪:‬‬
‫‪65‬‬

‫‪SQL>SELECT‬‬
‫)‪sum(SAL‬‬
‫;‪FROM emp‬‬

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

‫‪ 2-1-2‬استخدام الدالة ‪ nvl‬مع الدوال التجميعية ‪group Functions‬‬
‫نستخدم الدالة ‪ NVL‬مع العمدة التي تحتوي القيم الفارغة ‪ ،NULL‬حيث تقوم بمعالجة مشاكل‬
‫القيم الفارغة باستبدالها بالقيمة الصفرية وبالتالي يمكننا استخدام الدوال التجميعية مع العمدة‬
‫التي تحتوي قيم فارغة لكي تشمل جميع السجلت‪.‬‬
‫مثال‬

‫))‪SQL> SELECT AVG(NVL(comm,0‬‬
‫‪2 FROM‬‬
‫;‪emp‬‬

‫‪ 2-2‬استخدام‬
‫‪single row functions‬‬
‫تعالج ‪single row functions‬قيم العمود المختار من الجدول وتقدم النتيجة علي‬
‫شكل قيمة وحيدة لكل سجل ‪ ،‬هذا في حين تستخدم ‪ group function‬في معالجة قيم‬
‫العمود المختار من الجدول وتقدم النتيجة علي شكل قيمة وحيدة تخص العمود المختار‬
‫‪ 2-2-1‬أنواع ‪single row functions‬‬

‫‪Character‬‬

‫‪Number‬‬

‫‪Single-row‬‬
‫‪Functions‬‬

‫‪General‬‬

‫‪Conversion‬‬

‫‪Date‬‬
‫‪66‬‬

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

‫‪ 2-2-1-1‬الدوال النصية ‪character functions‬‬
‫يمتلك أوراكل عدد من الدوال التي تستخدم لتعديل أنماط البيانات النصية(‪char,‬‬
‫‪ ،)varchar‬وسوف نتعرض لهم هذه الدوال النصية في هذا الفصل وهى‪:‬‬
‫الدالة النصية‬
‫‪INITCAP‬‬

‫الستخدام‬
‫تغيير حالة الحرف الول من كل سلسلة نصية إلي حرف كبير و تحويل حالة‬
‫الحرف التالية للحرف الكبير إلي حالة الحرف الصغيرة‪.‬‬

‫‪LENGTH‬‬

‫يعيد عدد الحرف المكونة لسلسلة حرفية‬

‫‪LOWER‬‬

‫تحويل كل حرف ضمن سلسلة حرفية إلي أحرف صغيرة‬

‫‪UPPER‬‬

‫تحويل كل حرف ضمن سلسلة حرفية إلي أحرف كبيرة‬

‫‪CONCAT‬‬

‫دمج سلسلة حرفية مع سلسلة حرفية أخري‬

‫‪REPLACE‬‬

‫استبدال سلسلة حرفية بسلسلة حرفية أخري‬

‫‪SOUNDEX‬‬

‫إيجاد الكلمات المتشابهة من حيث اللفظ الصوتي‬

‫‪SUBSTR‬‬

‫نسخ الجزء المحدد من الكلمة ابتداء من حرف محدد‬

‫‪INSTR‬‬

‫يعيد قيمة عددية تمثل موضع مجموعة أحرف ضمن سلسلة حرفية‬

‫مثال‪1‬‬
‫سنقوم في المثال باستعراض أمثلة علي الدوال النصية كما هو موضح بالجدول‬
‫التالي‬
‫الدالة ‪FUNCTION‬‬

‫النتيجة ‪RESULT‬‬
‫('‪)'jicc center‬‬

‫‪('JICC Center‬‬

‫‪)'LOWER‬‬

‫('‪)'JICC CENTER‬‬

‫‪('jicc Center‬‬

‫‪)'UPPER‬‬

‫‪)'INITCAP ('JICC Center‬‬

‫('‪)'Jicc Center‬‬
‫‪JICCCENTER‬‬

‫‪)'CONCAT('JICC'),('CENTER‬‬
‫‪)SUBSTR('String',1,3‬‬

‫‪Str‬‬
‫‪67‬‬

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

‫‪)'Length('String‬‬

‫‪2‬‬

‫‪)'INSTR('String','t‬‬

‫مثال‪2‬‬

‫‪SQL>SELECT ename, CONCAT (ename, job),‬‬
‫)'‪LENGTH (ename),INSTR(ename, 'A‬‬
‫‪FROM‬‬
‫;‪emp‬‬

‫‪ 2-1-2- 2‬الدوال الرقمية ‪Number functions‬‬
‫يمتلك أوراكل عدد من الدوال الرقمية التي تستخدم مع أنواع البيانات الرقمية ‪Numeric‬‬
‫‪ ،Data‬وسوف نتعرض لهم هذه الدوال الرقمية في هذا الفصل وهى‪:‬‬
‫الستخدام‬

‫الدالة الرقمية‬
‫‪ ROUND‬تستخدم لتقريب قيمة رقمية إلي عدد أرقام محدد بعد الفاصلة‬
‫‪ TRUNC‬تستخدم لقطع أو قص القيم إلي دقة محددة‬
‫‪MOD‬‬
‫مثال‪ 1‬يستخدم لتحديد باقي القسمة الناتج عن عملية ما‬

‫سنقوم في المثال باستعراض أمثلة علي الدوال الرقمية كما هو موضح كالتالي‬
‫)‪1)ROUND (42.926,2‬‬
‫)‪2)TRUNC (44.926,2‬‬
‫‪3)MOD‬‬
‫)‪(1600,300‬‬

‫‪42.93‬‬
‫‪44.92‬‬
‫‪100‬‬

‫مثال‪2‬‬

‫‪SQL> SELECT ROUND(42.923,2),ROUND(43.923,0),‬‬
‫)‪2 ROUND (44.923,-1‬‬
‫‪68‬‬
‫‪3 FROM‬‬
‫;‪DUAL‬‬

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

3‫مثال‬

SQL>SELECT
TRUNC(35.832,2),TRUNC(65.323),
2 TRUNC (65.843,-1)
3 FROM
DUAL;

SQL>SELECT ename, sal, comm, MOD(sal,comm)
2 FROM emp;

4‫مثال‬

Date and Date functions ‫ التاريخ ودوال التاريخ‬2-2-1-3
69

‫مقدمة قواعد البيانات‬
‫يمتلك أوراكل عددا من الدوال التي تستخدم مع أعمدة التاريخ‪ ،‬حيت يمكن إظهار التاريخ بشكل‬
‫حرفي ‪،‬كما يمكننا استخدام التاريخ في عمليات الجمع والطرح‪،‬كما يمكن إضافة قيمة ما تاريخ‬
‫ما ونحصل بذلك علي قيمة تاريخ جديدة‪ ،‬وسوف نتعرض لهم هذه الدوال وهي موضحة في‬
‫الجدول التالي‬
‫الستخدام‬

‫الدالة‬

‫‪ )MONTHS_BETWEEN(date1,date2‬يحدد عدد الشهر بين تاريخين‬
‫يحدد اليوم التالي من السبوع الذي يلي‬

‫‪)'NEXT_DAY(date,'day‬‬

‫التاريخ المحدد‬
‫‪ ADD_MONTHS(date,numberof‬يستخدم لحساب تاريخ جديد بناء علي عدد‬
‫‪)months‬‬

‫‪)LAST_DAY(date1‬‬

‫محدد من الشهر‬
‫يحدد آخر يوم في الشهر الحالي أو لتاريخ‬
‫محدد‬

‫مثال‪1‬‬
‫سنقوم في المثال باستعراض أمثلة علي الدوال التاريخية كما هو موضح كالتالي‬
‫‪)'MONTHS_BETWEEN ('1-SEP-93','11-JAN-44‬‬

‫‪19.6774194‬‬

‫)‪'ADD_MONTHS('11-JAN-96',6‬‬

‫‪'11-jul-96‬‬

‫)'‪'NEXT_DAY('01-SEP-95','friday‬‬

‫‪'8-sep-95‬‬

‫)'‪'LAST_DAY('01-sep-95‬‬

‫‪'30-sep-95‬‬
‫مثال‪2‬‬
‫‪70‬‬

‫مقدمة قواعد البيانات‬
‫‪SQL> SELECT SYSDATE‬‬
‫‪2 FROM‬‬
‫;‪dual‬‬

‫‪ Sysdate‬دالة ‪ SQL Function‬تستخدم لسترجاع التاريخ والوقت‬
‫الحاليين‪.‬‬
‫‪ 2-2-1-4‬الدوال التحويلية ‪conversion functions‬‬
‫يستخدم أوراكل عدة دوال تحويلية من أهم هذه الدوال التحويلية‬
‫‪ To_number‬ويستخدم لتحويل نوع البيانات إلي نوع البيانات الرقمية‪.‬فمثلً‬
‫يمكننا استخدام ‪to_number‬لتحويل السلسلة الحرفية السنة إلي حقل رقمي وذلك‬
‫لستخدام أحد الدوال الرقمية علي هذا الحقل مثل ‪.MOD‬‬
‫ل يمكننا‬
‫‪ To_char‬ويستخدم لتحويل نوع البيانات إلي نوع البيانات النصية ‪،‬فمث ً‬
‫استخدامه لتغيير تاريخ الميلد للموظف إلي حقل حرفي وذلك لتنسيقه ليظهر بتنسيق‬
‫خاص ‪ ،‬ويعتبر من أهم الدوال التحويلية في أوراكل‪،‬ومن أهم استخداماته هو تحويل‬
‫نوع البيانات الرقمية إلي نوع البيانات النصية وذلك لضفاء عليها تنسيق خاص‬
‫مثل إظهار علمة العلمة بجوار الرقم والتحكم في رمز العلمة العشرية وعدد‬
‫الرقام بعد العلمة العشرية وهناك عدة رموز يمكننا استخدامها عند تحويل البيانات‬
‫الرقمية إلي نوع البيانات النصية ‪ ،‬كما هو موضح بالجدول التالي ‪:‬‬
‫الرمز‬
‫‪9‬‬

‫الستخدام‬
‫يمثل رقم‬

‫‪number‬‬

‫‪0‬‬

‫يمثل الصفر ‪zero‬‬

‫‪$‬‬

‫يمثل علمة الدولر ‪dollar sign‬‬
‫‪71‬‬

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

‫يمثل علمة العلمة علي النظام ‪local currency symbol‬‬

‫‪.‬‬

‫يمثل رمز العلمة العشرية ‪Decimal point‬‬

‫‪,‬‬

‫رمز تجميع الرقام ‪A thousand indicator‬‬

‫‪ To_date‬ويستخدم لتحويل نوع البيانات إلي نوع البيانات التاريخية‪.‬‬
‫مثال‪1‬‬
‫في هذا المثال سنقوم بتحويل نوع بيانات عمود ‪ hiredate‬من نوع ‪ date‬إلي نوع‬
‫البيانات الحرفية وذلك بإسخدام ‪To_char‬وذلك لعمل تنسيق خاص لحقل التاريخ‬
‫‪SQL>SELECT ename,TO_CHAR(hiredate,'fmDD Month YYYY')HIREDATE‬‬
‫‪2 FROM‬‬
‫;‪emp‬‬

‫تلميح‬
‫‪ ‬تنسيق التاريخ لبد أن يوضع بين علمتي تنصيص مفردة' '‪.‬‬
‫‪‬نفصل بين التاريخ والتنسيق بفاصلة‬
‫‪.‬‬

‫مثال‪2‬‬

‫‪72‬‬

‫مقدمة قواعد البيانات‬
‫في هذا المثال سنقوم بتحويل نوع بيانات عمود ‪ sal‬من نوع ‪ number‬إلي نوع البيانات‬
‫الحرفية وذلك بإسخدام ‪To_char‬وذلك لعمل تنسيق خاص لحقل المرتب مع استخدام الرموز‬
‫التي سبق الشارة إليها ‪SQL>SELECT TO_CHAR(sal,'$99,999') SALARY‬‬
‫;‪2 FROM emp‬‬

‫‪2‬‬
‫‪2‬‬
‫‪1‬‬
‫‪ 5‬الدوال العامة ‪General functions‬‬

‫‬‫‬‫‪-‬‬

‫من أهم الدوال العامة في ‪ single row function‬دالتي ‪nvl، decode‬وفيما‬
‫يلي توضيح لستخدامات كلتا الدالتين في ‪.SQL‬‬
‫‪ 2-2-1-5-1‬الدلة ‪NVL‬‬
‫تستخدم الدالة ‪ NVL‬لستبدال القيمة الفارغة بقيمة أخري‪ ،‬ويمكن استخدام ‪NVL‬مع نوع البيانات‬
‫الرقمية وغير الرقمية‪ ،‬ويعتبر من أهم استخدامات تلك الدالة هو التغلب علي مشكلة القيم‬
‫‪73‬‬

‫مقدمة قواعد البيانات‬
‫الصفرية في البيانات الرقمية إذا تقوم ‪ NVL‬باستبدال القيم الفارغة بقيم صفرية‪ ،‬وهناك عدة‬
‫اعتبارات يجب مراعاتها عند استخدام ‪NVL‬‬
‫‪‬تستخدم الدالة ‪ NVL‬في تحويل القيم الفارغة إلي قيم فعلية‪.‬‬
‫‪‬يمكنها معالجة أنواع البيانات الرقمية ‪ ،NUMERIC DATA‬والنصية‬
‫‪ ،CHARACTER STRING‬والتاريخية ‪.DATE‬‬
‫‪‬عند تحويل القيم الفارغة عليك باللتزام بنفس نوع البيانات ‪Data types‬‬
‫في العمود الذي يحتوي القيم الفارغة فعلي سبيل المثال‪:‬‬
‫)‪ Nvl(comm,0‬‬
‫)'‪ Nvl(job,'no job yet‬‬
‫)'‪ Nvl(hiredate,'01-jan-98‬‬
‫مثال‬
‫)‪SQL> SELECT ename,sal,comm,(sal*12)+NVL(comm,0‬‬
‫‪2 FROM‬‬
‫;‪emp‬‬

‫‪ 2-2-1-5-2‬الدلة ‪Decode‬‬
‫تسهل الدالة ‪ Decode‬إجراء الستعلم الشرطي في ‪ ،SQL‬وتماثل عمل كلً من ‪CASE،‬‬
‫‪ ،IF-THEN-ELSE‬والصيغة العامة لستخدام الدالة ‪Decode‬‬
‫مثال‬
‫‪DECODE (col/expression, search1, result1‬‬
‫)]‪[, search2, result2,...,][, default‬‬

‫‪74‬‬

‫مقدمة قواعد البيانات‬
‫في المثال التالي نستخدم ‪ Decode‬لجراء الستعلم الشرطي التالي‪ ،‬فإذا كانت الوظيفة‬
‫‪ ANALYST‬يتم حساب الحوافز علي أساس ‪ %5‬من المرتب‪ ،‬وإذا كانت الوظيفة‬
‫‪ SALESMAN‬يتم حساب الحوافز علي أساس ‪%6‬من المرتب‪ ،‬وإذا كانت الوظيفة‬
‫‪ MANAGER‬يتم حساب الحوافز علي أساس ‪%25‬من المرتب‪ ،‬فيما عدا ذلك ل يتم احتساب‬
‫حوافز‪.‬‬
‫‪SQL> SELECT job,sal,‬‬
‫‪2 DECODE(job,'ANALYST',SAL*.05‬‬
‫‪3‬‬
‫‪'salesman',‬‬
‫‪SAL*.06‬‬
‫‪4‬‬
‫‪'MANAGER', SAL*.25,‬‬
‫‪5‬‬
‫)‪SAL‬‬
‫‪6‬‬
‫‪BONUS‬‬
‫‪7 FROM‬‬
‫;‪emp‬‬

‫‪ -3‬استخدام ‪GROUP BY‬‬
‫كنا فيما سبق كانت ‪ SQL‬تعالج الجدول أو الجداول بالكامل أو السجلت المحققة لشرط معين‬
‫في جملة ‪ ،WHERE‬إل أننا في بعض الحيان نريد إجراء عمليات منطقية علي سجلت معينة‬
‫مثل إظهار القيمة العظمي والدنيا والمتوسط الحسابي لكل إدارة من الدارات علي حدة‪،‬‬
‫لجراء مثل هذا نحتاج إلي استخدام ‪ ،Group by‬حيث تستخدم جملة ‪group by‬‬
‫‪75‬‬

‫مقدمة قواعد البيانات‬
‫لتحديد العمدة التي يتم التجميع بناء عليها أو عنما نريد تطبيق الدوال التجميعية مثل ‪avg,‬‬
‫‪ sum, count, max, min‬علي سجلت من الجدول معزولة علي شكل مجموعات‬
‫فرعية‪ ،‬حيث تميز كل مجموعة بنفس قيم المعطيات‪ ،‬بحيث تقسم ‪ group by‬سجلت‬
‫الجدول إلي مجموعات صغيرة متشابهة‪ ،‬ثم يمكنك استخدام ‪group functions‬‬
‫لسترجاع معلومات تلخيصية لكل مجموعة من هذه المجموعات علي حدة‪ ،‬والصيغة العامة‬
‫لستخدام ‪ group by‬تأخذ الشكل التالي‪:‬‬
‫‪SQL>SELECT‬‬
‫)‪column, group_function(column‬‬
‫‪FROM table‬‬
‫‪[WHERE‬‬
‫]‪condition‬‬
‫]‪[GROUP BY group_by_expression‬‬
‫;]‪[ORDER BY column‬‬
‫تلميح‬
‫‪‬تقع جملة ‪ group by‬بعد جملة ‪ where‬أو بعد جملة ‪ From‬في حالة‬
‫عدم وجود جملة ‪.where‬‬
‫‪‬تقسم ‪ group by‬سجلت الجدول إلي مجموعات صغيرة متشابهة‪ ،‬ثم‬
‫يمكنك استخدام ‪ group functions‬لسترجاع معلومات تلخيصية لكل‬
‫مجموعة من هذه المجموعات علي حدة‪.‬‬
‫‪‬تتعامل ‪ GROUP BY‬مع القيم الفارغة ‪ NULL‬كمجموعة مميزة عن غيرها‪.‬‬
‫‪‬تمكننا ‪ GROUP BY‬بإنشاء مجموعات فرعية ضمن مجموعات فرعية أخري‬
‫مثل‪GROUP BY deptno,sal :‬‬

‫وهناك عدة اعتبارات يجب مراعاتها عند استخدام ‪Group by‬‬
‫‪76‬‬

‫مقدمة قواعد البيانات‬
‫‪‬يمكن أن تحتوي عدة أعمدة وتعابير‪.‬‬
‫‪‬يتم وضع فواصل بين أسماء العمدة‪.‬‬
‫‪‬يجب أن تحتوي علي كل العمدة المكتوبة بجملة‬
‫‪select‬والتي ل تستخدمها دوال التجميع‪.‬‬
‫مثال‪1‬‬
‫في هذا المثال نريد حساب المجموع الكلي لمرتبات كل إدارة علي حدة‪ ،‬لفعل ذلك يجب‬
‫علينا استخدام عبارة ‪ group by‬في جملة ‪select‬‬
‫)‪SQL> SELECT deptno, sum(sal‬‬
‫‪2 FROM emp‬‬
‫;‪3 GROUP BY deptno‬‬

‫تلميح‬
‫‪‬يجب أن تحتوي جملة ‪ group by‬علي كل العمدة المكتوبة بجملة‬
‫‪ select‬والتي ل تستخدمها دوال التجميع(وهو في المثال السابق حقل‬
‫‪ deptno‬الذي يراد يتم التجميع بناء عليه‪.‬‬
‫مثال‪2‬‬
‫يمكننا إجراء المثال السابق و حساب المجموع الكلي لمرتبات كل إدارة علي حدة‬
‫باستخدام عمود ‪ deptno‬بدون كتابة عمود ‪deptno‬في جملة ‪select‬‬
‫‪77‬‬

‫مقدمة قواعد البيانات‬
‫)‪SQL> SELECT sum(sal‬‬
‫‪2 FROM emp‬‬
‫;‪3 GROUP BY deptno‬‬

‫تلميح‬

‫‪‬يمكننا إنشاء مجموعات من السجلت باستخدام ‪ group by‬بناء علي أعمدة‬
‫ليست موجودة بجملة ‪Select‬‬
‫في هذا مثال‬
‫‪ 3‬سنوضح إمكانية قيام ‪ GROUP BY‬بإنشاء مجموعات فرعية ضمن‬
‫المثال‬
‫مجموعات فرعية أخري‬
‫)‪SQL>SELECT deptno,job,sum(sal‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫;‪3 GROUP BY deptno, job‬‬

‫تلميح‬

‫‪‬أولً يتم إنشاء مجموعات متشابهة بناء علي رقم الدارة ‪deptno‬‬
‫(‪)First,the rows are grouped by department number‬‬
‫‪‬ثانيا في مجموعات الدارة يتم عمل مجموعات متشابهة من للسجلت بناءا علي‬
‫الوظيفة‪.‬‬
‫(‪Second, within the department number groups, the‬‬
‫‪).rows are grouped by job title‬‬

‫‪78‬‬

‫مقدمة قواعد البيانات‬
‫مثال‪4‬‬

‫عند إجراء المثال التالي تظهرلنا رسالة الخطأ التالية( ‪ :ORA-00934‬وظيفة المجموعة غير‬
‫مسموحة هنا) والتي تعني أننا ل نستطيع استخدام الدوال التجميعية ‪Group Function‬‬
‫مع جملة ‪Where‬‬
‫)‪SQL> SELECT deptno, MAX(sal‬‬
‫‪2 FROM emp‬‬
‫‪3 WHERE MAX (sal) > 2000‬‬
‫;‪4 GROUP BY deptno‬‬

‫‪ -4‬استخدام ‪(Having‬تقييد الختيار ضمن المجموعة)‬
‫(‪)Restriction group selection‬‬
‫‪79‬‬

‫مقدمة قواعد البيانات‬
‫قد ل نريد استرجاع دائما جميع المجموعات الفرعية المختلفة في الجدول ضمن استعلم واحد‪،‬‬
‫فتقدم لنا ‪ SQL‬جملة ‪ Having‬لحذف المجموعات الفرعية من التي ل نريد استرجاعها في‬
‫الستعلم أو التقرير‪ ،‬وتعتبر جملة ‪ Having‬مشابهة لجملة ‪ Where‬من حيث أنها تحدد فيما‬
‫إذا كانت السجلت قابلة للختيار أو ل‪ ،‬وتحتوي جملة ‪ Having‬علي محددات تستخدم لتقييم‬
‫السجلت‪ ،‬حيث يمكننا وضع عدة شروط في جملة ‪ ،Having‬كما يمكننا استخدام المعاملت‬
‫المنطقية معها مثل ‪ ،and, or‬وقد يتبادر إلي الذهن لماذا ل نستخدم عوضا عنها جملة‬
‫‪ ،where‬ل يمكننا ذلك حيث يكمن الختلف بين جملة ‪Having‬وجملة ‪ Where‬في أن‬
‫محددات الجملة ‪ Having‬يجب أن تكون تابع تجميع‪ ،‬ويتم استخدام ‪ Having‬فقط عند يتم‬
‫حساب قيمة مجمعة بواسطة ‪ ،Select‬بينما عمل ‪ Where‬هو ترشيح السجلت التي‬
‫سيطبق عليها لحقا جملة ‪ ،Group by‬وليس ترشيح المجموعات‪ ،‬والصيغة العامة لستخدام‬
‫‪ having‬موضحة كالتالي‬

‫وهناك عدة‬

‫)‪SQL>SELECT column, group_function(column‬‬
‫‪FROM table‬‬
‫‪[WHERE‬‬
‫]‪condition‬‬
‫]‪[GROUP BY group_by_expression‬‬
‫‪[HAVING‬‬
‫]‪group_condition‬‬
‫;]‪[ORDER BY column‬‬

‫اعتبارات يجب مراعاتها عند استخدام ‪HAVING‬‬
‫‪‬تقع جملة ‪ Having‬بعد فقرة ‪.Group by‬‬
‫‪‬تستخدم ‪ Having‬فقط مع ‪ Group by‬ول يمكن استخدامها بدونها‪.‬‬
‫‪‬نستخدم ‪ Having‬مع الدوال التجميعية التالية فقط‬
‫‪))MAX,MIN,AVG,COUNT,SUM‬‬
‫‪80‬‬

‫مقدمة قواعد البيانات‬
‫‪‬يمكن تحديد عدة شروط في جملة ‪ Having‬وذلك باستخدام المعاملت المنطقية‬
‫‪.and, or‬‬
‫‪‬يمكننا استخدام كلً من ‪Having, Where‬في جملة ‪.Select‬‬

‫مثال‬

‫‪SQL>SELECT job, SUM(sal) PAYROLL‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫‪3 WHERE‬‬
‫'‪job NOT LIKE 'SALES%‬‬
‫‪4 GROUP BY job‬‬
‫‪5 HAVING‬‬
‫‪SUM (sal)<6000‬‬
‫;)‪6 ORDER BY SUM (sal‬‬

‫في المثال السابق نقوم باسترجاع الوظيفة والمجموع الكلي للمرتبات الشهرية لكل وظيفة علي‬
‫حده بشرط أن يكون المجموع الكلي للمرتبات الشهرية لكل وظيفة أقل من ‪6000‬ر باستثناء‬
‫وظيفة ‪ ،salesman‬ثم الترتيب التصاعدي بناء علي المجموع الكلي للمرتبات الشهرية‪.‬‬

‫‪-5‬استخدام وعمل استعلم فرعي(‪)Sub query‬‬

‫‪81‬‬

‫مقدمة قواعد البيانات‬
‫تمكننا ‪sql‬من جعل الستعلمات متداخلة مع بعضها البعض بشكل نموذجي‪ ،‬بحيث ينتج عن‬
‫الستعلم الداخلي (‪ )inner query‬قيما تفحص في قسم الشرط للستعلم الخارجي(‬
‫‪ )outer query‬لمعرفة فيما إذا كان الشرط سيتحقق عندها أم ل‬

‫كيف تعمل الستعلمات الفرعية ‪5-1‬‬

‫نفترض أنك تريد كتابة استعلما لسترجاع من يأخذ مرتبا أكثر من محمد ؟ نجد أننا نحتاج إلي‬
‫استعلمين‬
‫الول‪ :‬ماهو مرتب محمد؟‬
‫الثاني‪ :‬البحث عن من يأخذ مرتبا أعلي من محمد؟‬
‫و لحل مثل تلك المشكلة لبد من دمج الستعلمين معا بمعني استخدام استعلم داخل استعلم‬
‫أخر‪ ،‬حيث يعيد الستعلم الداخلي أو الفرعي يعيد قيمة يستخدمها الستعلم الرئيسي أو‬
‫الخارجي لمعرفة فيما إذا كان سيتحقق الشرط عندها أم ل‬

‫من يأخذ مرتبا أعلي من محمد‬
‫‪Outer query‬‬

‫“من يأخذ مرتب أعلي من محمد؟”‬
‫‪Sub query‬‬

‫“ ماهو مرتب محمد ؟”‬

‫تلميح‬
‫‪82‬‬

‫مقدمة قواعد البيانات‬
‫‪‬ينفذ الستعلم الفرعي أو الداخلي أولً ثم ينفذ الستعلم الرئيسي أو‬
‫الخارجي‪.‬‬
‫‪‬يولد أو يعيد الستعلم الداخلي نتيجة يستخدمها الستعلم الخارجي‬
‫لمعرفة ما إذا سيتحقق الشرط عنها أم ل‪.‬‬
‫‪‬الصيغة العامة لعمل واستخدام الستعلمات الفرعية ‪Sub‬‬
‫‪ queries‬كالتالي‬
‫‪SQL>SELECT select_list‬‬
‫‪FROM table‬‬
‫‪WHERE expr operator‬‬
‫‪(SELECT select_list‬‬
‫‪FROM‬‬
‫;)‪table‬‬

‫مثال‬

‫‪SQL> SELECT ename‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫‪5000‬‬
‫> ‪3 WHERE sal‬‬
‫‪4‬‬
‫‪(SELECT sal‬‬
‫‪5‬‬
‫‪FROM‬‬
‫‪emp‬‬
‫‪WHERE‬الذي رقمه هو ‪،1‬‬
‫مرتب الموظف‬
‫في المثال السابق نجد أن الستعلم الداخلي يحدد‬
‫‪6‬‬
‫;)‪empno=1‬‬
‫يأخذ الستعلم الخارجي أوالرئيسى هذه النتيجة ويستخدمها لسترجاع الموظفين الذين يتقاضون‬
‫مرتبا أعلي من هذا المرتب‬

‫‪ 5-2‬أنواع الستعلمات الفرعية ‪Types Of Sub queries‬‬
‫يوجد لدينا نوعين من الستعلمات الفرعية وهي كالتالي‪:‬‬

‫‪ 5-2-1‬الستعلمات الفرعية التي تعيد سجل واحد‬
‫‪))single-row sub queries‬‬
‫‪ 5-2-2‬الستعلمات الفرعية التي تعيد أكثر من سجل واحد‬
‫‪))Multiple-row sub queries‬‬
‫‪83‬‬

‫مقدمة قواعد البيانات‬
‫ الستعلمات الفرعية التي تعيد أكثر من عمود واحد‬5-2-3
))Multiple-column sub queries

Single-row subquery
Main query
Subquery

returns

tarek

Multiple-row subquery
Main query
returns
Subquery

ANALYST
MANAGER

Multiple-column subquery
Main query
returns
Subquery

ANALYST
MANAGER 5000

‫ الستعلمات الفرعية التي تعيد سجل واحد‬5-2-1
، ‫)) تعيد سجل واحد فقط‬single-row sub queries ‫كما سبق وتعلمنا أن‬
: ‫ويستخدم ذلك النوع من الستعلمات مع عوامل المقارنة الموضحة بالجدول التالي‬
Operator ‫المعامل‬

Meaning ‫المعني‬
84

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

‫=‬

‫أكبرمن‬

‫>‬

‫أكبرمن أو يساوي‬

‫>=‬

‫أقل من‬

‫<‬

‫أقل من أو يساوي‬

‫<=‬

‫ل يساوي‬

‫<>‪= !Or‬‬

‫مثال‪1‬‬
‫في هذا المثال سنقوم باسترجاع بيانات الموظفين(السم‪ ،‬الوظيفة ) للموظفين الذين لهم نفس‬
‫الوظيفة للموظف رقم ‪555‬‬
‫‪SQL>SELECT ename,job‬‬
‫‪FROM emp‬‬
‫=‪WHERE job‬‬
‫‪(SELECT job‬‬
‫‪FROM emp‬‬
‫;)‪Where empno=555‬‬
‫مثال‪2‬‬

‫في هذا المثال سنقوم باسترجاع بيانات الموظفين(السم‪ ،‬الوظيفة ) للموظفين الذين لهم نفس‬
‫الوظيفة للموظف رقم ‪ 7698‬ومرتباتهم أكبر من راتب الموظف رقم ‪7934‬‬

‫‪85‬‬

‫مقدمة قواعد البيانات‬
‫‪SQL> SELECT‬‬
‫‪ename, job‬‬
‫‪2 FROM‬‬
‫‪emp‬‬
‫‪MANAGER‬‬
‫‪3 WHERE‬‬
‫= ‪job‬‬
‫‪4‬‬
‫‪(SELECT job‬‬
‫‪5‬‬
‫‪FROM‬‬
‫‪emp‬‬
‫‪6‬‬
‫‪WHERE‬‬
‫)‪empno = 7698‬‬
‫‪7 AND‬‬
‫> ‪sal‬‬
‫‪1300‬‬
‫‪8‬‬
‫‪(SELECT‬‬
‫‪sal‬‬
‫‪9‬‬
‫‪FROM emp‬‬
‫‪10‬‬
‫‪WHERE‬‬
‫;)‪empno = 7934‬‬

‫تلميح‬

‫‪‬لبد من وضع الستعلم الفرعي بين قوسين‪.‬‬
‫‪‬ل تستخدم جملة ‪ Order By‬داخل الستعلم الفرعي‪.‬‬
‫‪ 5-2-1-1‬استخدام الدوال التجميعية في ‪Sub query‬‬
‫تتميز الدوال التجميعية بأنها تولد أو تعيد قيمة وحيدة مهما كان عدد السجلت المختارة‪ ،‬وينبغي‬
‫علينا النتباه إلي أن الدوال التجميعية التي هي دوال تجميع معرفة في جملة ‪Group By‬‬
‫ستولد وتعيد عدة قيم‪ ،‬ولهذا ل يسمح باستخدامها مع هذا النوع من الستعلمات الفرعية التي‬
‫تعيد سجل واحد‪ ،‬حتى لو استخدامنا ‪ Group by‬و ‪ Having‬لتوليد مجموعة وحيدة لخرج‬
‫الستعلم الفرعي‪ ،‬ولهذا يجب علينا استخدام الدوال التجميعية المرغوبة في جملة ‪where‬‬
‫التي تحذف المجموعات غير المرغوبة‪.‬‬
‫مثال‬
‫‪86‬‬

‫مقدمة قواعد البيانات‬
‫في هذا المثال سنقوم باسترجاع بيانات الموظف (السم‪ ،‬الوظيفة‪ ،‬المرتب ) الذي يتقاضى‬
‫أعلي مرتب‪ ،‬حيث يمكننا تنفيذ هذا الستعلم باستخدام ‪ group function‬داخل‬
‫الستعلم الفرعي كما بالتالي‪:‬‬

‫‪SQL> SELECT ename, job, sal‬‬
‫‪2 FROM emp‬‬
‫‪3 WHERE‬‬
‫= ‪sal‬‬
‫‪5000‬‬
‫‪4‬‬
‫)‪(SELECT MAX(sal‬‬
‫‪5‬‬
‫‪FROM‬‬
‫;)‪emp‬‬

‫‪ 5-2-1-2‬استخدام ( ‪group by‬و ‪ )having‬مع ‪Sub query‬‬
‫يمكن للستعلمات الفرعية أن تستخدم في جملة ‪ ،having‬ويمكنها استخدام الدوال التجميعية‬
‫أو تستخدم ‪ group‬و ‪ having‬كما بالمثال التالي‪:‬‬
‫مثال‬
‫في هذا المثال نريد إنشاء مجموعات أصغر مرتبات بناء علي عمود رقم الدارة ‪ ،‬مع‬
‫تقييد ذلك بشرط وهو أن يكون أقل مرتب في تلك الدارات أكبر من أقل مرتب في الدارة رقم‬
‫‪10‬‬
‫)‪SQL> SELECT deptno, MIN(sal‬‬
‫‪2 FROM emp‬‬
‫‪3 GROUP BY deptno‬‬
‫‪4 HAVING‬‬
‫> )‪MIN(sal‬‬
‫‪5‬‬
‫)‪(SELECT MIN(sal‬‬
‫‪6‬‬
‫‪FROM emp‬‬
‫‪7‬‬
‫‪WHERE‬‬
‫;)‪deptno = 10‬‬
‫‪87‬‬

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

‫‪‬يجب علينا التأكد عند استخدام الستعلمات الفرعية في القسم الشرطي‬
‫(الذي فيه عامل المساواة أو عدم المساواة ) من أن الستعلم الفرعي‬
‫سيعيد سجلً واحدا فقط‪ ،‬وإل سيصدر خطأ إذا أعاد أكثرمن قيمة واحدة‪،‬‬
‫ولن يفشل المر إذا لم يعيد الستعلم الفرعي أية قيمة ولكننا عندها لن‬
‫نحصل علي خرج من الستعلم الفرعي‪.‬‬
‫‪ 5-2-2‬الستعلمات الفرعية التي تعيد أكثر من سجل واحد‬
‫تعيد الستعلمات الفرعية متعددة السجلت أكثر من سجل‪ ،‬وتتطلب هذه النواع من‬
‫الستعلمات الفرعية معاملً يمكن استخدامه لتقييم عدة قيم‪ ،‬فعلي سبيل المثال ل الحصر يمكننا‬
‫استخدام المعامل ‪ IN‬مع الستعلمات الفرعية متعددة السطر لنه يقييم مصفوفة من القيم‪،‬‬
‫والجدول التالي يوضح المعاملت التي يمكننا استخدامها لتقييم الستعلمات متعددة السجلت‪.‬‬

‫‪88‬‬

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

‫الوصف‬
‫يكون المحدد مسماويا لي ممن القيمم التمي يعيدهما السمتعلم‬

‫‪IN‬‬

‫الفرعي لهذا الشرط حتي يصبح محققا(‪)True‬‬
‫يقارن المحدد بكمل قيممة يعيدهما السمتعلم الفرعمي ‪ ،‬ويكون‬

‫‪ANY‬‬

‫الشرط محققما (‪)True‬إذا كان أي عنصمر ممن المجموعمة‬
‫يحقق الشرط‬
‫يقارن المحدد ب كل قي مة يعيد ها ال ستعلم الفر عي ‪،‬‬

‫‪ALL‬‬

‫ويكون الشرط محققَا‬
‫في هذا المثال نريد استرجاع بيانات الموظفين (رقم الموظف‪ ،‬السم‪ ،‬الوظيفة )‬
‫مثال‬
‫ذوي المرتبات أقل من أي ‪ clerk‬والذين ل يعملون في وظيفة ‪clerk‬‬
‫‪empno, ename, job‬‬
‫‪1300‬‬
‫‪emp‬‬
‫‪1100‬‬
‫‪sal < ANY‬‬
‫‪1300‬‬
‫‪(SELECT sal‬‬
‫‪950‬‬
‫‪FROM emp‬‬
‫‪WHERE‬‬
‫)' ‪job = ' CLERK‬‬
‫;'‪job <> 'CLERK‬‬
‫تلميح‪ :‬تعني أقل من ‪minimum‬‬
‫‪any <‬‬

‫‪SQL> SELECT‬‬
‫‪2 FROM‬‬
‫‪3 WHERE‬‬
‫‪4‬‬
‫‪5‬‬
‫‪6‬‬
‫‪7 AND‬‬

‫‪ :any >‬تعني أقل من ‪maximum‬‬
‫‪ :any =‬تعادل تكافيء معامل ‪IN‬‬
‫‪ 5-2-3‬الستعلمات الفرعية التي تعيد أكثر من عمود واحد‬
‫‪))Multiple-column sub queries‬‬
‫رأينا في المثلة السابقة استعلمات تستخدم أعمدة وحيدة كمحددات تقييم‪ ،‬وأحيانا لتنفيذ نوع من‬
‫الشروط يجب علينا استعراض عدة أعمدة وكأنها محدد واحد‪ ،‬ويجب إحاطة تلك العمدة بين‬
‫قوسين ووضع فواصل بين العمدة‪.‬‬
‫مثال‬
‫‪SQL> SELECT ename, deptno, sal, comm‬‬
‫‪2 FROM emp‬‬
‫‪3 WHERE‬‬
‫‪(sal, NVL (comm,0)) IN‬‬
‫‪4‬‬
‫)‪(SELECT sal, NVL (comm,0‬‬
‫‪5‬‬
‫‪FROM‬‬
‫‪emp 89‬‬
‫‪6‬‬
‫;)‪WHERE deptno = 30‬‬

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

‫في المثال السابق نريد استرجاع بيانات الموظف(السم‪ ،‬رقم الدارة‪ ،‬المرتب‪ ،‬الحوافز)‪ ،‬لي‬
‫موظف يتماثل في المرتب والحوافز مع أي موظف في الدارة رقم ‪.30‬‬

‫المجموعة الولي‪:‬‬
‫ضع علمة (‬

‫السئلة‬

‫) أمام العبارة الصحيحةوعلمة (×) أمام العبارة الخاطئة مع‬

‫تصحيح الخطأ‪.‬‬
‫‪)1‬ينفذ الستعلم الفرعي أو الداخلي أولً ثم ينفذ الستعلم الرئيسي أو‬
‫الخارجي‬
‫‪)2‬فمي الرابطمة المتكافئة لبمد أن كمل سمجل فمي الجدول الرئيمس الب‬
‫يقابله سجل أو سجلت في الجدول المرتبط به البن‪.‬‬

‫‪90‬‬

‫مقدمة قواعد البيانات‬
‫‪)3‬الرابطة غير المتكافئة تمتلك الجداول أعمدة وقيما مشتركة‪.‬‬
‫‪)4‬في الرابطة الخارجية تكون السجلت المرتبطة يمكن أن تحتوي قيم‬
‫مشتركة ويمكن أن ل تحتوي‪.‬‬
‫‪)5‬الروابط الذاتية ‪ Self join‬تمكننا من عمل رابطة ذاتية عند‬
‫ربط الجدول مع نفسه‪.‬‬
‫‪)6‬يطلق علي العلقة ‪ equijoin simple join‬أو‬
‫‪inner join‬‬
‫‪)7‬في جملة ‪ Where‬يمكننا استخدام ‪.TABLE Aliases‬‬
‫‪)8‬تقوم الدوال التجميعية ‪ Group Functions‬بمعالجة قيم‬
‫العمود المختار من الجدول وتقدم النتيجة في شكل قيمة وحيدة تخص‬
‫العمود المختار‪.‬‬

‫‪;Select MAX(avg(sal))from emp)9‬‬
‫‪ )*( Count )10‬تقوم بحساب عدد السجلت بما فيها السجلت التي‬
‫تحتوي علي قيم فارغة‪.‬‬
‫‪)11‬يمكن لجميع العمدة في جملة ‪ select‬أن تكون كلها دوال‬
‫تجميعية‪.‬‬
‫‪)12‬يمكن استخدام الدوال التجميعية ضمن التعابير الحسابية‪.‬‬
‫‪)13‬يستخدم ‪ AVG‬مع القيم العددية فقط ويهمل ‪AVG‬القيمة ‪NULL‬‬
‫عند حسابه للقيمة الوسطي‪.‬‬

‫‪91‬‬

‫مقدمة قواعد البيانات‬
‫‪ To_number)14‬ويستخدم لتحويل نوع البيانات إلي نوع البيانات‬
‫الحرفية‪.‬‬
‫‪ To_char)15‬ويستخدم لتحويل نوع البيانات الحرفية إلي نوع‬
‫البيانات الرقمية‪.‬‬

‫المجموعة الثانية‪:‬‬
‫أسئلة لتدريب الطلب على أسئلة الختيار المتعدد‪:‬‬
‫‪)1‬من السباب التي تدعونا إلي إنشاء العلقات‬
‫‪)a‬دمج العمدة من جدولين أو أكثر‪.‬‬
‫‪)b‬إختيار أعمدة موجودة في جدول واحد بناء علي شرط يطبق علي عمود‬
‫آخر‪.‬‬
‫‪.2&1)c‬‬
‫‪)d‬ليس شيء مما سبق‪.‬‬
‫‪ )2‬عند استرجاع بيانات من جدولين أو أكثر يتم إضافة شرط الربط في عبارة ‪.Where‬‬
‫‪)a‬العبارة صحيحة‪.‬‬
‫‪)b‬العبارة خاطئة‪.‬‬
‫‪)3‬من أنواع العلقات بين الجداول‬
‫‪)a‬الرابطة المتكافئة‪.‬‬
‫‪)b‬الرابطة الذاتية‪.‬‬
‫‪)c‬الرابطة الخارجية ‪.‬‬

‫‪92‬‬

‫مقدمة قواعد البيانات‬
‫‪)d‬جميع ما سبق‪.‬‬
‫‪)4‬في الرابطة الخارجية ‪:Outer join‬ـ‬
‫‪)a‬تمتلك الجداول أعمدة مشتركة‪.‬‬
‫‪)b‬السجلت يمكن أن تحتوي قيم مشتركة أول تحتوي‪.‬‬
‫‪2&1)c‬‬
‫‪)d‬ليس شيء مما سبق ‪.‬‬
‫‪)5‬الرابطة الديكارتية تقوم ‪:‬ـ‬
‫‪)a‬بحذف شرط الربط بين الجدولين في جملة ‪.Where‬‬
‫‪)b‬يقوم أوراكل بربط كل سجل في الجدول الول مع كل سجل في الجدول الثاني‪.‬‬
‫‪)c‬يقوم أوراكل بإنشاء ومعالجة كمية كبيرة جدا من البيانات‬
‫‪)d‬جميع ما سبق‬
‫‪ )6‬هناك عدة اعتبارات يجب إتباعها عند استخدام ‪ group functions‬من‪:‬‬
‫‪)a‬وضع إسم العمود بين قوسين( ) بعد الدالة مباشرة‬
‫‪)b‬يمكن لجميع العمدة في جملة ‪ Select‬أن تكون كلها دوال تجميعية‬
‫‪)c‬استخدام دالة تجميعية أخري غير مسموح به في ‪SQL‬‬
‫‪)d‬الدوال التجميعية تتجاهل القيم الفارغة ‪NULLVALUES‬‬
‫‪)e‬يمكن استخدام الدوال التجميعية ضمن التعابير الحسابية‬
‫‪)f‬جميع ما سبق‬
‫‪ )7‬الدالة ‪:MAX‬‬
‫‪)a‬يمكن استخدام ‪ max‬مع أي نوع من البيانات‪.‬‬
‫‪93‬‬

‫مقدمة قواعد البيانات‬
‫‪)b‬تهمل الدالة ‪ MAX‬القيم ‪.NULL‬‬
‫‪2&1)c‬‬
‫‪)d‬يمكن استخدام ‪ max‬مع نوع البيانات الحرفية فقط‪.‬‬
‫‪)8‬الدالة ‪:AVG‬‬
‫‪)a‬يستخدم ‪ AVG‬مع القيم العددية فقط‪.‬‬
‫‪)b‬يهمل ‪ AVG‬القيمة ‪ NULL‬عند حسابه للقيمة الوسطي‪.‬‬
‫‪2&1)c‬‬
‫‪)d‬يستخدم ‪ AVG‬مع أي نوع من البيانات‪.‬‬
‫‪)9‬الدالة ‪:MONTH_BETWEEN‬‬
‫‪)a‬تحدد عدد الشهر بين تاريخين‪.‬‬
‫‪)b‬يحدد اليوم التالي من الشهر القادم الذي يلي التاريخ المحدد‪.‬‬
‫‪)c‬يحدد تاريخ جديد بناء علي عدد محدد من الشهر‬
‫‪2&1)d‬‬
‫‪)10‬الدالة ‪:LAST_DAY‬‬
‫‪)a‬تحدد عدد الشهر بين تاريخين‪.‬‬
‫‪)b‬يحدد اليوم التالي من الشهر القادم الذي يلي التاريخ المحدد‪.‬‬
‫‪)c‬يحدد تاريخ جديد بناء علي عدد محدد من الشهر‬
‫‪)d‬يحدد آخر يوم في الشهر الحالي أو التاريخ المحدد‪.‬‬

‫‪)11‬هناك عدة اعتبارات يجب مراعاتها عن استخدام الدالة ‪:nvl‬‬
‫‪94‬‬

‫مقدمة قواعد البيانات‬
‫‪)a‬تستخدم الدالة ‪ NVL‬في تحويل القيم الفارغة إلي قيم فعلية‪.‬‬
‫‪)b‬يمكنها معالجة أنواع البيانات الرقمية ‪،NUMERIC DATA‬‬
‫والنصية ‪ ،CHARACTER STRING‬والتاريخية ‪.DATE‬‬
‫‪)c‬عند تحويل القيم الفارغة عليك باللتزام بنفس نوع البيانات ‪Data‬‬
‫‪ types‬في العمود الذي يحتوي القيم الفارغة‪.‬‬
‫‪A&b)d‬‬
‫‪A&b&c)e‬‬
‫‪:group by) 12‬‬
‫‪)a‬تتعامل ‪ GROUP BY‬مع القيم الفارغة ‪ NULL‬كمجموعة مميزة عن غيرها‪.‬‬
‫‪)b‬تمكننا ‪ GROUP BY‬بإنشاء مجموعات فرعية ضمن مجموعات فرعية‬
‫أخري‬
‫‪A&b)c‬‬
‫‪)d‬ليس شيء مما سبق‪.‬‬
‫‪:HAVING) 13‬‬
‫‪)a‬نستخدم ‪ Having‬مع الدوال التجميعية التالية فقط‬
‫‪)b‬يمكننا استخدام كلً من ‪Having, Where‬في جملة ‪.Select‬‬
‫‪)c‬تقع جملة ‪ Having‬بعد فقرة ‪.Group by‬‬
‫‪A&B&C)d‬‬
‫‪A&C)e‬‬

‫‪95‬‬

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

‫‪:HAVING) 14‬‬
‫‪)f‬نستخدم ‪ Having‬مع الدوال التجميعية التالية فقط‬
‫‪)g‬يمكننا استخدام كلً من ‪Having, Where‬في جملة ‪.Select‬‬
‫‪)h‬تقع جملة ‪ Having‬بعد فقرة ‪.Group by‬‬
‫‪A&B&C)i‬‬
‫‪A&C)j‬‬

‫‪96‬‬

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

‫الفصل الثالث‬
‫معالجة البيانات باستخدام‬

‫‪SQL‬‬

‫‪97‬‬

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

‫الهداف‪:‬‬
‫إعطاء الطالب صورة موض حة عن كيف ية إضا فة سجلت جديدة إلي الجداول‪ ،‬وكيف ية‬
‫حذف وتعديل بيانات موجودة في قاعدة البيانات‪ ،‬وكيفية إنشاء وإضافة محددات من نوع‬
‫‪Primary key, foreign key‬‬

‫المحتويات‪:‬‬
‫‪.1‬مقدمة‬
‫‪.2‬كيفية إضافة سجلت جديدة للجداول‪.‬‬
‫‪98‬‬

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

‫‪.3‬كيفية حذف بيانات موجودة في قاعدة البيانات ‪.‬‬

‫‪.4‬كيفية تعديل البيانات الموجودة في قاعدة البيانات ‪.‬‬

‫‪.5‬كيفية إنشاء جدول وإضافة محددات من نوع‬
‫(‪)primary key, foreign key‬‬

‫‪99‬‬

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

‫ماذا سنتعلم في هذا الفصل ‪:‬‬
‫في نهاية هذا الفصل يكون الطالب قد اكتسب المهارات والمعارف التالية ‪:‬‬
‫‪.1‬إنشاء وتعديل وإسقاط الجداول‬
‫‪.2‬كيفية إضافة سجلت جديدة للجداول‪.‬‬

‫‪.3‬كيفية حذف بيانات موجودة في قاعدة البيانات ‪.‬‬

‫‪.4‬كيفية تعديل البيانات الموجودة في قاعدة البيانات ‪.‬‬

‫‪.5‬كيفية إنشاء جدول وإضافة محددات من نوع‬
‫(‪)primary key, foreign key‬‬

‫‪100‬‬

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

‫مقدمة‬
‫كما تعلمنا سابقا أن عبارات ‪ SQL‬تنقسم إلي ثلث فئات رئيسية وهي كالتالي‪:‬‬
‫‪ -1‬لغة تعريف البيانات ‪DDL‬‬
‫هي مجموعة من أوامر ‪ SQL‬تستطيع من خللها إنشاء وتعريف الكائنات في قاعدة‬
‫البيانات‪ ،‬وتقوم هذه الواممر بإنشاء أو إسمقاط أو تغييمر كائن قاعدة البيانات‪ ،‬وهمي اختصمارا‬
‫للكلمات(‪Language‬‬

‫‪Definition‬‬

‫‪ ،)Data‬وممن أهمم أوامرهما ‪Create,‬‬

‫‪Alter, Drop, Rename, Truncate‬‬

‫‪-2‬لغة معالجة البيانات ‪DML‬‬
‫هي مجمو عة من العبارات ال تي ت ستطيع من خلل ها معال جة البيانات الموجودة في‬
‫قاعدة البيانات من إدراج البيانات وتحديث ها أو تحد يد أو حذف البيانات‪،‬و هي اخت صارا للكلمات(‬
‫‪Language‬‬

‫‪ ، )Data‬وممممن أهمممم أوامرهممما‬

‫‪Manipulation‬‬

‫‪Insert,Update,Delete‬‬

‫‪ -3‬لغة التحكم والصلحيات ‪DCL‬‬
‫هي مجمو عة من أوا مر ‪ SQL‬ت ستطيع من خلل ها م نح أو سحب إمتيازات ا ستخدام‬
‫كائن قاعدة البيانات‪ ، ،‬وهي اختصارا للكلمات(‪ ، )Data Control Language‬ومن‬
‫أهم أوامرها ‪Grant, Revoke‬‬
‫سنتعلم في هذا الفصل كيفية التعامل مع البيانات المخزنة في قاعدة البيانات من إضافة سجلت‬
‫أو حذف سجلت أو تغيير قيمة مخزنة في سجل‪ ،‬بالضافة إلي كيفية إنشاء الجداول وإضافة‬
‫محددات من نوع ‪primary key, foreign key‬‬
‫‪101‬‬

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

‫‪ -1‬كيفية إضافة سجلت جديدة‬
‫تمتلك معظم برامج أنظمة قواعد البيانات أدوات ممتازة لدخال وتعديل وحذف البيانات من‬
‫الجداول‪ ،‬وهي بل شك أفضل وأسرع بكثير من إدخال البيانات بعبارات ‪ ،sql‬إل أن ذلك‬
‫يمكن المبرمج من معالجة البيانات من ضمن برامجه التي يكتبها‪ ،‬ونستطيع إضافة سجلت‬
‫جديدة إلي الجدول باستخدام عبارة ‪،insert‬ويوجد لدينا صيغتين من عبارة ‪،insert‬‬
‫الولي تسمح بإضافة سجل واحد في نفس الوقت إلي الجدول ‪،‬والثانية تسمح باختيار‬
‫مجموعة سجلت من جدول وإدراجها في جدول آخر‬

‫‪ 1-1‬إضافة سجل واحد إلي الجدول‬
‫كما وضحنا سابقا أن عبارة ‪ insert‬لها صيغتين الولي والتي نحن بصددها تمكننا من‬
‫إضافة سجل واحد إلي الجدول في نفس الوقت‪ ،‬والصيغة العامة لها تأخذ الشكل التالي‪:‬‬

‫])]‪INSERT INTO table [(column [, column...‬‬
‫‪VALUES‬‬
‫;)]‪(value [, value...‬‬
‫مما سبق نجد أن‬
‫الصيغة العامة لعبارة ‪ insert‬تتألف مما يلي‪:‬‬
‫‪ insert,into,values.1‬هي كلمات محجوزة في ‪sql‬‬
‫‪ Table.2‬ويشير إلي إسم جدول وحيد في قاعدة البيانات ‪ ،‬وبالتحديد الجدول الذي‬
‫نريد إدراج السجلت به‪.‬‬
‫‪ :Column.3‬وتشير إلي أعمدة الجدول‪.‬‬
‫‪.4‬ل ئحة من القيم محاطة بين قوسين تقوم ‪ sql‬بإدراجها في العمدة المقابلة لها‬
‫علي الترتيب‪.‬‬
‫‪102‬‬

‫مقدمة قواعد البيانات‬
‫مثال‪1‬‬
‫لدراج سجل من البيانات إلي جدول ‪ ،dept‬نقوم بكتابة الكود التالي‪:‬‬
‫)‪SQL> INSERT INTO dept (deptno, dname, loc‬‬
‫‪2 VALUES‬‬
‫;)'‪(50, 'DEVELOPMENT', 'cairo‬‬
‫‪1 row created.‬‬
‫مثال‪2‬‬
‫لدراج سجل من البيانات إلي جدول ‪ ،emp‬نقوم بكتابة الكود التالي‪:‬‬
‫‪SQL> INSERT INTO EMP (empno, ename, job,‬‬
‫‪2‬‬
‫‪mgr, hiredate, sal, comm,‬‬
‫‪3‬‬
‫)‪deptno‬‬
‫‪4 VALUES‬‬
‫‪(7369, 'ayman', 'programmer',‬‬
‫‪5‬‬
‫‪7372, SYSDATE, 4000, NULL,‬‬
‫‪6‬‬
‫;)‪50‬‬
‫‪1 row created.‬‬
‫تلميح تتطابق العمدة والقيم المقابلة لها في نوع البيانات ‪data‬‬
‫‪‬يجب أن‬
‫‪.types‬‬
‫‪‬لئحة القيم لبد أن تأخذ نفس ترتيب العمدة في الجدول المراد إضافة‬
‫السجلت إليه‪.‬‬
‫‪‬لبد من وجود علقة واحد إلي واحد بين العمدة ولئحة القيم‪ ،‬بمعني أن‬
‫توجد قيمة واحدة من أجل كل عمود وبنفس الترتيب‪.‬‬
‫‪‬قد نجهل قيمة أحد الحقول‪ ،‬وذلك بكتابة كلمة ‪ ،NULL‬بشرط أل يكون‬
‫العمود المقابل للقيمة معرفا بالخاصية ‪.NOT NULL‬‬
‫‪‬قد تسبب ‪ INSERT‬مشكلة في التجانس والتكامل المرجعي (وسيتم‬
‫تناول ذلك عند إنشاء العلقات بين الجداول لحقا في هذا الفصل)‪.‬‬
‫‪‬لبد من وضع الحرف النصية والتاريخ بين علمتي تنصيص مفردة' '‪.‬‬
‫‪103‬‬

‫مقدمة قواعد البيانات‬
‫‪‬للتأكد من تنفيذ العبارة السابقة وإضافة السجل إلي جدول ‪ emp‬قم بتنفيذ‬
‫العبارة التالية‪:‬‬
‫;‪From emp‬‬

‫* ‪SQL>Select‬‬

‫‪ 1-2‬إضافة عدة سجلت إلي الجدول‪:‬‬
‫نلحظ أنه ليس من المنطقي أن تقوم بإدخال ‪ 20,000‬سجل مثلً في أحد الجداول سجلً‬
‫سجلً باستخدام الصيغة الولي من عبارة ‪ ،insert‬ولضافة عدة سجلت في نفس‬
‫الوقت تمكننا الصيغة الثانية من عبارة ‪ insert‬بإضافة عدة سجلت إلي جدولنا مختارة‬
‫من جدول آخر ‪ ،‬والصيغة العامة لها هي‪:‬‬

‫مما سبق نجد أن الصيغة‬

‫)]‪INSERT INTO table([(column [, column...‬‬
‫)])]‪Select ([(column [, column...‬‬
‫;)]‪[where conditions‬‬

‫العامة لعبارة ‪ insert‬تتألف مما يلي‪:‬‬
‫‪ insert, into.1‬هي كلمات محجوزة في ‪Sql‬‬
‫‪ Table.2‬ويشير إلي إسم جدول وحيد في قاعدة البيانات ‪ ،‬وبالتحديد الجدول الذي‬
‫نريد إدراج السجلت به‪.‬‬
‫‪ :Column.3‬وتشير إلي أعمدة الجدول‪.‬‬
‫‪.4‬عبارة ‪ :select‬هي عبارة ‪ select‬عادية تستخدم لنتخاب العمدة التي‬
‫ستنسخ محتوياتها إلي الجدول المراد إضافة السجلت إليه ‪ ،‬فعلي سبيل المثال نريد‬
‫إضافة سجلت أمان إلي الجدول ‪ secemp‬من أجل كل سجل من سجلت جدول‬
‫‪ emp‬فعلي سبيل المثال‬
‫‪104‬‬

‫مقدمة قواعد البيانات‬
‫‪SQL>INSERT INTO secemp‬‬
‫)‪(empno,name,job,mgr,sal,comm,deptno‬‬
‫)‪(Select (mpno,name,job,mgr,sal,comm,deptno‬‬
‫;‪From emp‬‬

‫‪-2‬حذف‬
‫بيانات‬
‫موجودة فـي‬

‫قاعدة البيانات (‪)Deleting Record‬‬
‫نستخدم عبارة ‪ DELETE‬لحذف سجلت من جدول ما‪ ،‬وتأخذ الصيغة العامة لعبارة‬
‫‪ DELETE‬الشكل التالي‪:‬‬
‫مما‬

‫‪SQL>DELETE [FROM] table‬‬
‫‪[WHERE‬‬
‫;]‪condition‬‬

‫سبق نجد أن‬
‫الصيغة العامة‬
‫لعبارة ‪ Delete‬تتألف مما يلي‪:‬‬
‫‪ :Delete.1‬هي أحد الكلمات المحجوزة في ‪.Sql‬‬

‫‪ :From .2‬هي أحد الكلمات المحجوزة في ‪Sql‬ويليها إسم الجدول المراد حذف‬
‫السجلت منه‬
‫‪ :WHERE.3‬هي أحد الكلمات المحجوزة في ‪ Sql‬ويليها شرط حذف السجلت ‪،‬‬
‫وهي عبارة اختيارية للحد من عدد السجلت المحذوفة ‪ ،‬فإذا تم حذف عبارة‬
‫‪ where‬من جملة ‪ delete‬فإن هذا يعني حذف كافة السجلت‬
‫‪ 2-1‬حذف سجلت محددة (‪)Deleting SEPECIFIC Record‬‬
‫مثال‪1‬‬
‫لحذف السجلت الموظفين ذوي المرتبات أكبر من ‪5000‬من جدول ‪ emp‬يتم‬
‫كتابة العبارة التالية‬
‫‪SQL> DELETE FROM emp‬‬
‫;‪Where sal > 5000‬‬

‫‪ 2-2‬حذف كافة السجلت (‪)Deleting ALL Record‬‬
‫‪105‬‬

‫مقدمة قواعد البيانات‬
‫يمكننا حذف كافة السجلت من جدول ما بحذف عبارة ‪ where‬من جملة ‪ delete‬فإن هذا‬
‫يعني حذف كافة السجلت ‪ ،‬والصيغة العامة لها هي‪:‬‬
‫مثال‬
‫لحذف كافة‬

‫;‪table‬‬

‫]‪SQL>DELETE [FROM‬‬

‫السجلت من‬
‫جدول ‪emp‬‬
‫يتم كتابة العبارة التالية‬

‫;‪SQL> DELETE FROM emp‬‬

‫‪ 2-3‬إستخدام الستعلم الفرعي في جملة ‪DELETE‬‬
‫(‪) sub queries in DELETE statements‬‬
‫يمكننا استخدام الستعلم الفرعي في جملة ‪ ،Delete‬وذلك لحذف سجلت من جدول‬
‫بناء علي قيم من جدول آخر‪ ،‬فعلي سبيل المثال إذا أردنا حذف سجلت الموظفين التابعين‬
‫لدارة المبيعات يتم ذلك علي النحو التالي‬

‫مثال‬
‫تلميح‬
‫‪SQL> DELETE FROM employee‬‬
‫‪2 WHERE‬‬
‫= ‪deptno‬‬
‫‪3‬‬
‫‪(SELECT‬‬
‫‪deptno‬‬
‫‪4‬‬
‫‪FROM‬‬
‫‪dept‬‬
‫‪5‬‬
‫‪WHERE‬‬
‫;)'‪dname='sales‬‬
‫‪5 rows deleted.‬‬
‫باستخدام ‪ Delete‬نستطيع حذف بيانات جدول واحد فقط في نفس الوقت‪.‬‬
‫‪‬تحذف ‪ Delete‬جميع السجلت التي تحقق الشرط في جملة‬
‫‪.Where‬‬
‫‪106‬‬

‫مقدمة قواعد البيانات‬
‫‪‬ل تحذف ‪ Delete‬الجدول‪.‬‬
‫‪‬تحذف السجلت من الجدول بشكل مستمر‪ ،‬إل أن الحذف الحقيقي‬
‫للسجلت يعتمد علي معالجة ‪ commit‬المستخدمة التي سيتم‬
‫تناولها في هذا الفصل‬
‫‪‬قد تسبب ‪ delete‬مشكلة في التجانس والتكامل المرجعي (وسيتم‬
‫تناول ذلك عند إنشاء العلقات بين الجداول لحقا في هذا الفصل)‪.‬‬
‫‪‬تحذف ‪ delete‬السجل أو السجلت بالكامل فل حاجة للشارة‬
‫إلي أي عمود إل في جملة ‪ Where‬عند استخدامها‪.‬‬
‫‪ -2‬تعديل البيانات الموجودة في قاعدة البيانات‬
‫‪))Using the update command‬‬
‫يمكننما اسمتخدام ‪ update‬لتعديمل القيمم الموجودة فمي جدول مما‪ ،‬والصميغة العاممة لعبارة‬
‫‪ update‬تأخذ الشكل التالي‪:‬‬

‫مما سبق نجد‬

‫‪SQL> UPDATE‬‬
‫‪table‬‬
‫]‪SET column = value [, column = value‬‬
‫‪[WHERE‬‬
‫;]‪condition‬‬

‫أن الصيغة‬
‫العامة لعبارة ‪ update‬تتألف مما يلي‪:‬‬
‫‪ :Update.1‬من الكلمات المحجوزة في‪ ,‬وهو أمر بتحديث البيانات في ‪.Sql‬‬
‫‪ :Table.2‬ويشير إلي إسم الجدول المراد التعديل في بياناته‪.‬‬

‫‪107‬‬

‫مقدمة قواعد البيانات‬
‫‪Set.3‬‬

‫‪ :‬وتحتوي علي سلسلة من عمليات التحديث ‪ ،‬حيث نقوم بوضع إسم‬

‫العمود الذي نقوم بتعديل بياناته كمعامل أول ‪ ،‬ويحتوي المعامل الثاني علي القيمة‬
‫الجديدة ‪ ،‬ويفصل بين المعاملين إشارة المساواة‪.‬‬
‫‪ :Where.4‬وهي عبارة اختيارية يتم استخدامها لتحديد السجلت التي يراد التعديل‬
‫بها ‪ ،‬فإذا تم حذف عبارة ‪ Where‬فإن التعديل سيتم علي كل سجلت الجدول‪.‬‬
‫‪ 3-1‬تحديث كافة السجلت (‪)Update ALL Record‬‬
‫يمكننا تحديث كافة السجلت من جدول ما بحذف عبارة ‪ where‬من جملة ‪ Update‬فإن‬
‫هذا يعني تحديث كافة السجلت‪ ،‬والصيغة العامة لها هي‪:‬‬
‫‪SQL> UPDATE‬‬
‫‪table‬‬
‫‪SET‬‬
‫;]‪column = value [, column = value‬‬

‫مثال‬
‫لتحديث كافة السجلت من جدول ‪ emp‬وذلك بوضع المرتب ‪ 3000‬لكل‬

‫الموظفين‬

‫يتم كتابة العبارة التالية‪:‬‬
‫‪SQL> UPDATE employee‬‬
‫‪2 SET‬‬
‫;‪sal = 3000‬‬
‫‪14 rows updated.‬‬

‫‪ 3-2‬تحديـث‬
‫ســــجلت‬
‫محددة (‬
‫‪)Update Specific Record‬‬

‫يمكننا تحديث سجلت محددة والتعديل فيها بناء علي شرط أو عدة شروط‪ ،‬وذلك‬
‫بتضمين عبارة ‪ Update‬فقرة ‪ ،where‬فعلي سبيل المثال لتعيل مرتب الموظف رقم ‪555‬‬
‫من ‪ 3000‬إلي ‪ 6000‬يتم ذلك علي النحو التالي‪:‬‬

‫‪108‬‬

‫مقدمة قواعد البيانات‬
‫‪SQL> UPDATE emp‬‬
‫‪2 SET‬‬
‫‪sal = 6000‬‬
‫‪3 WHERE‬‬
‫;‪empno = 555‬‬
‫‪1 row updated.‬‬

‫‪ 3-3‬استخدام الستعلم الفرعي في جملة ‪update‬‬
‫(‪) sub queries in update statements‬‬
‫يمكننا استخدام الستعلم الفرعي في حملة ‪ update‬فعلي سبيل المثال إذا أردنا‬
‫تعديل أو تحديث كل من الوظيفة والدارة للموظف رقم ‪ 555‬لتماثل الوظيفة والدارة للموظف‬
‫رقم ‪ ،7489‬سوف نحتاج إلي استخدام استعلم فرعي‪ ،‬ويتم كتابة عبارة ‪ update‬علي‬
‫النحو التالي‪:‬‬

‫‪-4‬‬
‫اســتخدام‬
‫تعليمات‬

‫‪SQL> UPDATE emp‬‬
‫‪2 SET‬‬
‫= )‪(job, deptno‬‬
‫‪3‬‬
‫‪(SELECT job, deptno‬‬
‫‪4‬‬
‫‪FROM‬‬
‫‪emp‬‬
‫‪5‬‬
‫‪WHERE‬‬
‫)‪empno =7489‬‬
‫‪6 WHERE‬‬
‫;‪empno = 555‬‬
‫‪1 row updated.‬‬

‫التثــبيت‬
‫‪commi‬‬
‫‪t‬‬
‫والتراجع ‪Rollback‬‬

‫يتطلب تنفيذ التغييرات في بيانات الجداول خطوتين‪:‬‬
‫‪)1‬تنفيذ إحدى العبارات التالية ‪.Insert, Update, Delete‬‬
‫‪)2‬تأكيد التغيير باستخدام ‪.commit‬‬
‫عندما يتم تنفيذ عبارة من عبارات ‪ ،DML‬يقوم أوراكل بتغيير الجدول وحفظ نسخة من‬
‫السجلت قبل إجراء التعديل‪ ،‬وسيبدو المر للمستخدم وكأن التغييرات قد تمت بشكل نهائي‬
‫‪109‬‬

‫مقدمة قواعد البيانات‬
‫ودائم‪ ،‬فإذا قام المستخدم بالستعلم في قاعدة البيانات‪ ،‬فإنه سيري التعديلت موجودة‪ ،‬فإذا قام‬
‫مستخدم آخر بالستعلم في قاعدة البيانات فلن يري تلك التعديلت‪ ،‬وذلك لن التعديلت علي‬
‫البيانات ل تصبح مرئية من قبل المستخدمين الذين يسمح لهم بالوصول إلي تلك الجداول‪ ،‬ول‬
‫تصبح دائمة حتى يتم تنفيذ تعليمة ‪ ،COMMIT‬بمعني أن تلك الخاصية تسمح للمستخدم بالتراجع‬
‫عن أي تغيير قام به‪ .‬ويتم التراجع عن التعديلت باستخدام تعليمة ‪ .Rollback‬حيث تعيد‬
‫هذه التعليمة قاعدة البيانات إلي الحالة التي كانت عليها بعد تنفيذ آخر تعليمة ‪.commit‬‬

‫تلميح‬
‫‪‬يتم تنفيذ تعليمة ‪ commit‬بشكل ضمني إذا قطع المطور التصال‬
‫مع نظام أوراكل بشكل نظامي أو نفذ تعليمة من تعليمات ‪،DDL‬‬
‫حيث يؤدي ذلك إلي حفظ التغييرات‪.‬‬
‫‪‬إذا قطع التصال مع نظام أوراكل بشكل غير نظامي قبل تنفيذ‬
‫تعليمة ‪ COMMIT‬لن يتم حفظ التغييرات‪ ،‬وستعود قاعدة البيانات‬
‫إلي النقطة التي تم عندها تنفيذ آخر تعليمة ‪.COMMIT‬‬
‫‪‬يمكن التراجع عن التغييرات بشكل جزئي‪ ،‬حيث تسمح تعليمة‬
‫‪ SAVEPOINT‬للمستخدم حفظ التغييرات حتى جزء محدد من‬
‫التغييرات‪ ،‬فعلي سبيل المثال نفترض أنك قمت بمجموعة من‬
‫التعديلت علي مجموعة من السجلت‪ ،‬ولكنك غير متأكد من أنك‬
‫أجريت التعديلت بشكل صحيح‪ ،‬وترغب في رؤية السجلت قبل‬
‫تثبيت هذه التغييرات‪ ،‬ففي هذه الحالة يمكنك استخدام عدة تعليمات‬
‫‪110‬‬
‫‪SAVEPOINT save_point_name‬‬
‫‪ROLLBACK save_point_name‬‬

‫مقدمة قواعد البيانات‬
‫‪ ،Savepoint‬وبالتالي يمكنك التراجع عن التغييرات حتى أي‬
‫نقطة من النقاط العلم الموضوعة كما هو موضح بالشكل التالي ‪،‬‬
‫والصيغة العامة لكلًمن نقطة العلم ‪ Savepoint‬والتراجع‬
‫‪ Rollback‬إلي نقطة علم تأخذ الشكل التالي ‪:‬‬

‫مثال‪1‬‬
‫لتحديث كافة السجلت من جدول ‪ emp‬وذلك بوضع المرتب ‪ 3000‬لكل‬
‫الموظفين يتم كتابة العبارة التالية‪:‬‬
‫و‬

‫‪SQL> UPDATE employee‬‬
‫‪2 SET‬‬
‫;‪sal = 3000‬‬
‫‪14 rows updated.‬‬

‫لحفظ‬

‫التعديلت في قاعدة البيانات يتم كتابة العبارة التالية‪:‬‬
‫لحذ‬

‫ف كافة‬

‫السجلت‬

‫;‪SQL> COMMIT‬‬
‫‪Commit complete.‬‬

‫مثال‪2‬‬

‫من جدول ‪ emp‬ثم التراجع عن ذلك يتم بكتابة العبارات التالية‪:‬‬

‫;‪SQL> DELETE FROM emp‬‬
‫‪14 rows deleted.‬‬
‫;‪SQL> ROLLBACK‬‬
‫‪Rollback complete.‬‬

‫‪111‬‬

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

Controlling Transactions
Transaction
INSERT
COMMIT

UPDATE

INSERT

Savepoint A

DELETE

Savepoint B
ROLLBACK to Savepoint B

ROLLBACK to Savepoint A

ROLLBACK

3‫مثال‬

SQL> UPDATE...
SQL> SAVEPOINT jicc_ update;
Savepoint created.
SQL> INSERT...
SQL> ROLLBACK TO jicc_ update;
Rollback complete.

‫ كيفيــة‬-5
‫إنشاء‬
‫جداول وإضافة محددات من نوع‬

)primary key, foreign key(
‫ ثلث عبارات ت سمي بعبارات تعر يف البيانات‬SQL ‫م ما سبق ن جد أ نه يو جد في ل غة‬
:‫ وهذه العبارات هي‬،‫وهي تسمح لنا بتعريف ومحي وتعديل الجداول في قاعدة البيانات‬
.‫ تستخدم لتعريف جدول جديد في قاعدة البيانات‬:CREATE.1
.‫ تستخدم لمحي جدول موجود من قاعدة البيانات‬: DROP.2
112

‫مقدمة قواعد البيانات‬
‫‪ :ALTER .3‬تستخدم لتغيير بنية الجدول الموجود‪.‬‬
‫قواعد البيانات العلئقية قادرة علي تنفيذ كافة عبارات ‪ SQL‬في أي وقت بشرط أن‬
‫يكون له الحق في تنفيذ تلك الوامر والعبارات‪ ،‬فلكي تقوم بإنشاء ومحي وتعديل‬
‫الجداول لبد من أن تتأكد من مدير قاعدة البيانات أنه يمنحك حق تعريف ومحي وتعديل‬
‫الجداول‬

‫‪ 5-1‬إنشاء وتعديل وإسقاط الجداول‬
‫‪ 5-1-1‬إنشاء الجداول (‪)create table‬‬
‫تمكننا عبارة ‪ create‬من إنشاء الجداول في ‪ ،SQL‬وتأخذ عبارة ‪ Create‬الشكل التالي‪:‬‬
‫‪SQL> CREATE TABLE [schema.]Table‬‬
‫;)]‪(column datatype [DEFAULT expr‬‬
‫مما سبق نجد أن‬
‫الصيغة العامة لعبارة ‪ Create‬تتألف مما يلي‪:‬‬
‫‪ :create-1‬من الكلمات المحجوزة في ‪،Sql‬وتخبر ‪ DBMS‬بإنشاء كائن‬
‫في قاعدة البيانات‬
‫‪ :Table-2‬من الكلمات المحجوزة في ‪ ،Sql‬وتخبر ‪DBMS‬بنوع الكائن‬
‫المراد إنشائه في قاعدة البيانات‬
‫‪ :Table name-3‬ويستخدم لتحديد إسم الجدول ‪ ،‬ويجب أن يبدأ إسم‬
‫الجدول بحرف نصي ويمكن أن يحتوي أحرف وأرقام والشرطة ‪،‬ويجب أل‬
‫يتجاوز طوله ‪ 30‬حرفا‪،‬وليسمح بالفراغات ‪،‬ولكن يسمح بالشرطةالسفلية (‬
‫‪.)underscore‬‬

‫‪113‬‬

‫مقدمة قواعد البيانات‬
‫‪ :Column names-4‬وتستخدم لتحديد أسماء العمدة المكونة للجدول‬
‫المراد إنشائه‪ ،‬وتنطبق نفس القواعد الخاصة بالتسمية علي إسم الجدول علي‬
‫أسماء العمدة ‪ ،‬ويجب أن تحاط مجموعة تعريف العمدة بين قوسين‪.‬‬
‫‪ :Column data type-5‬يحتوي تعريف العمدة علي نوع البيانات ‪،‬‬
‫وطولها ودقتها كما هي موضح بالجدول التالي‬
‫‪ :Constraints-6‬وهي إعدادات اختيارية يمكن استخدامها لتمثل قيود‬
‫للمحافظة علي تكامل قاعدة البيانات‪.‬‬
‫وهناك عدة اعتبارات يجب مراعاتها عند إنشاء الجداول وهي كالتالي‪:‬‬
‫‪-1‬يجب وضع أقواس تضم أسماء العمدة ونوع بياناتها‪.‬‬
‫‪-2‬يتم وضع فاصلة(‪ ) ,‬بين تعريف أي عمود وأخر‪.‬‬
‫‪-3‬يجب أن يكون إسم العمود فريدا داخل الجدول‪.‬‬
‫‪-4‬ليمكن استخدام الكلمات المحجوزة كأسماء أعمدة في الجدول‪.‬‬
‫‪-5‬يتم استخدام الفاصلة المنقوطة لخبار ‪ SQL‬أن الجملة انتهت‬
‫وجاهزة للتنفيذ‪.‬‬
‫‪-6‬الجدول التالي يوضح لنا أهم أنواع البيانات التي يمكن أن نستخدمها‬
‫عند إنشاء الجداول في ‪SQL‬‬

‫‪114‬‬

‫مقدمة قواعد البيانات‬
‫نوع البيانات‬
‫‪)CHAR(n‬‬

‫الوصف‬
‫يعرف هذا النوع من البيانات عمود من نوع البيانات الحرفية‬
‫بطول (‪ )n‬حرف‪ ،‬وجميع الحقول متساوية في الطول‪n=<255 ،‬‬
‫يعرف هذا النوع من البيانات عمود من نوع البيانات الحرفية‬

‫‪)VARCHAR(n‬‬

‫بطول (‪ )n‬حرف‪ ،‬وتختلف الحقول في الطول وتتجاوز ‪255‬‬
‫يعرف عمود من نوع بيانات من نوع رقم‪ ،‬مع حد أقص لعدد‬

‫‪)NUMBER(n‬‬

‫الرقام (‪ ،)n‬ويمكن أن تأخذ (‪ )n‬كحد أقصى ‪105‬‬
‫‪)NUMBER(n,d‬‬

‫يعرف عمود من نوع البيانات ‪ ،number‬ويحتوي عدد أرقام‬
‫قدره (‪ ،)n‬والتي تتضمن القيمة (‪ )d‬التي توضح عدد الرقام‬
‫العشرية بعد الفاصلة‪.‬‬

‫‪INTEGER‬‬

‫يشبه نوع البيانات ‪ ،NUMBER‬ولكنه ل يأخذ غير القيم الرقمية‬
‫الصحيحة‪ ،‬ول يقبل أي أرقام عشرية بعد الفاصلة‪.‬‬

‫‪LONG‬‬

‫يعرف عمود من نوع البيانات الحرفية‪ ،‬وأقصي طول له‬
‫‪،65.535‬وليمكن تعريف سوي عمود واحد من هذا النوع في‬
‫الجدول ‪،‬وليمكن استخدام هذا العمود ضمن عبارات ‪Where‬أو‬
‫في الستعلمات الفرعية أو الدوال أوالتعابير أو ضمن الفهارس‪.‬‬
‫يعرف هذا النوع عمود يحتوي سجل بيانات بطول قدره ‪n‬‬

‫‪)RAW(n‬‬
‫‪SMALLINT‬‬

‫يعرف عمود يخزن أرقاما موجبة وسالبة صغيرة تقع في النطاق ‪+‬‬
‫‪767 ,32-( ،)767 ,32‬‬

‫‪DATE‬‬

‫يعرف عمود نوع بياناته تاريخ‪.‬‬

‫مثال‪1‬‬
‫نقوم بإنشاء جدول ‪ ،department‬الموضح بالكود التالي أسماء أعمدته ونوع بياناتها‬
‫‪115‬‬

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

SQL> CREATE TABLE department
2 (deptno NUMBER (2) not null,
3
dname
VARCHAR2 (15),
4
loc VARCHAR2 (20));
Table created.

desc ‫ أو اختصارا‬describe ‫ولعرض مواصفات وتعريفات العمدة نستخدم عبارة‬
:‫وتأخذ الشكل التالي‬
;SQL> describe Table name

‫إنشاء الجداول باستخدام الستعلم الفرعي‬5-1-1-1
:‫يمكنك إنشاء جدول باستخدام الستعلم الفرعي كما بالمثال التالي‬
SQL> CREATE TABLE dept10
2 AS
3
SELECT
empno, ename, sal*12 ANNSAL,hiredate
4
FROM
emp
5
WHERE
deptno = 10;
Table created.

116

‫مقدمة قواعد البيانات‬
‫نل حظ وجود كل مة ‪ as‬ب ين إ سم الجدول الجد يد المراد إنشائة وال ستعلم الفر عي‪ ،‬للتأ كد من‬
‫مواصفات وتعريفات العمدة ‪ column definitions‬نستخدم المر ‪describe‬‬

‫‪;SQL> describe dept10‬‬

‫‪ 5-1-2‬تعديل الجدول (‪)altering the table‬‬
‫يستخدم ‪ alter table‬في تعديل بنية جدول موجود وتغيير محددات الجدول بعد إنشائه‬
‫وفيما يلي الخيارات التي يمكن استخدامها مع المر ‪:alter‬‬
‫‪ :Add)1‬يستخدم هذا الخيار لضافة أعمدة جديدة أو شروط إلي الجدول ويأخذ‬
‫الشكل التالي‪:‬‬
‫‪SQL> ALTER TABLE table‬‬
‫]‪ADD (column datatype [DEFAULT expr‬‬
‫;)‪[, column datatype]...‬‬
‫‪Modi)2‬‬
‫‪fy‬‬

‫‪ :‬ويستخدم لتغيير محددات موجودة ويأخذ الشكل التالي‪:‬‬
‫‪SQL>ALTER TABLE table‬‬
‫]‪MODIFY (column datatype [DEFAULT expr‬‬
‫;)‪[, column datatype]...‬‬
‫‪117‬‬

‫مقدمة قواعد البيانات‬
‫‪ :Disable)3‬يستخدم للغاء تفعيل شرط ما في الجدول‪.‬‬
‫‪ :Enable)4‬يستخدم لعادة تفعيل شرط كنا قد قمنا بإلغاء تفعيلة‪.‬‬
‫‪ :Drop)5‬لزالة شرط ما بشكل دائم من الجدول‪.‬‬
‫‪ :Set unused)6‬يستخدم لتحديد عمود أو أكثر كأعمدة غير مستخدمة ‪،‬‬
‫بحيث يمكن حذف تلك العمدة من الجدول عندما تصبح مصادر النظام ملئمة‬
‫لذلك‪.‬‬
‫‪ :Drop column)7‬يستخدم لزالة عمود ما من الجدول‬
‫مثال‪1‬‬
‫لضافة عمود ‪ job‬إلي الجدول ‪ dept10‬نقوم بكتابة الكود التالي‪:‬‬

‫للتعديل في‬

‫‪SQL> ALTER TABLE dept10‬‬
‫‪2 ADD‬‬
‫;))‪(job VARCHAR2(9‬‬
‫‪Table altered.‬‬
‫مثال‪2‬‬

‫نوع البيانات ‪ dala type‬الخاصة بعمود ال ‪ ename‬في جدول ‪ dept10‬نقوم بكتابة‬
‫الكود التالي‪:‬‬
‫‪SQL>ALTER TABLE dept30‬‬
‫‪MODIFY‬‬
‫;))‪(ename VARCHAR2(15‬‬
‫‪Table altered.‬‬

‫‪ 5-1-3‬حذف الجداول (‪)Dropping table‬‬

‫‪118‬‬

‫مقدمة قواعد البيانات‬
‫ت ستخدم ‪ Sql‬عبارة ‪ drop‬لحذف الجداول من النظام‪ ،‬ف كل ما تحتا جه لحذف جدول هو أن‬
‫تكتب اسمه بعد ‪ drop table‬فيتم حذف الجدول نهائيا بجميع سجلته وفهارسه‪ ،‬وليمحنا‬
‫النظام فرصة لستعادة الجدول‪ ،‬وتأخذ جملة ‪ Drop‬الشكل التالي‪:‬‬
‫مثال‬

‫;‪SQL> DROP TABLE table_name‬‬

‫لحذف جدول‬
‫‪ dept10‬نقوم بكتابة الكود التالي‬

‫;‪SQL> DROP TABLE dept10‬‬

‫‪ 5-2‬إضافة محددات إلي الجدول من نوع‬
‫(‪)Primary key, foreign key‬‬
‫‪ 5-2-1‬المحافظة علي تكامل قاعدة البيانات‬
‫يوجمد فمي أوراكمل بعمض الدوات لحمايمة قاعدة البيانات‪ ،‬تسممي هذه الدوات بالشروط‬
‫‪ ،Constraints‬وتقوم هذه الشروط بعدة وظائف هامة منها‪:‬‬
‫‪)1‬التأكد من المفتاح الساسي أو الرئيسي ‪.unique‬‬
‫‪)2‬فرض التكامل المرجعي بمعني التأكد من أن السجلت البناء الموجودة في‬
‫جداول مرتبطة‪ ،‬تمتلك سجل أب‪.‬‬
‫‪)3‬التأ كد من أن العمدة المرتب طة بالشروط تحتوي دائ ما قي مة بداخل ها ‪NOT‬‬
‫‪.NULL‬‬
‫‪)4‬التأكد من وضع القيمة الفتراضية ‪ DEFAULT VALUE‬في عمود ما‪.‬‬
‫‪)5‬التأ كد من عمودا ما يحتوي علي قي مة ما‪ ،‬وأن هذه القي مة موجودة ض من‬
‫نطاق محدد من القيم ‪The Check Constraint‬‬

‫‪119‬‬

‫مقدمة قواعد البيانات‬
‫‪ 5-2-1-1‬الشرط ‪(CHECK‬فحص وجود قيمة)‬
‫يستخدم هذا الشرط للتأكد من أن قمة ما لعمود ما تقع بين قيم مجموعة محددة‪ ،‬عندما تستخدم‬
‫الشرط ‪ CHECK‬سيقوم أوراكل بمقارنة أية قيمة يتم إدخالها مع مجموعة القيم المحددة في‬
‫المجموعة‪.‬‬
‫مثال‬
‫نستخدم الشرط ‪ CHECK‬في تعريف جدول ‪ employee‬التالي ‪،‬تم إعطاء إسم للشرط‬
‫‪ check‬وهو (‪،)gender_validation‬وتسمية الشرط يكون اختياريا‪،‬فإذا لم يتم‬
‫تسمية الشرط فإن أوراكل سيولد إسما خاصا للشرط‪.‬‬

‫نلحظ أن أوراكل‬
‫سيقوم بمقارنة أية‬

‫‪SQL> CREATE TABLE employee‬‬
‫‪2 (emp_id NUMBER (2) not null,‬‬
‫‪3‬‬
‫‪name‬‬
‫‪VARCHAR2 (15),‬‬
‫‪4‬‬
‫‪gender‬‬
‫)‪char (1‬‬
‫‪Constraint gender_validation check (gender‬‬
‫;)))'‪in('M','F‬‬
‫‪Table created.‬‬

‫قيمة يتم إدخالها مع مجموعة القيم المحددة في المجموعة('‪ )'M','F‬فقط في العمود‬
‫‪gender‬بمعني أل يسمح أل بهاتين القيمتين فقط‪.‬‬
‫‪ 5-2-1-2‬خيار القيمة الفتراضية ‪))default option‬‬
‫يستخدم هذا الخيار ‪ default‬لعطاء قيمة افتراضية لعمودما عندما ليتم وضع قيمة في هذا‬
‫العمود‪ ،‬ول يمنع هذا الخيار من جعل القيمة ‪ null‬في هذا العمود‬

‫مثال‬
‫في هذا المثال تم استخدام الخيار ‪ default‬للتأكد من العمود ‪ comm‬تم إعطائه القيمة‬
‫صفر عند عدم وضع أي قيمة به‪ ،‬ويكون ذلك مفيدا في معالجة القيم الفارغة ‪null‬‬
‫‪120‬‬

‫مقدمة قواعد البيانات‬
‫عند إجراء العمليات الحسابية‪.‬‬
‫‪SQL> CREATE TABLE employee‬‬
‫‪2 (emp_id NUMBER (2) not null,‬‬
‫‪3‬‬
‫‪name‬‬
‫‪VARCHAR2 (15),‬‬
‫‪4‬‬
‫‪gender‬‬
‫)‪char (1‬‬
‫‪5‬‬
‫‪sal‬‬
‫‪number‬‬
‫‪6‬‬
‫‪comm‬‬
‫‪default (0),‬‬
‫‪Constraint gender_validation check (gender‬‬
‫;)))'‪in('M','F‬‬
‫‪5-2-1-3‬الشرط ‪( not null‬ليس فارغا)‬
‫‪Table created.‬‬
‫نستخدم الشرط ‪ not null‬للتأكد من أن العمود دوما سيحتوي قيمة بداخله‪ ،‬وخاصة ما يتم‬
‫وضمع هذا الشرط علي عمود أو أعمدة المفتاح السماسي للجدول ‪ ،‬لكمي تقوم بوضمع الشرط‬
‫‪ not null‬علي عمود ما ‪،‬قم بوضع العبارة ‪ not null‬بعد نوع بيانات العمود كما‬
‫بالمثال التالي‪:‬‬
‫‪SQL> CREATE TABLE employee‬‬
‫‪2 (emp_id NUMBER (2) not null,‬‬
‫‪3‬‬
‫‪name‬‬
‫‪VARCHAR2 (15),‬‬
‫‪4‬‬
‫‪gender‬‬
‫)‪char (1‬‬
‫‪5‬‬
‫‪sal‬‬
‫‪number‬‬
‫‪6‬‬
‫‪comm‬‬
‫‪default (0),‬‬
‫‪Constraint gender_validation check (gender‬‬
‫;)))'‪in('M','F‬‬
‫‪Table created.‬‬
‫‪ 5-2-1-4‬الشرط ‪( unique‬وحيد)‬
‫يستخدم الشرط ‪ unique‬للتأكيد من أن القيمة الموجودة بالعمود المشروط هي قيمة وحيدة في‬
‫جميع سجلت الجدول‪ ،‬بمعني عدم السماح بتكرار القيم‪ ،‬فيقوم هذا الشرط بعمله عبر إنشاء‬
‫فهرس وحيد (‪ )unique index‬علي هذا العمود‪ ،‬يعتبر الشرط ‪ unique‬أداة جيدة‬
‫للمحافظة علي هذه الخاصية في قاعدة البيانات‪ ،‬فعلي سبيل المثل يمكن اعتبار عمود "‬
‫‪""number_social_security‬الضمان الجتماعي " الموجود في جدول‬
‫‪121‬‬

‫مقدمة قواعد البيانات‬
‫‪ employee‬ل يحتوي سوي قيمة وحيدة‪ ،‬مع العلم بأن العمود " ‪" emp_id‬هو المفتاح‬
‫الساسي في الجدول بمعني أنة لبد أن يحتوي قيما فريدة ووحيدة وليسمح بالتكرار كما هو‬
‫موضح كالتالي‪:‬‬
‫‪SQL> CREATE TABLE employee‬‬
‫‪2 (emp_id NUMBER (2) not null‬‬
‫‪3‬‬
‫‪constraint unique_emp_id unique,‬‬
‫‪4‬‬
‫‪name‬‬
‫‪VARCHAR2 (15),‬‬
‫‪5‬‬
‫‪gender‬‬
‫)‪char (1‬‬
‫‪Constraint gender_validation check (gender‬‬
‫;)))'‪in('M','F‬‬
‫‪ 5-2-1-5‬الشرط ‪(primary key‬المفتاح الساسي)‬
‫يستخدم الشرط ‪ primary key‬للمحافظة علي تكامل عمود أو أعمدة المفتاح الولي‪ ،‬حيث‬
‫يجعل هذا الشرط القيم الموجودة في المفتاح في عمود مشروط به تتمتع بالشرطين‬
‫‪ Not null, unique‬معا‪ ،‬فعند تعريف هذا الشرط يتم إنشاء فهرس وحيد ‪unique‬‬
‫‪ index‬ضمني وإنشاء شرط ‪ not null‬ضمني أيضا علي العمود أو العمدة المشروطة‬
‫بشرط المفتاح الساسي‪ ،‬ويمكن اعتبار تعريف هذا الشرط كجزء من تعريف العمود أو جزء‬
‫من تعريف الجدول ‪ ،‬حيث إذا تم تعريف هذا الشرط علي عدة أعمدة (حالة مفتاح أساسي‬
‫مركب) فإن تعريف هذا الشرط سيكون جزءا من تعريف الجدول‪.‬‬
‫مثال‬
‫لكي تعرف الشرط ‪ primary key‬كجزء من تعريف عمود ما‪ ،‬قم بكتابة العبارة‬
‫‪ primary key‬بعد نوع بيانات الجدول كما بالكود التالي‪:‬‬

‫لكي تعرف‬
‫الشرط‬

‫مثال‬

‫‪SQL> CREATE TABLE employee‬‬
‫‪(emp_id NUMBER primary key,‬‬
‫‪name‬‬
‫‪VARCHAR2 (15),‬‬
‫‪Gender‬‬
‫)‪char (1‬‬
‫>‪SQL‬‬
‫‪CREATE‬‬
‫‪TABLE‬‬
‫‪employee‬‬
‫‪Constraint gender_validation‬‬
‫‪check (gender‬‬
‫‪(emp_id‬‬
‫‪NUMBER‬‬
‫‪not‬‬
‫‪null,‬‬
‫;)))'‪in ('M','F‬‬
‫‪F_name‬‬
‫‪VARCHAR2 (25), 122‬‬
‫‪L_name‬‬
‫‪VARCHAR2 (15),‬‬
‫;))‪Primary key(emp_id‬‬

‫مقدمة قواعد البيانات‬
‫‪ primary key‬كجزء من تعريف الجدول‪ ،‬قم بكتابة العبارة ‪ primary key‬في‬
‫أسفل تعريف الجدول‪ ،‬ويتم تعريفه بعد تعريف آخر عمود‪ ،‬ويجب وضع فاصلة بعد تعريف آخر‬
‫عمود وقبل تعريف شرط المفتاح الساسي كما بالكود التالي‪:‬‬

‫‪ 5-2-1-6‬الشرط ‪(foreign key‬المفتاح الخارجي)‬
‫يستخدم الشرط ‪ foreign key‬كأداة للتأكيد من الجداول المرتبطة ل تحتوي علي سجلت‬
‫غير منتمية إلي سجل أب‪ ،‬ويحتوي الشرط ‪ foreign key‬علي خيار يسمح بحذف كل‬
‫السجلت البناء المرتبطة مع سجل الب عند حذف سجل الب وهذا الخيار هو‬
‫‪،ON DELETE CASCADE‬يمكننا إنشاء مفتاح الربط الخارجي كجزء من تعريف العمود‬
‫عند إنشاء الجدول ‪ ،‬حيث يتم استخدام كلمة ‪REFERENCES‬ويليها إسم الجدول الذي يحتوي‬
‫السجل الب وذلك يكون بعد تعريف العمود ولسنا بحاجة لذكر إسم العمود من الجدول الب ‪،‬‬
‫حيث إذا لم تقوم بكتابة إسم العمود الموافق من الجدول الب يفترض أوراكل أنه هو المفتاح‬
‫الساسي‬
‫مثال‪1‬‬
‫في هذا المثال سنقوم بتعرف الشرط ‪ Foreign key‬كجزء من تعريف عمود ما كما‬
‫هو موضح بالتالي‪:‬‬
‫‪SQL> CREATE TABLE consultant_projects‬‬
‫‪2 (emp_id number references consultant,‬‬
‫‪3 project_name‬‬
‫‪varchar (25),‬‬
‫‪4 complete_date‬‬
‫;)‪date‬‬
‫‪Table created‬‬
‫مثال‪2‬‬
‫‪123‬‬

‫مقدمة قواعد البيانات‬
‫لكي تعرف الشرط ‪ foreign key‬كجزء من تعريف الجدول‪ ،‬قم بكتابة العبارة‬
‫‪ foreign key‬في أسفل تعريف الجدول متبوعة باسم العمود المطبق علية الشرط ثم كلمة‬
‫‪ reference‬ثم عمود المفتاح الرئيسي بالجدول الب‪ ،‬ويتم تعريفه بعد تعريف آخر عمود‪،‬‬
‫ويجب وضع فاصلة بعد تعريف آخر عمود وقبل تعريف شرط المفتاح الخارجي كما بالكود‬
‫التالي‪:‬‬
‫‪5-2‬‬‫‪1-7‬‬
‫تعديـــل‬
‫تعريــف‬
‫شرط مـا(‬
‫‪Modif‬‬
‫‪ying‬‬
‫‪Const‬‬
‫‪raint‬‬
‫‪)s‬‬

‫(‪SQL> CREATE TABLE emp‬‬
‫‪2‬‬
‫‪empno‬‬
‫‪NUMBER(4),‬‬
‫‪3 ename‬‬
‫‪VARCHAR2(10) NOT NULL,‬‬
‫‪4 job VARCHAR2(9),‬‬
‫‪5 mgr NUMBER(4),‬‬
‫‪6 hiredate DATE,‬‬
‫‪7 sal NUMBER(7,2),‬‬
‫‪8 comm NUMBER(7,2),‬‬
‫‪9 deptno‬‬
‫‪NUMBER(7,2) NOT NULL,‬‬
‫)‪10 CONSTRAINT emp_deptno_fk FOREIGN KEY(deptno‬‬
‫;))‪11 REFERENCES dept (deptno‬‬

‫يمكننا‬
‫إضافة شرط للجدول وذلك بعد إنشائه‪ ،‬كما يمكننا إزالة تلك الشروط أو إلغاء تفعيلها أو‬
‫تفعيلهاوذلك باستخدام ‪ alter table‬ويمتلك هذا المر عدة خيارات يمكن استخدامها مع‬
‫الشروط وهي موضحة كالتالي‪:‬‬
‫‪ADD)1‬‬

‫(إضافة)‪ :‬يستخدم لضافة شرط جديد إلي الجدول‪.‬‬

‫‪( MODIFY)2‬تعديل)‪ :‬يستخدم لضافة شرط إلي عمود موجود‪.‬‬
‫‪( DROP)3‬حذف)‬

‫‪ :‬يستخدم لحذف الشرط من الجدول‪.‬‬

‫‪( DISABLE)4‬إلغاء تفعيل)‪ :‬يسمح بإدخال البيانات دون النظر في فيما إذا كانت‬
‫تحقق الشرط أم ل ‪ ،‬ولكن مع بقاء الشرط كما هو في قاموس البيانات‪.‬‬
‫‪124‬‬

‫مقدمة قواعد البيانات‬
‫‪( ENABLE)5‬تفعيل)‪ :‬يقوم بالتحقق من أن جميع البيانات التي يتم إدخالها والموجودة‬
‫مسبقا تحقق الشرط‪.‬‬
‫مثال‪1‬‬
‫‪SQL> alter table consultant_projects‬‬
‫;)‪2 add primary key (emp_id,project_name‬‬
‫مثال‪2‬‬

‫مثال‪2‬‬

‫‪SQL> ALTER TABLE‬‬
‫‪EMP‬‬
‫مثال‪3‬‬
‫‪2 ADD CONSTRAINT emp_mgr_fk‬‬
‫;)‪3 FOREIGN KEY (mgr) REFERENCES emp (empno‬‬
‫‪Table‬‬
‫‪altered.‬‬
‫‪SQL> ALTER‬‬
‫‪TABLE‬‬
‫‪emp‬‬
‫مثال‪4‬‬
‫;‪2 disable primary key‬‬
‫‪Table‬‬
‫‪ altered.‬مثال‪4‬‬
‫مثال‪5‬‬

‫‪SQL> ALTER TABLE‬‬
‫‪emp‬‬
‫;‪2 enable primary key‬‬
‫>‪SQL‬‬
‫‪TABLE‬‬
‫‪emp‬‬
‫‪Table ALTER‬‬
‫‪altered.‬‬
‫;‪2 drop primary key‬‬
‫‪Table altered.‬‬

‫السئلة‬

‫المجموعة الولي‪:‬‬
‫ضع علمة (‬

‫) أمام العبارة الصحيحة وعلمة (×) أمام العبارة الخاطئة مع‬

‫تصحيح الخطأ‪.‬‬

‫‪.1‬عند استخدام ‪ Insert into‬لئحة القيم لبد أن تأخذ نفس ترتيب العمدة في‬
‫الجدول المراد إضافة السجلت إليه‪.‬‬
‫‪.2‬للتأكد من تنفيذ عبارة ‪ insert‬وإضافة السجل إلي جدول ‪ emp‬نقوم بتنفيذ‬
‫العبارة التالية‪:‬‬
‫;‪From emp‬‬
‫‪125‬‬

‫* ‪SQL>Select‬‬

‫مقدمة قواعد البيانات‬
‫‪.3‬عند استخدام عبارة ‪ insert‬يجب أن تتطابق العمدة والقيم المقابلة لها في نوع‬
‫البيانات ‪.data types‬‬
‫‪.4‬عند استخدام عبارة ‪ insert‬ليتم وضع الحرف النصية والتاريخ بين علمتي‬
‫تنصيص مفردة' '‪.‬‬
‫‪.5‬لحذف كافة السجلت من جدول ‪ emp‬يتم كتابة العبارة التالية‬
‫;‪emp‬‬

‫‪SQL> DELETE * FROM‬‬

‫‪.6‬ل يمكننا استخدام الستعلم الفرعي في عبارة ‪.delete‬‬
‫‪.7‬تحذف ‪ Delete‬الجدول والبيانات التي بداخله‪.‬‬
‫‪.8‬تحذف ‪ delete‬السجل أو السجلت بالكامل فل حاجة للشارة إلي أي عمود إل‬
‫في جملة ‪ Where‬عند استخدامها‪.‬‬
‫‪.9‬لتحديث كافة السجلت من جدول ‪ emp‬وذلك بوضع المرتب ‪ 3000‬لكل‬
‫الموظفين يتم كتابة العبارة التالية‪:‬‬
‫‪;Sql> Update table emp set sal =3000‬‬

‫‪.10‬نستخدم ‪ commit‬لحفظ وتأكيد التغييرات‪ ،‬بينما ‪rollback‬للتراجع عن‬
‫التغييرات‪.‬‬

‫المجموعة الثانية‪:‬‬
‫أسئلة لتدريب الطلب على أسئلة الختيار المتعدد‪:‬‬
‫‪.1‬عند استخدام ‪:insert‬ـ‬

‫‪126‬‬

‫مقدمة قواعد البيانات‬
‫‪)a‬يجب أن تتطابق العمدة والقيم المقابلة لها في نوع البيانات ‪data‬‬
‫‪.types‬‬
‫‪)b‬لئحة القيم لبد أن تأخذ نفس ترتيب العمدة في الجدول المراد إضافة‬
‫السجلت إليه‪.‬‬
‫‪)c‬لبد من وجود علقة واحد إلي واحد بين العمدة ولئحة القيم‪،‬‬
‫بمعني أن توجد قيمة واحدة من أجل كل عمود وبنفس الترتيب‪.‬‬
‫‪)d‬جميع ما سبق‪.‬‬
‫‪.2‬عند استخدام ‪:insert‬ـ‬
‫‪)a‬قد نجهل قيمة أحد الحقول‪ ،‬وذلك بكتابة كلمة ‪NULL‬‬
‫‪)b‬قد تسبب ‪ INSERT‬مشكلة في التجانس والتكامل المرجعي‬
‫‪)c‬لبد من وضع الحرف النصية والتاريخ بين علمتي تنصيص مفردة' '‪.‬‬
‫‪A&b&c)d‬‬
‫‪A&c)e‬‬

‫‪.3‬عند استخدام ‪:delete‬ـ‬
‫‪)a‬يمكننا استخدام الستعلم الفرعي في جملة ‪.Delete‬‬
‫‪)b‬تحذف ‪ Delete‬جميع السجلت التي تحقق الشرط في جملة ‪.Where‬‬
‫‪)c‬تحذف ‪ Delete‬الجدول‬
‫‪a&b)d‬‬
‫‪.4‬عند استخدام ‪:update‬ـ‬
‫‪127‬‬

‫مقدمة قواعد البيانات‬
‫‪)a‬يمكننا استخدام ‪ update‬لتعديل القيم الموجودة في جدول ما‪.‬‬
‫‪)b‬إذا تم حذف عبارة ‪ Where‬فإن التعديل سيتم علي كل سجلت الجدول‪.‬‬
‫‪)c‬ل يمكننا تحديث سجلت محددة والتعديل فيها بناء علي شرط أو عدة‬
‫شروط‪.‬‬
‫‪)d‬ليمكننا استخدام الستعلم الفرعي في حملة ‪ update‬فعلي سبيل المثال إذا‬
‫أردنا‪.‬‬
‫‪A&b)e‬‬

‫‪.5‬عند استخدام تعليمة ‪:commit‬‬

‫‪.a‬تأكيد التغيير باستخدام ‪.commit‬‬
‫‪.b‬ل يتم تنفيذ تعليمة ‪ commit‬إذا قطع المطور التصال مع نظام‬
‫أوراكل بشكل نظامي‬
‫‪.c‬إذا قطع التصال مع نظام أوراكل بشكل غير نظامي قبل‬
‫تنفيذ تعليمة ‪ COMMIT‬لن يتم حفظ التغييرات‬
‫‪.d‬يمكن التراجع عن التغييرات بشكل جزئي باستخدام‬
‫‪SAVEPOINT‬حيث تمكن المستخدم حفظ التغييرات حتى‬
‫جزء‬
‫‪A&c&d.e‬‬
‫‪.6‬عند استخدام ‪-:create‬‬
‫‪)a‬تمكننا عبارة ‪ create‬من إنشاء الجداول في ‪SQL‬‬
‫‪128‬‬

‫مقدمة قواعد البيانات‬
‫‪)b‬ليس من الضروري وضع أقواس تضم أسماء العمدة ونوع‬
‫بياناتها‪.‬‬
‫‪)c‬يتم وضع فاصلة(‪ ) ,‬بين تعريف أي عمود وأخر‪.‬‬
‫‪)d‬يجب أن يكون إسم العمود فريدا داخل الجدول‪.‬‬
‫‪)e‬يمكن استخدام الكلمات المحجوزة كأسماء أعمدة في الجدول‪.‬‬
‫‪A&c&d)f‬‬
‫‪.7‬عند استخدام ‪-:create‬‬
‫‪)a‬يمكنك إنشاء جدول باستخدام الستعلم الفرعي‬
‫‪)b‬وضع كلمة ‪ as‬بين إسم الجدول الجديد المراد إنشائة والستعلم الفرعي‬
‫‪)c‬يجب وضع أقواس تضم أسماء العمدة ونوع بياناتها‬
‫‪A&b&c)d‬‬
‫‪.8‬من أهم السباب التي تدعونا إلي إنشاء ‪:constraints‬‬
‫‪)a‬التأكد من المفتاح الساسي أو الرئيسي ‪.unique‬‬
‫‪)b‬فرض التكامل المرجعي بمعني التأكد من أن السجلت البناء الموجودة في‬
‫جداول مرتبطة‪ ،‬تمتلك سجل أب‪.‬‬
‫‪)c‬التأ كد من أن العمدة المرتب طة بالشروط تحتوي دائ ما قي مة بداخل ها ‪NOT‬‬
‫‪.NULL‬‬
‫‪)d‬التأكد من وضع القيمة الفتراضية ‪ DEFAULT VALUE‬في عمود ما‪.‬‬
‫‪)e‬جميع ما سبق‪.‬‬
‫‪129‬‬

‫مقدمة قواعد البيانات‬
‫‪.9‬عند استخدام الشرط ‪-:check‬‬
‫‪)a‬يستخدم هذا الشرط للتأكد من أن قمة ما لعمود ما تقع بين قيم مجموعة‬
‫محددة‬
‫‪)b‬يقوم أوراكل بمقارنة أية قيمة يتم إدخالها مع مجموعة القيم المحددة في‬
‫المجموعة‬
‫‪A&b)c‬‬
‫‪)d‬ليس شيء مما سبق‪.‬‬
‫‪.10‬الشرط ‪:not null‬‬
‫‪)a‬نستخدم الشرط ‪ not null‬للتأكد من أن العمود دوما سيحتوي قيمة بداخله‬
‫‪)b‬يتم وضع هذا الشرط علي عمود أو أعمدة المفتاح الساسي للجدول‬
‫‪A&b)c‬‬
‫‪)d‬ليس شيء مما سبق‪.‬‬
‫‪.11‬الشرط ‪:default‬‬
‫‪)a‬يستخدم هذا الخيار ‪ default‬لعطاء قيمة افتراضية لعمودما‬
‫‪)b‬يمنع هذا الخيار من جعل القيمة ‪ null‬في هذا العمود‬
‫‪A&b)c‬‬
‫‪)d‬ليس شيء مما سبق‪.‬‬
‫‪.12‬الشرط ‪:unique‬‬
‫‪)a‬يستخدم الشرط ‪ unique‬للتأكيد من أن القيمة الموجودة بالعمود المشروط هي‬
‫قيمة وحيدة في جميع سجلت الجدول‪.‬‬
‫‪130‬‬

‫مقدمة قواعد البيانات‬
‫‪)b‬فيقوم هذا الشرط بعمله عبر إنشاء فهرس وحيد (‪ )unique index‬علي‬
‫العمود المشروط‪.‬‬
‫‪A&b)c‬‬
‫‪)d‬ليس شيء مما سبق‪.‬‬
‫‪.13‬الشرط ‪:primary key‬‬
‫‪)a‬يستخدم الشرط ‪ primary key‬للمحافظة علي تكامل عمود أو أعمدة المفتاح‬
‫الولي‪.‬‬
‫‪)b‬يجعل هذا الشرط القيم الموجودة في المفتاح في عمود مشروط به تتمتع بالشرطين‬
‫‪ Not null, unique)c‬معا‪.‬‬
‫‪)d‬عند تعريف هذا الشرط يتم إنشاء فهرس وحيد‪.‬‬
‫‪)e‬يمكن اعتبار تعريف هذا الشرط كجزء من تعريف العمود أو جزء من تعريف‬
‫الجدول‬
‫‪)f‬جميع ما سبق‪.‬‬
‫‪.14‬الشرط ‪-:foreign key‬‬
‫‪)a‬يستخدم الشرط ‪ foreign key‬كأداة للتأكيد من الجداول المرتبطة ل تحتوي‬
‫علي سجلت غير منتمية إلي سجل أب‪.‬‬
‫‪)b‬يحتوي الشرط ‪ foreign key‬علي خيار يسمح بحذف كل السجلت‬
‫البناء المرتبطة مع سجل الب‬
‫‪)c‬يمكننا إنشاء مفتاح الربط الخارجي كجزء من تعريف الجدول‬
‫‪)d‬جميع ما سبق‬
‫‪131‬‬

‫مقدمة قواعد البيانات‬
‫‪.15‬باستخدام ‪:alter table‬‬
‫‪)a‬يمكننا إضافة شرط للجدول وذلك بعد إنشائه‬
‫‪)b‬كما يمكننا إزالة الشروط أو إلغاء تفعيلها أو تفعيلها‬
‫‪A&b)c‬‬
‫‪ )d‬ليس شيء مما سبق‬

‫‪132‬‬

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

‫الفصل الرابع‬
‫ورشـــة عمـل‬

‫‪133‬‬

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

‫الهداف‪:‬‬
‫إعطاء الطالب ترسميخ المفاهيمم السماسية للغمة ‪ SQL‬فمي ذهمن الطالب ممن خلل قيام‬
‫الطالب بإنشاء عدة جداول‪ ،‬وإضافمة محددات ممن نوع ‪Primary key, foreign‬‬
‫‪ ،key‬والقيام بعمليات إضافمة البيانات إلي الجداول وحذف وتعديمل البيانات فمي قاعدة البيانات‪،‬‬
‫وإجراء الستعلمات المختلفة علي هذه الجداول‬

‫لمحتويات‪:‬‬

‫‪134‬‬

‫مقدمة قواعد البيانات‬
‫‪)1‬إعطاء الطالب تعريفات لعدة جداول ويطلب منمه‬
‫القيام بإنشائها‪.‬‬
‫‪)2‬إضافة سجلت جديدة للجداول‪.‬‬

‫‪)3‬حذف بيانات موجودة في قاعدة البيانات‪.‬‬

‫‪)4‬تعديل البيانات الموجودة في قاعدة البيانات‪.‬‬

‫ممن نوع (‪primary‬‬
‫ممة محددات مم‬
‫‪ )5‬إضافم‬
‫‪)key, foreign key‬‬

‫‪)6‬إنشاء العديد من الستعلمات‬

‫‪135‬‬

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

‫ماذا سنتعلم في هذا الفصل‪:‬‬
‫في نهاية هذا الفصل يكون الطالب قد اكتسب المهارات والمعارف التالية‪:‬‬
‫‪)1‬إنشاء وتعديل وإسقاط الجداول‬
‫‪)2‬إضافة سجلت جديدة للجداول‪.‬‬

‫‪)3‬حذف بيانات موجودة في قاعدة البيانات ‪.‬‬

‫‪)4‬كيفية تعديل البيانات الموجودة في قاعدة البيانات‪.‬‬

‫‪)5‬إضافة محددات من نوع (‪primary key,‬‬
‫‪foreign‬‬

‫‪)6‬التدريب علي إنشاء الستعلمات المختلفة‪.‬‬

‫‪136‬‬

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

‫ورشة عمل‬
‫‪ -1‬قم بإنشاء الجداول التالية‪:‬‬

‫الجدول الول‪department:‬‬

‫الجدول الثاني‪employee:‬‬

‫‪ -2‬قم بتنفيذ التعليمات التالية‪:‬‬
‫‪)1‬قم إنشاء كل الجدولين بناء علي التعريفات الموضحة‬
‫سابقا‪.‬‬
‫‪)2‬في الجدول الول ‪ department‬قم بإضافة الشرط‬
‫‪ Primary Key‬لحقل ‪ ،deptno‬وإضافة الشرط‬
‫‪ Primary Key‬لحقل ‪ empno‬في جدول‬
‫‪.employee‬‬
‫‪137‬‬

‫مقدمة قواعد البيانات‬
‫‪)3‬إضافة الشرط ‪ Foreign key‬لحقل ‪deptno‬‬
‫في جدول ‪ employee‬كجزء من تعريف الجدول‪.‬‬
‫‪)4‬إنشاء الرابطة الذاتية في جدول ‪ employee‬حيث‬
‫يشير عمود ‪ mgr‬إلي عمود المفتاح الساسي في‬
‫الجدول وهو ‪.empno‬‬
‫‪)5‬قم بإدخال البيانات التالية في جدول ‪department‬‬
‫‪location‬‬
‫‪New York‬‬
‫‪Boston‬‬
‫‪Chicago‬‬

‫‪Dept no‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬

‫‪dname‬‬
‫‪accounting‬‬
‫‪sales‬‬
‫‪operations‬‬

‫‪)6‬قم بإدخال البيانات التالية في جدول ‪employee‬‬
‫‪sal comm deptno‬‬
‫‪3 500‬‬
‫‪1‬‬
‫‪000‬‬
‫‪2 250‬‬
‫‪2‬‬
‫‪500‬‬
‫‪4 530‬‬
‫‪2‬‬
‫‪000‬‬
‫‪5‬‬
‫‪1‬‬
‫‪000‬‬
‫‪3 120‬‬
‫‪1‬‬
‫‪500‬‬

‫‪Ename‬‬
‫‪job mgr hiredate‬‬
‫‪ayman accountant‬‬
‫‪4 5/8/1999‬‬

‫‪empno‬‬
‫‪1‬‬

‫‪5/9/2001‬‬

‫‪Sales man‬‬

‫‪Said‬‬

‫‪2‬‬

‫‪2 2/5/1999‬‬

‫‪Sales man‬‬

‫‪Tamer‬‬

‫‪2‬‬

‫‪4/6/1999‬‬

‫‪ali accountant‬‬

‫‪4 2/8/1998‬‬

‫‪5 ahamed accountant‬‬

‫‪)7‬قم باسترجاع بيانات الموظفين (‪empno, ename,‬‬
‫‪ )sal‬الذين يتقاضون مرتبا ينحصر بين ‪،1000‬‬
‫‪.3000‬‬
‫‪)8‬قم باسترجاع جميع بيانات الموظفين من جدول‬
‫‪ employee‬الذين تبدأ أسماؤهم بحرف ‪.a‬‬

‫‪138‬‬

‫‪4‬‬

‫مقدمة قواعد البيانات‬
‫‪)9‬قم بإنشاء إستعلم لسترجاع بيانات السم والوظيفة‬
‫والمرتب للموظفين الذي تم تعينهم خلل عام‬
‫‪1999‬وذلك من شهر يناير إلي شهر ديسمبر‪.‬‬
‫‪)10‬قم بإنشاء إستعلم لستعادة بيانات جميع الموظفين‬
‫مرتبة تنازليا علي أساس تاريخ التعيين‪.‬‬
‫‪)11‬قم بتحديث بيانات المرتب للموظفين الذين يعملون‬
‫بالدارة رقم ‪ 2‬وذلك بزيادة المرتب بنسبة ‪.%5‬‬
‫‪)12‬قم بكتابة العبارة التي تمكننا من حذف جميع سجلت‬
‫جدول ‪.emp‬‬
‫‪)13‬قم بإضافة عمود ‪ address‬إلي جدول ‪ emp‬علما‬
‫بأن نوع بياناته هي ‪.)varchar(20‬‬
‫‪)14‬قم بإنشاء إستعلم يقوم بحذف سجلت الموظفين التابعين‬
‫لدارة المبيعات‪.‬‬
‫‪)15‬قم بإضافة الشرط ‪ check‬للعمود ‪ address‬علي‬
‫أل يقبل سوي سكان‬
‫‪.new york, cairo, alex, jeddah‬‬

‫‪139‬‬

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

‫الفصل الخامس‬
‫مصمم النماذج‬

‫‪Form Builder‬‬

‫‪140‬‬

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

‫الهداف ‪:‬‬
‫إعطاء الطالب صمورة موضحمة عمن أسماسيات منشمي النماذج ‪،Form Builder‬‬
‫وكيفية إنشاء النماذج باستخدام المعالج ‪ ،Form Wizard‬والتعديل علي الشكل العام للنموذج‬
‫وإضافة الحقول إلي النموذج‪ ،‬مع تحديد وتعديل خصائص الكائنات علي النموذج‪.‬‬

‫المحتويات‪:‬‬
‫‪)1‬مقدمة عن ‪oracle Developer‬‬
‫‪)2‬أدوات البناء في ‪oracle Developer‬‬
‫‪141‬‬

‫مقدمة قواعد البيانات‬
‫‪)3‬استخدام منشيء النماذج ‪Form Builder‬‬
‫‪)4‬المكونات الساسية لمنشىء النماذج‪.‬‬
‫‪)5‬إنشاء النماذج باستخدام المعالج‪.‬‬
‫‪)6‬تنفيذ تطبيق منشىء النماذج‬
‫‪)7‬خصائص الكائنات الموجودة علي النموذج‬

‫‪142‬‬

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

‫ماذا سنتعلم في هذا الفصل‪:‬‬
‫في نهاية هذا الفصل يكون الطالب قد اكتسب المهارات والمعارف التالية‪:‬‬
‫‪)1‬مقدمة عن ‪oracle Developer‬‬
‫‪)2‬مكونات ‪oracle Developer‬‬
‫‪)3‬استخدام منشيء النماذج ‪form Builder‬‬
‫‪)4‬المكونات الساسية لمنشىء النماذج‪.‬‬
‫‪)5‬إنشاء النماذج باستخدام المعالج‪.‬‬
‫‪)6‬تنفيذ تطبيق منشىء النماذج‬
‫‪)7‬التعرف علي خصمائص الكائنات الموجودة علي النموذج ممن النوافمذ وكتلة البيانات‬
‫والطار وعناصر النص‪.‬‬

‫‪143‬‬

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

‫‪.a‬مقدمة عن ‪oracle Developer‬‬
‫تتكون ‪ Oracle Developer‬من العديد من الدوات القوية التي تسمح لك بإنشاء‬
‫تطبيقات ‪ Client/Server‬تتميز بالقوة والدقة‪ ،‬وعالية التدرج بشكل أسرع بكثير من‬
‫استخدام لغات البرمجة مثل ‪ c‬أو ‪ Visual Basic‬أو ‪ Java‬ويوفر لك أوراكل العديد‬
‫من الدوات تسمي بالمنشئات ‪ Builders‬لنشاء الجزاء المختلفة للتطبيقات كالنماذج‬
‫‪ Forms‬والتقارير ‪ Report‬والستعلمات ‪ Queries‬والمخططات البيانية ‪charts‬‬
‫والجرائيان ‪،Procedures‬وعناصر قواعد البيانات ‪،Database Objects‬تزودنا‬
‫‪ oracle Developer‬بالعديد من الطرق التي تمكننا من تحسين وعمل البرامج المختلفة‬
‫ويأخذ المطور ‪ developer‬الشكل التالي ‪:‬‬

‫ويحتوي ‪ oracle Developer‬علي عدد من القسام التي تساعد علي إنشاء وتطوير‬
‫والبرامج في جميع المجالت وتسهل لك أداء الوظائف البرمجية من خلل بيئة رسومية ‪GUI‬‬
‫سهلة الستخدام والبرمجة كما بالشكل التالي‪:‬‬

‫‪ 1-1‬منشيء المشاريع ‪project builder‬‬

‫‪144‬‬

‫مقدمة قواعد البيانات‬
‫يع تبر منش يء المشار يع نق طة بدا ية لغلب أدوات ‪ oracle developer‬ح يث‬
‫يتضمن منشيء المشاريع شريط أدوات يحتوي اختصارات لكل من‪:‬‬
‫‪(Run Form Builder)1‬منشيء النماذج)‬
‫‪Builder)2‬‬

‫‪report‬‬

‫‪(Run‬منشيمممء‬

‫التقارير)‬
‫‪Builder)3‬‬

‫‪graphics‬‬

‫‪(Run‬منشيممء‬

‫الرسوم البيانية)‬
‫‪Builder)4‬‬

‫‪procedure‬‬

‫‪(Run‬منشيمء‬

‫الوحدات البرمجية)‬
‫‪Builder)5‬‬

‫‪Query‬‬

‫‪(Run‬منشيمممء‬

‫الستعلمات)‬
‫كما يمكنك من إنشاء ملفات مشاريع جديدة ‪ ،‬وفتح مشاريع موجودة مسبقا‬

‫‪ 1-2‬منشيء النماذج ‪Form builder‬‬
‫ويسماعدك علي إنشاء شاشات إدخال البيانات والمعروفمة بالنماذج‪ ،‬والنماذج عبارة عن‬
‫تطمبيقات تقوم بالتصمال ممع قاعدة البيانات واسمترجاع البيانات المطلوبمة ممن قبمل المسمتخدم‪،‬‬
‫وإظهارها ضمن تخطيط تم تصميمه من قبل المصمم والسماح للمستخدم بإضافة وتعديل البيانات‬

‫‪ 3-1‬منشيء التقارير ‪Report Builder‬‬

‫‪145‬‬

‫مقدمة قواعد البيانات‬
‫و هو عبارة عن أداة ت ستخدم لنشاء التقار ير ض من ت طبيقات ‪oracle‬وي ساعدك في‬
‫إنشاء التقارير في مشروعك أو تطبيقك وربطها بالشاشات المختلفة من خلل بيئة رسومية سهلة‬
‫ال ستخدام ‪ ،GUI‬وت ساعد هذه التقار ير علي ا سترجاع بيانات من قاعدة البيانات و فق تخط يط‬
‫محدد ممن قبمل مصممم التقاريمر‪ ،‬وغالبا مما تحتوي علي مجاميمع جزئيمة ‪Subtotals‬‬
‫وتليخيصمات ‪ ،Summaries‬وغالبا مما تشتممل علي رسموم بيانيمة لعطاء مسمتخدم التقريمر‬
‫صورة أوضح عن بيانات هذا التقرير‪.‬‬

‫‪ 1-4‬منشيءالستعلمات ‪Query Builder‬‬
‫وي ساعد علي إنشاء ال ستعلمات المختل فة من خلل بيئة ر سومية ‪ ،GUI‬عو ضا عن‬
‫استخدام معظم الوامر النصية التي كنا نقوم بكتابة في ‪ ،SQL‬مما يسهل عملية البرمجة ويقلل‬
‫الخطاء‪.‬‬

‫‪ 1-5‬منشيء الرسوم البيانية ‪Graphics Builder‬‬
‫ويساعد علي إنشاء الرسوم البيانية المختلفة من خلل بيئة رسومية ‪ ،GUI‬وربطها بكل‬
‫من النماذج والتقارير المختلفة‪.‬‬

‫‪ 1-6‬منشيء المخططات ‪schema builder‬‬
‫وهو عبارة عن أداة من أدوات المطور ‪ 2000‬تسمح لنا بالعديد من الوظائف من خلل‬
‫مد ‪ Views‬واللقطات‬
‫مف الجداول ‪ ،Tables‬والمشاهم‬
‫ما تعريم‬
‫مهلة منهم‬
‫مومية سم‬
‫بيئة رسم‬
‫‪ ،Snapshot‬وعلقات الربمط ‪ Relationships‬بيمن الجداول المختلفمة فمي قاعدة‬
‫البيانات‪ ،‬و من ثم تنف يذ هذا الت صميم‪ ،‬ك ما ي سمح ل نا منش يء المخططات برؤ ية ت صميم قاعدة‬
‫البيانات ‪.‬‬

‫‪146‬‬

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

‫‪ 1-6‬منشيءالجرائيات ‪procedure builder‬‬
‫ويمك نك من إنشاء الوحدات البرمج ية المختل فة وال تي سنتعرض ل ها لح قا‪ ،‬وذلك من‬
‫خلل بيئة رسومية تسهل لك أنشاء الوحدات البرمجية بسهولة‪.‬‬

‫‪ 1-7‬منشيء الترجمات ‪Translation builder‬‬
‫يساعد المبرمجين علي ترجمة نصوص تطبيق ما إلي لغات برمجة أخري‪ ،‬وحفظ هذه‬
‫الترجمات في مخزن ‪ Repository‬يمكن استخدامه تلقائيا عند ترجمة الصدارات القادمة‬
‫للتطبيق‪.‬‬

‫‪ -2‬منشىء النماذج ‪Form Builder‬‬
‫هذا الجزء سيكون مجال دراستنا في هذا الفصل‪ ،‬وسنتناول المكونات الساسية لمنشىء‬
‫النماذج و إضا فة العنا صر ال ساسية لوحدة النموذج‪ ،‬وإنشاء ك تل البيانات ‪،Data Block‬‬
‫وإنشاء عل قة الر بط ‪ RELATIONSHIP‬ب ين ك تل البيانات‪ ،‬وتحد يد وتعد يل خ صائص كل‬
‫كائن موجود في النموذج‪.‬‬

‫‪ 2-1‬كيفية تشغيل منشيء النماذج ‪Form Builder‬‬
‫من قائمة أبدأ يتم الشارة إلي مجموعة البرامج ثم ‪ Oracle forms9i‬ثم اختيار‬
‫منشىء النماذج ‪ Form builder‬كما هو موضح بالشكل التالي‪:‬‬

‫‪147‬‬

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

‫‪ 2-2‬إنشاء وحدة نموذج ‪Creating Form Builder‬‬
‫وبالضغمط علي منشيمء النماذج ‪ Form builder‬ممن قائممة البراممج يظهمر لنما‬
‫صندوق الترحيب التالي والذي من خلله نستطيع تحديد الطريقة التي سيتم تصميم النموذج بها‪،‬‬
‫كما هو موضح بالشكل التالي‪:‬‬

‫ونجمد ممن الشكمل السمابق أن هناك عدة اختيارات عنمد تصمميم النماذج‪ ،‬منهما أربعمة‬
‫اختيارات في تبو يب ‪ ،Designing‬واختياران للم ساعدة في تبو يب ‪ ،Learning‬و هي‬
‫موضحة كالتالي‪:‬‬
‫‪Use the data block wizard)1‬‬
‫‪148‬‬

‫مقدمة قواعد البيانات‬
‫ويوفر هذا الختيار معالج يساعدنا في إنشاء النماذج‪،‬ويتم اختياره عندما نريد إنشاء‬
‫نموذج آليا باستخدام معالج من قبل البرنامج يسهل لنا عملية النشاء‬
‫‪:Build anew Form Manually)2‬‬
‫يمكننا عن طريق هذا الختيار من إنشاء النموذج بطريقة العرض التصميمي‪ ،‬بمعني‬
‫أن المبرمج سيقوم بإنشاء النموذج يدويا‪.‬‬
‫‪: Open an existing form)3‬‬
‫ويمكننا هذا الختيار من فتح نموذج موجود من قبل‪.‬‬
‫‪:Build a form based on template)4‬‬
‫يمكننا هذا الختيار من إنشاء نموذج بناء علي قالب نموذج آخر‪.‬‬
‫‪)5‬الختياران فمي تبويمب ‪ Learning‬عمن طريقهمما يتمم الوصمول إلي‬
‫مساعد المطور كما هو موضح بالشكل التالي‪:‬‬

‫‪149‬‬

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

‫‪ 2-3‬المكونات الرئيسية لمنشىء النماذج‬
‫(‪)Components of form builder‬‬
‫يحتوي منشيمء النماذج ‪ form builder‬علي العديمد ممن المكونات المختلفمة التمي‬
‫يزودنا كلً منها بعمل محدد‪ ،‬وتسمي هذه المكونات ‪ modules‬كما بالشكل التالي‪:‬‬

‫ويمكن تجميع هذه المكونات في عدة فئات كما بالشكل السابق‪:‬‬
‫‪)a‬وحدات النموذج ‪modules‬‬

‫مم‬
‫‪ :form‬وتكون أغلب جسم‬

‫التطمبيقات‪ ،‬وعمن طريقهما يمكننما تصمميم شاشات إدخال البيانات‬

‫‪150‬‬

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

‫‪)b‬وحدات القائمة ‪ :Menu Modules‬وتتضمن تخزين المعلومات‬
‫عن القوائم المخصمصة التمي ق مت بإنشائهما لتطبي قك‪ ،‬بالضافمة إلي‬
‫تخز ين التعار يف والكواد المختل فة بعنا صر القوائم‪ ،‬وتحت فظ وحدات‬
‫القائممة بمسمار المكتبات ‪ Libraries‬التمي تسمتخدمها القائممة‬
‫وغيرها وسوف نتعرض لذلك لحقا‪.‬‬
‫ممة ‪ pl/sql‬وتحتوي علي الجراءات‬
‫‪)c‬وحدات مكتبم‬
‫‪ procedure‬والحزم ‪ packages‬والدالت ‪functions‬‬
‫التي تقوم بكتابتها‪ ،‬ويتم استدعاء هذه الوحدات من قبل وحدات أخري‬
‫ضمن تطبيقك‪.‬‬
‫‪)d‬وحدات المكتبمممة الغرضيمممة ‪library‬‬

‫‪object‬‬

‫‪ :modules‬وتسمح لنا بتخزين العناصر التي يستخدمها تطبيق ما‪،‬‬
‫وإعادة ا ستخدامها في أي و قت نحتاج ها ف يه‪ ،‬م ما ي ساعدنا كث ير في‬
‫عمليات تطوير البرمجيات‪.‬‬

‫‪ 2-4‬العناصر الرئيسية في وحدة النموذج ‪form module‬‬
‫يري معظمم المسمتخدمون نموذج إدخال البيانات كعنصمر وحيمد‪ ،‬وكممبرمج عليمك النظمر إلي‬
‫مكونات النموذج بشكمل أكثمر تفصميلً‪ ،‬وليمس هذا فحسمب بمل كبنيمة هرميمة‪ ،‬وفمي ‪oracle‬‬
‫‪ developer‬تحتوي وحدة النموذج ‪ form module‬علي العديد من العناصر الكبيرة‬
‫‪151‬‬

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

‫‪ 2-4-1‬عناصر النافذة ‪Window object‬‬
‫وهي الحدود الخارجية للنموذج‪ ،‬وهي عبارة عن إطار فارغ لحمل العناصر‪ ،‬ويتم تضمين جميع‬
‫العناصر المرئية لتطبيق منشىء النماذج داخل النوافذ‪ ،‬ويوجد نوعين من النماذج وهما‬
‫‪)a‬النوافذ المستندية ‪.Document Windows‬‬
‫‪)b‬النوافذ الحوارية ‪.Dialog windows‬‬

‫‪ 2-4-1‬عناصر النافذة ‪Window object‬‬
‫‪ 2-4-1-1‬النوافذ المستندية ‪document windows‬‬
‫تستخدم النوافذ المستندية ضمن نماذج إدخال البيانات‪ ،‬فإذا كنت تقوم بالتطوير في بيئة‬
‫‪ ،windows‬سيحتوي تطبيقك تلقائيا علي نوع من النوافذ يسمي نافذة واجهة المستند المتعددة‬
‫‪ )Multiple Document Interface(MDI‬والتي تمثل النافذة الم التي تحتوي‬
‫علي كل النوافذ المستندية الخرى‪.‬‬

‫‪ 2-4-1-2‬النوافذ الحوارية ‪Dialog Window‬‬
‫تستخدم النوافذ الحوارية الرسائل للمستخدم‪ ،‬وعند تحديد خصائص نافذة حوارية يمكنك تحديد‬
‫حجمها وموقعها‪ ،‬وأيضا إذا كانت هذه النافذة الحوارية مشروطة ‪ modal‬أم ل فعلي سبيل‬
‫المثال قد تجبر المستخدم من الجابة عليها قبل أن يكون لدية القدرة علي عمل شيء آخر‪،‬‬
‫وكذلك تحديد غيما إذا كان باستطاعة المستخدم نقلها أو تغيير حجمها أو تكبيرها أو تصغيرها أو‬

‫‪152‬‬

‫مقدمة قواعد البيانات‬
‫إغلقها وكذلك تحدي ‪ visual attributes‬كاللون والنقش ونوع الخط وحجمه‬
‫وغيرها‪.‬‬

‫‪ 2-4-1-3‬عناصر الكنافا أو البساط ‪canvas object‬‬
‫يمكن أن تحتوي النافذة علي كنافا واحدة أو أكثر‪ ،‬والكنافا عبارة عن الخلفيات المرئية‬
‫‪ visual background‬التي يتم وضع عناصر النموذج عليها‪،‬وهناك أربعة أنواع من‬
‫الكنافا أو البساط وهي المحتوي ‪ content‬والمكدسة ‪ stacked‬والمبوبة ‪،tab‬وشريط‬
‫الدوات ‪. toolbar‬‬

‫‪ 2-4-1-3-1‬كنافا المحتوي ‪content canvases‬‬
‫وتعتبر الخلفية الساسية لي نموذج‪ ،‬ولذلك يتم وضع كنافا المحتوي تلقائيا داخل أي تخطيط‬
‫نموذج جديد تقوم بإنشائه‪ ،‬بمعني أنها النمط الفتراضي‬

‫‪ 2-4-1-3-2‬الكنافا المكدسة ‪stacked canvases‬‬
‫تستقر الكنافا المكدسة فوق كنافا المحتويات ‪ content canvas‬مما يؤدي إلي إخفاء‬
‫جزء منها ‪،‬ويمكن أن تظهر الكنافا المكدسة بنفس خلفية كنافا المحتوي ‪،‬أوشكل مختلف عنها ‪،‬‬
‫ويمكننا استخدام الكنافا المكدسة لجعل العناصر تختفي أو تظهر علي الشاشة اعتمادا علي‬
‫معيار أو شرط محدد‪.‬‬

‫‪ 2-4-1-3-2‬كنافا مبوبة ‪tab canvases‬‬
‫وهي عبارة عن كنافا تحتوي علي صفحات متعددة مفيدة للمستخدمين الذين يحتاجون إلي تحديد‬
‫خيارات كثيرة ضمن النافذة ‪ ،windows‬وهذا النوع يسمح للمستخدم بالنتقال بين صفحات‬
‫متعددة لمعلومات مرتبطة بينها‪ ،‬وتكون مفيدة جدا عندما تريد إظهار كمية كبيرة جدا من‬

‫‪153‬‬

‫مقدمة قواعد البيانات‬
‫المعلومات المرتبطة وذلك علي مساحة صغيرة نسبيا‪ ،‬وتستقر الكنافا المبوبة علي كنا المحتوي‬
‫‪ content canvas‬مما يؤدي إلي إخفاء جزء منها‪.‬‬

‫‪ 2-4-1-3-2‬كنافا شريط الدوات ‪toolbar canvases‬‬
‫وهي نوعين أفقية ‪ ،horizontal‬وعمودية ‪ ،vertical‬ويمكن للنافذة أن تحتوي‬
‫شريط أو أكثر‪ ،‬ويمكنك التحكم بالكود بتحديد أشرطة الدوات التي ستظهر في وقت معين ‪،‬‬
‫وكذلك تحديد العناصر المرئية ضمن كل شريط أدوات ‪.‬‬

‫‪ 2-4-1-3‬عناصر الكتلة ‪block object‬‬
‫الكتلة في منشيء النماذج عبارة عن حاوية منطقية لعناصر النموذج‪ ،‬مثل عناصر البيانات‬
‫‪ data item‬وأزرار التحكم ‪ ،control button‬وهناك نوعان من الكتل وهي كتل‬
‫البيانات ‪ ،data block‬وكتل التحكم ‪.control block‬‬

‫‪ 2-4-1-3-1‬كتل البيانات ‪data block‬‬
‫تقوم كتل البيانات بإنشاء جسر بين نموذجك والبيانات الموجودة في قاعدة البيانات‪ ،‬وهي تسمح‬
‫لك بالوصول إلي البيانات في جدول قاعدة البيانات ‪ data base table‬أو مشهد قاعدة‬
‫بيانات ‪ data base view‬أو إجراء ‪ ،procedure‬ويقوم منشىء النماذج بوضع‬
‫إطار ‪ frame‬حول كتل البيانات‪ ،‬حيث يمكنك استخدام هذا الطار لنقل الكتلة علي البساط أو‬
‫لختيار الكتلة من تعديلها‪.‬‬

‫‪ 2-4-1-3-2‬كتل التحكم ‪control blocks‬‬
‫تحتوي هذه الكتل عناصر ل تتفاعل مباشرة مع بيانات قاعدة البيانات ‪،‬وإنما تتحكم في التطبيق‬
‫نفسه مثل الزرار تقوم بوضعها ضمن كتلة تحكم ‪.‬‬
‫‪154‬‬

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

‫‪ 2-4-1-4‬العناصر أو البنود ‪item object‬‬
‫العناصر ‪ items‬عبارة عن كائنات مستقلة موجودة ضمن نموذجك ويقوم المستخدم بالتفاعل‬
‫معها‪ ،‬وأكثرها شيوعا هوعنصرالنص ‪ text item‬الذي يحتوي حقول تسمح للمستخدم‬
‫برؤية وإدخال وتعديل بيانات قاعدة البيانات‪ ،‬ويوجد أيضا عناصر لظهار بيانات قراءة فقط‬
‫مثل عنصر مخطط ‪ chart item‬وعنصر الظهار ‪ ،display item‬وعنصر‬
‫الصور ‪ image item‬وغيرها من العناصر التي سوف نتعرض لها بالتفصيل لحقا‪.‬‬

‫‪ -3‬إنشاء النماذج باستخدام معالج الكتل ‪Data Block Wizard‬‬

‫يتمثل ذلك في الخطوات التالية‪:‬‬

‫‪)1‬نقوم أولً بتشغيل منشىء النماذج ‪ ،Form Builder‬فيظهر صندوق‬
‫الترحيب التالي فنختار الخيار ‪use the data block‬‬
‫‪ ،wizard‬ويساعدنا هذا الخيار علي إنشاء نموذج بطريقة سهلة حيث‬
‫يساعدنا علي الربط بين النموذج وقاعدة البيانات‪ ،‬أو بشكل أدق بين النموذج‬
‫ومصدر البيانات ‪ data source‬وذلك من الجداول ‪،tables‬‬
‫والمشاهد ‪ ،views‬والجراءات ‪procedure‬وغيرها وسيتم التعرض‬
‫لهذه المصادر في وقت لحق بالتفصيل ثم الضغط علي ‪.ok‬‬

‫‪155‬‬

‫مقدمة قواعد البيانات‬
‫‪)2‬تظهر لك شاشة الترحيب قم بالضغط علي ‪.next‬‬
‫‪)3‬تظهر لك الشاشة التالية تقوم بسؤالك عما إذا كانت بيانات الكتلة ستعتمد‬
‫علي جدول ‪table‬أو مشهد ‪ view‬أو إجراء ‪ ،procedure‬قم‬
‫بتحديد الخيار ‪ table or view‬ثم الضغط علي ‪next‬‬

‫‪)4‬تظهر لنا النافذة التالية ويتم منها تحديد إسم الجدول المراد إنشاء نموذج بناءا علي‬
‫بيانات ‪،‬ولفعل مثل ذلك لبد أولً من التصال علي قاعدة البيانات التي يعتبر هذا‬
‫الجدول أحد مكوناتها ‪،‬وبالضغط علي استعراض ‪ browse‬وذلك لتحديد قاعدة‬
‫البيانات مصدر البيانات ‪ data source‬ومن ثم تحديد إسم الجدول مصدر‬
‫البيانات ‪ data source‬فيقوم المعالج بالسؤال عن كلً من إسم المستخدم وكلمة‬
‫السر واسم قاعدة البيانات فيتم إدخال تلك البنود ثم الضغط ‪.connect‬‬

‫‪156‬‬

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

‫‪)5‬‬

‫ومن النافذة التالية يتم تحديد إسم الجدول وهو في مثالنا جدول ‪ ،emp‬ثم الضغط‬
‫علي ‪ ok‬وتوجد بالنافذة عدة خيارات وهي‪:‬‬
‫‪ :Current User)a‬للتصال علي المستخدم الحالي‬
‫وتحديد مصادر بيانات الكتلة من جداول وغيرها‪.‬‬
‫‪ :Other User)b‬للتصال علي مستخدم آخر غير المستخدم‬
‫الذي نحن بصدد التصال عليه حاليا وتحديد مصادر بيانات‬
‫الكتلة من جداول وغيرها‪.‬‬
‫‪ :Tables)c‬عند تنشيط هذا الخيار وجعله ‪ checked‬سيتم‬
‫استعراض الجداول الموجودة في قاعدة بيانات المستخدم الذي‬
‫تم التصال عليه في الجزء السفل لتحديد أيا منها سيكون‬
‫مصدر بيانات الكتلة‬
‫‪157‬‬

‫مقدمة قواعد البيانات‬
‫‪ : Views)d‬عند تنشيط هذا الخيار وجعله ‪ checked‬سيتم‬
‫استعراض المشاهد الموجودة في قاعدة بيانات المستخدم الذي‬
‫تم التصال عليه في الجزء السفل لتحديد أيا منها سيكون‬
‫مصدر بيانات الكتلة‬
‫‪ :Synonyms)e‬عند تنشيط هذا الخيار وجعله ‪checked‬‬
‫سيتم استعراض المترادفات الموجودة في قاعدة بيانات‬
‫المستخدم الذي تم التصال عليه في الجزء السفل لتحديد أيا‬
‫منها سيكون مصدر بيانات الكتلة‪.‬‬

‫‪158‬‬

‫مقدمة قواعد البيانات‬
‫‪)6‬يتم ظهور أعمدة الجدول الذي تم اختياره في الخطة‬
‫السابقة في قسم العمدة المتاحة ‪available‬‬
‫‪ Columns‬قم بإضافة كافة العمدة عن طريق الزر‬
‫الذي يحتوي إشارتي أكبر>> وذلك لنقل أسماء جميع‬
‫العمدة من منطقة ‪ available columns‬إلي‬
‫منطقة ‪ ،database items‬ثم قم بعد ذلك بالنقر‬
‫علي زر ‪ next‬لتظهر لك النافذة الخيرة وبها خياران‬
‫وهما كالتالي‪:‬‬
‫‪Create the data block,then)a‬‬
‫‪call the lay out wizard‬‬

‫والذي يعني إنشاء الكتلة ثم استدعاء معالج التخطيطات وذلك للتحكم في إظهار أو إخفاء‬
‫‪.items‬‬
‫‪Just create the data block)b‬‬
‫إنشاء كتلة المعطيات‬
‫‪)7‬قم بتنشيط الخيار‬
‫‪Create the data block, and then call the lay out wizard‬‬

‫‪)8‬النقر علي الزر ‪finish‬‬

‫‪159‬‬

‫مقدمة قواعد البيانات‬
‫‪)9‬تظهر شاشة ترحيب معالج التخطيطات التالية قم بالنقر علي زر‬
‫‪.next‬‬

‫‪)10‬‬
‫تظهر‬
‫لنا شاشة الكنافا التالية التي تمكننا من تحديد إسم الكنافا ونوعها‪ ،‬حيث‬
‫تقوم بسؤلك عن إسم الكنافا التي تريد استخدامها كما تعلمنا أن الكنافا‬
‫تعتبر الخلفية الساسية لي نموذج‪ ،‬ولذلك يتم وضع كنافا المحتوي تلقائيا‬
‫داخل أي تخطيط نموذج جديد تقوم بإنشائه‪ ،‬بمعني أنها النمط‬
‫الفتراضي‪ ،‬قم بتحديد إسم الكنافا التي تريد ظهور الكتلة عليها ولنك لم‬
‫تقم بإنشاء كنافا سابقا بمعنى أن هذا النموذج هو أول نموذج لك في‬
‫تطبيقك فلن تظهر لك أية كنافا‪ ،‬فقم باختيار ‪ new canvas‬من‬
‫‪ ،canvas‬وتحديد نوع الكنافا من ‪ ،type‬ثم النقر علي زر ‪.next‬‬

‫‪160‬‬

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

‫‪)11‬ت‬
‫ظهر‬
‫لنا‬
‫نافذة‬
‫كتلة البيانات التي تمكننا من التحكم في إظهار البنود علي الكتلة ‪data‬‬
‫‪ block‬نحدد العناصر المراد ظهورها علي الكتلة وذلك بإضافتها في‬
‫قسم ‪ displayed item‬وذلك من خلل الضغط علي الزر >‬
‫لضافة عنصر أو الزر >> لضافة كل العناصر أو التراجع عن إظهار‬
‫عنصر وذلك بإضافتها إلي قسم ‪ available item‬عن طريق‬
‫الزر < أو التراجع عن إظهار مجموعة العناصر عن طريق الزر <<‪ ،‬ثم‬
‫قم بالنقر علي زر ‪.next‬‬

‫‪161‬‬

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

‫‪)12‬تظهر لنا نافذة التحكم في العناصر التالية‪ ،‬ويمكنك من خللها تغيير عنوان‬
‫البند من عمود ‪ ،prompt‬وفي هذا المثال قمنا بتغيير العنوان ‪ label‬لبند‬
‫‪ empno‬ليصبح رقم الموظف ويمكنك التحكم في عرض وارتفاع البند علي‬
‫الكتلة وذلك من ‪ ،width، height‬ثم قم بالضغط علي زر ‪.next‬‬

‫‪162‬‬

‫مقدمة قواعد البيانات‬
‫‪)13‬تظهر لنا نافذة النمط ‪ style layout‬التالية حيث تقوم من خللها‬
‫بتحديد إذا ما كانت بياناتك ستظهر وفق تخطيط نموذج ‪form‬‬
‫‪ ،layout‬أو وفق تخطيط جدول ‪ table layout‬والذي يشبه‬
‫صفحة العمل ‪ ،spreadsheet‬وسنقوم في هذا المثال باختيار الخيار‬

‫‪ form‬ثم الضغط علي ‪.next‬‬

‫‪163‬‬

‫مقدمة قواعد البيانات‬
‫‪)14‬تظهرلنا النافذة التالية ونستطيع من خللها إدخال عنوان للطار من‬
‫‪ frame title‬والذي سيقوم معالج التخطيطات بوضعه حول عناصر‬
‫البيانات وهو في هذا المثال الموظفون‪ ،‬ويسمح لنا بتحديد عدد السجلت التي‬
‫ستظهر في وقت معاينة التخطيط وذلك من الحقل ‪records‬‬
‫‪ ،displayed‬ولكننا قمنا باختيار النمط ‪ form‬فسنقوم بجعل عدد‬
‫السجلت ‪ ،1‬ويمكننا تحديد المسافات بين السجلت وذلك من الحقل‬
‫‪ ،distance between record‬والفضل ترك القيمة‬
‫الفتراضية لهذا الحقل وهي ‪ 0‬حتى لو ظهرت السجلت قريبة من عضها‬
‫حيث بإمكانك زيادة المسافة بينها من خلل محرر التخطيطات ‪layout‬‬
‫‪ editor‬والذي يمكننا من توزيع العناصر بشكل متساو وإظهار النتيجة‬
‫مباشرة مما يساعد علي تحديد المسافات بشكل أفضل وأسرع‪ ،‬أما الحقل‬
‫الخير ‪ display scrollbar‬يمكننا من تحديد ما إذا كان الطار‬
‫سيحتوي شريط تمرير أم ل ويكون ذلك مفيدا عنما يعرض الطار أكثر من‬
‫سجل‪ ،‬حدد ماتريد ثم قم بالضغط علي زر ‪.next‬‬

‫‪164‬‬

‫مقدمة قواعد البيانات‬
‫‪)15‬يقوم معالج التخطيطات بإظهار نافذة التهنئة الخيرة التالية قم بقراءتها ثم‬
‫أنقر الزر ‪.finish‬‬

‫‪)16‬سيقوم معالج النماذج ‪ form builder‬بإنشاء نموذجك وإظهاره في‬
‫محرر التخطيطات ‪ layout editor‬وذلك كما بالشكل التالي‪،‬‬
‫يمكنك تشغيل معالج التخطيطات ‪ layout wizard‬مرة أخري علي‬
‫تخطيط موجود مسبقا‪ ،‬وذلك لجراء تغييرات عامة علي هذا التخطيط‬
‫بشكل سريع‪ ،‬وكما يمكنك أيضا تشغيل معالج التخطيطات ‪layout‬‬
‫‪ wizard‬من خلل محرر التخطيطات ‪ lay out editor‬بالنقر‬
‫علي الزر ‪ layout wizard‬في شريط الدوات‪.‬‬

‫‪165‬‬

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

‫‪ -4‬حفظ وترجمة وتشغيل وحدة نموذج ‪:form module‬‬

‫بإمكانك إنشاء وحدات نموذج في منشىء النماذج لكنك لن تستطيع تشغيلها فيه‪ ،‬ومن أجل ذلك عليك‬
‫تشغيل برنامج تنفيذ النماذج ‪ Form Runtime‬وقبل القيام بذلك يجب عليك القيام بحفظ النموذج ثم‬
‫ترجمته‪.‬‬

‫‪ 4-1‬حفظ وحدة نموذج ‪:saving a form module‬‬
‫ويكون ذلك بإحدى الطريقتين التاليتين‪:‬‬

‫‪)a‬قم بتنفيذ المر ‪ file|save‬من قائمة أو النقر علي‬
‫زر ‪ save‬مباشرة والذي يأخذ‬

‫الشكل‬

‫المقابل‬
‫‪)b‬توصيف منشيء النماذج ‪ form builder‬للقيام‬
‫بحفظ عملك تلقائيا في كل مرة تقوم فيها بترجمته وذلك‬
‫‪166‬‬

‫مقدمة قواعد البيانات‬
‫من خلل تنفيذ المر ‪ tools|preferences‬ثم‬
‫من تبويب ‪ general‬حدد الخيار‬
‫‪Save before Building‬‬

‫‪ 4-2‬ترجمة وحدة نموذج ‪:compiling a form module‬‬

‫ل يمكنك تشغيل وحدات النماذج التي قمت بإنشائها في منشىء النماذج ‪form Builder‬‬
‫مباشرة‪ ،‬وإنما توجد خطوة فاصلة يتم تنفيذها لتحويل ملف وحدة النموذج إلي ملف تنفيذي‬
‫منفصل بحيث يستطيع برنامج تنفيذ النماذج ‪ Form Runtime‬قراءته‪ ،‬ويسمي هذا الجراء‬
‫بالترجمة ‪ ،compiling‬ويمكنك ترجمة وحدات النماذج في أي وقت بتنفيذ أمر القائمة‬
‫‪File|Administration|Compile File‬‬
‫تلميحتوصيف منشىء النماذج ‪ Form Builder‬كي يقوم‬
‫‪‬يمكنك‬
‫وبشكل تلقائي ترجمة وحدة النموذج قبل تنفيذها‪ ،‬قم بتنفيذ أمر القائمة‬
‫‪ Tools|preferences‬وفي تبويب ‪ General‬حدد‬
‫الخيار ‪Build Before Running‬‬

‫‪ 4-3‬تنفيذ وحدة نموذج ‪:Running a form module‬‬

‫للقيام بتنفيذ وحدة نموذج‪ ،‬قم بتنفيذ المر ‪ Program |Run Form‬أو النقر علي الزر‬
‫‪ Run form‬والذي يشبه علمة المرور‪ ،‬والذي يأخذ الشكل المقابل‬

‫‪167‬‬

‫مقدمة قواعد البيانات‬
‫تلميح‬
‫‪‬الشيء الول الذي تلحظه عند تشغيل النموذج هو أن النموذج ل‬
‫يقوم بإظهار أية بيانات من قاعدة البيانات لن برنامج تنفيذ النماذج‬
‫‪ Form Builder‬يفترض بأنك عندما تقوم بفتح النموذج لول‬
‫مره فستحتاجه لدخال بيانات جديدة‪ ،‬أما إذا أردت إظهار البيانات‬
‫فيجب عليك إجراء الستعلم عليها وذلك بتنفيذ المر |‪Query‬‬
‫‪ Execute‬أو النقر مباشرة علي زر ‪Execute Query‬‬

‫‪ 4-4‬أشكال ملفات منشىء النماذج ومميزاتها‪:‬‬

‫بعد أن قمنا باللمام بعمليات إنشاء وترجمة وتنفيذ وحدة نموذج‪ ،‬يجب علينا الشارة إلي‬

‫النماط المختلفة لملفات منشىء النماذج ‪ ،Form builder‬حيث يقوم كل مكون من‬
‫مكونات منشىء النماذج بإنشاء مجموعة مختلفة من الملفات‪ ،‬ولكل ملف منها هدف‬
‫مختلف عن الخر‪ ،‬فمكون النموذج ‪ form‬يقوم بتوليد ثلثة أنماط من الملفات‪ ،‬فملف‬
‫التصميم الذي تقوم بالتعامل معه مباشرة يأخذ المتداد‪( fmb.‬اختصارا للعبارة ‪form‬‬
‫‪ ، )module binary‬أما الملف التنفيذي الذي يتولد عندما تقوم بترجمة وحدة‬
‫النموذج فيأخذ المتداد ‪)fmx(form module executable.‬‬
‫والجدول التالي بيين المكون والملفات التي يكونها في وضعي التصميم والتنفيذ وامتداد‬
‫كل منها‪.‬‬

‫‪168‬‬

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

‫الوحدة أو المكون‬
‫نموذج ‪Form‬‬

‫المتداد‬

‫الوصف‬

‫‪fmb.‬‬

‫ملف تصميم النموذج‬
‫ملف تنفيذ النموذج‬

‫‪fmx.‬‬
‫قائمة ‪menu‬‬

‫ملف تصميم القائمة‬

‫‪mmb.‬‬

‫ملف تنفيذ القائمة‬

‫‪mmx.‬‬
‫مكتبة ‪PL/SQL‬‬

‫‪pll.‬‬

‫ملف تصميم مكتبة ‪PL/SQL‬ويمكن تنفيذه‬
‫أيضا يحتوي علي الترميزين المصدر والتنفيذ‬

‫‪plx.‬‬
‫مكتبة العناصر‬
‫‪object‬‬
‫‪library‬‬

‫‪olb.‬‬
‫‪olt.‬‬

‫ملف تنفيذ مكتبة ‪ PL/SQL‬ول يحتوي علي‬
‫أي ترميز مصدر‪.‬‬
‫ملف تصميم مكتبة العناصر‬
‫ملف التصدير النصي لمكتبة العناصر‪.‬‬

‫‪ -5‬إدراج وتعديل وحذف السجلت ‪:Records‬‬

‫لكي نقوم بعمليات إضافة السجلت‪ ،‬وتعديلها بتغيير محتوياتها‪ ،‬وحذفها‪ ،‬وقد قمنا بذلك‬

‫من قبل باستخدام أوامر لغة ‪ Data Manipulation Language‬ول يتم‬
‫تنفيذها علي قاعدة البيانات الساسية حتى تقوم بعملية التثبيت ‪ Commit‬لهذه التغييرات‬
‫بإستخدام أمر ‪.save‬‬

‫‪ 5-1‬إدراج السجلت ‪:Inserting Records‬‬
‫يمكنك إدراج السجلت بإحدى الطرق التالية‪:‬‬

‫‪)a‬اختر أمر القائمة ‪.Record|insert‬‬
‫‪169‬‬

‫مقدمة قواعد البيانات‬
‫‪)b‬أنقر علي زر إدراج السجلت ‪Insert Record‬الموجود‬
‫في شريط الدوات‬
‫‪)c‬النتقال إلي السجل الخير ومن ثم الضغط علي مفتاح السهم‬
‫السفلي ‪ Down Arrow‬للنتقال إلي سجل جديد‪.‬‬

‫‪ 5-2‬تعديل السجلت ‪:updating Records‬‬

‫إن إجراء التعديل من خلل النماذج عملية سهلة وبسيطة‪ ،‬فما عليك سوي النتقال إلي السجلت‬
‫المطلوبة‪ ،‬وانقل المؤشر إلي الحقل الذي تريد تغييره وتعديله‪ ،‬وقم بإجراء التعديل المطلوب‪ ،‬ثم‬
‫قم بعملية الحفظ‪.‬‬

‫‪ 5-3‬حذف السجلت ‪:Deleting Records‬‬

‫إن عملية حذف السجلت من خلل النماذج عملية سهلة وبسيطة‪ ،‬وهي أسهل من تعديلها وتتم‬
‫بإحدى الطرق التالية‪:‬‬
‫‪)a‬النتقال أولً إلي أي حقل في السجل المراد المطلوب حذفها ثم‬
‫القيام بتنفيذ أمر القائمة ‪.Record|Remove‬‬
‫‪)b‬النتقال أولً إلي أي حقل في السجل المراد المطلوب حذفها ثم‬
‫القيام بالنقر علي زر ‪ Remove Record‬الموجود في‬
‫شريط الدوات‪.‬‬
‫‪)c‬النتقال أولً إلي أي حقل في السجل المراد المطلوب حذفها ثم‬
‫القيام بضغط مفتاحي ‪ shift+f6‬من لوحة المفاتيح‪.‬‬
‫ل تنس القيام بعملية التثبيت ‪ commit‬وذلك بالقيام بالضغط علي زر ‪ save‬من شريط‬
‫الدوات‪.‬‬

‫‪ 5-4‬فهم نمطي عمليات تنفيذ النماذج‪:‬‬
‫‪170‬‬

‫مقدمة قواعد البيانات‬
‫يكون للنموذج الفعال في ‪ Form Runtime‬إحدى حالتين‪:‬‬
‫الولي‪ :‬الحالة العادية ‪ normal mode‬وهي حالة الدراج والتعديل والحذف‬
‫الثانية‪ :‬حالة الستعلم ‪ Query mode‬وهي حالة الستعلم ويقوم المستخدم باستدعاء هذا‬
‫النمط بتنفيذ المر ‪ excute Query‬فيقوم النموذج بتفريغ محتواه وانتظار المستخدم القيام‬
‫بإدخال معيار تصفية ‪ Filtering Criteria‬لعبارة ‪Where‬‬

‫‪ 5-5‬إضافة الكائنات إلي النموذج‪:‬‬

‫‪)1‬لضافة عناصر النص يتم الضغط علي رمز عنصر النص من شريط أو مربع‬
‫الدوات البرمجية في أقصي اليسار ثم تحديد حجمه علي النموذج ومن ثم تحديد‬
‫مجموعة الخصائص الخاصة به والذي يأخذ هذا‬

‫الشكل‬

‫‪)2‬لضافة عناصر الظهار ‪ Display item‬يتم الضغط علي رمزه من شريط‬
‫أو مربع الدوات البرمجية في أقصي اليسار ثم تحديد حجمه علي النموذج ومن ثم‬
‫تحديد مجموعة‪ ،‬وعنصر الظهار هو عبارة عن عنصر نموذج يقوم بإظهار‬
‫البيانات للمستخدم إل أنه ل يسمح بإدخالها أو التعديل فيها ويأخذ هذا‬
‫الشكل‬
‫‪)3‬بالضافة للعناصر التي تساعد المستخدم علي إدخال البيانات وتعديلها يحتاج‬
‫النموذج إلي عناصر تقوم بإظهار بيانات للقراءة فقط منها أو أزرار يتم إضافة‬
‫بنفس الطريقة إلي النموذج في وضع التصميم منها الزر ‪Radio Button‬‬
‫الذي يشبه الشكل التالي‬

‫وكذلك العنصر ‪ Check box‬الذي‬

‫يأخذ الشكل التالي‬
‫‪ )4‬وبنفس الطريقة يمكننا إضافة عناصر الصورة والصوت وغيرها إلي النموذج‪.‬‬
‫‪171‬‬

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

‫‪ -6‬تحديد وتعديل الخصائص للكائنات الموجودة في النموذج‬

‫سنتعرف في هذا الجزء علي مكونات لوحة الخصائص ‪ Property Palette‬والتي يتم‬
‫من خللها تحديد كيفية ظهور كل عنصر من عناصر النموذج وعمل هذا العنصر‪ ،‬وتساعدك‬
‫لوحة الخصائص كثيرا في تطوير النماذج كالخصائص التي تتحكم بظهر وسلوك كتل البيانات‬
‫وكذلك خصائص كلمن الطارات وكتل التحكم‪ ،‬وستتعرف أيضا علي خصائص العناصر‬
‫النصية التي تسمح لك برؤية وتحرير النصوص والرقام والتاريخ وغيرها من البيانات وكيفية‬
‫إجبار المستخدم علي إدخال بيانات بشكل معين وكيفية إنشاء أدوات اليضاح‬
‫‪ Tool tips‬والتلميحات ‪hints‬‬

‫‪ 6-1‬معالجة الخصائص ‪Manipulating Properties‬‬
‫تحتوي لوحة الخصائص علي أنواع متعددة من حقول القيم وهي موضحة كالتالي‪:‬‬
‫‪)a‬حقول حرفية رقمية ‪ Alphanumeric‬لكتابة القيم‪.‬‬
‫‪)b‬حقول تحتوي علي زر بالعنوان ‪ ،More‬وهي تفتح صندوق حوار‬
‫لتحديد القيم‪.‬‬
‫‪)c‬حقول مع زر وهي تظهر علمة(‪ ).....‬تقوم بفتح نافذة لدخال‬
‫وتحرير نصوص طويلة كالتعليقات أو عبارات ‪.where‬‬
‫‪)d‬قوائم مسدلة ‪ _Drop-down list‬بقيم ثابتة ومعرفة‬
‫مسبقامثل حقول ‪ yes/no‬أو خيارات نمط البحار لكتلة بيانات‬
‫ثابتة مثل ‪change, record, same, change‬‬
‫‪data block‬‬

‫‪172‬‬

‫مقدمة قواعد البيانات‬
‫وببساطة يمكنك تغيير قيم الخصائص وذلك بالنقر علي حقل القيمة للخاصية المطلوبة‪ ،‬ثم‬
‫كتابة القيمة الصحيحة أوتحديدها في صندوق حوار وهكذا‪ ...‬ويمكنك مقارنة خصائص‬
‫عنصرين أو أكثر وذلك باختيار جميع العناصر التي نرغب بمقارنتها‪،‬ومن ثم استخدام عدة‬
‫لوحات خصائص ‪ ،‬فإذا كنت ضمن نمط إظهار التقاطع ‪ intersection‬الفتراضي‬
‫للوحة الخصائص ‪،‬فستقوم اللوحة بإظهار الخصائص المشتركة فقط بين جميع العناصر المختارة‬
‫‪،‬والخصائص التي لها نفس القيمة في جميع العناصر المختارة فستظهر فيها القيمة المشتركة‬
‫أما إذا لم تكن لها نفس القيمة فسيظهر الرمز *****ضمن الخصائص بدلًمن القيمة‬
‫‪‬إذاتلميح‬
‫أردت إظهار خصائص لعدة عناصر في لوحة وحيدة‪ ،‬وبالتالي‬
‫فإن أية خاصية ستتغير في جميع العناصر المختارة‪.‬‬
‫‪‬يمكنك اختيار عدة عناصر من مستكشف العناصر الموضح في‬
‫الشكل التالي بإستخدام نفس التقنيات التي تتعامل بها مع مستكشف‬
‫النوافذ ‪ ،windows explorer‬فبعد اختيار العنصر الول‬
‫فبالضغط علي مفتاح ‪shift‬‬
‫‪‬مع النقر علي عنصر آخر يؤدي إلي اختيار مجال متلصق‬
‫يحتوي علي جميع العناصر بين الختيار الول والختيار الثاني‪،‬‬
‫أما إذا أردت اختيار عناصر غير متجاورة استخدم مفتاح ‪ctrl‬‬
‫مع النقر علي العناصر المحددة‪.‬‬
‫‪‬ولظهار نافذة خصائص العنصر نقوم بتحديد العنصر ثم الضغط‬
‫مرتين‬
‫‪173‬‬

‫مقدمة قواعد البيانات‬
‫‪Double click‬‬

‫أو تحديد العنصر ثم الضغط علي ‪f4‬‬

‫‪ 6-2‬خصائص كتلة البيانات ‪data block‬‬

‫تنقسم خصائص كتلة البيانات إلي تسع فئات وهي‪ :‬عامة ‪ ،general‬وإبحار ‪،navigation‬‬
‫والسجلت ‪ ،record‬وقاعدة البيانات ‪ ،database‬قضيب النزلق ‪ ،Scrollbar‬والبنط‬
‫واللون ‪font &color‬ونمط الحروف ‪ ,character mode‬والفئة الدولية‬
‫‪ international‬وقاعدة بيانات متقدمة ‪ ،advanced database‬ولظهار نافذة‬
‫خصائص كتل البيانات نقوم بتحديد الكتلة وهي في مثالنا ‪ emp‬ثم الضغط عليها مرتين ‪Double‬‬
‫‪ click‬أو تحديد العنصر ثم الضغط علي ‪f4‬‬
‫فتظهر نافذة الخصائص في الركن اليمن من الشاشة كما بالشكل التالي‪:‬‬

‫‪174‬‬

‫مقدمة قواعد البيانات‬
‫والجدول التالي يوضح أهم خصائص كتلة البيانات‪-:‬‬
‫إسم الخاصية ‪property name‬‬
‫‪Data base data block‬‬

‫الوظيفة ‪Function‬‬
‫ولها خياران ‪ yes, no‬وفي حالة إختيار‬
‫‪ yes‬نحدد أن الكتلة مبنية علي جدول أو‬
‫كائن قاعدة البيانات‬

‫‪Query array size‬‬

‫التحكم بعدد السجلت التي يمكن إستراجعها‬
‫من قاعدة البيانات في وقت ما‬

‫‪Query data source name‬‬

‫نحدد منها إسم الكائن أو الجدول مصدر‬
‫البيانات الذي عند الستعلم سيتم استرجاع‬
‫البيانات منه‬

‫‪Number of records‬‬
‫‪buffered‬‬

‫عدد السجلت التي يمكن لل ‪form‬‬
‫‪ runtime‬الحتفاظ بها في ذاكرة الحاسب‬
‫العميل ‪client‬‬

‫‪Number of records‬‬
‫‪displayed‬‬

‫خاصية القيمة الفتراضية لعدد السجلت‬
‫الظاهرة‬

‫‪Where clause‬‬

‫لوضع شرط أو عدة شروط‬

‫‪Query allowed‬‬

‫ولها خياران ‪ yes, no‬وفي حالة إختيار‬
‫‪ yes‬يمكن للمستخدم إدخال معيار تصفية‬
‫لتقييد السجلت المسترجعة‬

‫‪Order by clause‬‬

‫تسمح لنا بتحديد كيفية فرز السجلت‬
‫المسترجعة‬

‫‪Insert/update/delete‬‬
‫‪allowed‬‬

‫تمكننا من التحكم بعمليات الدراج والتعديل‬
‫والحذف ضمن كتلة المعطيات‬

‫‪175‬‬

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

‫‪ 6-3‬التحكم في خصائص الطارات ‪frame properties‬‬

‫هناك عدة خصائص قد تكون لها أهمية خاصة عند التعامل مع الطارات علي الكنافا في‬

‫تطبيقك كما هو موضح بالجدول التالي‪:‬‬
‫إسم الخاصية ‪property name‬‬
‫‪Frame title alignment‬‬

‫الوظيفة ‪function‬‬
‫التحكم بعدد السجلت التي يمكن إستراجعها‬
‫من قاعدة البيانات في وقت ما‬

‫‪Number of records‬‬
‫‪displayed‬‬
‫‪Layout style‬‬

‫خاصية القيمة الفتراضية لعدد السجلت‬
‫الظاهرة في الطار‬
‫وتحدد شكل بنود الطار وتحتوي خاصيتان‬
‫الولي ‪ form‬وتعني شكل نموذج والثانية‬
‫‪ tabular‬وتعني جدولي‬

‫‪Distance between Record‬‬

‫تمكننا من تحديد المسافة بين السجلت‬

‫‪Order by‬‬

‫تسمح لنا بتحديد كيفية فرز السجلت‬
‫المسترجعة‬

‫‪Insert/update/delete‬‬
‫‪allowed‬‬

‫تمكننا من التحكم بعمليات الدراج والتعديل‬
‫والحذف ضمن كتلة البيانات ‪.‬‬

‫‪ 4 -6‬التحكم في خصائص عناصر النص ‪text items‬‬

‫في هذا الجزء سنتطرق إلي أهم جزء في أي نموذج أل وهو عنصر النص ‪،TEXT ITEM‬‬
‫حيث يقوم منشيء النماذج ‪ Form Builder‬باستخدام عناصر النص لظهار نص أو‬
‫تاريخ أو أرقام ‪.....‬إلخ وتسمج بتحرير البيانات من قبل المستخدم‪،‬ويجب النتباه إلي أن أي‬
‫عنصر ‪ text item‬يختلف عن عناصر الظهار ‪ Display item‬في أن عنصر‬
‫الظهار ل يسمح بتغيير البيانات الظاهرة ‪،‬ويمكن لعنصر النص أن يحتوي سطرا واحدا أو عدة‬
‫أسطر ‪.‬‬

‫‪176‬‬

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

‫‪ 1- 4 -6‬تعديل مظهر عنصر النص ‪Text item appearance‬‬

‫حيث أن الهدف الرئيسي من عناصر النص ‪ text items‬يتمثل في إظهار البيانات‪ ،‬فنجد‬
‫أنه من الضروري اللمام بكيفية التحكم بمظهر البيانات التي نقوم بإظهارها‪ ،‬ويمكنك الوصول‬
‫إلي خصائص الظهار باختيار العنصر الذي نرغب في تغيير مظهره ثم فتح لوحة خصائص‬
‫العناصر ‪ property palette‬والجدول التالي يوضح أهم الخصائص المتعلقة بظهر‬
‫عنصر النص‪:‬‬
‫‪Category name‬‬
‫إسم الفئة‬
‫‪functional‬‬

‫‪Property name‬‬
‫إسم الخاصية‬
‫‪justification‬‬

‫‪data‬‬

‫‪Format mask‬‬

‫‪Function‬‬
‫الوظيفة‬
‫محاذاة أفقية لمحتوي العنصر‬
‫تمكنك من التحكم بإظهار‬
‫وتنسيق النصوص والرقام‬
‫والتواريخ‬

‫‪Records‬‬
‫‪Physical‬‬

‫‪Distance‬‬
‫‪between record‬‬
‫‪visible‬‬

‫التحكم في المسافة العمودية‬
‫بين السجلت‪.‬‬
‫إظهار أو إخفاء العنصر‬
‫للمستخدم‬

‫‪Font&color‬‬

‫‪Visual‬‬
‫‪attribute group‬‬

‫‪prompt‬‬

‫‪prompt‬‬

‫إن خاصية ‪visual‬‬
‫‪attribute group‬‬
‫تسمح لنا بإنشاء مجموعة‬
‫خصائص البنط واللوان‬
‫والتعبئة زمن ثم تطبيق هذه‬
‫الخصائص علي نموذجك‬
‫وهي بمثابة التنسيق التلقائي‬
‫في برنامج معالجة النصوص‬
‫عنوان نص يتم إظهاره مع‬
‫العنصر‬

‫‪ 2- 4 -6‬التحكم في بيانات عنصر النص‬
‫‪177‬‬

‫مقدمة قواعد البيانات‬
‫إذا كان مظهر عنصر النص يعتبر أمر ضروري وهام إل أن محتوي عنصر النص من البيانات‬
‫أكثر أهمية والجدول التالي يوضح الخصائص التي تمكننا من التحكم في البيانات التي يحتويها‬
‫عنصر النص‪:‬‬
‫‪Category name‬‬
‫إسم الفئة‬
‫‪functional‬‬

‫‪Property name‬‬
‫إسم الخاصية‬
‫‪Multi-line‬‬

‫‪functional‬‬

‫‪Case‬‬
‫‪restriction‬‬

‫‪Function‬‬
‫الوظيفة‬
‫تمكننا من إدخال عدة أسطر‬
‫من البيانات في عنصر النص‬
‫لقلب القيم المدخلة من قبل‬
‫المستخدم إلي أحرف كبيرة أو‬
‫صغيرة ‪.‬‬

‫‪Distance‬‬
‫‪between record‬‬

‫‪Data‬‬

‫‪datatype‬‬

‫‪Data‬‬

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

‫‪Data‬‬

‫‪Maximum length‬‬

‫‪Data‬‬

‫‪Data fixed‬‬

‫‪Data‬‬

‫‪Initial value‬‬

‫القيمة الفتراضية للعنصر‬

‫‪Data‬‬

‫‪required‬‬

‫مطلوب وتحتوي خياران‬

‫‪Data‬‬

‫‪Lowest value‬‬

‫أقل قيمة مقبولة‬

‫‪Data‬‬

‫‪Highest allowed‬‬

‫أكبر قيمة مقبولة‬

‫قبوله‬
‫تقبل فقط الدخالت التي‬
‫تحتوي علي عدد الحرف‬
‫المحددة تماما في الخاصية‬
‫‪fixed‬‬

‫‪ yes, no‬وفي خالة‬
‫اختيار ‪ yes‬فلن يسمح‬
‫للمستخدم بحفظ السجل إل إذا‬
‫احتوي العنصر علي قيمة‪.‬‬

‫‪178‬‬

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

‫‪value‬‬
‫‪ Calculation‬لتحديد ما إذا كان سيتم حساب‬
‫‪mode‬‬
‫العنصر من خلل صيغة‬
‫‪formula‬أو تلخيص‬
‫‪summary‬‬

‫‪ 3- 4 -6‬تعديل سلوك البحار لحقل نص‬

‫بعد تحديد كلً من المظهر والتحكم في بيانات عناصر النص ‪ ،‬نقوم بالتركيز علي الخصائص‬
‫التي تسهل عملية التنقل ضمن التطبيق كما هو موضح بالجدول التالي ‪:‬‬
‫‪Function‬‬
‫الوظيفة‬

‫‪Category name‬‬
‫إسم الفئة‬
‫‪functional‬‬

‫‪Property name‬‬
‫إسم الخاصية‬
‫‪Automatic skip‬‬

‫‪Navigation‬‬

‫‪Keyboard‬‬
‫‪navigable‬‬

‫‪Navigation‬‬

‫‪Previous‬‬
‫‪navigation item‬‬

‫‪Navigation‬‬

‫‪ Next navigation‬لتحديد العنصر الذي سيتم‬
‫‪item‬‬
‫النتقال إليه عندما يريد‬

‫وتمكننا من تحديد أن المؤشر‬
‫سيقفز إلي العنصر التالي بعد‬
‫الضافة أو تعديل الحرف‬
‫الخير‬
‫وتحتوي خياران ‪yes, no‬‬
‫وفي خالة اختيار ‪ no‬فلن يتم‬
‫نقل التركيز أو المؤشر إلي‬
‫العنصر باستخدام مفاتيح التنقل‬
‫لتحديد العنصر الذي سيتم‬
‫النتقال إليه عندما يريد‬
‫المستخدم الرجوع للخلف‪.‬‬

‫المستخدم التقدم نحو المام‪.‬‬
‫‪physical‬‬

‫‪ Show scroll bar‬إظهار أو إخفاء شريط التمرير‬

‫‪ 4- 4 -6‬ربط عنصر نص بقاعدة البيانات‬

‫‪179‬‬

‫مقدمة قواعد البيانات‬
‫في هذه الفقرة سنحدد الخصائص التي تسمح لك بالتحكم في كيفية ربط عنصر نص‬
‫بقاعدة البيانات‪ ،‬وهناك العديد من الخصائص التي تمكننا من تحديد ماهي العناصر التي يستطيع‬
‫المستخدم من إضافة البيانات وتعديلها وتحت أية معايير أو شروط محددة وغيرها كما هو‬
‫موضح بالجدول التالي ‪:‬‬
‫‪Category name‬‬
‫إسم الفئة‬
‫‪database‬‬

‫‪Property name‬‬
‫إسم الخاصية‬
‫‪Primary key‬‬

‫‪database‬‬

‫‪Query only‬‬

‫‪Function‬‬
‫الوظيفة‬
‫تحديد خاصية المفتاح الساسي‬
‫لهذا العنصر‬
‫وتحتوي خياران ‪yes, no‬‬
‫وفي خالة اختيار ‪ yes‬يمكننا‬
‫إجراء الستعلم علي هذا‬
‫العنصر فقط ول يمكننا إجراء‬
‫عمليات الدراج أو التعديل‬
‫علي هذا العنصر‬

‫‪database‬‬

‫‪Query allowed‬‬

‫‪database‬‬

‫– ‪Case‬‬
‫‪insensitive‬‬
‫‪query‬‬

‫‪database‬‬

‫‪Insert allowed‬‬

‫وتحتوي خياران ‪yes, no‬‬
‫وفي خالة اختيار ‪yes‬يمكن‬
‫للمستخدم إجراء الستعلم ‪.‬‬
‫وتحتوي خياران ‪yes, no‬‬
‫وفي خالة اختيار ‪ yes‬فإن‬
‫أي إستعلم سيتم إنشائه من‬
‫منشىء النماذج سيكون ‪Case‬‬
‫‪–insensitive‬‬
‫وتحتوي خياران ‪yes, no‬‬
‫وفي خالة اختيار ‪ yes‬فإن‬
‫المستخدم يستطيع إضافة‬
‫البيانات إلي عناصر‬
‫النصوص‪.‬‬

‫‪180‬‬

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

‫‪update allowed‬‬

‫وتحتوي خياران ‪yes, no‬‬
‫وفي خالة اختيار ‪ yes‬فإن‬
‫المستخدم يستطيع تعديل‬
‫البيانات في عناصر النصوص‪.‬‬

‫‪Calculation‬‬

‫‪Calculation‬‬
‫‪mode‬‬

‫‪Calculation‬‬

‫‪formula‬‬

‫‪Calculation‬‬

‫‪Summary‬‬
‫‪function‬‬

‫تسمح لنا بتحديد أنه يجب أن‬
‫يقوم هذا العنصر بإستقاق قيمته‬
‫من صيغة أو تلخيص بدلً من‬
‫عمود قاعدة البيانات‬
‫لتخزين تعبير ‪pl/sql‬‬
‫لحساب قيمة عنصر وذلك إذا‬
‫كان تم تحديد الخاصية السابقة‬
‫علي ‪Formula‬‬
‫لتحديد الدالة المستخدمة لحساب‬
‫قيمة العنصر مثل ‪count,‬‬
‫‪max, min, sum,‬‬
‫‪average‬‬

‫‪ 5- 4 -6‬تضمين رسائل مساعدة في تطبيقك‬

‫يزودنا منشيء النماذج بخصائص تجعل من السهل إضافة معلومات مساعدة لكي يراها‬
‫المستخدم عند النتقال من عنصر إلي أخر‪ ،‬ويمكن أن تأخذ هذه الخاصية أحد شكلين‬
‫الول‪ :‬وهي التلميحات ‪ hints‬ويتم ظهورها في سطر الرسالة وذلك أسفل نافذة النموذج‪.‬‬
‫الثاني‪ :‬أدوات اليضاح تظهر ملصقة لمؤشر الفأرة وذلك عند وضعها لبرهة فوق العنصر‬
‫والجدول التالي يوضح قائمة بهذه الخصائص‪:‬‬
‫‪Category name‬‬
‫إسم الفئة‬
‫‪help‬‬

‫‪Property‬‬
‫‪name‬‬
‫إسم الخاصية‬
‫‪hint‬‬

‫‪Function‬‬
‫الوظيفة‬
‫لتخزين نص التلميح الذي نرغب‬
‫بعرضه علي المستخدمين عندما‬
‫يقومون بالدخول إلي عنصر النص‬
‫هذا‬

‫‪181‬‬

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

‫‪tooltip‬‬

‫لتخزين نص أداة اليضاح الذي‬
‫نرغب بإظهاره للمستخدم عندما‬
‫يحوم مؤشر الماوس فوق عنصر‬
‫النص بالدخول إلي عنصر النص‬
‫هذا‬

‫‪182‬‬

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

‫المجموعة الولي‪:‬‬
‫ضع علمة (‬

‫السئلة‬

‫) أمام العبارة الصحيحة وعلمة (×) أمام العبارة الخاطئة مع‬

‫تصحيح الخطأ‪.‬‬

‫‪)1‬منشىء النماذج يساعدك علي إنشاء شاشات إدخال البيانات والمعروفة بالنماذج‪.‬‬
‫‪)2‬منشىء التقاريمر عبارة عمن أداة تسمتخدم لنشاء التقاريمر ضممن تطمبيقات‬
‫‪oracle‬ويسماعدك فمي إنشاء التقاريمر فمي مشروعمك أو تطبيقمك وربطهما‬
‫بالشاشات المختلفة من خلل بيئة رسومية سهلة‪.‬‬
‫‪)3‬منشىء السمتعلمات يسماعد الممبرمجين علي ترجممة نصموص تطمبيق مما إلي‬
‫لغات برمجة أخري‬
‫‪)4‬منشيمء التقاريمر يسماعد علي إنشاء الرسموم البيانيمة المختلفمة ممن خلل بيئة‬
‫رسومية ‪.GUI‬‬
‫‪)5‬عناصمر النافذة همي الحدود الخارجيمة للنموذج‪ ،‬وهمي عبارة عمن إطار فارغ‬
‫لحمل العناصر‪.‬‬
‫‪ )6‬يمكن أن تحتوي النافذة علي كنافا واحدة أو أكثر‪.‬‬
‫‪)7‬تقوم كتمل البيانات بإنشاء جسمر بيمن نموذجمك والبيانات الموجودة فمي قاعدة‬
‫البيانات‪.‬‬
‫‪)8‬يتم وضع الكنافا المكدسة تلقائيا داخل أي تخطيط نموذج جديد تقوم بإنشائه‪،‬‬
‫بمعني أنها النمط الفتراضي‪.‬‬

‫‪183‬‬

‫مقدمة قواعد البيانات‬
‫‪)9‬تسمتقر الكنافما المكدسمة فوق كنافما المحتويات ‪ content canvas‬ممما‬
‫يؤدي إلي إخفاء جزء منها‪.‬‬
‫‪ )10‬الكتلة في منشيء النماذج عبارة عن حاوية منطقية لعناصر النموذج‪.‬‬

‫المجموعة الثانية‪:‬‬

‫‪)1‬ماهي المكونات الرئيسية الربع لمنشيء النماذج ؟‬
‫‪)2‬ماهي العلقة بين النافذة الكنافا ؟‬
‫‪)3‬ماهي أنواع الكنافا مع المقارنة بينها ؟‬
‫‪)4‬حدد الطريقة التي يمكننا بها حذف عنصر من تخطيط النموذج دون حذفه من كتلة‬
‫البيانات ؟‬

‫‪184‬‬

Sign up to vote on this title
UsefulNot useful