You are on page 1of 184

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

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

‫فهرس الكتاب‬
‫الصفحة‬ ‫الموضوع‬ ‫م‬
‫‪4‬‬ ‫الفصل الول‪ :‬أساسيات لغة الستفسارات الهيكلية‬
‫‪5‬‬ ‫•مقدمة‬ ‫‪1-1‬‬
‫‪10‬‬ ‫•لغة الستفسارات الهيكلية ‪SQL‬‬ ‫‪1-2‬‬
‫‪13‬‬ ‫•استخدام ‪SQL*PLUS‬‬ ‫‪1-3‬‬
‫‪15‬‬ ‫•جملة ‪SELECT‬‬ ‫‪1-4‬‬
‫‪21‬‬ ‫•جملة الشرط ‪Where‬‬ ‫‪1-5‬‬
‫‪36‬‬ ‫•ترتيب النتائج باستخدام ‪order by‬‬ ‫‪1-6‬‬
‫‪40‬‬ ‫•القيمة ‪ null‬وتأثيراتها‬ ‫‪1-7‬‬
‫‪42‬‬ ‫•استخدام محرر النصوص في ‪SQL*PLUS‬‬ ‫‪1-8‬‬
‫‪43‬‬ ‫•السئلة والتمارين‬ ‫‪1-9‬‬
‫‪50‬‬ ‫الفصل الثاني‪ :‬تقنيات لغة ‪SQL‬‬
‫‪53‬‬ ‫•الربط بين جدولين أو أكثر‬ ‫‪2-1‬‬
‫‪65‬‬ ‫•استخدام ‪Multi-row functions‬‬ ‫‪2-2‬‬
‫‪71‬‬ ‫•استخدام ‪single-row functions‬‬ ‫‪2-3‬‬
‫‪82‬‬ ‫•استخدام ‪group by clause‬‬ ‫‪2-4‬‬
‫‪86‬‬ ‫•استخدام ‪having clause‬‬ ‫‪2-5‬‬
‫‪89‬‬ ‫•استخدام و عمل إستعلم فرعي ‪sub query‬‬ ‫‪2-6‬‬
‫‪99‬‬ ‫•السئلة والتمارين‬ ‫‪2-7‬‬
‫‪105‬‬ ‫الفصل الثالث‪ :‬معالجة البيانات باستخدام ‪SQL‬‬
‫‪108‬‬ ‫مقدمة‬ ‫‪3-1‬‬
‫‪110‬‬ ‫•إضافة سجلت جديدة للجداول‬ ‫‪3-2‬‬
‫‪113‬‬ ‫•حذف بيانات موجودة في قاعدة البيانات‬ ‫‪3-3‬‬
‫‪115‬‬ ‫•تعديل بيانات موجودة في قاعدة البيانات‬ ‫‪3-4‬‬
‫‪121‬‬ ‫•إنشاء الجداول وإضافة المحددات لها‬ ‫‪3-5‬‬
‫‪136‬‬ ‫•السئلة‬ ‫‪3-6‬‬
‫‪143‬‬ ‫الفصل الرابع ‪:‬ورشة عمل‬
‫‪147‬‬ ‫التدريب العملي‬ ‫‪4-1‬‬

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

‫الصفحة‬ ‫الموضوع‬ ‫م‬


‫‪150‬‬ ‫الفصل الخامس ‪:‬مصمم النماذج‬
‫‪154‬‬ ‫مقدمة عن ‪oracle developer‬‬ ‫‪5-1‬‬
‫‪155‬‬ ‫أدوات البناء في ‪oracle developer‬‬ ‫‪5-2‬‬
‫‪159‬‬ ‫المكونات الساسية لمنشيء النماذج‬ ‫‪5-3‬‬
‫‪165‬‬ ‫إنشاء النماذج باستخدام المعالج‬ ‫‪5-4‬‬
‫‪175‬‬ ‫تنفيذ تطبيق منشيء النماذج‬ ‫‪5-5‬‬
‫‪180‬‬ ‫خصائص الكائنات الموجودة علي النموذج‬ ‫‪5-6‬‬
‫‪192‬‬ ‫السئلة‬ ‫‪5-7‬‬

‫‪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‬تستطيع من خللها إنشاء وتعريف الكائنات في قاعدة‬

‫البيانات‪ ،‬وتقوم هذه الواممر بإنشاء أو إسمقاط أو تغييمر كائن قاعدة البيانات‪ ،‬وهمي اختصمارا‬

‫‪ ،)Data‬وممن أهمم أوامرهما ‪Create,‬‬ ‫‪Definition‬‬ ‫للكلمات(‪Language‬‬


‫‪Alter, Drop, Rename, Truncate‬‬

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


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

‫هي مجمو عة من العبارات ال تي ت ستطيع من خلل ها معال جة البيانات الموجودة في‬

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

‫ما ‪Insert,‬‬
‫مم أوامرهم‬
‫من أهم‬
‫‪ ،)Data‬ومم‬ ‫‪Manipulation‬‬ ‫‪Language‬‬
‫‪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‬‬
‫‪ROLLBACK‬‬ ‫لغـة معالجة البيانات‬
‫‪SAVEPOINT‬‬ ‫‪Transaction control‬‬

‫‪ -3‬استخدام ‪SQL*Plus‬‬

‫يعتبر برنامج ‪ SQL*PLUS‬أحد منتجات شركة ‪ ،Oracle‬وهو واجهة التخاطب مع‬

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

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

‫‪ 3-1‬استخدام ‪SQL*Plus‬‬

‫يعممد اسممتخدام ‪SQL*Plus‬مممن أسممهل الطرق لتعلم لغممة ‪ ،SQL‬للدخول علي‬


‫‪ SQL*Plus‬يتم ذلك بالطريقة التالية‪:‬‬

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

‫‪Oracle‬‬ ‫‪‬ممن قائممة ‪start‬أشمر إلي ‪ ،Programs‬ثمم ‪-‬‬

‫‪ ،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‬‬

‫‪SQL> SELECT empno, ename, job‬‬ ‫مثال‪2‬‬


‫‪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‬أمثلة علي التعبيرات الحسابية‬

‫‪SQL> SELECT ename, sal, sal+500‬‬ ‫مثال‪1‬‬


‫;‪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‬يلي اسم العمود أو التعبير الحسابي المراد‬

‫إعادة تسميته مع ترك مسافة‪.‬‬

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

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

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

‫")‪double quotation‬‬ ‫من وضعة بين علمتي تنصيص ("‬

‫مثال‪1‬‬
‫‪SQL> SELECT ename, sal AS Salary‬‬ ‫مثال‪1‬‬
‫‪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‬يأخذ الختيار الشرطي الشكل التالي‬
‫‪SELECT‬‬ ‫}‪[DISTINCT] {*, column [alias], ...‬‬
‫‪FROM‬‬ ‫‪table‬‬
‫‪[WHERE‬‬ ‫;])‪condition(s‬‬

‫تلميحجملة ‪ 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‬كمما هو ممبين‬
‫بالجدول التالي‬

‫المعامل ‪Operator‬‬ ‫المعني ‪Meaning‬‬

‫=‬ ‫يسممماوي‬

‫>‪< or‬‬ ‫أكبرمن أو أقل من‬

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

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

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

‫<> ‪= ! Or‬‬ ‫ل يساوي‬

‫‪SQL> SELECT ename, job, sal‬‬ ‫مثال‪1‬‬


‫‪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‬كما هو مبين بالجدول التالي‬

‫المعامل ‪Operator‬‬ ‫المعني ‪Meaning‬‬

‫‪……BETWEEN…..AND‬‬ ‫بين قيمتين‬

‫‪)IN(list‬‬ ‫تتيح لك اختيار أي قيمة من ‪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‬يتم إجراء المثال التالي‬

‫‪SQL> SELECT‬‬ ‫*‬


‫‪2 FROM‬‬ ‫‪emp‬‬ ‫مثال‪1‬‬
‫‪3 WHERE‬‬ ‫;)‪empno IN (7369, 7499, 7521‬‬
‫;‬

‫في هذا المثال السابق تم استرجاع السجلت التي فيها العمود ‪ 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‬‬
‫مقدمة قواعد البيانات‬

‫‪SQL> SELECT‬‬ ‫‪ename‬‬


‫‪2 FROM‬‬ ‫‪emp‬‬
‫‪3 WHERE‬‬ ‫;'‪ename LIKE 'A%‬‬

‫مثال‪2‬‬

‫للبحث عن السماء التي تشتمل علي أحرف ‪ are‬يتم ذلك من خلل كتابة الكود التالي‪:‬‬

‫‪SQL> SELECT‬‬ ‫*‬


‫‪2 FROM‬‬ ‫‪emp‬‬
‫‪3 WHERE‬‬ ‫;'‪ename LIKE '%are%‬‬

‫مثال‪3‬‬
‫لسترجاع بيانات السم والوظيفة والمرتب للموظفين الذي تم تعينهم خلل عام ‪1982‬‬

‫من شهر يناير إلي شهر ديسمبر يتم كتابة الكود التالي‬

‫‪SQL> SELECT ename,job,sal,hiredate‬‬


‫‪2 FROM emp‬‬
‫;'‪3 WHERE HIREDATE LIKE '%1982‬‬
‫مثال‪4‬‬

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

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

‫‪SQL> SELECT‬‬ ‫‪ename‬‬


‫‪2 FROM‬‬ ‫‪emp‬‬
‫‪3 WHERE‬‬ ‫;'‪ename LIKE '_A%‬‬

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

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

‫حرفي‪.‬‬

‫‪ %‬اختصار لي تتابع من سلسلة أحرف غير معينة مؤلفة‬

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

‫‪ _‬اختصار لي حرف وحيد‬

‫‪ 6-2-4‬استخدام معامل ‪IS NULL‬‬

‫قبمل اسمتخدام معاممل ‪ IS NULL‬ممع ‪Where‬لبمد ممن الجابمة علي ماهمي القيممة‬

‫‪ NULL‬؟ تستخدم القيمة ‪ NULL‬للشارة إلي عمود ل يحتوي علي بيانات‪ ،‬حيث ل تعني القيمة‬

‫‪ NULL‬صفر أو مسافة ‪Blank Space‬‬

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

‫لسترجاع جميع بيانات الموظفين الذين ل يتقاضون حوافز ‪ Commission‬يتم‬

‫كتابة الكود التالي‬

‫‪SQL> SELECT‬‬ ‫*‬


‫‪2 FROM‬‬ ‫‪emp‬‬
‫‪3 WHERE‬‬ ‫;‪comm IS NULL‬‬

‫‪ 6-3‬استخدام عوامل المقارنة الخرى(‪)Logical Operators‬‬


‫تتضمن ‪ SQL‬ثلثة معاملت منطقية بالضافة للمعاملت التي الشارة إليها في سابقا‬

‫يمكن استخدامها مع جملة ‪ ،Where‬كما هو مبين بالجدول التالي‬

‫المعامل ‪Operator‬‬ ‫المعني ‪Meaning‬‬


‫‪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, ‫ باستثناء الوظيفة‬،)‫ المرتب‬،‫ الوظفية‬،‫لسترجاع بيانات الموظفين(السم‬
('ANALYST','ACCOUNTANT','ENGINEER');
:‫يتم كتابة الكود التالي‬ engineer, accountant

‫تلميح‬
‫ مع المعاملت الخرى مثل‬NOT ‫يتم استخدم معامل‬

)BETWEEN, LIKE, and NULL(

:‫وإليك التلميح التالي‬

….. Where sal NOT BETWEEN 3000 AND 4000


….. Where ename NOT LIKE '%T%'
….. Where job NOT IN ('analyst','accountant')
….. Where comm IS NOT NULL

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

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

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

‫الترتيب ‪Order Evaluated‬‬ ‫المعامل ‪Operator‬‬

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


‫‪2‬‬ ‫‪NOT‬‬
‫‪3‬‬ ‫‪AND‬‬
‫‪4‬‬ ‫‪OR‬‬ ‫مثال‪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‬‬


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

‫‪SQL> SELECT‬‬ ‫*‬


‫‪2 FROM‬‬ ‫‪emp‬‬
‫‪3 ORDER BY‬‬ ‫;‪hiredate desc‬‬

‫تلميح‬

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

‫‪ Order‬همو الترتيمب‬ ‫‪‬الترتيمب الفتراضمي فمي جملة ‪by‬‬

‫التصاعدي مللم نصرح عكس ذلك بالكلمة ‪DESC‬‬

‫‪‬ي تم عرض الق يم ‪ null‬مؤخرا ع ند الترت يب الت صاعدي‪ ،‬والع كس‬

‫ل عند الترتيب التنازلي‪.‬‬


‫يتم ظهور القيم ‪ null‬أو ً‬
‫مثال‪3‬‬

‫يمكنك إجراء الترتيب باستخدام ‪ Order by‬علي أساس قيم أعمدة ليست بجملة‬

‫‪ ،SELECT‬كما بهذا المثال‬

‫‪SQL> SELECT‬‬ ‫‪ename, sal‬‬


‫‪2 FROM‬‬ ‫‪emp‬‬
‫‪3 ORDER BY‬‬ ‫;‪deptno, sal DESC‬‬
‫تلميح‬

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

‫أكثر من عمود‪.‬‬

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

‫‪ 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‬‬ ‫إظهار محتوي الذاكرة المؤقتة‬ ‫‪l‬‬
‫‪I‬‬ ‫السماح للمستخدم بالبدء بإدخال‬ ‫‪I‬‬

‫نص بعد السطر الحالي‬


‫‪/‬‬ ‫تنفذ التعليمة المخزنة حاليا في‬ ‫‪R‬أو ‪run‬أو ‪/‬‬
‫‪RUN‬‬ ‫الذاكرة المؤقتة‬
‫‪Save c:\t.sql‬‬ ‫حفظ التعليمة الحالية في ملف‬ ‫‪Save filename‬‬
‫‪get c:\t.sql‬‬ ‫تحمل محتوي ملف ما إلي الذاكرة‬ ‫‪Get filename‬‬

‫المؤقتة‬
‫‪start c:\t.sql‬‬ ‫تحميل الملف إلي الذاكرة المؤقتة‬ ‫‪Start filename‬‬
‫أو @‪filename‬‬
‫وتنفيذ التعليمات الموجودة به‬
‫‪edit c:\t.sql‬‬ ‫تشغل محرر النصوص الخارجي‬ ‫‪Edit filename‬‬
‫أو ‪edit‬‬
‫مثل المفكرة‪ ،‬فإذا تم تحديد إسم‬
‫أو ‪ed‬‬
‫الملف يتم فتح محرر النصوص‬
‫متضمنا الملف‬

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

‫السئلة‬
‫المجموعة الولي‪:‬‬
‫) أمام العبارة الصحيحة وعلمة (×) أمام العبارة الخاطئة مع‬ ‫ضع علمة (‬
‫تصحيح الخطأ‪.‬‬
‫‪)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‬‬

‫‪.DQL‬‬ ‫‪2‬م أوامر‬

‫‪3‬م أوامر‪DDL .‬‬

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

‫‪)10‬المـر ‪ Truncate‬يستخـدم في‪:‬‬

‫‪)1‬حمذف العممدة في الجمدول‪.‬‬

‫‪)2‬حمذف كمافمة الصفموف المموجمودة في الجمدول‪.‬‬


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

‫‪)3‬حمذف عممود واحمد‪.‬‬

‫‪)4‬حمذف صمف واحمد‪.‬‬

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

‫‪empno‬‬ ‫‪name‬‬ ‫‪Sal‬‬


‫‪1‬‬ ‫‪Ali‬‬ ‫‪1000‬‬
‫‪2‬‬ ‫‪Hani‬‬ ‫‪2000‬‬
‫‪3‬‬ ‫‪Mohammed‬‬ ‫‪1500‬‬
‫‪4‬‬ ‫‪Ayman‬‬ ‫‪1200‬‬
‫يكمون نماتج الواممر التماليمة هي ‪:‬‬

‫‪; 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‬‬

‫‪Single‬‬ ‫‪.3‬اسممممتخدام ‪Row‬‬


‫‪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‬‬

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


‫‪)Multiple Tables‬‬
‫عند استرجاع بيانات من جدولين أو أكثر هناك عدة اعتبارات يجب مراعاتها‬

‫‪)1‬وضع أسماء العمدة في جملة ‪.Select‬‬

‫‪)2‬وضع أسماء الجداول في جملة ‪ ،From‬علي أن يتم الفصل بينها بالفاصلة‪.‬‬

‫‪)3‬إضافة شرط الربط في جملة ‪.Where‬‬

‫‪)4‬الصيغة العامة لسترجاع بيانات من جدولين‬

‫‪SELECT‬‬ ‫‪table1.column, table2.column‬‬


‫‪FROM‬‬ ‫‪table1, table2‬‬
‫‪WHERE‬‬ ‫;‪table1.column1 = table2.column2‬‬

‫مثال‪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‬في جدول ‪ dept‬كانت‬ ‫عمود ‪ deptno‬في جدول الموظفين وقيم‬

‫متساوية بمعني أن جدول ‪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‬‬
‫‪5‬‬ ‫‪emp‬‬
‫‪ahmed‬‬ ‫‪1350‬‬ ‫‪salgrade‬‬
‫‪----- ----- ------‬‬
‫‪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‬‬
‫‪emp‬‬ ‫‪dept‬‬
‫‪ENAME DEPTNO‬‬ ‫‪DEPTNO DNAME‬‬
‫‪------ ----------‬‬ ‫‪------ ----------‬‬
‫‪Tarek‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪ACCOUNTING‬‬
‫‪Ayman‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪SALES‬‬
‫‪Said‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪RESEARCH‬‬
‫‪Ali‬‬ ‫‪2‬‬ ‫‪...‬‬
‫الدارة‬
‫‪...‬‬ ‫في‬ ‫موظفين‬ ‫ل يوجد‬ ‫‪10‬‬ ‫‪ENGINEERING‬‬
‫‪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‬‬
‫‪EMPNO ENAME‬‬ ‫‪)EMP‬‬
‫‪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‬بحساب عدد السجلت بما‬

‫فيها السجلت التي تحتوي علي قيم فارغة‪ ،‬فعلي سبيل المثال‪:‬‬

‫‪SQL> SELECT‬‬ ‫)*( ‪COUNT‬‬


‫‪2 FROM‬‬ ‫‪emp‬‬
‫‪3 WHERE‬‬ ‫;‪deptno = 10‬‬

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

‫‪ 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‬‬

‫)‪SQL> SELECT MIN(SAL‬‬


‫‪FROM emp‬‬
‫;‪WHERE deptno=10‬‬ ‫‪63‬‬
‫مقدمة قواعد البيانات‬

‫‪ 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‬بالكود التالي ي‬

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

‫ي‬

‫مثال‪3‬‬
‫يمكننا حساب المتوسط الحسابي لعمود ‪ COMM‬في جدول ‪ ،EMP‬وذلك بكتابة الكود التالي‬

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

‫نلحظ في هذا المثال أن ‪ avg‬تتجاهل القيم ‪.null‬‬


‫‪ 2-1-4‬استخدام ‪SUM‬‬
‫نستخدم ‪ sum‬لحساب المجموع الكلي لقيم عمود ما‪ ،‬وهناك عدة اعتبارات يجب مراعاتها عند‬

‫استخدام ‪sum‬‬

‫‪‬يستخدم ‪ sum‬مع القيم العددية فقط‪.‬‬

‫‪‬تهمل ‪ sum‬القيمة ‪ NULL‬عند حسابه المجموع الكلي‪.‬‬

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

‫إذا صرحنا بكتابة ‪ DISTINCT‬قبل إسم العمود‪.‬‬

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

‫‪ 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‬‬

‫‪General‬‬ ‫‪Number‬‬
‫‪Single-row‬‬
‫‪Functions‬‬

‫‪Conversion‬‬ ‫‪Date‬‬

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

‫‪ 2-2-1-1‬الدوال النصية ‪character functions‬‬

‫يمتلك أوراكل عدد من الدوال التي تستخدم لتعديل أنماط البيانات النصية(‪char,‬‬

‫‪ ،)varchar‬وسوف نتعرض لهم هذه الدوال النصية في هذا الفصل وهى‪:‬‬

‫الستخدام‬ ‫الدالة النصية‬


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

‫الحرف التالية للحرف الكبير إلي حالة الحرف الصغيرة‪.‬‬


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

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

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

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

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

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

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

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

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

‫الدالة ‪FUNCTION‬‬ ‫النتيجة ‪RESULT‬‬


‫‪)'LOWER‬‬ ‫‪('JICC Center‬‬ ‫('‪)'jicc center‬‬
‫‪)'UPPER‬‬ ‫‪('jicc Center‬‬ ‫('‪)'JICC CENTER‬‬
‫‪)'INITCAP ('JICC Center‬‬ ‫('‪)'Jicc Center‬‬
‫‪)'CONCAT('JICC'),('CENTER‬‬ ‫‪JICCCENTER‬‬

‫‪)SUBSTR('String',1,3‬‬ ‫‪Str‬‬

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

‫‪)'Length('String‬‬ ‫‪6‬‬

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

‫مثال‪2‬‬
‫‪SQL>SELECT ename, CONCAT (ename, job),‬‬
‫)'‪LENGTH (ename),INSTR(ename, 'A‬‬
‫‪FROM‬‬ ‫;‪emp‬‬

‫‪ 2-1-2- 2‬الدوال الرقمية ‪Number functions‬‬


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

‫‪ ،Data‬وسوف نتعرض لهم هذه الدوال الرقمية في هذا الفصل وهى‪:‬‬

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


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

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

‫)‪1)ROUND (42.926,2‬‬ ‫‪42.93‬‬


‫)‪2)TRUNC (44.926,2‬‬ ‫‪44.92‬‬
‫‪3)MOD‬‬ ‫)‪(1600,300‬‬ ‫‪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;

4‫مثال‬
SQL>SELECT ename, sal, comm, MOD(sal,comm)
2 FROM emp;

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‬ويستخدم لتحويل نوع البيانات إلي نوع البيانات النصية ‪،‬فمث ً‬

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

‫خاص ‪ ،‬ويعتبر من أهم الدوال التحويلية في أوراكل‪،‬ومن أهم استخداماته هو تحويل‬

‫نوع البيانات الرقمية إلي نوع البيانات النصية وذلك لضفاء عليها تنسيق خاص‬

‫مثل إظهار علمة العلمة بجوار الرقم والتحكم في رمز العلمة العشرية وعدد‬

‫الرقام بعد العلمة العشرية وهناك عدة رموز يمكننا استخدامها عند تحويل البيانات‬

‫الرقمية إلي نوع البيانات النصية ‪ ،‬كما هو موضح بالجدول التالي ‪:‬‬

‫الستخدام‬ ‫الرمز‬
‫‪number‬‬ ‫يمثل رقم‬ ‫‪9‬‬

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

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

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

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

‫يمثل رمز العلمة العشرية ‪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‬‬
‫‪6‬‬ ‫‪WHERE‬الذي رقمه هو ‪،1‬‬
‫مرتب الموظف‬ ‫في المثال السابق نجد أن الستعلم الداخلي يحدد‬
‫;)‪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
returns
Subquery 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‬‬

‫‪SQL> SELECT‬‬ ‫‪empno, ename, job‬‬ ‫‪1300‬‬


‫‪2 FROM‬‬ ‫‪emp‬‬ ‫‪1100‬‬
‫‪3 WHERE‬‬ ‫‪sal < ANY‬‬ ‫‪1300‬‬
‫‪4‬‬ ‫‪(SELECT sal‬‬ ‫‪950‬‬
‫‪5‬‬ ‫‪FROM emp‬‬
‫‪6‬‬ ‫‪WHERE‬‬ ‫)' ‪job = ' CLERK‬‬
‫‪7 AND‬‬ ‫;'‪job <> 'CLERK‬‬ ‫تلميح‪ :‬تعني أقل من ‪minimum‬‬
‫‪any <‬‬
‫‪ :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‬تستطيع من خللها إنشاء وتعريف الكائنات في قاعدة‬

‫البيانات‪ ،‬وتقوم هذه الواممر بإنشاء أو إسمقاط أو تغييمر كائن قاعدة البيانات‪ ،‬وهمي اختصمارا‬

‫‪ ،)Data‬وممن أهمم أوامرهما ‪Create,‬‬ ‫‪Definition‬‬ ‫للكلمات(‪Language‬‬


‫‪Alter, Drop, Rename, Truncate‬‬

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

‫هي مجمو عة من العبارات ال تي ت ستطيع من خلل ها معال جة البيانات الموجودة في‬

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

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


‫‪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‬قم بتنفيذ‬

‫العبارة التالية‪:‬‬

‫* ‪SQL>Select‬‬ ‫;‪From emp‬‬


‫‪ 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‬‬ ‫‪-2‬حذف‬
‫)‪(Select (mpno,name,job,mgr,sal,comm,deptno‬‬
‫;‪From emp‬‬ ‫بيانات‬
‫موجودة فـي‬
‫قاعدة البيانات (‪)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‬فإن هذا‬
‫يعني حذف كافة السجلت ‪ ،‬والصيغة العامة لها هي‪:‬‬
‫مثال‬
‫]‪SQL>DELETE [FROM‬‬ ‫;‪table‬‬ ‫لحذف كافة‬
‫السجلت من‬
‫جدول ‪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‬‬ ‫‪ 3-2‬تحديـث‬
‫‪14 rows updated.‬‬
‫ســــجلت‬
‫محددة (‬
‫‪)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 UPDATE INSERT DELETE

COMMIT Savepoint A 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; ‫ كيفيــة‬-5
Rollback complete.
‫إنشاء‬
‫جداول وإضافة محددات من نوع‬

)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‬ويحتوي عدد أرقام‬ ‫‪)NUMBER(n,d‬‬
‫قدره (‪ ،)n‬والتي تتضمن القيمة (‪ )d‬التي توضح عدد الرقام‬
‫العشرية بعد الفاصلة‪.‬‬
‫يشبه نوع البيانات ‪ ،NUMBER‬ولكنه ل يأخذ غير القيم الرقمية‬ ‫‪INTEGER‬‬

‫الصحيحة‪ ،‬ول يقبل أي أرقام عشرية بعد الفاصلة‪.‬‬


‫يعرف عمود من نوع البيانات الحرفية‪ ،‬وأقصي طول له‬ ‫‪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‬‬
‫‪Table created.‬‬ ‫‪5-2-1-3‬الشرط ‪( not null‬ليس فارغا)‬

‫نستخدم الشرط ‪ 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‬‬
‫;)))'‪in ('M','F‬‬ ‫‪not‬‬ ‫‪null,‬‬
‫‪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-‬‬
‫(‪SQL> CREATE TABLE emp‬‬ ‫‪1-7‬‬
‫‪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),‬‬ ‫‪Modif‬‬
‫‪8 comm NUMBER(7,2),‬‬ ‫‪ying‬‬
‫‪9 deptno‬‬ ‫‪NUMBER(7,2) NOT NULL,‬‬ ‫‪Const‬‬
‫)‪10 CONSTRAINT emp_deptno_fk FOREIGN KEY(deptno‬‬ ‫‪raint‬‬
‫;))‪11 REFERENCES dept (deptno‬‬ ‫‪)s‬‬

‫يمكننا‬

‫إضافة شرط للجدول وذلك بعد إنشائه‪ ،‬كما يمكننا إزالة تلك الشروط أو إلغاء تفعيلها أو‬

‫تفعيلهاوذلك باستخدام ‪ 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‬‬


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

‫مثال‪5‬‬
‫‪SQL> ALTER TABLE‬‬ ‫‪emp‬‬
‫;‪2 enable primary key‬‬
‫‪Table ALTER‬‬
‫>‪SQL‬‬ ‫‪TABLE‬‬
‫‪altered.‬‬ ‫‪emp‬‬
‫;‪2 drop primary key‬‬
‫‪Table altered.‬‬ ‫السئلة‬
‫المجموعة الولي‪:‬‬
‫) أمام العبارة الصحيحة وعلمة (×) أمام العبارة الخاطئة مع‬ ‫ضع علمة (‬
‫تصحيح الخطأ‪.‬‬
‫‪.1‬عند استخدام ‪ Insert into‬لئحة القيم لبد أن تأخذ نفس ترتيب العمدة في‬

‫الجدول المراد إضافة السجلت إليه‪.‬‬

‫‪.2‬للتأكد من تنفيذ عبارة ‪ insert‬وإضافة السجل إلي جدول ‪ emp‬نقوم بتنفيذ‬

‫العبارة التالية‪:‬‬

‫* ‪SQL>Select‬‬ ‫;‪From emp‬‬

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

‫‪.3‬عند استخدام عبارة ‪ insert‬يجب أن تتطابق العمدة والقيم المقابلة لها في نوع‬

‫البيانات ‪.data types‬‬

‫‪.4‬عند استخدام عبارة ‪ insert‬ليتم وضع الحرف النصية والتاريخ بين علمتي‬

‫تنصيص مفردة' '‪.‬‬

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

‫‪SQL> DELETE * FROM‬‬ ‫;‪emp‬‬

‫‪.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‬‬

‫‪Dept no‬‬ ‫‪dname‬‬ ‫‪location‬‬


‫‪1‬‬ ‫‪accounting‬‬ ‫‪New York‬‬
‫‪2‬‬ ‫‪sales‬‬ ‫‪Boston‬‬
‫‪3‬‬ ‫‪operations‬‬ ‫‪Chicago‬‬

‫‪)6‬قم بإدخال البيانات التالية في جدول ‪employee‬‬


‫‪empno‬‬ ‫‪Ename‬‬ ‫‪job mgr hiredate‬‬ ‫‪sal comm deptno‬‬
‫‪1‬‬ ‫‪ayman accountant‬‬ ‫‪4 5/8/1999‬‬ ‫‪3 500‬‬ ‫‪1‬‬
‫‪000‬‬
‫‪2‬‬ ‫‪Said‬‬ ‫‪Sales man‬‬ ‫‪5/9/2001‬‬ ‫‪2 250‬‬ ‫‪2‬‬
‫‪500‬‬
‫‪2‬‬ ‫‪Tamer‬‬ ‫‪Sales man‬‬ ‫‪2 2/5/1999‬‬ ‫‪4 530‬‬ ‫‪2‬‬
‫‪000‬‬
‫‪4‬‬ ‫‪ali accountant‬‬ ‫‪4/6/1999‬‬ ‫‪5‬‬ ‫‪1‬‬
‫‪000‬‬
‫‪5 ahamed accountant‬‬ ‫‪4 2/8/1998‬‬ ‫‪3 120‬‬ ‫‪1‬‬
‫‪500‬‬
‫‪)7‬قم باسترجاع بيانات الموظفين (‪empno, ename,‬‬

‫‪ )sal‬الذين يتقاضون مرتبا ينحصر بين ‪،1000‬‬

‫‪.3000‬‬

‫‪)8‬قم باسترجاع جميع بيانات الموظفين من جدول‬

‫‪ employee‬الذين تبدأ أسماؤهم بحرف ‪.a‬‬

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

‫‪)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‬منشيء النماذج)‬

‫‪(Run‬منشيمممء‬ ‫‪report‬‬ ‫‪Builder)2‬‬

‫التقارير)‬

‫‪(Run‬منشيممء‬ ‫‪graphics‬‬ ‫‪Builder)3‬‬

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

‫‪(Run‬منشيمء‬ ‫‪procedure‬‬ ‫‪Builder)4‬‬

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

‫‪(Run‬منشيمممء‬ ‫‪Query‬‬ ‫‪Builder)5‬‬

‫الستعلمات)‬

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

‫‪ 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‬كما بالشكل التالي‪:‬‬

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

‫مم‬
‫‪ :form‬وتكون أغلب جسم‬ ‫‪)a‬وحدات النموذج ‪modules‬‬

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

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

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

‫المختلفة‪.‬‬

‫‪)b‬وحدات القائمة ‪ :Menu Modules‬وتتضمن تخزين المعلومات‬

‫عن القوائم المخصمصة التمي ق مت بإنشائهما لتطبي قك‪ ،‬بالضافمة إلي‬

‫تخز ين التعار يف والكواد المختل فة بعنا صر القوائم‪ ،‬وتحت فظ وحدات‬

‫القائممة بمسمار المكتبات ‪ Libraries‬التمي تسمتخدمها القائممة‬

‫وغيرها وسوف نتعرض لذلك لحقا‪.‬‬

‫ممة ‪ pl/sql‬وتحتوي علي الجراءات‬


‫‪)c‬وحدات مكتبم‬

‫‪ procedure‬والحزم ‪ packages‬والدالت ‪functions‬‬

‫التي تقوم بكتابتها‪ ،‬ويتم استدعاء هذه الوحدات من قبل وحدات أخري‬

‫ضمن تطبيقك‪.‬‬

‫‪object‬‬ ‫‪)d‬وحدات المكتبمممة الغرضيمممة ‪library‬‬

‫‪ :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‬‬
‫مقدمة قواعد البيانات‬

‫الوصف‬ ‫المتداد‬
‫الوحدة أو المكون‬
‫ملف تصميم النموذج‬ ‫‪fmb.‬‬
‫نموذج ‪Form‬‬
‫ملف تنفيذ النموذج‬
‫‪fmx.‬‬
‫ملف تصميم القائمة‬ ‫‪mmb.‬‬ ‫قائمة ‪menu‬‬

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


‫‪mmx.‬‬

‫ملف تصميم مكتبة ‪PL/SQL‬ويمكن تنفيذه‬ ‫‪pll.‬‬ ‫مكتبة ‪PL/SQL‬‬


‫أيضا يحتوي علي الترميزين المصدر والتنفيذ‬

‫ملف تنفيذ مكتبة ‪ PL/SQL‬ول يحتوي علي‬


‫‪plx.‬‬
‫أي ترميز مصدر‪.‬‬

‫ملف تصميم مكتبة العناصر‬ ‫‪olb.‬‬ ‫مكتبة العناصر‬


‫ملف التصدير النصي لمكتبة العناصر‪.‬‬ ‫‪object‬‬
‫‪olt.‬‬ ‫‪library‬‬

‫‪ -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‬‬
‫مقدمة قواعد البيانات‬

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

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


‫تنقسم خصائص كتلة البيانات إلي تسع فئات وهي‪ :‬عامة ‪ ،general‬وإبحار ‪،navigation‬‬

‫والسجلت ‪ ،record‬وقاعدة البيانات ‪ ،database‬قضيب النزلق ‪ ،Scrollbar‬والبنط‬

‫واللون ‪font &color‬ونمط الحروف ‪ ,character mode‬والفئة الدولية‬

‫‪ international‬وقاعدة بيانات متقدمة ‪ ،advanced database‬ولظهار نافذة‬

‫خصائص كتل البيانات نقوم بتحديد الكتلة وهي في مثالنا ‪ emp‬ثم الضغط عليها مرتين ‪Double‬‬

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

‫فتظهر نافذة الخصائص في الركن اليمن من الشاشة كما بالشكل التالي‪:‬‬

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

‫والجدول التالي يوضح أهم خصائص كتلة البيانات‪-:‬‬

‫الوظيفة ‪Function‬‬ ‫إسم الخاصية ‪property name‬‬


‫ولها خياران ‪ yes, no‬وفي حالة إختيار‬ ‫‪Data base data block‬‬

‫‪ yes‬نحدد أن الكتلة مبنية علي جدول أو‬


‫كائن قاعدة البيانات‬
‫التحكم بعدد السجلت التي يمكن إستراجعها‬ ‫‪Query array size‬‬

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


‫نحدد منها إسم الكائن أو الجدول مصدر‬ ‫‪Query data source name‬‬

‫البيانات الذي عند الستعلم سيتم استرجاع‬


‫البيانات منه‬
‫عدد السجلت التي يمكن لل ‪form‬‬ ‫‪Number of records‬‬
‫‪buffered‬‬
‫‪ runtime‬الحتفاظ بها في ذاكرة الحاسب‬
‫العميل ‪client‬‬
‫خاصية القيمة الفتراضية لعدد السجلت‬ ‫‪Number of records‬‬
‫‪displayed‬‬
‫الظاهرة‬
‫لوضع شرط أو عدة شروط‬ ‫‪Where clause‬‬

‫ولها خياران ‪ yes, no‬وفي حالة إختيار‬ ‫‪Query allowed‬‬

‫‪ yes‬يمكن للمستخدم إدخال معيار تصفية‬


‫لتقييد السجلت المسترجعة‬
‫تسمح لنا بتحديد كيفية فرز السجلت‬ ‫‪Order by clause‬‬

‫المسترجعة‬

‫تمكننا من التحكم بعمليات الدراج والتعديل‬ ‫‪Insert/update/delete‬‬


‫‪allowed‬‬
‫والحذف ضمن كتلة المعطيات‬

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

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


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

‫تطبيقك كما هو موضح بالجدول التالي‪:‬‬

‫الوظيفة ‪function‬‬ ‫إسم الخاصية ‪property name‬‬


‫التحكم بعدد السجلت التي يمكن إستراجعها‬ ‫‪Frame title alignment‬‬

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


‫خاصية القيمة الفتراضية لعدد السجلت‬ ‫‪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‬والجدول التالي يوضح أهم الخصائص المتعلقة بظهر‬

‫عنصر النص‪:‬‬

‫‪Function‬‬ ‫‪Property name‬‬ ‫‪Category name‬‬


‫الوظيفة‬ ‫إسم الخاصية‬ ‫إسم الفئة‬
‫محاذاة أفقية لمحتوي العنصر‬ ‫‪justification‬‬ ‫‪functional‬‬

‫تمكنك من التحكم بإظهار‬ ‫‪Format mask‬‬ ‫‪data‬‬

‫وتنسيق النصوص والرقام‬


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

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

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

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

‫إذا كان مظهر عنصر النص يعتبر أمر ضروري وهام إل أن محتوي عنصر النص من البيانات‬

‫أكثر أهمية والجدول التالي يوضح الخصائص التي تمكننا من التحكم في البيانات التي يحتويها‬

‫عنصر النص‪:‬‬

‫‪Function‬‬ ‫‪Property name‬‬ ‫‪Category name‬‬


‫الوظيفة‬ ‫إسم الخاصية‬ ‫إسم الفئة‬
‫تمكننا من إدخال عدة أسطر‬ ‫‪Multi-line‬‬ ‫‪functional‬‬

‫من البيانات في عنصر النص‬


‫لقلب القيم المدخلة من قبل‬ ‫‪Case‬‬ ‫‪functional‬‬
‫‪restriction‬‬
‫المستخدم إلي أحرف كبيرة أو‬
‫صغيرة ‪.‬‬
‫التحكم في المسافة العمودية‬ ‫‪Distance‬‬ ‫‪Data‬‬
‫‪between record‬‬
‫بين السجلت‪.‬‬
‫لتحديد نوع البيانات التي يمكن‬ ‫‪datatype‬‬ ‫‪Data‬‬

‫لعنصر النص قبولها‪.‬‬


‫الحد القصى الممكن للعنصر‬ ‫‪Maximum length‬‬ ‫‪Data‬‬

‫قبوله‬
‫تقبل فقط الدخالت التي‬ ‫‪Data fixed‬‬ ‫‪Data‬‬

‫تحتوي علي عدد الحرف‬


‫المحددة تماما في الخاصية‬
‫‪fixed‬‬
‫القيمة الفتراضية للعنصر‬ ‫‪Initial value‬‬ ‫‪Data‬‬

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

‫‪ yes, no‬وفي خالة‬


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

‫أكبر قيمة مقبولة‬ ‫‪Highest allowed‬‬ ‫‪Data‬‬

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

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

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


‫بعد تحديد كلً من المظهر والتحكم في بيانات عناصر النص ‪ ،‬نقوم بالتركيز علي الخصائص‬

‫التي تسهل عملية التنقل ضمن التطبيق كما هو موضح بالجدول التالي ‪:‬‬

‫‪Function‬‬ ‫‪Property name‬‬ ‫‪Category name‬‬


‫الوظيفة‬ ‫إسم الخاصية‬ ‫إسم الفئة‬
‫وتمكننا من تحديد أن المؤشر‬ ‫‪Automatic skip‬‬ ‫‪functional‬‬

‫سيقفز إلي العنصر التالي بعد‬


‫الضافة أو تعديل الحرف‬
‫الخير‬
‫وتحتوي خياران ‪yes, no‬‬ ‫‪Keyboard‬‬ ‫‪Navigation‬‬
‫‪navigable‬‬
‫وفي خالة اختيار ‪ no‬فلن يتم‬
‫نقل التركيز أو المؤشر إلي‬
‫العنصر باستخدام مفاتيح التنقل‬
‫لتحديد العنصر الذي سيتم‬ ‫‪Previous‬‬ ‫‪Navigation‬‬
‫‪navigation item‬‬
‫النتقال إليه عندما يريد‬
‫المستخدم الرجوع للخلف‪.‬‬
‫‪ Next navigation‬لتحديد العنصر الذي سيتم‬ ‫‪Navigation‬‬
‫‪item‬‬
‫النتقال إليه عندما يريد‬
‫المستخدم التقدم نحو المام‪.‬‬
‫‪ Show scroll bar‬إظهار أو إخفاء شريط التمرير‬ ‫‪physical‬‬

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

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

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

‫بقاعدة البيانات‪ ،‬وهناك العديد من الخصائص التي تمكننا من تحديد ماهي العناصر التي يستطيع‬

‫المستخدم من إضافة البيانات وتعديلها وتحت أية معايير أو شروط محددة وغيرها كما هو‬

‫موضح بالجدول التالي ‪:‬‬

‫‪Function‬‬ ‫‪Property name‬‬ ‫‪Category name‬‬


‫الوظيفة‬ ‫إسم الخاصية‬ ‫إسم الفئة‬
‫تحديد خاصية المفتاح الساسي‬ ‫‪Primary key‬‬ ‫‪database‬‬

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

‫وفي خالة اختيار ‪yes‬يمكن‬


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

‫وفي خالة اختيار ‪ yes‬فإن‬


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

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

‫وتحتوي خياران ‪yes, no‬‬ ‫‪update allowed‬‬ ‫‪database‬‬

‫وفي خالة اختيار ‪ yes‬فإن‬


‫المستخدم يستطيع تعديل‬
‫البيانات في عناصر النصوص‪.‬‬
‫تسمح لنا بتحديد أنه يجب أن‬ ‫‪Calculation‬‬ ‫‪Calculation‬‬
‫‪mode‬‬
‫يقوم هذا العنصر بإستقاق قيمته‬
‫من صيغة أو تلخيص بدلً من‬
‫عمود قاعدة البيانات‬
‫لتخزين تعبير ‪pl/sql‬‬ ‫‪formula‬‬ ‫‪Calculation‬‬

‫لحساب قيمة عنصر وذلك إذا‬


‫كان تم تحديد الخاصية السابقة‬
‫علي ‪Formula‬‬
‫لتحديد الدالة المستخدمة لحساب‬ ‫‪Summary‬‬ ‫‪Calculation‬‬
‫‪function‬‬
‫قيمة العنصر مثل ‪count,‬‬
‫‪max, min, sum,‬‬
‫‪average‬‬
‫‪ 5- 4 -6‬تضمين رسائل مساعدة في تطبيقك‬
‫يزودنا منشيء النماذج بخصائص تجعل من السهل إضافة معلومات مساعدة لكي يراها‬
‫المستخدم عند النتقال من عنصر إلي أخر‪ ،‬ويمكن أن تأخذ هذه الخاصية أحد شكلين‬
‫الول‪ :‬وهي التلميحات ‪ hints‬ويتم ظهورها في سطر الرسالة وذلك أسفل نافذة النموذج‪.‬‬
‫الثاني‪ :‬أدوات اليضاح تظهر ملصقة لمؤشر الفأرة وذلك عند وضعها لبرهة فوق العنصر‬
‫والجدول التالي يوضح قائمة بهذه الخصائص‪:‬‬

‫‪Function‬‬ ‫‪Property‬‬ ‫‪Category name‬‬


‫الوظيفة‬ ‫‪name‬‬ ‫إسم الفئة‬
‫إسم الخاصية‬
‫لتخزين نص التلميح الذي نرغب‬ ‫‪hint‬‬ ‫‪help‬‬

‫بعرضه علي المستخدمين عندما‬


‫يقومون بالدخول إلي عنصر النص‬
‫هذا‬

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

‫لتخزين نص أداة اليضاح الذي‬ ‫‪tooltip‬‬ ‫‪help‬‬

‫نرغب بإظهاره للمستخدم عندما‬


‫يحوم مؤشر الماوس فوق عنصر‬
‫النص بالدخول إلي عنصر النص‬
‫هذا‬

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

‫السئلة‬
‫المجموعة الولي‪:‬‬
‫) أمام العبارة الصحيحة وعلمة (×) أمام العبارة الخاطئة مع‬ ‫ضع علمة (‬
‫تصحيح الخطأ‪.‬‬
‫‪)1‬منشىء النماذج يساعدك علي إنشاء شاشات إدخال البيانات والمعروفة بالنماذج‪.‬‬

‫‪)2‬منشىء التقاريمر عبارة عمن أداة تسمتخدم لنشاء التقاريمر ضممن تطمبيقات‬

‫‪oracle‬ويسماعدك فمي إنشاء التقاريمر فمي مشروعمك أو تطبيقمك وربطهما‬

‫بالشاشات المختلفة من خلل بيئة رسومية سهلة‪.‬‬

‫‪)3‬منشىء السمتعلمات يسماعد الممبرمجين علي ترجممة نصموص تطمبيق مما إلي‬

‫لغات برمجة أخري‬

‫‪)4‬منشيمء التقاريمر يسماعد علي إنشاء الرسموم البيانيمة المختلفمة ممن خلل بيئة‬

‫رسومية ‪.GUI‬‬

‫‪)5‬عناصمر النافذة همي الحدود الخارجيمة للنموذج‪ ،‬وهمي عبارة عمن إطار فارغ‬

‫لحمل العناصر‪.‬‬

‫‪ )6‬يمكن أن تحتوي النافذة علي كنافا واحدة أو أكثر‪.‬‬

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

‫البيانات‪.‬‬

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

‫بمعني أنها النمط الفتراضي‪.‬‬

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

‫‪)9‬تسمتقر الكنافما المكدسمة فوق كنافما المحتويات ‪ content canvas‬ممما‬

‫يؤدي إلي إخفاء جزء منها‪.‬‬

‫‪ )10‬الكتلة في منشيء النماذج عبارة عن حاوية منطقية لعناصر النموذج‪.‬‬

‫المجموعة الثانية‪:‬‬
‫‪)1‬ماهي المكونات الرئيسية الربع لمنشيء النماذج ؟‬

‫‪)2‬ماهي العلقة بين النافذة الكنافا ؟‬

‫‪)3‬ماهي أنواع الكنافا مع المقارنة بينها ؟‬

‫‪)4‬حدد الطريقة التي يمكننا بها حذف عنصر من تخطيط النموذج دون حذفه من كتلة‬

‫البيانات ؟‬

‫‪184‬‬

You might also like