اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

أبو امين

03 عضو مميز
  • Posts

    319
  • تاريخ الانضمام

  • تاريخ اخر زياره

كل منشورات العضو أبو امين

  1. استاذي الكريم : نجحت العملية و استطعت الدخول للاستيراد لكن تخرج رسالة مثل ما هو مبين بالصورة مع العلم ان الجدول الذي اردت تصديره يوجد به 4 حقول فقط و هم : 1/ الاسم و اللقب 2/ تاريخ الولادة 3/ الجنس 4/ اسم الاب في حين الجدول الموجود بالاكساس يوجد به العديد من الحقول هل ان المشكلة تتمثل في ضرورة وجود نفس الحقول في الاكسيس و الاكسال ام هناك مشكلة اخرى
  2. ما شاء الله عليك يا دكتور و الله مبدع : شكرا جزيلا على المساعدة جعلها الله في ميزان حسناتك ذعوة خير تونسية : " الله يستر حالك و يعطيك الخير "
  3. استاذي الكريم طبقت الكود مثلما ذكر لكن اولا 1/ المكتبة التي ذكرتها لم اجدها و انما وجدت المكتبة التالية المبينة بالصورة 2/ عندما اردت استيراد الحقول ظهر هذا الخطا مع العلم انني مثبت الاكساس 2010 على حاسوبي بنظام 32 بايت و اشتغل على اكسيس 2007 شكرا
  4. يا اللله بارك الله فيك : سواء استطعت التطبيق ام لا المهم اشكرك جزيل الشكر على سرعة الرد و ان شاء الله في ميزان حسناتك . سانكب على تطبيق الاكواد و اوافيك بالنتيجة يا غالي
  5. اهلين و سهلين استاذ د.كاف يار عشمي فيك كبير لو بتسمح و فيه اجابه تفيدنا بها و شكرا مقدما
  6. السلام عليكم و رحمة الله و بركاته هذه صورة تبين لك كيفية جعل تسمية الحقول بالعربية انظر للون الاصفر : تسمية class تسمية الحقل في الجدول ثم انظر اسفل الصورة اللون الاصفر امام كلمة legend اكتب التسمية بالعربية و ستظهر لك ان شاء الله في الاكساس بالعربية
  7. السلام عليكم و رحمة الله و بركاته اساتذتي الافاضل هذا بالنسبة لاستيراد جدول كامل من الاكسال الى الاكساس : و في عندما اريد جلب حقل او اثنين فقط من جدول اكسال لاضافتهما الى جدول موجود بالاكسيس مثال : لي جدول على الاكسال يحتوي على : 1/ الاسم و اللقب 2/ تاريخ الولادة 3/ الجنس 4/ اسم الاب و جدول على الاكسيس يحتوي 1/ الاسم و اللقب 2/ تاريخ الولادة 3/ الجنس 4/ اسم الاب 5/ القسم 6/ المنحة 7/ الحالة لكنني اريد جلب الحقول التالية من الاكسال و اضافتها مكان نفس الحقول في الاكسيس : 1/ الاسم و اللقب 2/ تاريخ الولادة 3/ الجنس 4/ اسم الاب حيث ياخذ حقل : ( الاسم و اللقب) من جدول الاكسال مكان حقل (الاسم و اللقب) بجدول الاكسيس ( تاريخ الولادة) من جدول الاكسال مكان حقل (تاريخ الولادة) بجدول الاكسيس ( الجنس ) من جدول الاكسال مكان حقل (الجنس ) بجدول الاكسيس و هكذا دواليك شكرا على كل حال و على المساعدة و النصح و الارشاد الذي تقدمونه لكل مبتدئ بهذا المنتدى الرائع
  8. السلام عليكم و رحمة الله و بركاته اساتذتي الافاضل هذا بالنسبة لاستيراد جدول كامل من الاكسال الى الاكساس : و في عندما اريد جلب حقل او اثنين فقط من جدول اكسال لاضافتهما الى جدول موجود بالاكسيس مثال : لي جدول على الاكسال يحتوي على : 1/ الاسم و اللقب 2/ تاريخ الولادة 3/ الجنس 4/ اسم الاب و جدول على الاكسيس يحتوي 1/ الاسم و اللقب 2/ تاريخ الولادة 3/ الجنس 4/ اسم الاب 5/ القسم 6/ المنحة 7/ الحالة لكنني اريد جلب الحقول التالية من الاكسال و اضافتها مكان نفس الحقول في الاكسيس : 1/ الاسم و اللقب 2/ تاريخ الولادة 3/ الجنس 4/ اسم الاب حيث ياخذ حقل : ( الاسم و اللقب) من جدول الاكسال مكان حقل (الاسم و اللقب) بجدول الاكسيس ( تاريخ الولادة) من جدول الاكسال مكان حقل (تاريخ الولادة) بجدول الاكسيس ( الجنس ) من جدول الاكسال مكان حقل (الجنس ) بجدول الاكسيس و هكذا دواليك شكرا على كل حال و على المساعدة و النصح و الارشاد الذي تقدمونه لكل مبتدئ بهذا المنتدى الرائع
  9. مادام من الله سبحانه و تعالى عليك بالاجابة افدنا بها حتى نتمكن من التعلم و شكرا حتى لا نكون من المستهلكين فقط ههههههه
  10. استاذي الكريم جربت الملف الذي ارسلته لفتح ملف وورد لكنه بفتح ملف فارغ
  11. كيفية تحويل ملف أكسيس ( Accde ) إلى ملف تنفيذى ( exe ) نظرا لطلبات الاخوة المتابعين للمنتدى اردت نقل هذا البرنامج للاستفادة منه طريقة تحويل ملف قاعدة بيانات الأكسيس ( Microsoft access ) الى ملف تنفيذى : 1- أولا قم بفتح الملف المراد تحويله لملف تنفيذى ، ثم إذهب إلى أدوات قاعدة البيانات ( Data Base tools ) وإضغط على ( Make accde ) ، وإذا كنت من مستخدمى اوفيس 2010 ، ستجد زر ( Make accde ) فى القائمة الرئيسية للبرنامج داخل صفحة حفظ بالإسم . 2- ثانيا : عند الإنتهاء من قاعدة البيانات ، يجب عليك حفظها حتى تقوم بتحويل لملف accde ، قم بحفظها فى الفولدر المطلوب . 3- ثالثا : بعد حفظ قاعدة البيانات ، سيتطلب تنزيل برنامج خاص بالتحويل الى صيغة exe ، وهو برنامج inno setup من اللينك التالى : www.jrsoftware.org 4- رابعا : قم بتنزيل البرنامج وتسطيبه كاملا وحسب الإعدادات الموصى بها فى الفيديو المرفق . 5- خامسا : قم بفتح البرنامج وإختار ( الآن انقر على إنشاء ملف نصي جديد باستخدام المعالج النصي.) أو ( Create a new script file using script wizard. ) من الصفحة التى تظهر أمامك ، ثم حدد معلومات الناشر ، ونسخة البرنامج والتى يتم تحديدها ب ( 1.0 ) وموقع الناشر أو قاعدة البيانات ، ثم إضغط التالى . 6-سادسا : إضافة ملفات التطبيق: الآن سوف تكون هناك حاجة لتحديد الملفات التطبيق، ولكن في حالتنا ليس لدينا أي حاجة لذلك ، دعونا نختار الخيار 2 وانقر “إضافة ملفات”. 7- سابعا : تحديد موقع الملف ACCDE . 8 – ثامنا : إستكمال المعالج ( wizard ) ، وبعد إعطاء المعلومات اللازمة ، أنهى العملية . 9 – تاسعا : – فحص الملف التنفيذي : يجب بعد إنشاء الملف التنفيذى معاينته وتسطيبه وحفظ مسار التسطيب لديه . 10 – عاشرا : التحقق من نتيجة التثبيت : بعد انتهاء التثبيت، يصبح بإستطاعتنا تصفح مجلد التثبيت لدينا، وهناك يمكننا أن نرى ملف ACCDE . البرنامج بالرابط : https://drive.google.com/file/d/1U_J3bso-9WI2pyWKtwRdqKqtvoZ9HTqD/view?usp=sharing
  12. مشكور استاذ : محمد احمد لطفى على المعلومة القيمة : بارك الله فيك تابعت المثال وهو حل جيد التحويل من : DD/MM/YYYY الى YYYY/MM/DD حتى يصبح التاريخ مقروء بالعربي
  13. ما شاء الله شكرا كثيرا على هذا المثال الرائع
  14. شكرا اخي نريد رد الجميل بالبحث و التجميع و النشر حتى يستفاد كل مبتدئ مثلي لاني عانيت الامرين كلما اردت البحث عن معلومة معينة
  15. Structured Query Language لغة الاستعلام البنوية SQL الكتاب منقول للامانة : عمار دربالي SQL SQL هي اختصارٌ للعبارة Structured Query Language (أي لغة الاستعلام البنوية)، وهي اللغة المستخدمة لإجراء عمليات على قواعد البيانات، بما في ذلك إضافة أو تحديث أو حذف البيانات من قاعدة البيانات، أو لتعديل بينة قاعدة البيانات نفسها. محتويات · 1بنية تعليمات SQL · 2أنواع البيانات · 3أساسيات لغة SQL o 3.1القيمة NULL o 3.2التعليقات Comments o 3.3التسمية Alias o 3.4الاستعلامات الفرعية Subqueries · 4التعامل مع السجلات o 4.1عرض السجلات SELECT o 4.2الشرط WHERE o 4.3التجميع GROUP BY o 4.4الشرط HAVING o 4.5ترتيب النتائج ORDER BY o 4.6الحصول على عدد محدد من النتائج o 4.7إدخال السجلات للجدول INSERT o 4.8حذف السجلات من الجدول DELETE o 4.9الاستبدال REPLACE o 4.10التعديل UPDATE · 5ربط الجداول o 5.1الربط الداخلي INNER JOIN o 5.2الربط اليساري LEFT JOIN o 5.3الربط اليميني RIGHT JOIN o 5.4الربط التامّ FULL JOIN · 6المعاملات o 6.1المعاملات الأساسية o 6.2النتائج المتمايزة DISTINCT o 6.3التأكد من وجود سجل EXISTS o 6.4المعامل LIKE o 6.5المعاملات المنطقية AND, OR, NOT o 6.6معاملات المجال IN, BETWEEN o 6.7معاملات الضم UNION, INTERSECT, EXCEPT o 6.8معاملات المقارنة ALL, SOME, ANY · 7بنى التحكم o 7.1شرط IF o 7.2شرط CASE o 7.3حلقة WHILE · 8العمليات o 8.1لمحة عن العمليات o 8.2أمر بدأ العمليات START TRANSACTION o 8.3الأمر COMMIT o 8.4الأمر ROLLBACK · 9التعامل مع المستخدمين o 9.1إنشاء المستخدم CREATE USER o 9.2تعديل المستخدم ALTER USER o 9.3حذف المستخدم DROP USER o 9.4منح الصلاحيات GRANT o 9.5إلغاء الصلاحيات REVOKE · 10التعامل مع الفهارس o 10.1إنشاء الفهرس CREATE INDEX o 10.2تعديل الفهرس ALTER INDEX o 10.3حذف الفهرس DROP INDEX · 11التعامل مع قواعد البيانات o 11.1إنشاء قاعدة البيانات CREATE DATABASE o 11.2حذف قاعدة البيانات DROP DATABASE o 11.3الاستخدام USE · 12التعامل مع الجداول o 12.1مفاتيح الجداول Table Keys o 12.2إنشاء الجدول CREATE TABLE o 12.3تعديل جدول ALTER TABLE o 12.4حذف الجدول DROP TABLE · 13التعامل مع الدوال o 13.1بعض الدوال المساعدة في SQL o 13.2إنشاء الدالة CREATE FUNCTION o 13.3تعديل الدالة ALTER FUNCTION o 13.4حذف الدالة DROP FUNCTION o 13.5العودة من الدالة RETURN · 14التعامل مع العرض o 14.1إنشاء العرض CREATE VIEW o 14.2تعديل العرض ALTER VIEW o 14.3حذف العرض DROP VIEW · 15مصادر بنية تعليمات SQL تُنفَّذ تعليمات SQL على الجداول الموجودة في قواعد البيانات، وتلك الجداول تتألف من أعمدة وسجلات؛ أما التعليمات فهي تتألف من كلمات محجوزة ومتغيرات ومعاملات (وغير ذلك) التي تُحدِّد ما هي العملية التي نريد تنفيذها. لغة SQL تُصرِّح عن النتيجة النهائية للعملية التي نريد إجراءها، وليس عن التفاصيل اللازمة لطريقة إجراء تلك العملية، إذ إنَّ محركات قواعد البيانات هي المسؤولة عن تلك التفاصيل. المثال الآتي يُبيّن استخدام الاستعلام SELECT لتحديد عمودين من أحد الجداول، مع توفير اسم بديل (AS) لأحد الأعمدة، لتحديد السجلات التي ينطبق عليها شرطٌ معيّن (WHERE)، وترتيبها وفق أحد الأعمدة (ORDER BY): SELECT name, age*365 AS AgeDays FROM students WHERE age > 10 ORDER BY name; نُظِّم هذا الدليل بتخصيص صفحة لكل عبارة أو كلمة محجوزة أو معامل في SQL، ويكون اسم تلك الصفحة بأحرفٍ صغيرة، وإذا تألفت العبارة من أكثر من كلمة فيُفصَل بينها بشرطة سفلية؛ فمثلًا صفحة الاستعلام SELECT ستكون موجودةً على الرابط SQL/select، أما صفحة ORDER BY فهي موجودة في SQL/order_by وهكذا... أنواع البيانات أنواع البيانات التي يمكن استخدامها مع محركات قواعد البيانات المختلفة (البيانات العددية، والبيانات النصية، والوقت والتاريخ، والبيانات الثنائية ...إلخ.). أساسيات لغة SQL القيمة NULL يستخدم التعبير IS NULL للتأكد من خلو القيمة (أي لا توجد قيمة في الحقل المحدد). التعليقات Comments تضاف التعليقات إلى الشيفرة بهدف تسهيل قراءتها أو كتابة ملاحظات جانبية مساعدة. SELECT count(*); -- This comment continues to the end of line SELECT count(*); /* This is an inline comment */; التسمية Alias يمكن إطلاق تسمية على الجداول أو الحقول تسهيلًا للتعامل معها بالاسم البديل المؤقت، وذلك عند الحاجة إلى الوصول إلى نفس الجدول أو الحقل عدة مرات، وعندما يكون اسم الجدول أو الحقل طويلًا وصعب الكتابة. الاستعلامات الفرعية Subqueries هي استعلام واقعٌ ضمن استعلام آخر بهدف استخدام البيانات الناتجة عنه في الاستعلام الرئيسي الذي يحتويه. التعامل مع السجلات عرض السجلات SELECT يُستخدَم للحصول على سجلات البيانات من الجداول المخزنة في قاعدة البيانات، قد تكون نتيجة الاستعلام سجلًا أو أكثر، وعمودًا أو أكثر. الشرط WHERE يُستخدم ضمن استعلام SELECT لتحديد الشروط التي تُعرض أو تحذف السجلات أو تُعدل قيم حقولها وفقًا لها، إذ يُمكن أن تستخدم أيضًا مع استعلامَي DELETE و UPDATE. التجميع GROUP BY تُستخدم في استعلام SELECT بهدف تجميع النتائج ضمن مجموعات بحسب عمود أو أكثر من الجدول. الشرط HAVING يُستخدم ضمن استعلام SELECT لتحديد شرطٍ معينٍ عند تجميع السجلات مع بعضها GROUP BY. ترتيب النتائج ORDER BY تتلخص مهمة عبارة ORDER BY بترتيب النتائج (تصاعديًا أو تنازليًا) ضمن استعلام SELECT وفق عمودٍ (أو أكثر) من الجدول. الحصول على عدد محدد من النتائج يمكن تحديد عدد السجلات التي ستُجلب من الجدول ضمن استعلام SELECT أو التي ستُحذف من الجدول ضمن استعلام DELETE أو ستُحدَّث قيمها ضمن استعلام UPDATE، هنالك اختلافات بين محركات قواعد البيانات، ويُفضَّل العودة إلى هذه الصفحة للتفاصيل. إدخال السجلات للجدول INSERT مهمة هذا الاستعلام هي إنشاء سجل جديد في الجدول. حذف السجلات من الجدول DELETE يُستخدم لحذف سجل أو أكثر. الاستبدال REPLACE هو استعلام يستخدم للقيام بنفس مهمة الاستعلام INSERT (إضافة سجل جديد للجدول) ولكن لإدخال سجلٍ بنفس القيمة الموجودة مسبقًا في عمود المفتاح الأوليّ وذلك منعًا لحدوث التكرار. التعديل UPDATE يُستخدم هذا الاستعلام من أجل تحديث قيم البيانات المخزنة في سجلات الجداول. ربط الجداول الربط الداخلي INNER JOIN يُستخدم لتحديد بعض السجلات من الجدول اليساري والجدول اليميني بحيث تحقق شرط الربط. الربط اليساري LEFT JOIN يُستخدم لتحديد كافة السجلات من الجدول اليساري وبعض السجلات من الجدول اليميني التي تحقق شرط الربط. الربط اليميني RIGHT JOIN يُستخدم لتحديد بعض السجلات التي تحقق شرط الربط من الجدول اليساري وكافة السجلات من الجدول اليميني. الربط التامّ FULL JOIN يُستخدم لتحديد كافة السجلات من الجدولين اليساري واليميني بغض النظر عن تحقيقها للشرط. المعاملات المعاملات الأساسية تتضمن المعاملات الأساسية المعاملات الرياضية، والمعاملات الثنائية، ومعاملات المقارنة، والمعاملات المنطقية، وتحتوي الصفحة أيضًا على جداول تبيّن أولوية المعاملات. النتائج المتمايزة DISTINCT تستخدم للحصول على قيمٍ فريدةٍ غير مكررة، وغالبًا ما تستخدم في استعلام SELECT للحصول على سجلات لا تتكرر القيم فيما بينها. التأكد من وجود سجل EXISTS يستخدم للتأكد من وجود سجلات ناتجة عن الاستعلام الفرعي المستخدم في الاستعلام الرئيسي. المعامل LIKE يستخدم لتحديد نمط معين للسلسلة النصية يُحدد الشرط وفقًا له. المعاملات المنطقية AND, OR, NOT غالبًا ما تستخدم المعاملات المنطقية (AND و OR و NOT) في عبارة WHERE للربط ما بين الشروط أو نفيها. معاملات المجال IN, BETWEEN تُستخدَم هذه المعاملات لتحديد مجال أو عدد محدّد من القيم في SQL. معاملات الضم UNION, INTERSECT, EXCEPT تُستخدَم هذه المعاملات للربط بين نتائج الاستعلامات في SQL. معاملات المقارنة ALL, SOME, ANY تستخدم بهدف المقارنة مع القيم الناتجة (لعمودٍ واحدٍ) عن أحد الاستعلامات الفرعية. بنى التحكم شرط IF تستخدم صيغة IF لاختبار شرط معين للتأكّد من تحقّقه أو عدم تحقّقه وإجراء ما يتناسب مع ذلك. شرط CASE تستخدم لاختبار شرط معين بشكل مشابه لتعليمات if/else في لغات البرمجة الأخرى لتعيد أحد التعابير الممكنة. حلقة WHILE تهدف حلقة WHILE إلى تكرار عددٍ من التعليمات باستمرار تحقق الشرط ضمنها، إذ يُتأكَّد من تحقّق الشرط قبل البدء بتنفيذ التعليمات التي تحتويه. العمليات لمحة عن العمليات العملية هي مجموعة من التعديلات التي تتم في قاعدة البيانات وفق تسلسل منطقي، وينتج عنها بعض التغييرات في القاعدة كحذف سجل أو تعديل بيانات أو إنشاء سجل جديد، هذه كلها عبارة عن عمليات، وتصبح هذه التغييرات جزءًا دائمًا من قاعدة البيانات إذا نُفذَّت بشكل تامّ دون أخطاء، أما في حال حدوث أيّ خطأ فيُتراجَع عن هذه التغييرات وتعود قاعدة البيانات كما هي قبل إنجاز العمليات عليها. أمر بدأ العمليات START TRANSACTION يُستخدم هذا الأمر للإعلام بالبدء بإجراء مجموعة من العمليات التي قد تنتهي بأمر COMMIT أو ROLLBACK. الأمر COMMIT يستخدم بهدف حفظ التغييرات المُجراة على قاعدة البيانات نتيجة لتنفيذ العمليات، إذ تحفظ كافة التغييرات منذ آخر أمر COMMIT أو ROLLBACK. الأمر ROLLBACK يستخدم لإلغاء العمليات المُجراة على قاعدة البيانات مما يعني تجاهل التغييرات التي طرأت عليها. التعامل مع المستخدمين إنشاء المستخدم CREATE USER يُستخدم لإنشاء مستخدم جديد، وتختلف صيغته بحسب محركات قواعد البيانات المختلفة. تعديل المستخدم ALTER USER يُستخدم للتعديل من خصائص وسماحيات المستخدم، وتختلف صيغته بحسب محركات قواعد البيانات المختلفة. حذف المستخدم DROP USER يُستخدَم لحذف مستخدم. منح الصلاحيات GRANT يستخدم لمنح صلاحيات الوصول access privileges لمستخدمٍ أو مجموعة مستخدمين أو أكثر، وتختلف صيغته بحسب محركات قواعد البيانات المختلفة. إلغاء الصلاحيات REVOKE يستخدم لإلغاء صلاحيات الوصول access privileges لمستخدمٍ أو مجموعة مستخدمين أو أكثر، وتختلف صيغته بحسب محركات قواعد البيانات المختلفة. التعامل مع الفهارس إنشاء الفهرس CREATE INDEX يستخدم لإنشاء فهرس للجدول. تعديل الفهرس ALTER INDEX يستخدم لتعديل الفهرس المُنشأ عبر الأمر CREATE INDEX. حذف الفهرس DROP INDEX يستخدم لحذف فهرس أو أكثر. التعامل مع قواعد البيانات إنشاء قاعدة البيانات CREATE DATABASE يستخدم لإنشاء قاعدة بيانات جديدة. حذف قاعدة البيانات DROP DATABASE يستخدم لحذف قاعدة البيانات. الاستخدام USE يستخدم لتحديد قاعدة البيانات التي يتَعامَل معها لنقل السياق context لها. التعامل مع الجداول مفاتيح الجداول Table Keys تستخدم المفاتيح بهدف الربط ما بين الجداول في قواعد البيانات. ومن أنواعها: المفتاح الأولي، والمفتاح الثانوي. إنشاء الجدول CREATE TABLE يستخدم لإنشاء جدولٍ جديدٍ في قاعدة البيانات. تعديل جدول ALTER TABLE يستخدم لتعديل تعريف الجدول المُنشأ مسبقًا عبر الأمر CREATE TABLE. حذف الجدول DROP TABLE يستخدم لحذف جدول أو أكثر من قاعدة البيانات. التعامل مع الدوال بعض الدوال المساعدة في SQL هذه الدوال تساعد في إجراء العمليات الرياضية والإحصائية، مثل إيجاد عدد السجلات، وإعادة أكبر أو أصغر قيمة، وغيرها من العمليات. إنشاء الدالة CREATE FUNCTION يستخدم لتعريف دالة جديدة. تعديل الدالة ALTER FUNCTION يستخدم لتعديل تعريف دالة مُعرَّفة مسبقًا عبر الأمر CREATE FUNCTION. حذف الدالة DROP FUNCTION يستخدم لحذف دالة (أو إجراء) أو أكثر مُعرَّفة مسبقًا عبر الأمر CREATE FUNCTION. العودة من الدالة RETURN تستخدم لإنهاء الدالة وإعادة قيمة ما للموقع الذي استُدعيت فيه الدالة. التعامل مع العرض إنشاء العرض CREATE VIEW يستخدم لإنشاء عرضٍ والذي هو عبارة عن جدول افتراضي يُبنى بالاعتماد على نتائج استعلامٍ ما. تعديل العرض ALTER VIEW يستخدم لتعديل عرضٍ مُنشَأ مسبقًا عبر الأمر CREATE VIEW. حذف العرض DROP VIEW يستخدم لحذف view أو أكثر مُنشئ مسبقًا عبر الأمر CREATE VIEW. التأكد من خُلوّ القيمة IS NULL في SQL يستخدم التعبير IS NULL للتأكد من خلو القيمة (أي لا توجد قيمة في الحقل المحدد)، ويكون سياق التعبير بالشكل الآتي: column IS [NOT] NULL وغالبًا ما تستخدم في العبارة WHERE للتحقق من وجود القيمة في إحدى حقول السجلات. مثال إن كانت قاعدة البيانات تحتوي الجدول customers الآتي: Bill OrderID Phone FullName CustomerID 160 0291 NULL Abd al-Salam Hadi 1156 170 0302 (171) 555-2222 Ahmad Mostafa 1157 210 0203 (100) 555-4822 Reem Hammad 1158 350 0294 NULL Abd Allah Sadiq 1159 185 0255 (03) 3555-5011 Raghad al-Hamdan 1160 165 0276 (98) 598 76 54 Abd al-Razzaq Salloum 1161 175 0247 NULL Hussam Siraj 1162 180 0208 NULL Hiba Maktabi 1163 170 0219 (06) 431-7877 Abd al-Rahman Rida 1164 220 0210 NULL Abd al-Qader Khalil 1165 إن الاستعلام الآتي: SELECT * FROM customers WHERE Phone IS NULL; سيُظهر السجلات التي لا تحتوي على أي قيمة في حقل Phone على النحو الآتي: Bill OrderID Phone FullName CustomerID 160 0291 NULL Abd al-Salam Hadi 1156 350 0294 NULL Abd Allah Sadiq 1159 175 0247 NULL Hussam Siraj 1162 180 0208 NULL Hiba Maktabi 1163 220 0210 NULL Abd al-Qader Khalil 1165 أما لعرض الزبائن الذي زوّدوا قاعدة البيانات برقم الهاتف، يستخدم الاستعلام الآتي: SELECT * FROM customers WHERE Phone IS NOT NULL; لتظهر النتائج: Bill OrderID Phone FullName CustomerID 170 0302 (171) 555-2222 Ahmad Mostafa 1157 210 0203 (100) 555-4822 Reem Hammad 1158 185 0255 (03) 3555-5011 Raghad al-Hamdan 1160 165 0276 (98) 598 76 54 Abd al-Razzaq Salloum 1161 170 0219 (06) 431-7877 Abd al-Rahman Rida 1164 التسمية البديلة Alias في SQL يمكن إطلاق تسمية على الجداول أو الحقول تسهيلًا للتعامل معها بالاسم البديل المؤقت (وقد يكون أكثر اختصارًا)، وذلك عند الحاجة إلى الوصول إلى نفس الجدول أو الحقل عدة مرات، ويعبًّر عن ذلك بالكلمة المفتاحية AS، ويمكن الاستغناء عنها عند تسمية الجدول. أمثلة في الاستعلام الآتي: SELECT Name AS Top Students, Age, GPA FROM students سيظهر العمود Name باسم Top Students في النتائج. وفي الاستعلام: SELECT StudentID, FirstName, Course, Lecturer FROM students st LEFT JOIN courses co ON st.CourseID = co.CourseID; سُمي الجدول students باسم st والجدول courses باسم co وذلك تسهيلًا لعملية الربط بين الجدولين. الاستعلامات الفرعية Subqueries في SQL < SQL اذهب إلى التنقلاذهب إلى البحث الاستعلام الفرعي هو استعلام واقعٌ ضمن استعلام آخر بهدف استخدام البيانات الناتجة عنه في الاستعلام الرئيسي الذي يحتويه، وغالبًا ما يكون الاستعلام الفرعي عبارة عن استعلام SELECT، ويمكن استخدامه مع أي من استعلامات SELECT أو INSERT أو UPDATE أو DELETE. محتويات · 1استخدام الاستعلام الفرعي في استعلام SELECT o 1.1تحديد الاستعلام الفرعي كأحد الأعمدة § 1.1.1مثال o 1.2تحديد الاستعلام الفرعي كجدول جزئي من جدول أساسي o 1.3استخدام الاستعلام الفرعي لتحديد قيم ضمن الشرط WHERE · 2حذف السجلات التي تحقق شرط محدد باستعلام فرعي · 3تحديث قيم السجلات اعتمادًا على الاستعلام الفرعي · 4إضافة سجلات في جدول من جدول آخر باستخدام الاستعلام الفرعي · 5التوافقية · 6مصادر استخدام الاستعلام الفرعي في استعلام SELECT تحديد الاستعلام الفرعي كأحد الأعمدة يُمكن تحديد أحد الأعمدة التي ستظهر بتنفيذ استعلام SELECT من خلال الاستعلام الفرعي الذي يعيد قيمة وحيدة لكل سجل. مثال إن كانت الجداول الآتية موجودة في قاعدة البيانات: الجدول الأول: السيارات cars Colour Price Year Company Model CarID White 22,500 2018 KIA Optima 05081 Red 25,995 2017 KIA Optima Hybrid 05082 Red 31,900 2018 KIA Stinger 05083 Black 31,990 2017 KIA Cadenza 05084 Blue 23,240 2018 KIA Niro 05085 Grey 14,200 2018 KIA Rio 5-Door 05086 Blue 18,200 2018 KIA Forte5 05087 Blue 32,250 2017 KIA Soul EV 05088 Red 23,385 2017 Nissan Altima 05089 White 46,195 2017 Nissan Armada 05090 Black 33,495 2017 Nissan Maxima 05091 Black 30,715 2017 Nissan Murano 05092 Grey 31,265 2017 Nissan Pathfinder 05093 White 17,875 2017 Nissan Sentra 05094 Red 12,875 2017 Nissan Versa 05095 الجدول الثاني: الزبائن customers Remaining CarID Name CustomerID 15,495 05091 Mona Sinno 0156 8,875 05095 Ahmad Najjar 0157 19,500 05081 Kareem al-Hamdan 0158 11,875 05094 Mohammad Qadi 0159 17,500 05081 Rasha Mostafa 0160 10,200 05087 Jaber Hammad 0161 19,990 05084 Wessam Fattah 0162 8,875 05094 Shadi Sharif 0163 12,500 05081 Iman Mansour 0164 6,875 05095 Monther Zein 0165 9,200 05087 Rami Fares 0166 18,240 05085 Ammar Arab 0167 إن تنفيذ الاستعلام الآتي: SELECT CarID, Model, Company, ( SELECT count(*) FROM customers WHERE customers.CarID = cars.CarID ) AS NumberOrders FROM cars; سيعرض عدد المشترين لكل سيارة من السيارات بعمودٍ منفصلٍ (NumberOrders) اعتمادًا على الاستعلام الفرعي المُنفَّذ في الجدول customers بحيث يكون الرقم التسلسلي لطلب السيارة في جدول الزبائن مساويًا للرقم التسلسلي للسيارة في جدول السيارات، وستظهر النتائج: NumberOrders Company Model CarID 3 KIA Optima 05081 0 KIA Optima Hybrid 05082 0 KIA Stinger 05083 1 KIA Cadenza 05084 1 KIA Niro 05085 0 KIA Rio 5-Door 05086 2 KIA Forte5 05087 0 KIA Soul EV 05088 0 Nissan Altima 05089 0 Nissan Armada 05090 1 Nissan Maxima 05091 0 Nissan Murano 05092 0 Nissan Pathfinder 05093 2 Nissan Sentra 05094 2 Nissan Versa 05095 تحديد الاستعلام الفرعي كجدول جزئي من جدول أساسي يمكن استخدام الاستعلام الفرعي للحصول على جدول جزئي مقتبس من جدول أساسي لاستخدامه في عبارة FROM، كما في الاستعلام الآتي: SELECT cars.CarID, cars.Model, result.CustomerID FROM cars JOIN (SELECT * FROM customers WHERE CustomerID BETWEEN 0160 AND 0165 ) AS result ON cars.CarID = result.CarID; إن تنفيذ هذا الاستعلام على الجدولين cars و customers في قاعدة البيانات سيؤدي إلى عرض الرقم التسلسلي ونوع السيارة من الجدول الناتج عن الربط ما بين جدول cars وجدول فرعي يُؤخذ من جدول customers بحيث يكون الرقم التسلسلي للزبون واقعًا ما بين الرقمين 0160 و 0165 وتسميته باسم result إذ يتم الربط عندما يكون الرقم التسلسلي في الجدولين متساويًا، وتكون نتيجة تنفيذه: CustomerID Model CarID 0160 Optima 05081 0164 Optima 05081 0162 Cadenza 05084 0161 Forte5 05087 0163 Sentra 05094 0165 Versa 05095 استخدام الاستعلام الفرعي لتحديد قيم ضمن الشرط WHERE تمكن الاستفادة من الاستعلام الفرعي لتحديد عدد من القيم لتوضع ضمن الشرط في عبارة WHERE. لمعرفة السيارات التي لم تُشترَ من قبل أيّ من الزبائن يمكن استخدام الاستعلام الآتي: SELECT * FROM cars WHERE CarID NOT IN( SELECT CarID FROM customers ); لتظهر النتائج: Colour Price Year Company Model CarID Red 25,995 2017 KIA Optima Hybrid 05082 Red 31,900 2018 KIA Stinger 05083 Grey 14,200 2018 KIA Rio 5-Door 05086 Blue 32,250 2017 KIA Soul EV 05088 Red 23,385 2017 Nissan Altima 05089 White 46,195 2017 Nissan Armada 05090 Black 30,715 2017 Nissan Murano 05092 Grey 31,265 2017 Nissan Pathfinder 05093 ولمعرفة مجموع أسعار السيارات التي لم تُشترى يمكن إضافة الدالة التجميعيّة sum للاستعلام السابق ليصبح: SELECT SUM(Price) AS Total FROM cars WHERE CarID NOT IN( SELECT CarID FROM customers ); وتظهر النتيجة: Total 235,905 حذف السجلات التي تحقق شرط محدد باستعلام فرعي يمكن تحديد الشرط الذي ستحذف وفقًا له البيانات ضمن الاستعلام الفرعي في عبارة WHERE. فلحذف السيارات التي اشتراها أيّ من الزبائن في جدول customers من الجدول cars، يصبح الاستعلام بالشكل الآتي: DELETE FROM cars WHERE CarID IN( SELECT CarID FROM customers ); ليصبح الجدول cars في قاعدة البيانات على النحو الآتي: Colour Price Year Company Model CarID Red 25,995 2017 KIA Optima Hybrid 05082 Red 31,900 2018 KIA Stinger 05083 Grey 14,200 2018 KIA Rio 5-Door 05086 Blue 32,250 2017 KIA Soul EV 05088 Red 23,385 2017 Nissan Altima 05089 White 46,195 2017 Nissan Armada 05090 Black 30,715 2017 Nissan Murano 05092 Grey 31,265 2017 Nissan Pathfinder 05093 تحديث قيم السجلات اعتمادًا على الاستعلام الفرعي يمكن الاعتماد على الاستعلام الفرعي لتحديد القيم الجديدة التي ستوضع في الحقل المطلوب في استعلام UPDATE، إن كان جدول الأقساط installments الآتي موجودًا في قاعدة البيانات: Date CustomerID Amount TransactionID 04/11/2017 0156 7,000 0206 11/11/2017 0157 5,000 0207 01/11/2017 0158 9,000 0208 09/11/2017 0159 6,000 0209 24/11/2017 0160 8,000 0210 11/11/2017 0161 7,000 0211 04/11/2017 0162 9,000 0212 09/11/2017 0163 5,000 0213 01/11/2017 0164 8,000 0214 09/11/2017 0165 4,000 0215 04/11/2017 0166 5,000 0216 01/11/2017 0167 10,000 0217 فلتحديث قيمة المبلغ المتبقي في جدول الزبائن customers بحسب القيمة المدفوعة في الجدول السابق يُنفذ الاستعلام الآتي: UPDATE customers SET remaining = remaining - (SELECT Amount FROM installments WHERE customers.CustomerID = installments.CustomerID); ليصبح الجدول كما يلي: Remaining CarID Name CustomerID 8,495 05091 Mona Sinno 0156 3,875 05095 Ahmad Najjar 0157 10,500 05081 Kareem al-Hamdan 0158 5,875 05094 Mohammad Qadi 0159 9,500 05081 Rasha Mostafa 0160 3,200 05087 Jaber Hammad 0161 10,990 05084 Wessam Fattah 0162 3,875 05094 Shadi Sharif 0163 4,500 05081 Iman Mansour 0164 2,875 05095 Monther Zein 0165 4,200 05087 Rami Fares 0166 8,240 05085 Ammar Arab 0167 إضافة سجلات في جدول من جدول آخر باستخدام الاستعلام الفرعي تمكن إضافة بعض السجلات إلى الجدول من جدول آخر اعتمادًا على استعلام فرعي بحيث تتوافق أسماء الأعمدة المختارة ما بين الجدولين. ليكن الجدول الآتي cheapCars موجودًا في قاعدة البيانات: Colour Price Year Company Model CarID Grey 12,800 2014 Nissan Versa 1.6 S 06002 WHITE 14,700 2014 KIA Rio LX 06003 Blue 13,790 2014 Mitsubishi Mirage DE 06004 لإضافة سيارات أخرى لهذا الجدول من الجدول الأساسي cars يُمكن الاعتماد على الاستعلام الفرعي بالشكل الآتي: INSERT INTO cheapCars SELECT * FROM cars WHERE Price < 20000; لاحظ : في استعلام INSERT INTO لم نضع أقواس حول الإستعلام الفرعي. ليصبح الجدول: Colour Price Year Company Model CarID Grey 12,800 2014 Nissan Versa 1.6 S 06002 WHITE 14,700 2014 KIA Rio LX 06003 Blue 13,790 2014 Mitsubishi Mirage DE 06004 Grey 14,200 2018 KIA Rio 5-Door 05086 Blue 18,200 2018 KIA Forte5 05087 White 17,875 2017 Nissan Sentra 05094 Red 12,875 2017 Nissan Versa 05095 التعامل مع السجلات الاستعلام SELECT يُستخدَم استعلام SELECT للحصول على سجلات البيانات من الجداول المخزنة في قاعدة البيانات، قد تكون نتيجة الاستعلام سجلًا أو أكثر، وعمودًا أو أكثر. محتويات · 1البنية العامة · 2أمثلة o 2.1تحديد كافة أعمدة أحد الجداول · 3تحديد ظهور بعض الأعمدة o 3.1تحديد السجلات وفق ترتيبٍ معيّن o 3.2تحديد السجلات التي ينطبق عليها شرطٌ معيّن o 3.3تحديد السجلات التي قيمة أحد حقولها فريدة o 3.4استخدام الدوال مع بيانات الجدول o 3.5جلب البيانات من أكثر من جدول o 3.6التوافقية · 4مصادر البنية العامة SELECT [DISTINCT | TOP] select_list [FROM table_source] [WHERE search_condition] [GROUP BY group_by_expression] [HAVING search_condition] [ORDER BY order_expression [ ASC | DESC]]; ويمكن أن تُستخدَم بعض المعاملات مثل UNION و EXCEPT و INTERSECT لدمج نتائج الاستعلامات أو مقارنتها مع بعضها، وتجب مراعاة ترتيب الكلمات المفتاحية المستخدمة في الصياغة السابقة لدى وجود العديد منها ضمن استعلامٍ واحد. أمثلة فيما يلي أمثلةٌ مختلفةٌ عن استخدام الاستعلام SELECT مع مختلف المعاملات، يُمكن الاطلاع على صفحات تلك المعاملات لمزيدٍ من المعلومات والأمثلة عنها. تحديد كافة أعمدة أحد الجداول يُستخدَم الرمز * للحصول على كافة الأعمدة من الجدول (وهو أحد رموز المحارف البديلة Wildcards): SELECT * FROM table_source; إذا نُفِذ الاستعلام السابق على جدولٍ باسم riverTable (الذي يضم أسماء بعض الأنهار وأطوالها ومصبها والقارة التي يوجد فيها) فسيظهر لدينا الجدول الآتي: Continent Outflow LengthMiles LengthKm River Serial South America Atlantic Ocean 4345 6992 Amazon 1 Africa Mediterranean 4258 6853 Nile 2 North America Gulf of Mexico 3902 6275 Mississippi 3 Asia Bohai Sea 3395 5464 Yellow River 4 Africa Atlantic Ocean 2922 4700 Congo 5 Asia Laptev Sea 2736 4400 Lena 6 Africa Gulf of Guinea 2611 4200 Niger 7 Europe Caspian Sea 2266 3645 Volga 8 Asia Andaman Sea 1901 3060 Salween 9 تحديد ظهور بعض الأعمدة يمكن تحديد مجموعة الأعمدة التي ستظهر في الناتج عبر فصل أسماء تلك الأعمدة بفاصلة ,، وذلك مبيّن في الاستعلام الآتي الذي يُظهِر أسماء الأنهار ومصبّاتها وطولها بالكيلومتر: SELECT River, Outflow, LengthKm FROM riverTable; الاستعلام السابق سيُظِهر الناتج الآتي حيث يُلاحظ اختلاف ترتيب الأعمدة عن الترتيب في الجدول الأصلي: LengthKm Outflow River 6992 Atlantic Ocean Amazon 6853 Mediterranean Nile 6275 Gulf of Mexico Mississippi 5464 Bohai Sea Yellow River 4700 Atlantic Ocean Congo 4400 Laptev Sea Lena 4200 Gulf of Guinea Niger 3645 Caspian Sea Volga 3060 Andaman Sea Salween تحديد السجلات وفق ترتيبٍ معيّن الاستعلام الآتي يُحدِّد الأعمدة River و LengthKm و Continent من الجدول riverTable الظاهر في القسم السابق، ويضيف اسمًا بديلًا (التسمية alias عبر المعامل AS) للعمود Continent لجعله يظهر باسم Place، ثم يرتِّب النتائج ترتيبًا هجائيًا تصاعديًا عبر التعبير ORDER BY: SELECT River, LengthKm, Continent AS Place FROM riverTable ORDER BY Continent; تظهر النتيجة المبيّنة في الجدول الآتي، ويُلاحظ كيف ظهر عمود القارة باسم Place: Place LengthKm River Africa 6853 Nile Africa 4700 Congo Africa 4200 Niger Asia 5464 Yellow River Asia 4400 Lena Asia 3060 Salween Europe 3645 Volga North America 6275 Mississippi South America 6992 Amazon تحديد السجلات التي ينطبق عليها شرطٌ معيّن سيُنفَّذ الاستعلام الآتي على الجدول riverTable وهو يُحدِّد اسم النهر River ويُظهِر طوله بالمتر (بتحديد العمود LengthKm ثم ضربه بالعدد 1000 لتحويله إلى المتر، وذلك باستخدام المعاملات الرياضية ويبيّن مكان وجوده Continent، وذلك من الجدول riverTable، على أن يكون طوله أكبر من 4000 كيلومتر (المعامل WHERE)، ثم يُرتِّب الناتج كله ترتيبًا هجائيًا تصاعديًا عبر اسم القارة: SELECT River, LengthKm*1000 AS LengthM, Continent FROM riverTable WHERE LengthKm > 4000 ORDER BY Continent; ستظهر النتيجة المبيّنة في الجدول الآتي: Continent LengthM River Africa 6853000 Nile Africa 4700000 Congo Africa 4200000 Niger Asia 5464000 Yellow River Asia 4400000 Lena North America 6275000 Mississippi South America 6992000 Amazon تحديد السجلات التي قيمة أحد حقولها فريدة تضاف الكلمة المفتاحية DISTINCT في استعلام SELECT للحصول على قيم مختلفة وغير مكررة (أي فريدة)، إذ إن الاستعلام الآتي الذي يُحدِّد أسماء القارات الفريدة من الجدول riverTable: SELECT DISTINCT Continent FROM riverTable سيُظهِر النتيجة: Continent South America Africa North America Asia Europe استخدام الدوال مع بيانات الجدول الاستعلام الآتي سيُنفَّذ على جدول riverTable وسيؤدي إلى إظهار طول النهر الأقصر ما بين الأنهار، وطول النهر الأطول، والمتوسط الحسابي للأطوال جميعها، وذلك عبر استخدام الدوال min()‎ و max()‎ و avg()‎ في SQL: SELECT MIN(LengthKm) AS Minimum Length, MAX(LengthKm) AS Maximum Length, AVG(LengthKm) AS Average Length FROM riverTable; وتظهر النتائج الآتية: Average Length Maximum Length Minimum Length 5065.444 3060 6992 جلب البيانات من أكثر من جدول يمكن أن تجلب البيانات من أكثر من جدول ضمن قاعدة البيانات وذلك بتحديد أسماء الجداول المطلوب إظهار بياناتها عند الكلمة المفتاحية FROM، إن تنفيذ الاستعلام الآتي سيجلب الأعمدة المطلوبة بحسب وجودها في الجدول المناسب لها: SELECT River, LengthKm, Mountain, HeightKm FROM riverTable, mountainTable; ولدى التعامل مع أكثر من جدول تُربط الجداول فيما بينها بإحدى معاملات الربط. عبارة WHERE تُستخدم عبارة WHERE ضمن استعلام SELECT لتحديد الشروط التي تُعرض أو تحذف السجلات أو تُعدل قيم حقولها وفقًا لها، إذ يُمكن أن تستخدم أيضًا مع استعلامَي DELETE و UPDATE، وتعتمد اعتمادًا أساسيًا على المُعاملات المنطقية والحسابية وبعض المعاملات الأخرى في صياغة تلك الشروط. محتويات · 1الحصول على البيانات وفق شرطٍ بسيط · 2حذف السجل المُحقِّق لشرط معين · 3تعديل القيم في السجلات وفق شرطٍ مُحدَّد · 4ربط الشروط باستخدام المعاملات المنطقية o 4.1عرض عدد السجلات المُحقِّقَة لشرط معيّن · 5المعاملات المساعدة في عبارة WHERE · 6التوافقية · 7مصادر الحصول على البيانات وفق شرطٍ بسيط إن كان الجدول الآتي موجودًا في قاعدة البيانات: GPA Age Name StudentID 3.68 25 Mona 1024 3.57 24 Radi 1081 2.50 25 Leen 1012 4.00 26 Sarah 1085 1.96 22 Amin 1066 2.87 23 Yusuf 1056 الاستعلام الآتي يُحدد شرط وجود قيمة السلسلة النصية 'Amin' في الحقل Name: SELECT * FROM students WHERE Name=’Amin’; وتكون نتيجة تنفيذه: GPA Age Name StudentID 1.96 22 Amin 1066 حذف السجل المُحقِّق لشرط معين يمكن حذف سجل أو أكثر إن كان مُحقِّقًا لشرط يُحدد من خلال عبارة WHERE. إن تنفيذ الاستعلام الآتي يؤدي لحذف جميع سجلات الطلاب بمعدل أقل من 2.5 وذلك بالاعتماد على استعلام DELETE: DELETE FROM students WHERE GPA<2.5; تعديل القيم في السجلات وفق شرطٍ مُحدَّد تحدد عبارة WHERE الشرط الذي من خلاله ستُحدد السجلات التي ستُعدَّل قيمها بالاستفادة من الاستعلام UPDATE، إذ يمكن تعديل قيمة أو أكثر. الاستعلام الآتي سيُعدِّل قيمتي العمر والمعدل للسجل الذي يكون فيه الاسم بقيمة Yusuf: UPDATE students SET Age = 24, GPA= 3.4 WHERE Name = 'Yusuf'; ويُلاحظ هنا أنه إن لم تُذكر عبارة WHERE في هذا الاستعلام فسيشمل التعديل كافة السجلات الموجودة في الجدول. ربط الشروط باستخدام المعاملات المنطقية يُستفاد من المُعاملات المنطقية (AND, OR, NOT) بربط أكثر من شرط أو نفيها ضمن عبارة WHERE. إن تنفيذ الاستعلام الآتي يُحدد شرط وجود قيمة أكبر من 3.00 في حقل المعدل الوسطيّ وقيمة أكبر من 24 سنة في حقل العمر، ويُرتِّب النتائج بحسب المعدل الوسطيّ ترتيبًا تنازليًا وتصبح تسمية Top Students بدلًا من Name في الجدول بالاستفادة من التسمية عبر الكلمة المفتاحية AS: SELECT Name AS Top Students, Age, GPA FROM students WHERE GPA>3.00 AND age>24 ORDER BY GPA DESC; وستظهر النتائج الآتية: GPA Age Top Students 4.00 26 Sarah 3.68 25 Mona عرض عدد السجلات المُحقِّقَة لشرط معيّن تمكن معرفة عدد السجلات التي تُحقِّق شرطًا معينًا بالاعتماد على الدالة count، مع تحديد الشرط المطلوب في عبارة WHERE، فلدى تنفيذ الاستعلام الآتي على الجدول السابق (باستخدام المعامل BETWEEN الذي يقوم بتحديد مجال للقيم المحتملة في الحقل Age): SELECT count(*) AS Count FROM students WHERE age BETWEEN 23 AND 25; ستظهر النتيجة: Count 4 المعاملات المساعدة في عبارة WHERE يُوضح الجدول الآتي بعض المعاملات المُستخدمة لدى صياغة الشرط الذي تحدده الكلمة المفتاحية WHERE: المعامل الوصف = حالة التساوي <> حالة عدم التساوي < أكبر من > أصغر من =< أكبر من أو يساوي => أصغر من أو يساوي BETWEEN واقعٌ ضمن مجال محدَّد LIKE مماثل لنمط محدد يلي الكلمة المفتاحية IN لتحديد عدة قيم ممكنة للقيمة المأخوذة من العمود ويُمكن كذلك استخدام المعاملات المنطقية الآتية للربط ما بين عدة شروط أو نفيها: المعامل الوصف AND لعرض السجل إذا تحققت كافة الشروط OR لعرض السجل إذا تحقق واحدٌ من الشروط أو أكثر NOT إذا تحقق نفي الشرط عبارة GROUP BY تُستخدم عبارة GROUP BY في استعلام SELECT بهدف تجميع النتائج ضمن مجموعات بحسب عمود أو أكثر من الجدول. محتويات · 1استخدام GROUP BY لمعرفة عدد السجلات الممكن تجميعها سويةً · 2تجميع النتائج المحققة لشرط محدد · 3تجميع النتائج من عدة جداول · 4التوافقية · 5مصادر استخدام GROUP BY لمعرفة عدد السجلات الممكن تجميعها سويةً ليكن الجدول الآتي (patients) موجودًا في قاعدة البيانات: Doctor Section Age Patient PatientID Nasser Cardiology 76 Salem 1029 Abd Allah Neurology 17 Hasan 896 Reem Maternity 23 Nadine 964 Fateh Cardiology 65 Rami 1070 Kareem Neurology 19 Abd al-Rahim 1150 Hadi Critical Care 65 Roushd 1097 Reem Maternity 27 Sana 1034 Abd Allah Neurology 49 Helen 963 Hadi Critical Care 58 Ahmad 1154 Kareem Neurology 40 Maher 1069 Amnah Maternity 30 Zeina 1028 Fateh Cardiology 55 Sarah 1180 Hadi Critical Care 23 Fadi 1076 Abd Allah Neurology 36 Naim 987 Fateh Cardiology 70 Batoul 1156 Amnah Maternity 24 Rahaf 1181 Nasser Cardiology 66 Aya 808 الاستعلام الآتي يحدد عدد المرضى في كل قسم اعتمادًا على الدالة التجميعيّة count()‎: SELECT Section, count(*) AS Number of patients FROM patients GROUP BY Section; وتظهر النتائج كما الآتي: Number of patients Section 5 Cardiology 5 Neurology 4 Maternity 3 Critical Care ولدى استخدام حقلين ضمن عبارة GROUP BY كما في الاستعلام الآتي: SELECT Section, Doctor, count(Patient) AS Number of patients FROM patients GROUP BY Section, Doctor تُجمَّع النتائج بحسب العمود المُحدد أولًا ثم العمود الثاني وهكذا، وستظهر النتائج الآتية: Number of patients Doctor Section 2 Nasser Cardiology 3 Fateh Cardiology 3 Abd Allah Neurology 2 Kareem Neurology 2 Reem Maternity 2 Amnah Maternity 3 Hadi Critical Care تجميع النتائج المحققة لشرط محدد الاستعلام الآتي يحدد عدد المرضى لدى كل طبيب ويستثني الأطباء المعالجِين لأقل من 3 مرضى اعتمادًا على العبارة HAVING التي تقوم بتحديد الشرط المطلوب عند استخدام التجميع: SELECT Doctor, count(Patient) AS Number of patients FROM patients GROUP BY Doctor HAVING count(Patient)>2 ; وتظهر النتائج كما يلي: Number of patients Doctor 3 Fateh 3 Abd Allah 3 Hadi تجميع النتائج من عدة جداول ليكن الجدول الآتي (doctors) في قاعدة البيانات (إضافة للجدول السابق بأسماء المرضى): City DoctorName Damascus Nasser Aleppo Fateh Aleppo Abd Allah Hama Kareem Damascus Reem Aleppo Amnah Damascus Hadi إن تنفيذ الاستعلام الآتي: SELECT doctors.City, count(patients.Patient) AS Number of patients in city FROM patients LEFT JOIN doctors ON patients.Doctor = doctors.DoctorName GROUP BY City; يربط ما بين الجدولين ربطًا يساريًا ويرتب النتائج بمجموعات حسب عمود المدينة الموجود في جدول الأطباء، وهذا يؤدي لظهور عدد المرضى في كل مدينة على النحو الآتي: City Number of patients in city Damascus 7 Aleppo 8 Hama 2 ملاحظة: لا يمكن استخدام الأعمدة التي نوعها text أو ntext أو image ضمن عبارة GROUP BY. عبارة HAVING < SQL اذهب إلى التنقلاذهب إلى البحث تستخدم عبارة HAVING ضمن استعلام SELECT لتحديد شرطٍ معينٍ عند تجميع السجلات مع بعضها GROUP BY، وقد أُضيف إلى لغة SQL لأنه لا يمكن استخدام عبارة WHERE مع الدوال التجميعيّة مثل SUM و MIN و MAX ...إلخ. محتويات · 1تجميع السجلات وفق شرط مُحدّد · 2الفرق ما بين WHERE و HAVING · 3التوافقية · 4مصادر تجميع السجلات وفق شرط مُحدّد ليكن الجدول الآتي (patients) موجودًا في قاعدة البيانات: Doctor Section Age Patient PatientID Nasser Cardiology 76 Salem 1029 Abd Allah Neurology 17 Hasan 896 Reem Maternity 23 Nadine 964 Fateh Cardiology 65 Rami 1070 Kareem Neurology 19 Abd al-Rahim 1150 Hadi Critical Care 65 Roushd 1097 Reem Maternity 27 Sana 1034 Abd Allah Neurology 49 Helen 963 Hadi Critical Care 58 Ahmad 1154 Kareem Neurology 40 Maher 1069 Amnah Maternity 30 Zeina 1028 Fateh Cardiology 55 Sarah 1180 Hadi Critical Care 23 Fadi 1076 Abd Allah Neurology 36 Naim 987 Fateh Cardiology 70 Batoul 1156 Amnah Maternity 24 Rahaf 1181 Nasser Cardiology 66 Aya 808 الاستعلام الآتي يحدد عدد المرضى المعالجِين لدى كل طبيب اعتمادًا على الدالة count()‎ بشرط ألا يقلَّ هذا العدد عن ثلاثة مرضى: SELECT Doctor, count(Patient) AS Number of patients FROM patients GROUP BY Doctor HAVING count(Patient)>2 ; وتظهر النتائج كما الآتي: Number of patients Doctor 3 Fateh 3 Abd Allah 3 Hadi الفرق ما بين WHERE و HAVING يكمُن الفرق الرئيسي بين العبارتين بأن عبارة HAVING متناسبة مع الدوال التجميعية أما عبارة WHERE فتُستخدم للتحقق من الشرط دون وجود أي دالة تجميعية، وبالتالي فإن الاستعلامَين الآتيَين متكافئان تمامًا: SELECT Section, count(Patient) AS Number FROM patients GROUP BY Section HAVING Age>25 ; SELECT Section, count(Patient) AS Number FROM patients WHERE Age>25 GROUP BY Section; وتكون نتيجتهما: Number Section 5 Cardiology 3 Neurology 2 Maternity 2 Critical Care أما في حال استخدام إحدى الدوال التجميعيّة مثل معرفة عدد المرضى في كل قسم واستبعاد الأقسام بعددٍ من المرضى أقل من ثلاثة، فإن الاستعلامَين الآتييَن ليسا متكافئين: SELECT Section, count(Patient) AS Number FROM patients GROUP BY Section HAVING count(Patient)>2 ; SELECT Section, count(Patient) AS Number FROM patients WHERE count(Patient)>2 -- استخدم GROUP BY; ذلك لأنه لا يمكن استخدام العبارة WHERE مع الدوال التجميعية، ويجب بهذه الحالة استخدام العبارة HAVING للحصول على النتيجة الآتية: Number Section 5 Cardiology 3 Neurology العبارة ORDER BY تتلخص مهمة عبارة ORDER BY بترتيب النتائج (تصاعديًا أو تنازليًا) ضمن استعلام SELECT وفق عمودٍ (أو أكثر) من الجدول. محتويات · 1تحديد نمط الترتيب التصاعدي أو التنازلي · 2الترتيب وفق أكثر من عمود · 3الترتيب الشرطي o 3.1مثال ثانٍ · 4ترتيب نتائج الربط · 5التوافقية · 6مصادر تحديد نمط الترتيب التصاعدي أو التنازلي تُستخدم الكلمتان المفتاحيتان ASC و DESC لتحديد نمط الترتيب التصاعدي ASC والتنازلي DESC بعدّ الترتيب التصاعدي الحالة الافتراضية للعبارة. ليكن الجدول rivers الآتي موجودًا في قاعدة البيانات: Continent Outflow LengthMiles LengthKm River Serial South America Atlantic Ocean 4345 6992 Amazon 1 Africa Mediterranean 4258 6853 Nile 2 North America Gulf of Mexico 3902 6275 Mississippi 3 Asia Bohai Sea 3395 5464 Yellow River 4 Africa Atlantic Ocean 2922 4700 Congo 5 Asia Laptev Sea 2736 4400 Lena 6 Africa Gulf of Guinea 2611 4200 Niger 7 Europe Caspian Sea 2266 3645 Volga 8 Asia Andaman Sea 1901 3060 Salween 9 لدى تنفيذ الاستعلام الآتي: SELECT * FROM rivers ORDER BY Serial DESC; ستظهر السجلات مرتبة ترتيبًا تنازليًا وفق العمود Serial، أي سيظهر الجدول بترتيب عكسي: Continent Outflow LengthMiles LengthKm River Serial Asia Andaman Sea 1901 3060 Salween 9 Europe Caspian Sea 2266 3645 Volga 8 Africa Gulf of Guinea 2611 4200 Niger 7 Asia Laptev Sea 2736 4400 Lena 6 Africa Atlantic Ocean 2922 4700 Congo 5 Asia Bohai Sea 3395 5464 Yellow River 4 North America Gulf of Mexico 3902 6275 Mississippi 3 Africa Mediterranean 4258 6853 Nile 2 South America Atlantic Ocean 4345 6992 Amazon 1 ولا يشترط وجود العمود المذكور في عبارة ORDER BY ضمن قائمة الأعمدة المذكورة في SELECT، أي أن الاستعلام الآتي صحيح أيضًا (لا يُعرض عمود Serial في النتائج): SELECT River, LengthKm, LengthMiles, Outflow, Continent FROM rivers ORDER BY Serial DESC; ويُمكن استخدام التسمية البديلة (alias) في عبارة ORDER BY كما في الاستعلام الآتي (الذي نتيجته تماثل نتيجة الاستعلام الأول): SELECT Serial AS sortingCol, River, LengthKm, LengthMiles, Outflow, Continent FROM rivers ORDER BY sortingCol DESC; الترتيب وفق أكثر من عمود عند وجود أكثر من عمود في عبارة ORDER BY تُرتَّب النتائج وفقًا للعمود المذكور أولًأ ثم تُرتب السجلات الناتجة عن الترتيب السابق وفقًا للعمود الثاني وهكذا. الاستعلام الآتي يُرتب الجدول وفقًا لعمود القارة ترتيبًا هجائيًا تصاعديًا (لا يُشترَط ذكر الكلمة المفتاحية ASC) ومن ثم ترتيبًا تنازليًا وفقًا لعمود الطول المقدر بالكيلومتر: SELECT River, LengthKm, Continent FROM rivers ORDER BY Continent ASC, LengthKm DESC; وتظهر النتائج الآتية: Continent LengthKm River Africa 6853 Nile Africa 4700 Congo Africa 4200 Niger Asia 5464 Yellow River Asia 4400 Lena Asia 3060 Salween Europe 3645 Volga North America 6275 Mississippi South America 6992 Amazon الترتيب الشرطي يمكن تحديد الترتيب ضمن عبارة ORDER BY وفقًا لشرط محدد وذلك باستخدام الكلمات المفتاحية CASE و WHEN و THEN و END والتي تعبر عن الشرط CASE المعروف في لغات البرمجة. لترتيب السجلات وفقًا لأطوالها في قارة Africa ووفقًا لأسمائها في القارات البقية، يُنفذ الاستعلام الآتي: SELECT * FROM rivers ORDER BY CASE Country WHEN 'Africa' THEN length ELSE Name END; والذي يفحص القيمة الموجودة في حقل Country للسجل، فإن كانت Africa فترتب بحسب الترتيب التصاعدي للطول أما في الحالات الأخرى فستُرتب ترتيبًا هجائيًا تصاعديًا حسب اسم القارة، إذ إن الكلمات المفتاحية السابقة لها الصيغة التالية: CASE field_name WHEN value THEN expression ELSE expression END وستظهر النتائج الآتية: Continent LengthKm River Africa 4200 Niger Africa 4700 Congo Africa 6853 Nile Asia 4400 Lena Asia 3060 Salween Asia 5464 Yellow River Europe 3645 Volga North America 6275 Mississippi South America 6992 Amazon مثال ثانٍ إن كان الجدول الآتي (patients) موجودًا في قاعدة البيانات: Doctor Section Age Patient PatientID Nasser Cardiology 76 Salem 1029 Abd Allah Neurology 17 Hasan 896 Reem Maternity 23 Nadine 964 Fateh Cardiology 65 Rami 1070 Kareem Neurology 19 Abd al-Rahim 1150 Hadi Critical Care 65 Roushd 1097 Reem Maternity 27 Sana 1034 Abd Allah Neurology 49 Helen 963 Hadi Critical Care 58 Ahmad 1154 Kareem Neurology 40 Maher 1069 Amnah Maternity 30 Zeina 1028 الاستعلام الآتي يرتب السجلات ترتيبًا تصاعديًا بحسب العمر إن كان القسم Cardiology وبحسب الاسم إن كان القسم Neurology وبحسب الرقم التسلسلي فيما تبقى من حالات: SELECT * FROM patients ORDER BY CASE Section WHEN 'Cardiology' THEN Age WHEN 'Neurology' THEN Name ELSE PatientID END; وتظهر النتائج الآتية: Doctor Section Age Patient PatientID Fateh Cardiology 65 Rami 1070 Nasser Cardiology 76 Salem 1029 Kareem Neurology 19 Abd al-Rahim 1150 Abd Allah Neurology 17 Hasan 896 Abd Allah Neurology 49 Helen 963 Kareem Neurology 40 Maher 1069 Reem Maternity 23 Nadine 964 Amnah Maternity 30 Zeina 1028 Reem Maternity 27 Sana 1034 Hadi Critical Care 65 Roushd 1097 Hadi Critical Care 58 Ahmad 1154 ترتيب نتائج الربط يمكن ترتيب نتائج الربط ما بين جدولين أو جزئين من جدول عبر معاملات الربط UNION أو EXCEPT أو INTERSECT وذلك بذكر العمود الذي سترتب النتائج وفقًا له عند عبارة ORDER BY. لترتيب الأنهار الواقعة في قارتي آسيا وإفريقيا فقط بحسب أطوالها ترتيبًا تنازليًا، يُنفذ الاستعلام الآتي: SELECT River, LengthKm, Continent FROM rivers WHERE Continent = ‘Asia’ UNION ALL SELECT River, LengthKm, Continent FROM rivers WHERE Continent = ‘Africa’ ORDER BY LengthKm; وتكون النتيجة: Continent LengthKm River Africa 6853 Nile Asia 5464 Yellow River Africa 4700 Congo Asia 4400 Lena Africa 4200 Niger Asia 3060 Salween تحديد عدد السجلات في استعلامات SQL يمكن تحديد عدد السجلات التي ستُجلب من الجدول ضمن استعلام SELECT أو التي ستُحذف من الجدول ضمن استعلام DELETE أو ستُحدَّث قيمها ضمن استعلام UPDATE، ولكن تختلف محركات قواعد البيانات فيما بينها بالصياغة العامة للاستعلام، وسيُذكر ذلك تباعًا. محتويات · 1تحديد عدد سجلات النتائج · 2أمثلة · 3حذف عدد محدد من السجلات o 3.1مثال · 4الحصول على عدد نتائج محدد مع الإزاحة o 4.1مثال · 5مصادر تحديد عدد سجلات النتائج يكون للاستعلام البنية العامة الآتية في محرك SQL Server، والتي تعتمد على الكلمة المفتاحية TOP: SELECT TOP number | percent col_name(s) FROM tbl_name WHERE condition; إذ يُعبّر المتحول number عن عدد السجلات المطلوبة، وتُعبّر الكلمة المفتاحية percent عن نسبة السجلات المئوية التي نريد عرضها (أي يُمكن جلب نسبة محددة من عدد السجلات الإجمالي). ويكون للاستعلام البنية العامة الآتية في محركات PostgreSQL و SQLite و MySQL، والتي تعتمد على الكلمة المفتاحية LIMIT: SELECT col_name(s) FROM tbl_name WHERE condition LIMIT number; ويمكن استخدام العبارة المفتاحية FETCH FIRST number ROWS ONLY في محرك PostgreSQL بدلًا من LIMIT، إذ يُعبِّر المتحول number عن عدد السجلات المطلوبة، أما في محرك Oracle، فيكون للاستعلام البنية العامة الآتية، والتي تعتمد على الكلمة المفتاحية ROWNUM: SELECT col_name(s) FROM tbl_name WHERE ROWNUM <= number; إذ يُعبّر المتحول number عن عدد السجلات المطلوبة. أمثلة يُراد الحصول على السجلات الخمس الأولى المحققة لشرط العمر أكبر من 25 سنة من الجدول الآتي (باسم patients): Doctor Section Age Patient PatientID Nasser Cardiology 76 Salem 1029 Abd Allah Neurology 17 Hasan 896 Reem Maternity 23 Nadine 964 Fateh Cardiology 65 Rami 1070 Kareem Neurology 19 Abd al-Rahim 1150 Hadi Critical Care 65 Roushd 1097 Reem Maternity 27 Sana 1034 Abd Allah Neurology 49 Helen 963 Hadi Critical Care 58 Ahmad 1154 Kareem Neurology 40 Maher 1069 Amnah Maternity 30 Zeina 1028 Fateh Cardiology 55 Sarah 1180 Hadi Critical Care 23 Fadi 1076 Abd Allah Neurology 36 Naim 987 Fateh Cardiology 70 Batoul 1156 Amnah Maternity 24 Rahaf 1181 Nasser Cardiology 66 Aya 808 Fateh Cardiology 30 Raghad 1256 Amnah Maternity 17 Mona 1161 Nasser Cardiology 50 Sami 809 فيكون الاستعلام المطلوب تنفيذه هو (بحسب المحركات المختلفة): في محرك SQL Server: SELECT TOP 3 * FROM patients WHERE Age>25; أو بالاستفادة من النسبة المئوية (5 مرضى من أصل 20 مريضًا تعادل نسبة 25%): SELECT TOP 25 PERCENT * FROM patients WHERE Age>25; في محركات PostgreSQL و SQLite و MySQL: SELECT * FROM patients WHERE Age>25 LIMIT 5; في محرك Oracle: SELECT * FROM patients WHERE Age>25 AND ROWNUM <= 5; وستظهر النتائج الآتية: Doctor Section Age Patient PatientID Nasser Cardiology 76 Salem 1029 Fateh Cardiology 65 Rami 1070 Hadi Critical Care 65 Roushd 1097 Reem Maternity 27 Sana 1034 Abd Allah Neurology 49 Helen 963 حذف عدد محدد من السجلات تكون للاستعلام البنية العامة الآتية في محرك SQL Server: DELETE TOP number FROM tbl_name; أما في محركات PostgreSQL و SQLite و MySQL، فتكون البنية العامة له كما يلي: DELETE FROM tbl_name LIMIT number; مثال لحذف المرضى الخمسة الأكبر سنًا من جدول المرضى patients السابق، يُستخدَم الاستعلام الآتي في محرك SQL Server: DELETE TOP 5 FROM patients ORDER BY age DESC; في محركات PostgreSQL و SQLite و MySQL: DELETE FROM patients ORDER BY age DESC LIMIT 5; الحصول على عدد نتائج محدد مع الإزاحة تستخدم الإزاحة مع العبارة ORDER BY وذلك لاستبعاد عددٍ مُحدّدٍ من النتائج الأولى في الجدول. مثال إن كان الجدول cars الآتي موجودًا في قاعدة البيانات: Colour Price Year Company Model CarID White 22,500 2018 KIA Optima 05081 Red 25,995 2017 KIA Optima Hybrid 05082 Red 31,900 2018 KIA Stinger 05083 Black 31,990 2017 KIA Cadenza 05084 Blue 23,240 2018 KIA Niro 05085 Grey 14,200 2018 KIA Rio 5-Door 05086 Blue 18,200 2018 KIA Forte5 05087 Blue 32,250 2017 KIA Soul EV 05088 للحصول على السيارات ذات الثمن الأعلى بدءًا من الرابعة حتى الأقل ثمنًا، يصبح الاستعلام بالشكل الآتي: SELECT * FROM cars ORDER BY Price DESC OFFSET 3 ROWS; لتظهر النتائج بالشكل: Colour Price Year Company Model CarID Red 25,995 2017 KIA Optima Hybrid 05082 Blue 23,240 2018 KIA Niro 05085 White 22,500 2018 KIA Optima 05081 Blue 18,200 2018 KIA Forte5 05087 Grey 14,200 2018 KIA Rio 5-Door 05086 استعلام INSERT مهمة هذا الاستعلام هي إنشاء سجل جديد في الجدول، وله البنية العامة: INSERT INTO tbl_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); إذ تجب مراعاة التوافقية ما بين اسم العمود والقيمة التي ستوضع فيه على التوالي وبالترتيب، وأن تكون متوافقةً مع نوع بيانات الحقل، أي أن التوافق يجب أن يكون بالترتيب والعدد والنوع. ولإسناد قيم إلى كافة الحقول في السجل يُمكن الاستغناء عن أسماء الأعمدة ليصبح الاستعلام بالشكل: INSERT INTO tbl_name VALUES (value1, value2, value3, ...); إذ تجب مراعاة ترتيب القيم وعددها ونوعها ليتوافق مع الأعمدة في الجدول. أما إن كان الاستعلام بالشكل: INSERT INTO tbl DEFAULT VALUES; فتنفيذه يؤدي إلى إنشاء سجل جديدٍ في الجدول يحتوي على القيم الافتراضية بحسب نوع البيانات المحدد لكل عمود على حدة. وكما أن محرك MySQL يدعم الصيغة الآتية لاستعلام INSERT: INSERT INTO tbl_name SET assignment_list إذ إن assignment_list هي عدد من عمليات إسناد القيم للحقول المناسبة لها. محتويات · 1مثال · 2إضافة سجل لا يحتوي على كافة بيانات الأعمدة · 3إضافة عدد من السجلات باستعلام واحد · 4إضافة سجلات إلى الجدول من جدول آخر · 5التوافقية · 6مصادر مثال إن كان الجدول students التالي موجودًا في قاعدة البيانات: GPA Age Name StudentID 3.68 25 Mona 1024 3.57 24 Radi 1081 2.50 25 Leen 1012 4.00 26 Sarah 1085 1.96 22 Amin 1066 2.87 23 Yusuf 1056 لإضافة سجل طالب جديد رقمه التسلسلي 1075 واسمه Abed وعمره 21 سنة ومعدله 1.90 في هذا الجدول، يصبح الاستعلام بالشكل الآتي: INSERT INTO students (StudentID, Name, Age, GPA) VALUES (1075, Abed, 21, 1.90); ويصبح الجدول بعد تنفيذ هذا الاستعلام: GPA Age Name StudentID 3.68 25 Mona 1024 3.57 24 Radi 1081 2.50 25 Leen 1012 4.00 26 Sarah 1085 1.96 22 Amin 1066 2.87 23 Yusuf 1056 1.90 21 Abed 1075 إضافة سجل لا يحتوي على كافة بيانات الأعمدة تمكن إضافة سجل لا يحتوي على كافة بيانات الأعمدة وحينئذٍ ستُملأ الأعمدة المتبقية بالقيم الافتراضية لنوع البيانات المحددة في هذه الأعمدة. إن تنفيذ الاستعلام الآتي على الجدول الأساسي students: INSERT INTO students (StudentID, Name, Age) VALUES (NEWID(), Abed, 21); سيؤدي لإضافة طالب اسمه Abed وعمره 21 وبمعدل 0.0 لأنها القيمة الافتراضية لعمود GPA أما رقمه التسلسلي فسيصبح 1086 لأن الدالة NEWID()‎ مسؤولة عن إعطاء الرقم التسلسلي التالي لآخر رقم تسلسلي مستخدم في الجدول، ويصبح الجدول كما يلي: GPA Age Name StudentID 3.68 25 Mona 1024 3.57 24 Radi 1081 2.50 25 Leen 1012 4.00 26 Sarah 1085 1.96 22 Amin 1066 2.87 23 Yusuf 1056 0.0 21 Abed 1086 إضافة عدد من السجلات باستعلام واحد من الممكن أن تُضاف عدة سجلات بآن واحد ضمن نفس الاستعلام INSERT وذلك بفصل السجلات عن بعضها بفاصلة كما في الاستعلام الآتي: INSERT INTO students (StudentID, Name, Age, GPA) VALUES (1075, Abed, 21, 1.90), (1076, Taimaa, 23, 2.75), (1077, Mohammad, 22, 1.85); إذ تُضاف ثلاثة سجلات للجدول ليصبح كالآتي: GPA Age Name StudentID 3.68 25 Mona 1024 3.57 24 Radi 1081 2.50 25 Leen 1012 4.00 26 Sarah 1085 1.96 22 Amin 1066 2.87 23 Yusuf 1056 1.90 21 Abed 1075 2.75 23 Taimaa 1076 1.85 22 Mohammad 1077 إضافة سجلات إلى الجدول من جدول آخر تمكن إضافة سجلات للجدول من جدول آخر بالاعتماد على استعلام SELECT. ليكن الجدول الآتي newStudents موجودًا في قاعدة البيانات التي تحوي الجدول students: GPA Age Name StudentID 1.86 21 Maher 2027 3.57 23 Joud 2051 2.40 22 Kawthar 2082 3.68 25 Asmaa 2075 لدى تنفيذ الاستعلام الآتي: INSERT INTO students (StudentID, Name, Age, GPA) SELECT StudentID, Name, Age, GPA FROM newStudents WHERE GPA > 2.50; ستضاف السجلات من الجدول newStudents والتي معدل الطالب فيها أكبر من 2.50 إلى الجدول students، ليصبح الجدول students بالشكل الآتي: GPA Age Name StudentID 3.68 25 Mona 1024 3.57 24 Radi 1081 2.50 25 Leen 1012 4.00 26 Sarah 1085 1.96 22 Amin 1066 2.87 23 Yusuf 1056 3.57 23 Joud 2051 3.68 25 Asmaa 2075 استعلام DELETE يُستخدم استعلام DELETE لحذف سجل أو أكثر، وله البنية العامة: DELETE FROM tbl_name WHERE condition; إذ يُحدد الشرط الذي ستُحذف السجلات وفقًا له في عبارة WHERE. أما تنفيذ الاستعلامَيْن الآتيين: DELETE * FROM tbl_name; DELETE FROM tbl_name; فيؤدي لحذف كافة السجلات الموجودة في الجدول. محتويات · 1مثال · 2حذف عدد محدد من السجلات · 3حذف البيانات من الجدول اعتمادًا على قيم البيانات في جدول آخر · 4التوافقية · 5مصادر مثال إن كان جدول الزبائن customers موجودًا في قاعدة البيانات على النحو الآتي: Bill OrderID FullName CustomerID 160 0291 Abd al-Salam Hadi 1156 170 0302 Ahmad Mostafa 1157 210 0203 Reem Hammad 1158 350 0294 Abd Allah Sadiq 1159 185 0255 Raghad al-Hamdan 1160 165 0276 Abd al-Razzaq Salloum 1161 175 0247 Hussam Siraj 1162 180 0208 Hiba Maktabi 1163 170 0219 Abd al-Rahman Rida 1164 220 0210 Abd al-Qader Khalil 1165 350 0211 Fateh Hammad 1166 185 0202 Abd al-Azziz Othman 1167 400 0213 Zahraa Qasem 1168 350 0314 Abd al-Wahhab Masri 1169 185 0215 Mona Saber 1170 لحذف السجلات التي يبدأ فيها اسم الزبون بكلمة Abd أو تتراوح فاتورته ما بين 150 - 200 $ يصبح الاستعلام بالشكل الآتي: DELETE FROM customers WHERE FullName LIKE ‘Abd%’ OR Bill BETWEEN 150 AND 200; إذ إنَّ المعامل LIKE يحدد نمطًا للسلسلة النصية الموجودة في حقل FullName وهو تتابع أي تسلسل للمحارف من بعد البدء بكلمة Abd، والمعامل BETWEEN يحدد المجال الواقع بين القيمتَيْن المحدّدتين. بعد تنفيذ الاستعلام سيصبح الجدول بالشكل: Bill OrderID FullName CustomerID 210 0203 Reem Hammad 1158 350 0211 Fateh Hammad 1166 400 0213 Zahraa Qasem 1168 حذف عدد محدد من السجلات يمكن تعيين عدد محدد من السجلات التي ستُحذف وذلك بالاعتماد على الكلمة المفتاحية TOP في محرك SQL Server والكلمة المفتاحية LIMIT في محركات PostgreSQL و SQLite و MySQL والكلمة المفتاحية ROWNUM في محرك Oracle وذلك بنفس الطريقة المستخدمة لتحديد عدد السجلات في استعلام SELECT، واستعلام UPDATE. لدى تنفيذ الاستعلام السابق بإضافة TOP بمحرك SQL Server يصبح بالشكل الآتي: DELETE TOP (5) FROM customers WHERE FullName LIKE ‘Abd%’ OR Bill BETWEEN 150 AND 200; وفي محركات PostgreSQL و SQLite و MySQL بالشكل: DELETE FROM customers WHERE FullName LIKE ‘Abd%’ OR Bill BETWEEN 150 AND 200; LIMIT 5; وعند تنفيذ الاستعلامات الثلاثة السابقة ستُحذَف 5 سجلات فقط ، أي ستصبح القيم بالجدول على النحو الآتي: Bill OrderID FullName CustomerID 210 0203 Reem Hammad 1158 175 0247 Hussam Siraj 1162 180 0208 Hiba Maktabi 1163 170 0219 Abd al-Rahman Rida 1164 220 0210 Abd al-Qader Khalil 1165 350 0211 Fateh Hammad 1166 185 0202 Abd al-Azziz Othman 1167 400 0213 Zahraa Qasem 1168 350 0314 Abd al-Wahhab Masri 1169 185 0215 Mona Saber 1170 وفي حال استخدام عبارة الترتيب ORDER BY في الاستعلام فسيُحذَف العدد المطلوب من السجلات بعد ترتيبها بحسب العمود المُحدَّد، إن تنفيذ الاستعلام الآتي في محرك SQL Server بالشكل: DELETE TOP (5) FROM customers ORDER BY Bill; أو في محركات PostgreSQL و SQLite و MySQL بالشكل: DELETE FROM customers ORDER BY Bill LIMIT 5; سيؤدي إلى حذف السجلات الخمس الأولى من بعد ترتيبها بحسب عمود Bill ترتيبًا تصاعديًا، وسيصبح الجدول: Bill OrderID FullName CustomerID 160 0291 Abd al-Salam Hadi 1156 170 0302 Ahmad Mostafa 1157 210 0203 Reem Hammad 1158 185 0255 Raghad al-Hamdan 1160 165 0276 Abd al-Razzaq Salloum 1161 175 0247 Hussam Siraj 1162 180 0208 Hiba Maktabi 1163 170 0219 Abd al-Rahman Rida 1164 185 0202 Abd al-Azziz Othman 1167 185 0215 Mona Saber 1170 يُلاحظ هنا أن الترتيب مستخدَم مع استعلام DELETE ولذلك فإن سجلات الجدول السابق غير مرتبة لأنها ليست ناتجة عن استعلام الحصول على السجلات SELECT وبقيت بترتيبها الأصلي في الجدول. حذف البيانات من الجدول اعتمادًا على قيم البيانات في جدول آخر إن كان الجدول الآتي orders موجودًا في قاعدة البيانات السابقة التي تحوي جدول الزبائن customers السابق: Item EmployeeID OrderID ZenFone 4 Max 096 0302 ZenFone 3 Max 054 0291 ZenFone 4 4G LTE 096 0213 VivoBook Max 054 0210 ZenFone 3 Deluxe 5.7”‎ 054 0314 ZenFone 3 Laser (ZC551KL)‎ 054 0276 ولحذف السجلات من جدول customers التي طلبها موظف محدد في الجدول orders، سيصبح الاستعلام بالشكل الآتي: DELETE FROM customers WHERE OrderID IN (SELECT OrderID FROM orders WHERE EmployeeID = 054); وهذا بالاعتماد على مفهوم الاستعلام الفرعي Subquery الموجود في قائمة المعامل IN الذي يحدد عددًا من القيم المحتملة لقيمة الحقل OrderID، وبعد تنفيذ الاستعلام السابق سيصبح جدول الزبائن customers على النحو الآتي: Bill OrderID FullName CustomerID 170 0302 Ahmad Mostafa 1157 210 0203 Reem Hammad 1158 350 0294 Abd Allah Sadiq 1159 185 0255 Raghad al-Hamdan 1160 175 0247 Hussam Siraj 1162 180 0208 Hiba Maktabi 1163 170 0219 Abd al-Rahman Rida 1164 350 0211 Fateh Hammad 1166 185 0202 Abd al-Azziz Othman 1167 400 0213 Zahraa Qasem 1168 185 0215 Mona Saber 1170 استعلام الاستبدال REPLACE هو استعلام يستخدم للقيام بنفس مهمة الاستعلام INSERT (إضافة سجل جديد للجدول) ولكن لإدخال سجلٍ بنفس القيمة الموجودة مسبقًا في عمود المفتاح الأوليّ وذلك منعًا لحدوث التكرار، إذ يُحذف السجل المحتوي لهذه القيمة ليُضاف سجلٌ جديدٌ بدلًا منه، وتكون الصيغة العامة للاستعلام على النحو الآتي: REPLACE INTO tbl VALUES (col_name [, col_name] ...); إذ إن table هو اسم الجدول الذي سيُعدَّل فيه السجل، وتوضع القيم الجديدة ضمن القوسين. مثال إن كان الجدول الآتي students موجودًا في قاعدة البيانات: GPA Age Name StudentID 3.68 25 Mona 1024 3.57 24 Radi 1081 2.50 25 Leen 1012 4.00 26 Sarah 1085 1.96 22 Amin 1066 2.87 23 Yusuf 1056 فلاستبدال السجل ذو الرقم الفريد 1066 (وهو رقم لا يمكن تكراره لأن هذا الحقل يعدّ مفتاحًا أوليًا للجدول) ببياناتٍ متعلقة بطالب آخر يُنفذ الاستعلام الآتي: REPLACE INTO students VALUES (1066, 'Ahmad', 21, 3.15); ليصبح الجدول بعد الاستبدال بالشكل الآتي: GPA Age Name StudentID 3.68 25 Mona 1024 3.57 24 Radi 1081 2.50 25 Leen 1012 4.00 26 Sarah 1085 3.15 21 Ahmad 1066 2.87 23 Yusuf 1056 الاستعلام UPDATE يُستخدم هذا الاستعلام من أجل تحديث قيم البيانات المخزنة في سجلات الجداول. البنية العامة للاستعلام: UPDATE tbl_name SET col_name = [|DEFAULT], col_name = value [|DEFAULT], … WHERE condition إذ من الممكن تحديث عدة قيم في عدة سجلات ضمن نفس الاستعلام، وعند استخدام الكلمة المفتاحية DEFAULT ستصبح القيمة في الحقل هي القيمة الافتراضية لنوع البيانات فيه، أما إن كان الاستعلام بالشكل: UPDATE tbl_name SET col_name = value [|DEFAULT], col_name = value [|DEFAULT], … فتنفيذه يؤدي لتعديل قيمة الحقل المحدد بكافة السجلات الموجودة في الجدول بسبب عدم وجود الشرط الذي يحدد السجلات التي ستُعدل. محتويات · 1مثال · 2تحديث قيمة عدد محدد من السجلات · 3تحديث القيم في السجلات اعتمادًا على قيم مخزنة في جدول آخر · 4التوافقية · 5مصادر مثال إن كان الجدول التالي (employees) موجودًا في قاعدة البيانات: WeeklyHours Work City Salary Name EmployeeID 25 In centre Beruit 200 Natalie Sinno 0156 30 In centre Alexandria 275 Ahmad Rida 0157 25 In centre Aleppo 210 Kareem al-Hamdan 0158 28 In centre Rabat 190 Mahdi Thabit 0159 36 In centre Jedda 300 Rabie al-Sadi 0160 36 In centre Amman 290 Jaber Hammad 0161 30 In centre Cairo 210 Rawda Hussien 0162 ويُراد زيادة 10% لقيمة الراتب وتعديل طبيعة العمل لتصبح عبر شبكة الإنترنت بدلًا من المركز، وذلك لكل موظف يسكن في أيّ من المدن (Aleppo, Cairo, Rabat) بالاستفادة من المعامل IN، فسيكون الاستعلام المطلوب: UPDATE employees SET Salary = Salary * 1.1 , Work =’online’ WHERE City IN (Aleppo, Cairo, Rabat); وسيصبح الجدول بالقيم الجديدة كالآتي: WeeklyHours Work City Salary Name EmployeeID 25 In centre Beruit 200 Natalie Sinno 0156 30 In centre Alexandria 275 Ahmad Rida 0157 25 online Aleppo 231 Kareem al-Hamdan 0158 28 online Rabat 209 Mahdi Thabit 0159 36 In centre Jedda 300 Rabie al-Sadi 0160 36 In centre Amman 290 Jaber Hammad 0161 30 online Cairo 231 Rawda Hussien 0162 تحديث قيمة عدد محدد من السجلات يمكن تعيين عدد محدد من السجلات التي ستُحدّث قيمتها وذلك بالاعتماد على الكلمة المفتاحية TOP في محرك SQL Server والكلمة المفتاحية LIMIT في محركات PostgreSQL و SQLite و MySQL والكلمة المفتاحية ROWNUM في محرك Oracle وذلك بنفس الطريقة المستخدمة لتحديد عدد السجلات في استعلام SELECT، واستعلام DELETE. لدى تنفيذ نفس الاستعلام السابق بإضافة TOP بمحرك SQL Server يصبح بالشكل الآتي: UPDATE TOP (2) employees SET Salary = Salary * 1.1, Work =’online’ WHERE City IN (Aleppo, Cairo, Rabat); وفي محركات PostgreSQL و SQLite و MySQL بالشكل: UPDATE employees SET Salary = Salary * 1.1, Work =’online’ WHERE City IN (Aleppo, Cairo, Rabat) LIMIT 2; وفي محرك Oracle بالشكل: UPDATE employees SET Salary = Salary * 1.1, Work =’online’ WHERE City IN (Aleppo, Cairo, Rabat) AND ROWNUM <= 2; وعند تنفيذ الاستعلامات الثلاثة السابقة ستُحدَّث قيمة الراتب ومكان العمل في سجلين فقط دون تعديل الثالث، أي تصبح القيم بالجدول على النحو الآتي: WeeklyHours Work City Salary Name EmployeeID 25 In centre Beruit 200 Natalie Sinno 0156 30 In centre Alexandria 275 Ahmad Rida 0157 25 online Aleppo 231 Kareem al-Hamdan 0158 28 online Rabat 209 Mahdi Thabit 0159 36 In centre Jedda 300 Rabie al-Sadi 0160 36 In centre Amman 290 Jaber Hammad 0161 30 In centre Cairo 210 Rawda Hussien 0162 تحديث القيم في السجلات اعتمادًا على قيم مخزنة في جدول آخر ليكن الجدول الآتي باسم leaves موجودًا في قاعدة البيانات السابقة التي تحوي جدول الموظفين (employees): AnnualLeave EmployeeID 10 0156 12 0157 10 0158 11 0159 15 0160 15 0161 12 0162 لإضافة يوميّ إجازة إضافيَّين للجدول leaves اعتمادًا على عدد ساعات العمل المحددة في جدول employees بحيث تكون ساعات عمل الموظف أكثر من 25 ساعة، سيُستخدم الاستعلام الآتي: UPDATE leaves SET AnnualLeave = AnnualLeave + 2 FROM (SELECT EmployeeID FROM employees WHERE WeeklyHours > 25 ) AS tempTable WHERE leaves.EmployeeID = tempTable.EmployeeID; إذ إنَّ هذا الاستعلام يعتمد على مفهوم الاستعلام الفرعي في عبارة FROM والذي حَدَّد السجلات من الجدول employees التي ساعات العمل فيها أكثر من 25، وسُمّي الجدول الناتج باسم tempTable بالاستفادة من المعامل AS، وتحقق التقابل ما بين الجدولين ضمن عبارة WHERE. الربط بين الجداول تخزن البيانات عادةً في قواعد البيانات بأكثر من جدول لتسهيل تنظيمها وإدارتها، وتُربط هذه الجداول فيما بينها من خلال الأعمدة المترابطة فيما بينها، وذلك بالاعتماد على مفهومي المفتاح الأولي Primary Key والمفتاح الثانوي Foreign Key، وله عدة أنواع ستُذكر تباعًا. محتويات · 1أنواع ربط الجداول · 2ربط أكثر من جدولين o 2.1مثال · 3دمج النتائج من استعلامي SELECT في جدول واحد o 3.1مثال · 4التوافقية · 5مصادر أنواع ربط الجداول توجد عدة أنواع للربط بين جدولين (أو أكثر)، إذ يسمى الجدول الأول يساريًا والجدول الثاني يمينًا: 1. الربط الداخلي INNER JOIN: تحديد بعض السجلات من الجدول اليساري والجدول اليميني بحيث تحقق شرط الربط. 2. الربط اليساري LEFT JOIN: تحديد كافة السجلات من الجدول اليساري وبعض السجلات من الجدول اليميني التي تحقق شرط الربط. 3. الربط اليميني RIGHT JOIN: تحديد بعض السجلات التي تحقق شرط الربط من الجدول اليساري وكافة السجلات من الجدول اليميني. 4. الربط التام FULL JOIN: تحديد كافة السجلات من الجدولين اليساري واليميني بغض النظر عن تحقيقها للشرط. وهذه الأنواع موضحة باستخدام مخططات Venn. ربط أكثر من جدولين عند ربط أكثر من جدول يكون الربط باستخدام JOIN (بأحد الأنواع الأربع) عدة مرات لتشكيل جداول مرحلية يُربط فيما بينها للحصول على جدول الربط النهائي. مثال تحتوي قاعدة بيانات أحد المراكز التعليمية الجداول الآتية: الجدول الأول: جدول الطلاب students (المفتاح الأولي فيه هو عمود StudentID والمفتاح الثانوي هو عمود CourseID للربط مع جدول الدورات التدريبية) RegDate CourseID LastName FirstName StudentID ‎07-JUL-2017 0206 Najjar Rama 1147 ‎08-NOV-2017 0604 Kordi Jenan 1148 ‎07-JUL-2017 0206 Bitar Rahaf 1149 ‎20-AUG-2017 0607 Taweel Farah 1150 ‎08-NOV-2017 0610 Arab Rami 1151 ‎24-OCT-2017 0803 Akkad Aya 1152 ‎08-NOV-2017 0504 Haddad Abed 1153 ‎20-AUG-2017 0801 Fares Tasneem 1154 ‎24-OCT-2017 0607 Hamsho Monther 1155 ‎30-SEP-2017 0607 Abd Allah Hiba 1156 ‎07-JUL-2017 0509 Khatib Mohammad 1157 ‎20-AUG-2017 0801 Sharif Ibrahim 1158 ‎24-OCT-2017 0802 Fehmi Hanin 1159 ‎20-AUG-2017 0204 Zein Loujain 1160 ‎08-NOV-2017 0503 Helali Ammar 1161 الجدول الثاني: جدول الدورات التدريبية courses (المفتاح الأولي فيه هو عمود CourseID والمفتاح الثانوي هو عمود DepartmentID للربط مع جدول الأقسام) DepartmentID Lecturer Course CourseID EN01 Dr. Reem Hadi English (Adv)‎ 0204 EN01 Dr. Shadi Balid English (Int)‎ 0206 EN02 Dr. Firas Abd English (TOEFL)‎ 0211 IT01 Eng. Nasser Sharif Artificial Intelligence 0604 IT01 Eng. Amal Safi Networks 0607 IT01 Eng. Salem Najm ICDL 0610 IT02 Eng. Nasser Sharif SQL Programming 0703 IT02 Eng. Amal Safi FrontEnd Programming 0704 IT03 Mr. Maher Siraj Photoshop Design 0801 IT03 Ms. Nadia Taleb Illustrator Design 0802 IT03 Mr. Maher Siraj UI Design 0803 الجدول الثالث: جدول الأقسام departments (المفتاح الأولي فيه هو DepartmentID) Head DepatementName DepartmentID Dr. Firas Abd General English EN01 Dr. Saer Raslan Advanced English EN02 Dr. Osama Najjar Information Technology IT01 Eng. Amal Safi Programming IT02 Eng. Fares Ahmad Graphic Design IT03 لربط الجداول الثلاث السابقة يُربط الجدول الأول students مع الجدول الثاني courses عبر العمود CourseID بالعبارة: students INNER JOIN courses ON students.CourseID = courses.CourseID ومن ثم يربط الجدول الناتج مع الجدول الثالث عبر العمود DepartmentID بالعبارة: INNER JOIN departments ON courses.DepartmentID = departments.DepartmentID ليصبح الاستعلام بشكله الكامل: SELECT StudentID, FirstName, Course, Lecturer, DepartmentName FROM ( (students INNER JOIN courses ON students.CourseID = courses.CourseID) INNER JOIN departments ON courses.DepartmentID = departments.DepartmentID); وتظهر النتائج بالشكل الآتي: DepartmentName Lecturer Course FirstName StudentID General English Dr. Shadi Balid English (Int)‎ Rama 1147 Information Technology Eng. Nasser Sharif Artificial Intelligence Jenan 1148 General English Dr. Shadi Balid English (Int)‎ Rahaf 1149 Information Technology Eng. Amal Safi Networks Farah 1150 Information Technology Eng. Salem Najm ICDL Rami 1151 Graphic Design Mr. Maher Siraj UI Design Aya 1152 Graphic Design Mr. Maher Siraj Photoshop Design Tasneem 1154 Information Technology Eng. Amal Safi Networks Monther 1155 Information Technology Eng. Amal Safi Networks Hiba 1156 Graphic Design Mr. Maher Siraj Photoshop Design Ibrahim 1158 Graphic Design Ms. Nadia Taleb Illustrator Design Hanin 1159 General English Dr. Reem Hadi English (Adv)‎ Loujain 1160 دمج النتائج من استعلامي SELECT في جدول واحد يمكن دمج السجلات الناتجة عن استعلامي SELECT في جدول واحد من خلال الكلمة المفتاحية UNION التي توضع بين الاستعلامين. مثال إذا كان الجدولان الآتيان موجودَين في قاعدة البيانات بالشكل الآتي: الجدول الأول: مجموعة الدورات التدريبية في المركز الأول Lecturer Course CourseID Dr. Reem Hadi English (Adv)‎ 0204 Dr. Shadi Balid English (Int)‎ 0206 Dr. Firas Abd English (TOEFL)‎ 0211 Eng. Nasser Sharif Artificial Intelligence 0604 Eng. Amal Safi Networks 0607 Eng. Salem Najm ICDL 0610 Eng. Nasser Sharif SQL Programming 0703 Eng. Amal Safi FrontEnd Programming 0704 Mr. Maher Siraj Photoshop Design 0801 Ms. Nadia Taleb Illustrator Design 0802 Mr. Maher Siraj UI Design 0803 الجدول الثاني: مجموعة الدورات التدريبية في المركز الثاني Lecturer Course CourseID Dr. Reem Hadi English (Bas)‎ 0205 Dr. Shadi Balid English (Int)‎ 0206 Dr. Firas Abd English (IELTS)‎ 0208 Eng. Nasser Sharif C# Programming 0705 Eng. Amal Safi PHP Programming 0706 Mr. Maher Siraj AfterEffects Design 0804 Ms. Nadia Taleb 3D MAX Design 0805 فيمكن عرض سجلات الجدولين ضمن جدول واحد عبر الاستعلام الآتي: SELECT CourseID, Course FROM firstCentre UNION SELECT CourseID, Course FROM secondCentre ORDER BY Course DESC; إذ دُمجت سجلات الجدولين عبر الكلمة المفتاحية UNION ورُتبت النتائج بشكل تنازليّ بحسب اسم الدورة التدريبية لتظهر النتائج الآتية: Course CourseID UI Design 0803 SQL Programming 0703 PHP Programming 0706 Photoshop Design 0801 Networks 0607 Illustrator Design 0802 ICDL 0610 FrontEnd Programming 0704 English (TOEFL)‎ 0211 English (Int)‎ 0206 English (IELTS)‎ 0208 English (Bas)‎ 0205 English (Adv)‎ 0204 C# Programming 0705 Artificial Intelligence 0604 AfterEffects Design 0804 3D MAX Design 0805 ويُلاحظ أن السجل المكرر في الجدولين لم يظهر سوى كسجل وحيد في النتائج لأن الكلمة المفتاحية UNION لا تعرض السجلات المكررة إلا بوجود الكلمة المفتاحية ALL والتي ستحدد عرض كافة السجلات متضمنةً التكرار إن وُجد، أي يصبح الاستعلام بالشكل الآتي: SELECT CourseID, Course FROM firstCentre UNION ALL SELECT CourseID, Course FROM secondCentre ORDER BY Course DESC; وستظهر نفس النتائج السابقة مع تكرار سجل الدورة التدريبية English (Int)‎. الربط الداخلي INNER JOIN يُستخدم هذا النوع من الربط ما بين جدولين (أو أكثر) وذلك لتحديد بعض السجلات من الجدول اليساري والجدول اليميني بحيث تحقق شرط الربط، وتكون له البنية العامّة الآتية: SELECT col_names FROM tbl_name1 [INNER] JOIN tbl_name2 ON col_name1 = col_name2 وكما يُلاحظ أن وجود كلمة INNER اختياريّ لأن الربط الداخلي هو الحالة الافتراضية في الربط. مثال إن كانت قاعدة بيانات أحد المراكز التعليمية تحتوي على الجداول الآتية: الجدول الأول: جدول الطلاب students (المفتاح الأولي فيه هو عمود StudentID والمفتاح الثانوي هو عمود CourseID للربط مع جدول الدورات التدريبية) RegDate CourseID LastName FirstName StudentID ‎07-JUL-2017 0206 Najjar Rama 1147 ‎08-NOV-2017 0604 Kordi Jenan 1148 ‎07-JUL-2017 0206 Bitar Rahaf 1149 ‎20-AUG-2017 0607 Taweel Farah 1150 ‎08-NOV-2017 0610 Arab Rami 1151 ‎24-OCT-2017 0803 Akkad Aya 1152 ‎08-NOV-2017 0504 Haddad Abed 1153 ‎20-AUG-2017 0801 Fares Tasneem 1154 ‎24-OCT-2017 0607 Hamsho Monther 1155 ‎30-SEP-2017 0607 Abd Allah Hiba 1156 ‎07-JUL-2017 0509 Khatib Mohammad 1157 ‎20-AUG-2017 0801 Sharif Ibrahim 1158 ‎24-OCT-2017 0802 Fehmi Hanin 1159 ‎20-AUG-2017 0204 Zein Loujain 1160 ‎08-NOV-2017 0503 Helali Ammar 1161 الجدول الثاني: جدول الدورات التدريبية courses (المفتاح الأولي فيه هو عمود CourseID والمفتاح الثانوي هو عمود DepartmentID للربط مع جدول الأقسام) CourseID Course Lecturer DepartmentID 0204 English (Adv)‎ Dr. Reem Hadi EN01 0206 English (Int)‎ Dr. Shadi Balid EN01 0211 English (TOEFL)‎ Dr. Firas Abd EN02 0604 Artificial Intelligence Eng. Nasser Sharif IT01 0607 Networks Eng. Amal Safi IT01 0610 ICDL Eng. Salem Najm IT01 0703 SQL Programming Eng. Nasser Sharif IT02 0704 FrontEnd Programming Eng. Amal Safi IT02 0801 Photoshop Design Mr. Maher Siraj IT03 0802 Illustrator Design Ms. Nadia Taleb IT03 0803 UI Design Mr. Maher Siraj IT03 الجدول الثالث: جدول الأقسام departments (المفتاح الأولي فيه هو DepartmentID) Head DepatementName DepartmentID Dr. Firas Abd General English EN01 Dr. Saer Raslan Advanced English EN02 Dr. Osama Najjar Information Technology IT01 Eng. Amal Safi Programming IT02 Eng. Fares Ahmad Graphic Design IT03 فإن تنفيذ الاستعلام الآتي: SELECT StudentID, FirstName, Course, Lecturer FROM students st INNER JOIN courses co ON st.CourseID = co.CourseID; سيُظهر السجلات من الجدول students (والذي سُمي باسم st ضمن الشيفرة) والجدول courses (والذي سُمي باسم co ضمن الشيفرة) بالربط بينهما داخليًا عبر العمود CourseID لتظهر النتائج الآتية: Lecturer Course FirstName StudentID Dr. Shadi Balid English (Int)‎ Rama 1147 Eng. Nasser Sharif Artificial Intelligence Jenan 1148 Dr. Shadi Balid English (Int)‎ Rahaf 1149 Eng. Amal Safi Networks Farah 1150 Eng. Salem Najm ICDL Rami 1151 Mr. Maher Siraj UI Design Aya 1152 Mr. Maher Siraj Photoshop Design Tasneem 1154 Eng. Amal Safi Networks Monther 1155 Eng. Amal Safi Networks Hiba 1156 Mr. Maher Siraj Photoshop Design Ibrahim 1158 Ms. Nadia Taleb Illustrator Design Hanin 1159 Dr. Reem Hadi English (Adv)‎ Loujain 1160 ويُلاحظ أنه لم تظهر كافة سجلات الطلاب إذ استُثني الطلاب الذين لديهم دورات تدريبية غير موجودة في جدول الدورات التدريبية (مثل الطالب Abed Haddad)، وكذلك لم تظهر الدورات التدريبية التي لا يوجد فيها أي طلاب مسجلين (مثل دورة SQL Programming). الربط اليساري LEFT JOIN يُستخدم هذا النوع من الربط ما بين جدولين (أو أكثر) وذلك لتحديد كافة السجلات من الجدول اليساري وبعض السجلات من الجدول اليميني التي تحقق شرط الربط، وتكون له البنية العامّة الآتية: SELECT col_names FROM tbl_name1 LEFT [OUTER] JOIN tbl_name2 ON col_name1 = col_name2 مثال إن كانت قاعدة بيانات أحد المراكز التعليمية تحتوي على الجداول الآتية: الجدول الأول: جدول الطلاب students (المفتاح الأولي فيه هو عمود StudentID والمفتاح الثانوي هو عمود CourseID للربط مع جدول الدورات التدريبية) RegDate CourseID LastName FirstName StudentID ‎07-JUL-2017 0206 Najjar Rama 1147 ‎08-NOV-2017 0604 Kordi Jenan 1148 ‎07-JUL-2017 0206 Bitar Rahaf 1149 ‎20-AUG-2017 0607 Taweel Farah 1150 08-NOV-2017 0610 Arab Rami 1151 ‎24-OCT-2017 0803 Akkad Aya 1152 ‎08-NOV-2017 0504 Haddad Abed 1153 ‎20-AUG-2017 0801 Fares Tasneem 1154 ‎24-OCT-2017 0607 Hamsho Monther 1155 ‎30-SEP-2017 0607 Abd Allah Hiba 1156 ‎07-JUL-2017 0509 Khatib Mohammad 1157 ‎20-AUG-2017 0801 Sharif Ibrahim 1158 ‎24-OCT-2017 0802 Fehmi Hanin 1159 ‎20-AUG-2017 0204 Zein Loujain 1160 ‎08-NOV-2017 0503 Helali Ammar 1161 الجدول الثاني: جدول الدورات التدريبية courses (المفتاح الأولي فيه هو عمود CourseID والمفتاح الثانوي هو عمود DepartmentID للربط مع جدول الأقسام) DepartmentID Lecturer Course CourseID EN01 Dr. Reem Hadi English (Adv)‎ 0204 EN01 Dr. Shadi Balid English (Int)‎ 0206 EN02 Dr. Firas Abd English (TOEFL)‎ 0211 IT01 Eng. Nasser Sharif Artificial Intelligence 0604 IT01 Eng. Amal Safi Networks 0607 IT01 Eng. Salem Najm ICDL 0610 IT02 Eng. Nasser Sharif SQL Programming 0703 IT02 Eng. Amal Safi FrontEnd Programming 0704 IT03 Mr. Maher Siraj Photoshop Design 0801 IT03 Ms. Nadia Taleb Illustrator Design 0802 IT03 Mr. Maher Siraj UI Design 0803 الجدول الثالث: جدول الأقسام departments (المفتاح الأولي فيه هو DepartmentID) Head DepatementName DepartmentID Dr. Firas Abd General English EN01 Dr. Saer Raslan Advanced English EN02 Dr. Osama Najjar Information Technology IT01 Eng. Amal Safi Programming IT02 Eng. Fares Ahmad Graphic Design IT03 فإن تنفيذ الاستعلام الآتي: SELECT StudentID, FirstName, Course, Lecturer FROM students st LEFT JOIN courses co ON st.CourseID = co.CourseID; سيُظهر كافة السجلات من الجدول students (والذي سُمي باسم st ضمن الشيفرة) وسجلات الجدول courses (والذي سُمي باسم co ضمن الشيفرة) المرتبطة فقط بالجدول students عبر العمود CourseID لتظهر النتائج الآتية: Lecturer Course FirstName StudentID Dr. Shadi Balid English (Int)‎ Rama 1147 Eng. Nasser Sharif Artificial Intelligence Jenan 1148 Dr. Shadi Balid English (Int)‎ Rahaf 1149 Eng. Amal Safi Networks Farah 1150 Eng. Salem Najm ICDL Rami 1151 Mr. Maher Siraj UI Design Aya 1152 NULL NULL Abed 1153 Mr. Maher Siraj Photoshop Design Tasneem 1154 Eng. Amal Safi Networks Monther 1155 Eng. Amal Safi Networks Hiba 1156 NULL NULL Mohammad 1157 Mr. Maher Siraj Photoshop Design Ibrahim 1158 Ms. Nadia Taleb Illustrator Design Hanin 1159 Dr. Reem Hadi English (Adv)‎ Loujain 1160 NULL NULL Ammar 1161 الربط اليميني RIGHT JOIN يُستخدم هذا النوع من الربط ما بين جدولين (أو أكثر) وذلك لتحديد بعض السجلات التي تحقق شرط الربط من الجدول اليساري وكافة السجلات من الجدول اليميني، وتكون له البنية العامّة الآتية: SELECT col_names FROM tbl_name1 RIGHT [OUTER] JOIN tbl_name2 ON col_name1 = col_name2 مثال إن كانت قاعدة بيانات أحد المراكز التعليمية تحتوي على الجداول الآتية: الجدول الأول: جدول الطلاب students (المفتاح الأولي فيه هو عمود StudentID والمفتاح الثانوي هو عمود CourseID للربط مع جدول الدورات التدريبية) RegDate CourseID LastName FirstName StudentID 07-JUL-2017 0206 Najjar Rama 1147 08-NOV-2017 0604 Kordi Jenan 1148 07-JUL-2017 0206 Bitar Rahaf 1149 20-AUG-2017 0607 Taweel Farah 1150 08-NOV-2017 0610 Arab Rami 1151 24-OCT-2017 0803 Akkad Aya 1152 08-NOV-2017 0504 Haddad Abed 1153 20-AUG-2017 0801 Fares Tasneem 1154 24-OCT-2017 0607 Hamsho Monther 1155 30-SEP-2017 0607 Abd Allah Hiba 1156 07-JUL-2017 0509 Khatib Mohammad 1157 20-AUG-2017 0801 Sharif Ibrahim 1158 24-OCT-2017 0802 Fehmi Hanin 1159 20-AUG-2017 0204 Zein Loujain 1160 08-NOV-2017 0503 Helali Ammar 1161 الجدول الثاني: جدول الدورات التدريبية courses (المفتاح الأولي فيه هو عمود CourseID والمفتاح الثانوي هو عمود DepartmentID للربط مع جدول الأقسام) DepartmentID Lecturer Course CourseID EN01 Dr. Reem Hadi English (Adv)‎ 0204 EN01 Dr. Shadi Balid English (Int)‎ 0206 EN02 Dr. Firas Abd English (TOEFL)‎ 0211 IT01 Eng. Nasser Sharif Artificial Intelligence 0604 IT01 Eng. Amal Safi Networks 0607 IT01 Eng. Salem Najm ICDL 0610 IT02 Eng. Nasser Sharif SQL Programming 0703 IT02 Eng. Amal Safi FrontEnd Programming 0704 IT03 Mr. Maher Siraj Photoshop Design 0801 IT03 Ms. Nadia Taleb Illustrator Design 0802 IT03 Mr. Maher Siraj UI Design 0803 الجدول الثالث: جدول الأقسام departments (المفتاح الأولي فيه هو DepartmentID) Head DepatementName DepartmentID Dr. Firas Abd General English EN01 Dr. Saer Raslan Advanced English EN02 Dr. Osama Najjar Information Technology IT01 Eng. Amal Safi Programming IT02 Eng. Fares Ahmad Graphic Design IT03 فإن تنفيذ الاستعلام الآتي: SELECT StudentID, FirstName, Course, Lecturer FROM students st RIGHT JOIN courses co ON st.CourseID = co.CourseID; سيُظهر سجلات الجدول students (والذي سُمي باسم st ضمن الشيفرة) المرتبطة فقط بالجدول courses (والذي سُمي باسم co ضمن الشيفرة) عبر العمود CourseID، إضافةً إلى كافة السجلات الموجودة في جدول courses سواء أكان لها ارتباط بجدول students أو لم يكن، لتظهر النتائج الآتية: Lecturer Course FirstName StudentID Dr. Shadi Balid English (Int)‎ Rama 1147 Eng. Nasser Sharif Artificial Intelligence Jenan 1148 Dr. Shadi Balid English (Int)‎ Rahaf 1149 Eng. Amal Safi Networks Farah 1150 Eng. Salem Najm ICDL Rami 1151 Mr. Maher Siraj UI Design Aya 1152 Mr. Maher Siraj Photoshop Design Tasneem 1154 Eng. Amal Safi Networks Monther 1155 Eng. Amal Safi Networks Hiba 1156 Mr. Maher Siraj Photoshop Design Ibrahim 1158 Ms. Nadia Taleb Illustrator Design Hanin 1159 Dr. Reem Hadi English (Adv) Loujain 1160 Dr. Firas Abd English (TOEFL) NULL NULL Eng. Nasser Sharif SQL Programming NULL NULL Eng. Amal Safi FrontEnd Programming NULL NULL الربط التام FULL JOIN يُستخدم هذا النوع من الربط ما بين جدولين (أو أكثر) وذلك لتحديد كافة السجلات من الجدولين اليساري واليميني بغض النظر عن تحقيقها للشرط، وتكون له البنية العامّة الآتية: SELECT col_names FROM tbl_name1 FULL JOIN tbl_name2 ON col_name1 = col_name2 مثال إن كانت قاعدة بيانات أحد المراكز التعليمية تحتوي على الجداول الآتية: الجدول الأول: جدول الطلاب students (المفتاح الأولي فيه هو عمود StudentID والمفتاح الثانوي هو عمود CourseID للربط مع جدول الدورات التدريبية) RegDate CourseID LastName FirstName StudentID ‎07-JUL-2017‎ 0206 Najjar Rama 1147 ‎08-NOV-2017 0604 Kordi Jenan 1148 ‎07-JUL-2017 0206 Bitar Rahaf 1149 ‎20-AUG-2017 0607 Taweel Farah 1150 ‎08-NOV-2017 0610 Arab Rami 1151 ‎24-OCT-2017 0803 Akkad Aya 1152 ‎08-NOV-2017 0504 Haddad Abed 1153 ‎20-AUG-2017 0801 Fares Tasneem 1154 ‎24-OCT-2017 0607 Hamsho Monther 1155 ‎30-SEP-2017 0607 Abd Allah Hiba 1156 ‎07-JUL-2017 0509 Khatib Mohammad 1157 ‎20-AUG-2017 0801 Sharif Ibrahim 1158 ‎24-OCT-2017 0802 Fehmi Hanin 1159 ‎20-AUG-2017 0204 Zein Loujain 1160 ‎08-NOV-2017 0503 Helali Ammar 1161 الجدول الثاني: جدول الدورات التدريبية courses (المفتاح الأولي فيه هو عمود CourseID والمفتاح الثانوي هو عمود DepartmentID للربط مع جدول الأقسام) DepartmentID Lecturer Course CourseID EN01 Dr. Reem Hadi English (Adv)‎ 0204 EN01 Dr. Shadi Balid English (Int)‎ 0206 EN02 Dr. Firas Abd English (TOEFL)‎ 0211 IT01 Eng. Nasser Sharif Artificial Intelligence 0604 IT01 Eng. Amal Safi Networks 0607 IT01 Eng. Salem Najm ICDL 0610 IT02 Eng. Nasser Sharif SQL Programming 0703 IT02 Eng. Amal Safi FrontEnd Programming 0704 IT03 Mr. Maher Siraj Photoshop Design 0801 IT03 Ms. Nadia Taleb Illustrator Design 0802 IT03 Mr. Maher Siraj UI Design 0803 الجدول الثالث: جدول الأقسام departments (المفتاح الأولي فيه هو DepartmentID) Head DepatementName DepartmentID Dr. Firas Abd General English EN01 Dr. Saer Raslan Advanced English EN02 Dr. Osama Najjar Information Technology IT01 Eng. Amal Safi Programming IT02 Eng. Fares Ahmad Graphic Design IT03 فإن تنفيذ الاستعلام الآتي: SELECT StudentID, FirstName, Course, Lecturer FROM students st FULL JOIN courses co ON st.CourseID = co.CourseID; سيُظهر كافة السجلات من الجدول students (والذي سُمي باسم st ضمن الشيفرة) وكافة سجلات الجدول courses (والذي سُمي باسم co ضمن الشيفرة) سواءً كانت مرتبطة عبر العمود CourseID أو لم تكن، لتظهر النتائج الآتية: Lecturer Course FirstName StudentID Dr. Shadi Balid English (Int)‎ Rama 1147 Eng. Nasser Sharif Artificial Intelligence Jenan 1148 Dr. Shadi Balid English (Int)‎ Rahaf 1149 Eng. Amal Safi Networks Farah 1150 Eng. Salem Najm ICDL Rami 1151 Mr. Maher Siraj UI Design Aya 1152 NULL NULL Abed 1153 Mr. Maher Siraj Photoshop Design Tasneem 1154 Eng. Amal Safi Networks Monther 1155 Eng. Amal Safi Networks Hiba 1156 NULL NULL Mohammad 1157 Mr. Maher Siraj Photoshop Design Ibrahim 1158 Ms. Nadia Taleb Illustrator Design Hanin 1159 Dr. Reem Hadi English (Adv)‎ Loujain 1160 NULL NULL Ammar 1161 Dr. Firas Abd English (TOEFL)‎ NULL NULL Eng. Nasser Sharif SQL Programming NULL NULL Eng. Amal Safi FrontEnd Programming NULL NULL المعاملات المعاملات Operators في SQL محتويات · 1المعاملات الرياضية Arithmetic Operators o 1.1مثال o 1.2ملاحظة · 2المعاملات الثنائية Bitwise Operators o 2.1أمثلة · 3معاملات المقارنة Comparison Operators o 3.1مثال · 4المعاملات المركبة مع الإسناد Compound Operators · 5المعاملات المنطقية Logical Operators · 6أولوية المعاملات o 6.1أولوية المعاملات في محرك SQL Server o 6.2أولوية المعاملات في محرك SQLite o 6.3أولوية المعاملات في محرك Oracle o 6.4أولوية المعاملات في محرك MySQL o 6.5أولوية المعاملات في محرك Postgresql o 6.6مثال · 7التوافقية · 8مصادر المعاملات الرياضية Arithmetic Operators تستخدم لإجراء العمليات الحسابية على البيانات العددية في الجداول، وهي: المعامل المهمة + الجمع - الطرح * الضرب / القسمة % باقي القسمة ويضاف إليها المعامل ^ في محرك PostgreSQL للقيام بعملية الرفع إلى قوة. مثال إن كان الجدول الآتي items موجودًا في قاعدة البيانات: DiscountPercent No Price ItemID 20 2 25 157 10 2 5 203 30 3 10 109 فيمكن حساب قيمة الشراء النهائية من خلال إجراء العملية الحسابية وجمع النتائج باستخدام الدالة التجميعية SUM()‎ كما في الاستعلام الآتي: SELECT SUM((Price * No) - (Price * No * DiscountPercent * 0.01)) AS FinalBill From items; لتظهر النتيجة الآتية: FinalBill 70 ملاحظة يمكن استخدام المعامل + للربط ما بين السلاسل النصية فمثلًا في الاستعلام الآتي: SELECT (FirstName + LastName) AS FullName FROM students; يقوم معامل + بالربط ما بين العمودين FirstName و LastName وعرضهما في عمود واحد باسم FullName. وهذا مختلف في محركات Oracle و SQLite و PostgreSQL إذ يستخدم المعامل || للربط ما بين السلاسل النصية بدلًا من +، أما في محرك MySQL فإن المعامل || يستخدم للعملية المنطقية OR. المعاملات الثنائية Bitwise Operators تستخدم للقيام بالعمليات الثنائية على البيانات العددية الصحيحة، إذ تُحوّل القيم الصحيحة إلى خانات ثنائية bits توافق القيم لتُجرى عليها العمليات ثم تُحول النتيجة إلى قيمة صحيحة من جديد، وهي: المعامل المهمة & AND (تصبح الخانة بقيمة 1 إن كانت الخانتان المتقابلتان بقيمة 1) | OR (تصبح الخانة بقيمة 1 إن كانت الخانتان المتقابلتان أو إحداهما بقيمة 1) ^ XOR (تصبح الخانة بقيمة 1 إن كانت خانة واحدة فقط من الخانتين المتقابلتين بقيمة 1) ~ NOT (تعكس حالة الخانة من 0 إلى 1 أو بالعكس) ويضاف لها في محركات MySQL و SQLite و Postgresql المعاملَين: · المعامل ‎<<‎ للإزاحة نحو اليسار بعدد الخانات المحدد بالعدد بعد المعامل. · المعامل ‎>>‎ للإزاحة نحو اليمين بعدد الخانات المحدد بالعدد بعد المعامل. أما في محرك PostgreSQL فإن المعامل # يقوم بالعملية الثنائية XOR للخانات. أمثلة لدى تنفيذ العمليات السابقة على العددين 110 (بالتمثيل الثنائي 01101110) و 96 (بالتمثيل الثنائي 01100000) يعطي النتائج الآتية: AND 01101110 01100000 ------------- 01100000 OR 01101110 01100000 ------------- 01101110 XOR 01101110 01100000 ------------- 00001110 NOT 01101110 ------------- 10010001 معاملات المقارنة Comparison Operators تستخدم للمقارنة ما بين قيمتين من أي نوع من أنواع البيانات باستثناء السلاسل النصية، وتكون قيمة النتيجة قيمة بوليانية إما TRUE أو FALSE، وهي: المعامل المهمة = يساوي < أصغر من > أكبر من <= أصغر من أو يساوي >= أكبر من أو يساوي <> لا يساوي مثال ليكن الجدول الآتي students موجودًا في قاعدة البيانات: RegDate CourseID LastName FirstName StudentID 07-JUL-2017 0206 Najjar Rama 1147 08-NOV-2017 0604 Kordi Jenan 1148 07-JUL-2017 0206 Bitar Rahaf 1149 20-AUG-2017 0607 Taweel Farah 1150 08-NOV-2017 0610 Arab Rami 1151 24-OCT-2017 0803 Akkad Aya 1152 إن تنفيذ الاستعلام الآتي: SELECT * FROM students WHERE StudentID >= 1150 AND FirstName <> Rami; سيجلب السجلات التي يكون الرقم التسلسلي فيها أكبر من أو يساوي القيمة 1150 باستثناء السجلات التي يكون فيها الاسم الأول للطالب Rami، لتظهر النتائج الآتية: RegDate CourseID LastName FirstName StudentID 20-AUG-2017 0607 Taweel Farah 1150 24-OCT-2017 0803 Akkad Aya 1152 المعاملات المركبة مع الإسناد Compound Operators تستخدم لإجراء العمليات على القيمة المخزنة بالمتحول وإعادة تخزين القيمة الجديدة بالمتحول نفسه، وهي: المعامل المهمة += الجمع والإسناد -= الطرح والإسناد *= الضرب والإسناد /= القسمة والإسناد %= باقي القسمة والإسناد &= العملية الثنائية AND والإسناد |= العملية الثنائية OR والإسناد ^= العملية الثنائية XOR والإسناد المعاملات المنطقية Logical Operators وتشمل: · AND و OR و NOT · BETWEEN و IN · ALL و ANY و SOME · UNION و INTERSECT و EXCEPT · LIKE · EXISTS · IS NULL · ON · UNIQUE أولوية المعاملات عند وجود أكثر من معامل معًا في نفس العبارة تُحدِّد أولويةُ المعاملات الترتيبَ الذي تتم العمليات وفقًا له، وعند وجود أكثر من معامل ضمن نفس مستوى الأولوية تنفذ العمليات بحسب ورودها بدءًا من اليسار إلى اليمين. أولوية المعاملات في محرك SQL Server مستوى الأولوية المعاملات 1 المعامل الثنائي للنفي ~ 2 الضرب * والقسمة / وباقي القسمة % 3 + (لتحديد قيمة موجبة أو الجمع أو ربط السلاسل النصية) - (لتحديد قيمة سالبة أو الطرح) المعاملات الثنائية & و | و ^ 4 معاملات المقارنة = و > و < و ‎>=‎ و ‎<=‎ و <> 5 NOT 6 AND 7 ALL, ANY, BETWEEN, IN, LIKE, OR, SOME 8 معامل الإسناد = أولوية المعاملات في محرك SQLite مستوى الأولوية المعاملات 1 معامل الربط || 2 الضرب * والقسمة / وباقي القسمة % 3 + (الجمع) - (الطرح) 4 المعاملات الثنائية & و | معاملات الإزاحة << و >> 5 معاملات المقارنة = و > و < و ‎>=‎ و ‎<=‎ 6 معاملات المقارنة = و <> IN, LIKE 7 AND 8 OR أولوية المعاملات في محرك Oracle مستوى الأولوية المعاملات 1 المعاملات الأحادية + و - (لتحديد إشارة العدد الموجب أو السالب) 2 الضرب * والقسمة / 3 + (الجمع) - (الطرح) معامل ربط السلاسل النصية 4 كافة معاملات المقارنة 5 NOT 6 AND 7 OR أولوية المعاملات في محرك MySQL مستوى الأولوية المعاملات 1 المعاملات الأحادية + و - (لتحديد إشارة العدد الموجب أو السالب) 2 المعامل الثنائي ^ 3 الضرب * والقسمة / وباقي القسمة % 4 + (الجمع) و - (الطرح) 5 معاملات الإزاحة << و >> 6 المعامل الثنائي & 7 المعامل الثنائي | 8 معاملات المقارنة = و > و < و ‎>=‎ و ‎<=‎ و <> المعاملات IS, LIKE, IN 9 BETWEEN, CASE, WHEN, THEN, ELSE 10 NOT 11 AND 12 XOR 13 OR 14 معامل الإسناد = أولوية المعاملات في محرك Postgresql مستوى الأولوية المعاملات 1 المعامل الأحادي - (لتحديد إشارة العدد السالب) 2 المعامل ^ للرفع إلى قوة 3 الضرب * والقسمة / وباقي القسمة % 4 + (الجمع) و - (الطرح) 5 IS 6 IN 7 BETWEEN 8 LIKE 9 معاملات المقارنة 10 = معامل الإسناد والتساوي 11 NOT 12 AND 13 OR مثال في عبارة WHERE الآتية: WHERE salary-tax*0.5 BETWEEN 500 AND 550 ستُنفذ عملية الضرب * ثم الطرح - ثم تحديد المجال للقيمة الناتجة عبر المعامل BETWEEN. DISTINCT تستخدم العبارة DISTINCT للحصول على قيمٍ فريدةٍ غير مكررة، وغالبًا ما تستخدم في استعلام SELECT للحصول على سجلات لا تتكرر القيم فيما بينها، إذ يصبح الاستعلام بالشكل الآتي: SELECT DISTINCT columns FROM tbl; محتويات · 1مثال · 2الحصول على سجل واحد فقط o 2.1مثال · 3التوافقية · 4مصادر مثال إن كان الجدول الآتي patients موجودًا في قاعدة البيانات: Doctor Section Age Patient PatientID Nasser Cardiology 76 Salem 1029 Abd Allah Neurology 17 Hasan 896 Reem Maternity 23 Nadine 964 Fateh Cardiology 65 Rami 1070 Kareem Neurology 19 Abd al-Rahim 1150 Hadi Critical Care 65 Roushd 1097 Reem Maternity 27 Sana 1034 Abd Allah Neurology 49 Helen 963 Hadi Critical Care 58 Ahmad 1154 Kareem Neurology 40 Maher 1069 Amnah Maternity 30 Zeina 1028 Fateh Cardiology 55 Sarah 1180 Hadi Critical Care 23 Fadi 1076 فللحصول على أسماء الأقسام الخاصة بالمرضى Section دون أي تكرار يُستخدَم الاستعلام الآتي: SELECT DISTINCT Section FROM patients; وتظهر النتائج بالشكل الآتي: Section Cardiology Neurology Maternity Critical Care الحصول على سجل واحد فقط تُمكن الاستفادة من عبارة DISTINCT للحصول على سجلٍ واحدٍ فقط لكل مجموعةٍ من السجلات التي تحتوي نفس القيمة، ولضمان الحصول على السجل المطلوب تستخدم عبارة ORDER BY في الاستعلام، ليصبح بالشكل: SELECT DISTINCT ON (col) cols FROM tbl ORDER BY cols; مثال إن كان الجدول weather الآتي موجودًا في قاعدة البيانات: Report Time Location Mostly Cloudy 4:30 Aleppo Showers 4:30 Damascus Partly Cloudy 13:00 Damascus Showers 5:00 Aleppo Partly Cloudy 17:00 Aleppo Sunny 15:00 Damascus Showers 12:30 Aleppo عند تنفيذ الاستعلام الآتي: SELECT DISTINCT ON (Location) Location, Time, Report FROM weather ORDER BY Location, Time DESC; تُجلب السجلات الأحدث (اعتمادًا على الترتيب الزمني التنازليّ) لكل موقعٍ دون تكرار أيّ منها، وتظهر النتائج: Report Time Location Partly Cloudy 17:00 Aleppo Sunny 15:00 Damascus المعامل EXISTS < يستخدم المعامل EXISTS للتأكد من وجود سجلات ناتجة عن الاستعلام الفرعي المستخدم في الاستعلام الرئيسي. محتويات · 1مثال · 2المعامل NOT EXISTS · 3مثال · 4التوافقية · 5مصادر مثال إن كان في قاعدة البيانات الجدولان الآتيان: الجدول الأول: جدول الطلاب students RegDate CourseID LastName FirstName StudentID ‎07-JUL-2017‎ 0206 Najjar Rama 1147 ‎08-NOV-2017‎ 0604 Kordi Jenan 1148 ‎07-JUL-2017 0206 Bitar Rahaf 1149 ‎20-AUG-2017 0607 Taweel Farah 1150 ‎08-NOV-2017 0610 Arab Rami 1151 ‎24-OCT-2017 0803 Akkad Aya 1152 ‎08-NOV-2017 0504 Haddad Abed 1153 ‎20-AUG-2017 0801 Fares Tasneem 1154 ‎24-OCT-2017 0607 Hamsho Monther 1155 ‎30-SEP-2017 0607 Abd Allah Hiba 1156 الجدول الثاني: جدول الدورات التدريبية courses DepartmentID Lecturer Course CourseID EN01 Dr. Reem Hadi English (Adv) 0204 EN01 Dr. Shadi Balid English (Int) 0206 EN02 Dr. Firas Abd English (TOEFL) 0211 IT01 Eng. Nasser Sharif Artificial Intelligence 0604 IT01 Eng. Amal Safi Networks 0607 IT01 Eng. Salem Najm ICDL 0610 IT02 Eng. Nasser Sharif SQL Programming 0703 IT02 Eng. Amal Safi FrontEnd Programming 0704 IT03 Mr. Maher Siraj Photoshop Design 0801 IT03 Ms. Nadia Taleb Illustrator Design 0802 IT03 Mr. Maher Siraj UI Design 0803 فإن الاستعلام الآتي: SELECT Course FROM courses WHERE EXISTS (SELECT * FROM students WHERE CourseID = courses.CourseID); يعرض أسماء الدورات التدريبية التي يوجد فيها طالب أو أكثر دون أيّ من الدورات الخالية، أي تظهر الدورات الآتية: Course English (Int) Artificial Intelligence Networks ICDL Photoshop Design UI Design المعامل NOT EXISTS يعمل بمهمة معاكسة للمعامل EXISTS أي للتأكد من عدم وجود سجلات ناتجة عن الاستعلام الفرعي المستخدم في الاستعلام الرئيسي. مثال إن تنفيذ الاستعلام الآتي: SELECT Course FROM courses WHERE NOT EXISTS (SELECT * FROM students WHERE CourseID = courses.CourseID); سيعرِض أسماء الدورات التدريبية التي لم يُسجّل فيها أي طالب، لتظهر النتائج: Course English (Adv)‎ English (TOEFL)‎ SQL Programming FrontEnd Programming Illustrator Design المعامل LIKE يستخدم هذا المعامل لتحديد نمط معين للسلسلة النصية يُحدد الشرط وفقًا له، ويوضح الجدول الآتي الرموز المستخدمة في صياغة هذا النمط: الرمز استخدامه % أي سلسلة نصّية خالية أو بمحرف أو أكثر _ محرف وحيد مثال إن كان الجدول الآتي customers في قاعدة البيانات: Bill OrderID FullName CustomerID 160 0291 Abd al-Salam Hadi 1156 170 0302 Ahmad Mostafa 1157 210 0203 Reem Hammad 1158 350 0294 Abd Allah Sadiq 1159 185 0255 Raghad al-Hamdan 1160 165 0276 Abd al-Razzaq Salloum 1161 175 0247 Hussam Siraj 1162 180 0208 Hiba Maktabi 1163 170 0219 Abd al-Rahman Rida 1164 220 0210 Abd al-Qader Khalil 1165 إن تنفيذ الاستعلام الآتي: SELECT * FROM customers WHERE FullName LIKE 'H%' OR (FullName LIKE 'A%' AND FullName NOT LIKE '_b_%'); حيث أن : أي سلسلة نصية في بدايتها H 'H%' أي سلسلة نصية في بدايتها A 'A%' أي سلسلة نصية في بدايتها على الأقل ثلاث محارف والمحرف الثاني حصراً b '%_b_' سيؤدي لعرض كافة النتائج للزبائن الذين تبدأ أسماؤهم بحرف H أو بحرف A ولكن دون أن يكون الحرف الثاني b ويليه حرف ثم أي تسلسل للمحارف، وستظهر النتائج: Bill OrderID FullName CustomerID 170 0302 Ahmad Mostafa 1157 175 0247 Hussam Siraj 1162 180 0208 Hiba Maktabi 1163 المعاملات المنطقية في SQL غالبًا ما تستخدم المعاملات المنطقية (AND و OR و NOT) في عبارة WHERE للربط ما بين الشروط أو نفيها، إذ يستخدم المعامل AND للربط ما بين الشروط للتأكد من تحققها جميعًا، أما معامل OR فيستخدم للربط ما بين الشروط للتأكد من تحقّق شرطٍ أو أكثر من بينها، أما NOT فيستخدم بغرض النفي، وتكون قيمة التعبير النهائية منطقية (Boolean) إما TRUE أو FALSE. ويُضاف لها معامل XOR في محرك MySQL والذي يتحقق من تحقّق شرطٍ واحدٍ فقط دون الشروط الأخرى. مثال إن كان الجدول الآتي cars موجودًا في قاعدة البيانات: Colour Price Year Company Model CarID White 22,500 2018 KIA Optima 05081 Red 25,995 2017 KIA Optima Hybrid 05082 Red 31,900 2018 KIA Stinger 05083 Black 31,990 2017 KIA Cadenza 05084 Blue 23,240 2018 KIA Niro 05085 Grey 14,200 2018 KIA Rio 5-Door 05086 Blue 18,200 2018 KIA Forte5 05087 Blue 32,250 2017 KIA Soul EV 05088 إن تنفيذ الاستعلام الآتي: SELECT * FROM cars WHERE Year=2018 AND NOT (Colour = ‘Red’ OR Colour = ‘Blue’); سيُظهِر كافة السيارات التي تكون فيها قيمة السنة 2018 وأي قيمة للون باستثناء القيمتين Red أو Blue، وستظهر النتائج الآتية: Colour Price Year Company Model CarID White 22,500 2018 KIA Optima 05081 Grey 14,200 2018 KIA Rio 5-Door 05086 تحديد مجال أو عدد محدّد من القيم في SQL محتويات · 1معامل IN o 1.1مثال · 2معامل BETWEEN o 2.1مثال · 3التوافقية · 4مصادر معامل IN يستخدم لتحديد عددٍ معيّنٍ من القيم المحتملة لأحد حقول البيانات. مثال إن كان الجدولان الآتيان موجوديَن في قاعدة البيانات: الجدول الأول: جدول السيارات cars Colour Price Year Company Model CarID White 22,500 2018 KIA Optima 05081 Red 25,995 2017 KIA Optima Hybrid 05082 Red 31,900 2018 KIA Stinger 05083 Black 31,990 2017 KIA Cadenza 05084 Blue 23,240 2018 KIA Niro 05085 Grey 14,200 2018 KIA Rio 5-Door 05086 Blue 18,200 2018 KIA Forte5 05087 الجدول الثاني: جدول الزبائن customers Remaining CarID Name CustomerID 19,500 05081 Kareem al-Hamdan 0158 17,500 05081 Rasha Mostafa 0160 10,200 05087 Jaber Hammad 0161 19,990 05084 Wessam Fattah 0162 إن تنفيذ الاستعلام الآتي: SELECT * FROM cars WHERE Colour IN ( 'Red' , 'Black', 'White'); سيُظهِر كافة السيارات التي تكون فيها قيمة اللون إحدى القيم Red أو Black أو White، وستظهر النتائج الآتية: Colour Price Year Company Model CarID White 22,500 2018 KIA Optima 05081 Red 25,995 2017 KIA Optima Hybrid 05082 Red 31,900 2018 KIA Stinger 05083 Black 31,990 2017 KIA Cadenza 05084 لمعرفة السيارات التي لم تُشترَ من قبل أيّ من الزبائن يمكن استخدام الاستعلام الآتي: SELECT * FROM cars WHERE CarID NOT IN( SELECT CarID FROM customers ); وذلك اعتمادًا على مفهوم الاستعلام الفرعي، لتظهر النتائج الآتية: Colour Price Year Model Company CarID Red 25,995 2017 Optima Hybrid KIA 05082 Red 31,900 2018 Stinger KIA 05083 Blue 23,240 2018 Niro KIA 05085 Grey 14,200 2018 Rio 5-Door KIA 05086 معامل BETWEEN يستخدم لتحديد قيمتي البداية والنهاية لمجال من القيم، ويستخدم معه المعامل AND للوصل ما بين القيمتين. مثال لِعرض كافة السيارات التي يقع رقمها التسلسلي في المجال ما بين القيمتين 5081 و 5084 يصبح الاستعلام بالشكل الآتي: SELECT * FROM cars WHERE CarID BETWEEN 5081 AND 5084; لتظهر النتائج: Colour Price Year Model Company CarID White 22,500 2018 Optima KIA 05081 Red 25,995 2017 Optima Hybrid KIA 05082 Red 31,900 2018 Stinger KIA 05083 Black 31,990 2017 Cadenza KIA 05084 معاملات الربط بين نتائج الاستعلامات في SQL < تستخدم لدمج نتائج عدد من الاستعلامات وفق ثلاثة معاملات: الضم UNION: وهي عملية احتواء نتائج كافة الاستعلامات التي يربط بينها المعامل UNION دون أي تكرار في السجلات. التقاطع INTERSECT: عملية تقاطع النتائج ما بين الاستعلامات، أي إظهار النتائج المشتركة فقط ما بين الاستعلامات التي يربط بينها المعامل INTERSECT. الاستثناء EXCEPT: عملية استثناء نتائج الاستعلام الذي يلي المعامل EXCEPT، وتختلف الكلمة المفتاحية لهذا المعامل في محرك Oracle إذ هي MINUS بدلًا من EXCEPT. انظر إلى مخططات فن Venn Diagrams لرسومات توضيحية. محتويات · 1مثال · 2عرض السجلات المكررة UNION ALL o 2.1مثال · 3التوافقية · 4مصادر مثال إن كان الجدول الآتي patients موجودًا في قاعدة البيانات: Doctor Section Age Patient PatientID Nasser Cardiology 76 Salem 1029 Abd Allah Neurology 17 Hasan 896 Reem Maternity 23 Nadine 964 Fateh Cardiology 65 Rami 1070 Kareem Neurology 19 Abd al-Rahim 1150 Hadi Critical Care 65 Roushd 1097 Reem Maternity 27 Sana 1034 Abd Allah Neurology 49 Helen 963 Hadi Critical Care 58 Ahmad 1154 Kareem Neurology 40 Maher 1069 Amnah Maternity 30 Zeina 1028 إن كان الاستعلام الآتي: SELECT * FROM patients WHERE Age<45 UNION SELECT * FROM patients WHERE Doctor='Abd Allah'; فإن المعامل UNION يربط نتائج الاستعلامين ليشمل السجلات الواردة في كليهما أي ستظهر السجلات التي عمر المريض فيها أقل من 45 سنة والسجلات التي اسم الطبيب فيها هو Abd Allah، لتظهر النتائج الآتية: Doctor Section Age Patient PatientID Abd Allah Neurology 17 Hasan 896 Reem Maternity 23 Nadine 964 Kareem Neurology 19 Abd al-Rahim 1150 Reem Maternity 27 Sana 1034 Abd Allah Neurology 49 Helen 963 Kareem Neurology 40 Maher 1069 Amnah Maternity 30 Zeina 1028 أما في الاستعلام الآتي: SELECT * FROM patients WHERE Age<45 INTERSECT SELECT * FROM patients WHERE Doctor='Abd Allah'; فإن المعامل INTERSECT يُبقي السجلات المشتركة ما بين الاستعلامين فقط ولا يظهر سواها، تظهر النتائج الآتية: Doctor Section Age Patient PatientID Abd Allah Neurology 17 Hasan 896 أما في الاستعلام الآتي: SELECT * FROM patients WHERE Age<45 EXCEPT -- MINUS in Oracle DB SELECT * FROM patients WHERE Doctor='Abd Allah'; فتظهر سجلات الاستعلام الأول من بعد استثناء سجلات الاستعلام الثاني منها أي سيُحذف منها كل سجل فيه اسم الطبيب Abd Allah ، لتظهر النتائج: Doctor Section Age Patient PatientID Reem Maternity 23 Nadine 964 Kareem Neurology 19 Abd al-Rahim 1150 Reem Maternity 27 Sana 1034 Kareem Neurology 40 Maher 1069 Amnah Maternity 30 Zeina 1028 عرض السجلات المكررة UNION ALL تستخدم الكلمة المفتاحية ALL لضمان عرض السجلات بتكرارها دون حذفه. مثال ليكن لدينا الجدولان الآتيان في قاعدة البيانات: الجدول الأول: المدرسون teachers Course Name TeacherID English (Adv)‎ Dr. Reem Hadi 1024 Artificial Intelligence Eng. Nasser Sharif 1025 Photoshop Design Mr. Maher Siraj 1026 الجدول الثاني: الطلاب students Course Name StudentID Photoshop Design Aya Akkad 820 Networks Hiba Abd Allah 821 SQL Programming Ammar Helali 822 Artificial Intelligence Loujain Zein 823 إن تنفيذ الاستعلام الآتي: SELECT Course FROM teachers UNION ALL SELECT Course FROM students ORDER BY Course; سيؤدي لظهور أسماء الدورات التدريبية دون حذف أي تكرار فيها كما يلي: Course Artificial Intelligence Artificial Intelligence English (Adv)‎ Networks Photoshop Design Photoshop Design SQL Programming أما بحذف الكلمة المفتاحية ALL من الاستعلام، أي بالشكل: SELECT Course FROM teachers UNION ALL SELECT Course FROM students ORDER BY Course; سيؤدي لحذف النتائج المكررة لتصبح بالشكل: Course Artificial Intelligence English (Adv)‎ Networks Photoshop Design SQL Programming معاملات المقارنة مع نتائج الاستعلام الفرعي < تستخدم المعاملات SOME و ANY و ALL بهدف المقارنة مع القيم الناتجة (لعمودٍ واحدٍ) عن أحد الاستعلامات الفرعية، وستُذكر تباعًا. محتويات · 1معامل ANY · 2معامل SOME · 3معامل ALL · 4مثال · 5التوافقية · 6مصادر معامل ANY إذ تعيد المقارنة قيمة TRUE في حال تطابق التعبير مع قيمة أيّ من السجلات الناتجة عن الاستعلام الفرعي وقيمة FALSE في حال عدم وجود أي نتيجة مطابقة. معامل SOME إذ تعيد المقارنة قيمة TRUE في حال وجود بعض القيم في السجلات الناتجة عن الاستعلام الفرعي والمطابقة لقيمة التعبير الذي تُقارن معه، وهي بهذا مماثلة لنتيجة المعامل ANY. معامل ALL إذ تعيد المقارنة قيمة TRUE في حال تطابق التعبير مع كل قيمة موجودة في السجلات الناتجة عن الاستعلام الفرعي وقيمة FALSE في حال عدم وجود نتيجة مخالفة واحدة على الأقل. مثال ليكن الجدولان الآتيان موجودان في قاعدة البيانات: الجدول الأول boys: والذي يعبّر عن أداء الفتيان في أحد الامتحانات Mark Name StudentID 97 Mohammad 127 59 Hasan 128 72 Ayham 129 63 Kareem 130 88 Yamen 131 76 Ahmad 132 الجدول الثاني girls: والذي يعبّر عن أداء الفتيات في نفس الامتحان السابق Mark Name StudentID 76 Sarah 133 82 Rama 134 95 Zeina 135 99 Aalaa 136 63 Farah 137 79 Aya 138 إن تنفيذ الاستعلام الآتي: SELECT Name, Mark FROM girls WHERE mark = ANY (SELECT mark FROM boys); سيعرض الاسم والنتيجة للفتيات اللواتي حصلن على علامات متماثلة مع أيّ من العلامات الناتجة عن الاستعلام الفرعي (علامات السجلات الموجودة في جدول الفتيان)، لتظهر النتيجة الآتية: Mark Name 76 Sarah 63 Farah وإن تنفيذ الاستعلام الآتي: SELECT Name, Mark FROM girls WHERE mark > ALL (SELECT mark FROM boys); سيعرض الاسم والنتيجة للطالبة التي حصلت على العلامة الأعلى من كافة العلامات الناتجة عن الاستعلام الفرعي (علامات السجلات الموجودة في جدول الفتيان)، لتظهر النتيجة الآتية: Mark Name 99 Aalaa بنى التحكم الاختبار الشرطي IF في SQL < تستخدم صيغة IF لاختبار شرط معين للتأكّد من تحقّقه أو عدم تحقّقه وإجراء ما يتناسب مع ذلك، وتكون البنية العامة لها بالشكل الآتي: IF condition THEN statements [ ELSEIF condition THEN statements [ ELSEIF condition THEN statements ...]] [ ELSE statements ] END IF; إذ تعبّر الكلمة condition عن الشرط المُختبَر، وكلمة statements عن التعليمات التي ستُجرى أو قد تكون تعابير بدلًا من التعليمات. ويلاحظ في محركي PostgreSQL و Oracle أن الكلمة المفتاحية ELSEIF تصبح ELSIF، وفي محرك SQL Server فهي كلمتان منفصلتان أيّ ELSE IF، أما في محرك SQLite فلا يوجد شرط IF ويُستعاض عنه بشرط CASE. مثال ليكن الجدول rivers الآتي موجودًا في قاعدة البيانات: Continent Outflow LengthMiles LengthKm River Serial South America Atlantic Ocean 4345 6992 Amazon 1 Africa Mediterranean 4258 6853 Nile 2 North America Gulf of Mexico 3902 6275 Mississippi 3 Asia Bohai Sea 3395 5464 Yellow River 4 Africa Atlantic Ocean 2922 4700 Congo 5 Asia Laptev Sea 2736 4400 Lena 6 Africa Gulf of Guinea 2611 4200 Niger 7 Europe Caspian Sea 2266 3645 Volga 8 Asia Andaman Sea 1901 3060 Salween 9 إن تنفيذ استعلام SELECT الآتي: SELECT Name, Length = IF LengthKm>5000 THEN 'Long' ELSEIF LengthKm>3500 THEN 'Medium' ELSE 'Short' END FROM rivers; سيظهر تقديرًا لطول النهر في عمود Length وذلك بالاعتماد على الشرط المُختبَر في حالات اختبار الشرط IF، لتظهر النتائج الآتية: Length LengthKm Name Long 6992 Amazon Long 6853 Nile Long 6275 Mississippi Long 5464 Yellow River Medium 4700 Congo Medium 4400 Lena Medium 4200 Niger Medium 3645 Volga Short 3060 Salween ويمكن تحديد عدد الأنهار الإجمالي مقارنة بالعدد 5 كما في الشيفرة الآتية: IF (SELECT COUNT(*) FROM rivers) > 5 PRINT 'There are more than 5 rivers.' ELSE PRINT 'There are 5 or less rivers.' ; ولدى تنفيذها في محرك SQL Server ستُطبَع العبارة: There are more than 5 rivers. الشرط CASE في SQL تستخدم لاختبار شرط معين بشكل مشابه لتعليمات if/else في لغات البرمجة الأخرى لتعيد أحد التعابير الممكنة، وتكون البنية العامة لها بالشكل الآتي: CASE WHEN condition THEN result [WHEN ...] [ELSE result] END إذ تعبر الكلمة condition عن الشرط المُختبَر، وكلمة result عن التعبير المُعاد. محتويات · 1مثال · 2استخدام CASE مع العبارة ORDER BY o 2.1مثال · 3التوافقية · 4مصادر مثال ليكن الجدول الآتي students موجودًا في قاعدة البيانات: GPA Age Name StudentID 3.68 25 Mona 1024 3.57 24 Radi 1081 2.50 25 Leen 1012 4.00 26 Sarah 1085 1.96 22 Amin 1066 2.87 23 Yusuf 1056 إن تنفيذ استعلام SELECT الآتي: SELECT Name, Result = CASE WHEN GPA = 4 THEN 'A+' WHEN GPA > 3.7 THEN 'A' WHEN GPA > 3.3 THEN 'A-' WHEN GPA > 3 THEN 'B+' WHEN GPA > 2.7 THEN 'B' WHEN GPA > 2.3 THEN 'B-' WHEN GPA > 2 THEN 'C+' WHEN GPA > 1.7 THEN 'C' WHEN GPA > 1.3 THEN 'C-' WHEN GPA > 1 THEN 'D+' WHEN GPA > 0 THEN 'D' ELSE 'F' END FROM students; سيظهر الأحرف التقييميّة بحسب القيمة الموجودة في عمود GPA وذلك بالاعتماد على الشرط المُختبَر في حالات CASE، لتظهر النتائج الآتية: Result Name B+‎ Mona B+‎ Radi C+‎ Leen A+‎ Sarah C-‎ Amin B-‎ Yusuf استخدام CASE مع العبارة ORDER BY يمكن تحديد الترتيب ضمن عبارة ORDER BY وفقًا لشرط محدد وذلك باستخدام الكلمات المفتاحية CASE و WHEN و THEN و END. مثال إن كان الجدول الآتي rivers موجودًا في قاعدة البيانات: Continent Outflow LengthMiles LengthKm River Serial South America Atlantic Ocean 4345 6992 Amazon 1 Africa Mediterranean 4258 6853 Nile 2 North America Gulf of Mexico 3902 6275 Mississippi 3 Asia Bohai Sea 3395 5464 Yellow River 4 Africa Atlantic Ocean 2922 4700 Congo 5 Asia Laptev Sea 2736 4400 Lena 6 Africa Gulf of Guinea 2611 4200 Niger 7 Europe Caspian Sea 2266 3645 Volga 8 Asia Andaman Sea 1901 3060 Salween 9 لترتيب السجلات وفقًا لأطوالها في قارة Africa ووفقًا لأسمائها في القارات البقية، يُنفذ الاستعلام الآتي: SELECT * FROM rivers ORDER BY CASE Country WHEN 'Africa' THEN length ELSE Name END; وستظهر النتائج الآتية: Continent LengthKm River Africa 4200 Niger Africa 4700 Congo Africa 6853 Nile Asia 4400 Lena Asia 3060 Salween Asia 5464 Yellow River Europe 3645 Volga North America 6275 Mississippi South America 6992 Amazon حلقة WHILE في SQL تهدف حلقة WHILE إلى تكرار عددٍ من التعليمات باستمرار تحقق الشرط ضمنها، إذ يُتأكَّد من تحقّق الشرط قبل البدء بتنفيذ التعليمات التي تحتويه، وتكون البنية العامّة لها: [ <<label>> ] WHILE boolean-expression LOOP statements END LOOP [ label ]; إذ يمكن تحديد تسمية label لها وتوضع التعليمات statements ضمنها بعد الكلمة المفتاحية LOOP. أما في محرك MySQL فتصبح بالشكل الآتي: [begin_label:] WHILE search_condition DO statement_list END WHILE [end_label]; وفي محرك SQL Server تكون بالشكل: WHILE boolean_expression { sql_statement | statement_block} إذ تبتدئ كتلة التعليمات statement_block بالكلمة المفتاحية BEGIN وتنتهي بالكلمة المفتاحية END. مثال في حلقة WHILE الآتية تستمر زيادة الفاتورة bill بقيمة 500 وإنقاص نفس القيمة من البضائع goods إلى أن تبلغ قيمة bill القيمة 2000 أو أكثر أو أن تصبح قيمة goods القيمة صفر أو أقل، وحينها تنتهي الحلقة. WHILE bill < 2000 AND goods > 0 LOOP bill = bill + 500; goods = goods - 500; END LOOP; العمليات لمحة عن العمليات العملية هي مجموعة من التعديلات التي تتم في قاعدة البيانات وفق تسلسل منطقي، وينتج عنها بعض التغييرات في القاعدة كحذف سجل أو تعديل بيانات أو إنشاء سجل جديد، هذه كلها عبارة عن عمليات، وتصبح هذه التغييرات جزءًا دائمًا من قاعدة البيانات إذا نُفذَّت بشكل تامّ دون أخطاء، أما في حال حدوث أيّ خطأ فيُتراجَع عن هذه التغييرات وتعود قاعدة البيانات كما هي قبل إنجاز العمليات عليها. الأمر START TRANSACTION < يُستخدم هذا الأمر للإعلام بالبدء بإجراء مجموعة من العمليات التي قد تنتهي بأمر COMMIT أو ROLLBACK، وله الصيغة التالية: START TRANSACTION; وتختلف هذه الصيغة باستخدام الكلمة المفتاحية BEGIN في محرك SQL Server لتصبح: BEGIN TRANSACTION; أما في محرك SQLite فهي الكلمة المفتاحية BEGIN فقط، أيّ: BEGIN; وفي محرك Oracle يصبح الأمر على النحو الآتي: SET TRANSACTION NAME 'name'; ويكون هذا الأمر مسؤولًا عن البدء بالعمليات وتسميتها بآن واحد بالاسم الذي يُحدد عبر name. مثال إذا كان الجدول الآتي موجودًا في قاعدة البيانات: Bill OrderID FullName CustomerID 160 0291 Abd al-Salam Hadi 1156 170 0302 Ahmad Mostafa 1157 210 0203 Reem Hammad 1158 350 0294 Abd Allah Sadiq 1159 185 0255 Raghad al-Hamdan 1160 165 0276 Abd al-Razzaq Salloum 1161 175 0247 Hussam Siraj 1162 تبدأ العمليات في الشيفرة الآتية باستخدام BEGIN TRANSACTION لتُجرَى العمليات بعدها (حذف السجلات التي تكون فيها قيمة الفاتورة أكبر من 200) وتُحفَظ التغييرات عبر الأمر COMMIT: BEGIN TRANSACTION; DELETE FROM customers WHERE Bill>200; COMMIT; الأمر COMMIT في SQL يستخدم هذا الأمر بهدف حفظ التغييرات المُجراة على قاعدة البيانات نتيجة لتنفيذ العمليات، إذ تحفظ كافة التغييرات منذ آخر أمر COMMIT أو ROLLBACK. صيغة الأمر: COMMIT [TRANSACTION]; مثال إن كان جدول الزبائن customers موجودًا في قاعدة البيانات على النحو الآتي: Bill OrderID FullName CustomerID 160 0291 Abd al-Salam Hadi 1156 170 0302 Ahmad Mostafa 1157 210 0203 Reem Hammad 1158 350 0294 Abd Allah Sadiq 1159 185 0255 Raghad al-Hamdan 1160 165 0276 Abd al-Razzaq Salloum 1161 175 0247 Hussam Siraj 1162 فعند تطبيق الاستعلام الآتي: BEGIN TRANSACTION; DELETE FROM customers WHERE Bill>200; إذ إن BEGIN TRANSACTION تبدأ بالعملية التي ستحذف السجلات التي قيمة فاتورتها أكبر من 200 (عدد السجلات المحذوفة 2)، ولحفظ التغييرات التي جرت على قاعدة البيانات التي تحوي الجدول السابق يُستخدم الأمر: COMMIT; الأمر ROLLBACK يستخدم هذا الأمر لإلغاء العمليات المُجراة على قاعدة البيانات مما يعني تجاهل التغييرات التي طرأت عليها. صيغة الأمر: ROLLBACK [TRANSACTION]; وفي محركات SQLite و MySQL و PostgreSQL تمكن العودة إلى نقطة محددة حُفظت مسبقًا، وذلك عبر الأمر: ROLLBACK TO SAVEPOINT savePointName; إذ إن savePointName هو اسم نقطة الحفظ التي سيُرجع لها بتجاهل أية تغييرات طرأت بعدها. مثال إن كان جدول الزبائن customers موجودًا في قاعدة البيانات على النحو الآتي: Bill OrderID FullName CustomerID 160 0291 Abd al-Salam Hadi 1156 170 0302 Ahmad Mostafa 1157 210 0203 Reem Hammad 1158 350 0294 Abd Allah Sadiq 1159 185 0255 Raghad al-Hamdan 1160 165 0276 Abd al-Razzaq Salloum 1161 175 0247 Hussam Siraj 1162 فعند تطبيق الاستعلام الآتي: BEGIN TRANSACTION; DELETE FROM customers WHERE Bill>200; إذ إن BEGIN TRANSACTION تبدأ بالعملية التي ستحذف السجلات التي قيمة فاتورتها أكبر من 200 (عدد السجلات المحذوفة 2)، وللتراجع عن هذه التعديلات ليُعاد الجدول كما كان يُستخدم الأمر: ROLLBACK; التعامل مع المستخدمين إنشاء مستخدم جديد CREATE USER يُستخدم هذا الأمر لإنشاء مستخدم جديد، وله الصيغ الآتية (بحسب محركات قواعد البيانات المختلفة). محتويات · 1في محرك البيانات PostgreSQL o 1.1أمثلة · 2في محركي البيانات MySQL وOracle o 2.1خيارات المصادر resource_option o 2.2خيارات كلمة المرور password_option · 3أمثلة o 3.1مثال · 4التوافقية · 5مصادر في محرك البيانات PostgreSQL CREATE USER name [ [ WITH ] option [ ... ] ] إذ إن name هو اسم المستخدم المنشَأ ويمكن أن يكون الخيار option أحد الكلمات المفتاحية الآتية: الخيار مهمته SUPERUSER لجعل المستخدم SUPERUSER أي له كافة صلاحيات الوصول access privileges في قاعدة البيانات CREATEDB لإعطاء المستخدم صلاحية إنشاء قاعدة بيانات جديدة CREATEROLE لإعطاء المستخدم صلاحية إنشاء مستخدم آخر جديد CONNECTION LIMIT connlimit لتحديد عدد من الاتصالات connlimit التزامنية التي يستطيع المستخدم القيام بها مع قاعدة البيانات PASSWORD 'password'‎ لتحديد كلمة المرور password للمستخدم VALID UNTIL 'timestamp'‎ لتحديد مدة صلاحية كلمة المرور لهذا المستخدم حتى التاريخ والتوقيت timestamp، وإن لم يُحدد فهي صالحة دائمًا أمثلة لإنشاء مستخدم جديد باسم Ahmad وبكلمة مرور ah1751m صالحة حتى تاريخ 1/1/2019، يستخدم الأمر الآتي: CREATE USER Ahmad WITH PASSWORD 'ah1751m' VALID UNTIL '2019-01-01'; ولإنشاء مستخدم جديد باسم Baraa وإعطائه صلاحية إنشاء قاعدة بيانات جديدة ومستخدمين جدد، يستخدم الأمر الآتي: CREATE USER Baraa WITH CREATEDB CREATEROLE; في محركي البيانات MySQL وOracle CREATE USER [IF NOT EXISTS] name [IDENTIFIED BY PASSWORD 'password'] [WITH resource_option] [password_option] إذ ينشئ هذا الأمر مستخدمًا جديدًا باسم user، ويُمكن تحديد كلمة المرور password له، إضافة إلى بعض خيارات المصادر وخيارات أخرى متعلقة بكلمة المرور، وستُذكر تباعًا. خيارات المصادر resource_option الخيار مهمته MAX_QUERIES_PER_HOUR count لتحديد العدد الأقصى للاستعلامات المسموحة خلال الساعة بالعدد count MAX_UPDATES_PER_HOUR count لتحديد العدد الأقصى للتحديثات (التعديلات) المسموحة خلال الساعة بالعدد count MAX_CONNECTIONS_PER_HOUR count لتحديد العدد الأقصى للاتصالات المسموحة خلال الساعة بالعدد count خيارات كلمة المرور password_option مهمته الخيار لضمان استمرار كلمة المرور لهذا المستخدم بشكل دائم PASSWORD EXPIRE NEVER لتحديد n يومًا لصلاحية كلمة المرور PASSWORD EXPIRE INTERVAL n DAY أمثلة لإنشاء مستخدم جديد باسم Ahmad وبكلمة مرور ah1751m صالحة لمدة 180 يومًا، يستخدم الأمر الآتي: CREATE USER Ahmad IDENTIFIED BY PASSWORD 'ah1751m' PASSWORD EXPIRE INTERVAL 180 DAY; ولإنشاء مستخدم جديد باسم Baraa وتحديد العدد الأقصى لاستعلاماته خلال الساعة (500 استعلام)، يستخدم الأمر الآتي: CREATE USER Baraa WITH MAX_QUERIES_PER_HOUR 500; في محرك البيانات SQL Server CREATE USER name [WITH PASSWORD = 'password' ; إذ إن name هو اسم المستخدم المنشَأ وتُحدَّد كلمة المرور بالكلمة المفتاحية PASSWORD. مثال لإنشاء مستخدم جديد باسم Ahmad وبكلمة مرور ah1751m، يستخدم الأمر الآتي: CREATE USER Ahmad WITH PASSWORD 'ah1751m'; تعديل المستخدم ALTER USER يُستخدم هذا الأمر للتعديل من خصائص وسماحيات المستخدم، وله الصيغ الآتية (بحسب محركات قواعد البيانات المختلفة): محتويات · 1في محرك البيانات PostgreSQL o 1.1أمثلة · 2في محركي البيانات MySQL وOracle o 2.1خيارات المصادر resource_option o 2.2خيارات كلمة المرور password_option o 2.3أمثلة · 3في محرك البيانات SQL Server o 3.1مثال · 4التوافقية · 5مصادر في محرك البيانات PostgreSQL ALTER USER {name | CURRENT_USER} [ WITH ] option [ ... ] إذ إن name هو اسم المستخدم الذي ستطرأ التعديلات عليه، ويمكن أن يكون الخيار option أحد الكلمات المفتاحية الآتية: الخيار مهمته SUPERUSER لجعل المستخدم SUPERUSER أي له كافة صلاحيات الوصول access privileges في قاعدة البيانات CREATEDB لإعطاء المستخدم صلاحية إنشاء قاعدة بيانات جديدة CREATEROLE لإعطاء المستخدم صلاحية إنشاء مستخدم آخر جديد CONNECTION LIMIT connlimit لتحديد عدد من الاتصالات connlimit التزامنية التي يستطيع المستخدم القيام بها مع قاعدة البيانات PASSWORD 'password'‎ لتحديد كلمة المرور password للمستخدم VALID UNTIL 'timestamp'‎ لتحديد مدة صلاحية كلمة المرور لهذا المستخدم حتى التاريخ والتوقيت timestamp، وإن لم يُحدد فهي صالحة دائمًا RENAME to new_name لإعادة تسمية المستخدم باسم جديد new_name أمثلة لتعديل كلمة المرور للمستخدم Ahmad لتصبح '1751ah'، يستخدم الأمر الآتي: ALTER USER Ahmad WITH PASSWORD '1751ah'; أو لإزالة كلمة المرور الخاصة به: ALTER USER Ahmad WITH PASSWORD NULL; ولإعطائه صلاحية إنشاء قاعدة بيانات جديدة ومستخدمين جدد، يستخدم الأمر الآتي: ALTER USER Ahmad CREATEROLE CREATEDB; في محركي البيانات MySQL وOracle ALTER USER [IF NOT EXISTS] name [IDENTIFIED BY PASSWORD 'password'] [WITH resource_option] [password_option] إذ إن name هو اسم المستخدم الذي ستطرأ التعديلات عليه، ويمكن تعديل أي من خيارات المصادر وخيارات أخرى متعلقة بكلمة المرور، وستُذكر تباعًا. خيارات المصادر resource_option الخيار مهمته MAX_QUERIES_PER_HOUR count لتحديد العدد الأقصى للاستعلامات المسموحة خلال الساعة بالعدد count MAX_UPDATES_PER_HOUR count لتحديد العدد الأقصى للتحديثات (التعديلات) المسموحة خلال الساعة بالعدد count MAX_CONNECTIONS_PER_HOUR count لتحديد العدد الأقصى للاتصالات المسموحة خلال الساعة بالعدد count خيارات كلمة المرور password_option مهمته الخيار لضمان استمرار كلمة المرور لهذا المستخدم بشكل دائم PASSWORD EXPIRE NEVER لتحديد n يومًا لصلاحية كلمة المرور PASSWORD EXPIRE INTERVAL n DAY أمثلة لتعديل كلمة المرور للمستخدم Ahmad لتصبح '1751ah' وبصلاحية لمدة 200 يومًا، يستخدم الأمر الآتي: ALTER USER Ahmad IDENTIFIED BY PASSWORD '1751ah' PASSWORD EXPIRE INTERVAL 180 DAY; ولإعطائه حدًا أقصى لاستعلاماته خلال الساعة (500 استعلام)، يستخدم الأمر الآتي: ALTER USER Ahmad WITH MAX_QUERIES_PER_HOUR 500; في محرك البيانات SQL Server ALTER USER name WITH <set_item> ; إذ إن name هو اسم المستخدم الذي ستطرأ التعديلات عليه و من خلال set_item يمكن تعديل أحد الخصائص الآتية: الخاصية مهمتها NAME = newUserName لتعديل اسم المستخدم ليصبح newUserName PASSWORD = 'newpassword'‎ لتعديل كلمة المرور لتصبح 'newpassword' مثال لتعديل اسم المستخدم Ahmad ليصبح accountant وكلمة مروره لتصبح '1751ah' ، يستخدم الأمر الآتي: ALTER USER Ahmad NAME = accountant, PASSWORD = '1751ah' ; حذف مستخدم DROP USER يُستخدَم هذا الأمر لحذف مستخدم، وله الصيغة العامّة الآتية: DROP USER [IF EXISTS] name; إذ يحذف المستخدم ذو الاسم name إن وُجد. مثال لحذف المستخدمَين accountant و customer (إن وُجدا) يُستخدم الأمر الآتي: DROP USER IF EXISTS accountant, customer; منح صلاحيات الوصول GRANT يستخدم هذا الأمر لمنح صلاحيات الوصول access privileges لمستخدمٍ أو مجموعة مستخدمين أو أكثر، وله إحدى الصيغ العامّة الآتية (بحسب محركات البيانات المختلفة): محتويات · 1في محرك البيانات PostgreSQL o 1.1أمثلة · 2في محركي البيانات MySQL و Oracle o 2.1خيارات نوع الصلاحية priv_type o 2.2خيارات مستوى الصلاحية priv_level o 2.3خيارات المصادر resource_option o 2.4أمثلة · 3في محرك البيانات SQL Server o 3.1أمثلة · 4التوافقية · 5مصادر في محرك البيانات PostgreSQL GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES } [, ...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tbl_name [, ...] TO { [GROUP ] name | PUBLIC | CURRENT_USER [, ...] } [ WITH GRANT OPTION ]; إعطاء صلاحية تنفيذ استعلامات SELECT و INSERT و UPDATE و DELETE وإنشاء مفتاح ثانوي عبر الكلمة المفتاحية REFERENCES أو كافة الصلاحيات على الجدول tbl_name للمستخدم باسم name أو مجموعة مستخدمين GROUP name أو لكافة المستخدمين PUBLIC أو للمستخدم الحالي CURRENT_USER، وعند إضافة العبارة WITH GRANT OPTION فإنها تتيح للمستخدم إعطاء الصلاحيات لمستخدم آخر. GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] tbl_name [, ...] TO { [GROUP ] name | PUBLIC | CURRENT_USER [, ...] } [ WITH GRANT OPTION ]; إعطاء صلاحية تنفيذ استعلامات SELECT و INSERT و UPDATE وإنشاء مفتاح ثانوي عبر الكلمة المفتاحية REFERENCES أو كافة الصلاحيات على العمود column_name (أو أكثر من عمود) في الجدول tbl_name للمستخدم باسم name أو مجموعة مستخدمين GROUP name أو لكافة المستخدمين PUBLIC أو للمستخدم الحالي CURRENT_USER، وعند إضافة العبارة WITH GRANT OPTION فإنها تتيح للمستخدم إعطاء الصلاحيات لمستخدم آخر. GRANT { { CREATE | CONNECT | TEMPORARY} [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] TO { [GROUP ] name | PUBLIC | CURRENT_USER [, ...] }[ WITH GRANT OPTION ]; إعطاء الصلاحيات بإنشاء العناصر (كالجداول أو الفهارس، ...إلخ.) CREATE أو الاتصال بقاعدة البيانات CONNECT أو إنشاء جداول مؤقتة TEMPORARY في قاعدة البيانات باسم database_name للمستخدم باسم name أو مجموعة مستخدمين GROUP name أو لكافة المستخدمين PUBLIC أو للمستخدم الحالي CURRENT_USER، وعند إضافة العبارة WITH GRANT OPTION فإنها تتيح للمستخدم إعطاء الصلاحيات لمستخدم آخر. GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...] TO { [GROUP ] name | PUBLIC | CURRENT_USER [, ...] } [ WITH GRANT OPTION ]; إعطاء الصلاحيات بتنفيذ EXECUTE (أو كافة الصلاحيات المتاحة ALL PRIVILEGES) للدالة المحددة باسم function_name (والتي تحدد معاملاتها بالنوع argmode كدخل أو خرج والاسم arg_name ونوع البيانات arg_type) وذلك للمستخدم باسم name أو مجموعة مستخدمين GROUP name أو لكافة المستخدمين PUBLIC أو للمستخدم الحالي CURRENT_USER، وعند إضافة العبارة WITH GRANT OPTION فإنها تتيح للمستخدم إعطاء الصلاحيات لمستخدم آخر. أمثلة لمنح صلاحية إدخال سجلات جديدة للجدول books لكافة المستخدمين يُستخدم الأمر: GRANT INSERT ON books TO PUBLIC; ولمنح كافة الصلاحيات المتعلقة بقاعدة البيانات centre_db للمستخدم الحالي والسماح له بمنح الصلاحيات لمستخدم آخر، يُستخدَم الأمر: GRANT ALL PRIVILEGES ON DATABASE centre_db TO CURRENT_USER WITH GRANT OPTION; ولمنح صلاحية تنفيذ الدالة get_final_bill للمستخدم mohammad يُستخدم الأمر: GRANT EXECUTE ON FUNCTION get_final_bill (customer_id int) TO mohammad; في محركي البيانات MySQL و Oracle GRANT priv_type [(column_list)] ON [ {TABLE | FUNCTION} ] priv_level TO user [WITH {GRANT OPTION | resource_option} ...] وذلك لإعطاء المستخدم user نوع صلاحية priv_type على الأعمدة column_list الموجودة في العنصر المحدد (جدول أو دالة) بمستوى معين من الصلاحيات priv_level ومنحه إمكانية إعطاء الصلاحيات لمستخدم آخر WITH GRANT OPTION أو تحديد بعض خيارات المصادر resource_option، وتوضح الجداول الآتية الخيارات الممكنة لكلّ مما سبق. خيارات نوع الصلاحية priv_type الخيار مهمته ALL [PRIVILEGES]‎ كافة الصلاحيات ALTER صلاحية تعديل الجدول ALTER TABLE CREATE صلاحية إنشاء قاعدة بيانات جديدة أو جدول جديد CREATE USER صلاحية إنشاء مستخدم جديد CREATE VIEW صلاحية إنشاء عرض جديد DELETE صلاحية الحذف DELETE DROP صلاحية الحذف DROP EXECUTE صلاحية التنفيذ INDEX صلاحية إنشاء أو حذف الفهارس INSERT صلاحية إضافة سجلات جديدة REFERENCES صلاحية ربط الجداول عبر المفتاح الثانوي SELECT صلاحية تنفيذ استعلام SELECT UPDATE صلاحية تنفيذ استعلام UPDATE خيارات مستوى الصلاحية priv_level المستوى دلالته * كافة الجداول في قاعدة البيانات الحالية *.* كافة الجداول في كافة قواعد البيانات الموجودة db_name.*‎ كافة الجداول الموجودة في قاعدة البيانات db_name db_name.tbl_name الجدول tbl_name الموجود في قاعدة البيانات db_name tbl_name الجدول tbl_name خيارات المصادر resource_option الخيار مهمته MAX_QUERIES_PER_HOUR count لتحديد العدد الأقصى للاستعلامات المسموحة خلال الساعة بالعدد count MAX_UPDATES_PER_HOUR count لتحديد العدد الأقصى للتحديثات (التعديلات) المسموحة خلال الساعة بالعدد count MAX_CONNECTIONS_PER_HOUR count لتحديد العدد الأقصى للاتصالات المسموحة خلال الساعة بالعدد count أمثلة لمنح صلاحية إدخال سجلات جديدة للجدول books الموجود في قاعدة البيانات centre_db للمستخدم ahmad مع إمكانية إعطائه الصلاحيات لمستخدم آخر وبحد أقصى 5 اتصالات خلال الساعة، يُستخدم الأمر: GRANT INSERT ON TABLE centre_db.books TO ahmad WITH GRANT OPTION MAX_CONNECTIONS_PER_HOUR 5; ولمنح كافة الصلاحيات المتعلقة بكافة الجداول الموجودة في قاعدة البيانات centre_db للمستخدم mohammad يُستخدَم الأمر: GRANT ALL PRIVILEGES ON centre_db.* TO mohammad; في محرك البيانات SQL Server GRANT { ALL [ PRIVILEGES ] } | permission [ ( column [ ,...n ] ) ] [ ,...n ] [ ON object ] TO name [ ,...n ] [ WITH GRANT OPTION ]; إذ يمكن منح بعض الصلاحيات أو كلها على الأعمدة المحدد باللائحة column والموجودة في العنصر object للمستخدم باسم name مع إعطائه إمكانية منح الصلاحيات لمستخدم آخر WITH GRANT OPTION، وتختلف الصلاحيات المتاحة بحسب العنصر المحدد object كما هو موضح في الجدول الآتي: العنصر الصلاحيات المتاحة قاعدة بيانات CREATE DATABASE CREATE FUNCTION CREATE TABLE CREATE VIEW دالة تعيد قيمة أوليّة scalar EXECUTE دالة تعيد جدول من النتائج DELETE INSERT SELECT UPDATE جدول DELETE INSERT REFERENCES SELECT UPDATE عرض VIEW DELETE INSERT SELECT UPDATE وللعودة إلى كافة الأذونات permission التي يتيحها محرك SQL Server تمكن الاستفادة من الصفحة. أمثلة لمنح صلاحية إنشاء عرض view للمستخدم mohammad في قاعدة البيانات centre_db والسماح له بمنح الصلاحيات لمستخدم آخر يُستخدم الأمر: GRANT CREATE VIEW ON centre_db TO mohammad WITH GRANT OPTION; ولمنح كافة الصلاحيات المتعلقة بالجدول books للمستخدم sarah يُستخدَم الأمر: GRANT ALL ON books TO sarah; إلغاء صلاحيات الوصول REVOKE يستخدم هذا الأمر لإلغاء صلاحيات الوصول access privileges لمستخدمٍ أو مجموعة مستخدمين أو أكثر، وله إحدى الصيغ العامّة الآتية (بحسب محركات البيانات المختلفة): محتويات · 1في محرك البيانات PostgreSQL o 1.1أمثلة · 2في محركي البيانات MySQL و Oracle o 2.1خيارات نوع الصلاحية priv_type o 2.2خيارات مستوى الصلاحية priv_level o 2.3أمثلة · 3في محرك البيانات SQL Server o 3.1أمثلة · 4التوافقية · 5مصادر في محرك البيانات PostgreSQL REVOKE { { SELECT | INSERT | UPDATE | DELETE | REFERENCES } [, ...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tbl_name [, ...] FROM { [GROUP ] name | PUBLIC | CURRENT_USER [, ...] }; إلغاء صلاحية تنفيذ استعلامات SELECT و INSERT و UPDATE و DELETE وإنشاء مفتاح ثانوي عبر الكلمة المفتاحية REFERENCES أو كافة الصلاحيات على الجدول tbl_name للمستخدم باسم name أو مجموعة مستخدمين GROUP name أو لكافة المستخدمين PUBLIC أو للمستخدم الحالي CURRENT_USER. REVOKE { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( col_name [, ...] ) } ON [ TABLE ] tbl_name [, ...] FROM { [GROUP ] name | PUBLIC | CURRENT_USER [, ...] } ; إلغاء صلاحية تنفيذ استعلامات SELECT و INSERT و UPDATE وإنشاء مفتاح ثانوي عبر الكلمة المفتاحية REFERENCES أو كافة الصلاحيات على العمود col_name (أو أكثر من عمود) في الجدول tbl_name للمستخدم باسم name أو مجموعة مستخدمين GROUP name أو لكافة المستخدمين PUBLIC أو للمستخدم الحالي. REVOKE { { CREATE | CONNECT | TEMPORARY} [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] FROM { [GROUP ] name | PUBLIC | CURRENT_USER [, ...] }; إلغاء الصلاحيات بإنشاء العناصر (كالجداول أو الفهارس، ...إلخ.) CREATE أو الاتصال بقاعدة البيانات CONNECT أو إنشاء جداول مؤقتة TEMPORARY في قاعدة البيانات باسم database_name للمستخدم باسم name أو مجموعة مستخدمين GROUP name أو لكافة المستخدمين PUBLIC أو للمستخدم الحالي CURRENT_USER. REVOKE { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...] FROM { [GROUP ] name | PUBLIC | CURRENT_USER [, ...] } ; إلغاء الصلاحيات بتنفيذ EXECUTE (أو كافة الصلاحيات المتاحة ALL PRIVILEGES) للدالة المحددة باسم function_name (والتي تحدد معاملاتها بالنوع argmode كدخل أو خرج والاسم arg_name ونوع البيانات arg_type) وذلك للمستخدم باسم name أو مجموعة مستخدمين GROUP name أو لكافة المستخدمين PUBLIC أو للمستخدم الحالي CURRENT_USER. أمثلة لإلغاء صلاحية إدخال سجلات جديدة للجدول books لكافة المستخدمين يُستخدم الأمر: REVOKE INSERT ON books FROM PUBLIC; ولإلغاء كافة الصلاحيات المتعلقة بقاعدة البيانات centre_db للمستخدم الحالي يُستخدَم الأمر: REVOKE ALL PRIVILEGES ON DATABASE centre_db FROM CURRENT_USER; ولإلغاء صلاحية تنفيذ الدالة get_final_bill للمستخدم mohammad يُستخدم الأمر: REVOKE EXECUTE ON FUNCTION get_final_bill (customer_id int) FROM mohammad; في محركي البيانات MySQL و Oracle REVOKE priv_type [(column_list)] ON [ {TABLE | FUNCTION} ] priv_level FROM user وذلك لإلغاء صلاحية المستخدم user من النوع priv_type على الأعمدة column_list الموجودة في العنصر المحدد (جدول أو دالة) بمستوى معين من الصلاحيات priv_level، وتوضح الجداول الآتية الخيارات الممكنة لكلّ مما سبق. خيارات نوع الصلاحية priv_type الخيار مهمته ALL [PRIVILEGES]‎ كافة الصلاحيات ALTER صلاحية تعديل الجدول ALTER TABLE CREATE صلاحية إنشاء قاعدة بيانات جديدة أو جدول جديد CREATE USER صلاحية إنشاء مستخدم جديد CREATE VIEW صلاحية إنشاء عرض جديد DELETE صلاحية الحذف DELETE DROP صلاحية الحذف DROP EXECUTE صلاحية التنفيذ INDEX صلاحية إنشاء أو حذف الفهارس INSERT صلاحية إضافة سجلات جديدة REFERENCES صلاحية ربط الجداول عبر المفتاح الثانوي SELECT صلاحية تنفيذ استعلام SELECT UPDATE صلاحية تنفيذ استعلام UPDATE خيارات مستوى الصلاحية priv_level المستوى دلالته * كافة الجداول في قاعدة البيانات الحالية *.* كافة الجداول في كافة قواعد البيانات الموجودة db_name.*‎ كافة الجداول الموجودة في قاعدة البيانات db_name db_name.tbl_name الجدول tbl_name الموجود في قاعدة البيانات db_name tbl_name الجدول tbl_name أمثلة لإلغاء صلاحية إدخال سجلات جديدة للجدول books الموجود في قاعدة البيانات centre_db للمستخدم ahmad يُستخدم الأمر: REVOKE INSERT ON TABLE centre_db.books FROM ahmad; ولإلغاء كافة الصلاحيات المتعلقة بكافة الجداول الموجودة في قاعدة البيانات centre_db للمستخدم mohammad يُستخدَم الأمر: REVOKE ALL PRIVILEGES ON centre_db.* FROM mohammad; في محرك البيانات SQL Server REVOKE { ALL [ PRIVILEGES ] } | permission [ ( column [ ,...n ] ) ] [ ,...n ] [ ON object ] FROM name [ ,...n ] ; إذ يمكن إلغاء بعض الصلاحيات أو كلها على الأعمدة المحدد باللائحة column والموجودة في العنصر object من المستخدم باسم name، وتختلف الصلاحيات الملغية بحسب العنصر المحدد object كما هو موضح في الجدول الآتي: العنصر الصلاحيات المتاحة قاعدة بيانات CREATE DATABASECREATE FUNCTION CREATE TABLE CREATE VIEW دالة تعيد قيمة أوليّة scalar EXECUTE دالة تعيد جدول من النتائج DELETEINSERT SELECT UPDATE جدول DELETEINSERT REFERENCES SELECT UPDATE عرض VIEW DELETEINSERT SELECT UPDATE وللعودة إلى كافة الأذونات permission التي يتيحها محرك SQL Server تمكن الاستفادة من هذه الصفحة. أمثلة لإلغاء صلاحية إنشاء عرض view للمستخدم mohammad في قاعدة البيانات centre_db يُستخدم الأمر: REVOKE CREATE VIEW ON centre_db FROM mohammad; ولإلغاء كافة الصلاحيات المتعلقة بالجدول books للمستخدم sarah يُستخدَم الأمر: REVOKE ALL ON books FROM sarah; التعامل مع الفهارس إنشاء فهرس CREATE INDEX يستخدم هذا الأمر لإنشاء فهرس للجدول وفق البنية العامّة الآتية: CREATE INDEX [ name ] ON tbl ( col [, ...]); إذ يُنشأ الفهرس باسم name للجدول المسمى tbl الذي يحتوي على العمود المسمى col، وتُعتَبر الفهارس إحدى المفاهيم الأساسية في قواعد البيانات إذ تُسرِّع أداء الاستعلامات من خلال تقليل عدد صفحات البيانات التي تُمسح بياناتها (scanned) في القاعدة. مثال يستخدم الأمر الآتي لإنشاء مؤشر باسم idx على الجدول records عبر العمود title: CREATE INDEX idx ON records (title); تعديل الفهرس ALTER INDEX يستخدم هذا الأمر لتعديل الفهرس المُنشأ عبر الأمر CREATE INDEX، وله الصيغ الآتية: ALTER INDEX [ IF EXISTS ] name RENAME TO new_name لتغيير اسم الفهرس المسمى name (إن وُجد) ليصبح باسم new_name. ALTER INDEX [ IF EXISTS ] name SET ( storage_parameter = value [, ... ] ) لتعديل أيّ من قيم معاملات التخزين المتعلقة بالفهرس (إن وُجد). ALTER INDEX [ IF EXISTS ] name RESET ( storage_parameter [, ... ] ) لإعادة ضبط كافة قيم معاملات التخزين لهذا الفهرس (إن وُجد) إلى القيم الافتراضية. أما في محرك SQL فيجب تحديد الكائن object الذي سيُعدّل فهرسه لتصبح البنية العامة بالشكل: ALTER INDEX index_name ON <object> { DISABLE | SET ( <set_index_option> [ ,...n ] ) | PAUSE } ; إذ إن الكلمة المفتاحية DISABLE تستخدم لتعطيل الفهرس، و SET لضبط قيم خياراته، أما PAUSE فلإيقافه بشكل مؤقّت. مثال لضبط قيمة التخزين fillfactor للفهرس distributers لتصبح 75 يُستخدَم الأمر: ALTER INDEX distributors SET (fillfactor = 75); حذف الفهرس DROP INDEX يستخدم هذا الأمر لحذف فهرس أو أكثر في قاعدة البيانات وفق البنية العامّة الآتية: DROP INDEX [ IF EXISTS ] name [ CASCADE | RESTRICT ] إذ يُحذف الفهرس المحدد باسم name، وتمنع IF EXISTS حدوث أي خطأ في حال عدم وجود هذا الفهرس في قاعدة البيانات، أما الكلمة المفتاحية CASCADE فهي للإعلام بحذف أي كائنات objects معتمدة على الفهرس المحذوف، وبالحالة الافتراضية فإن RESTRICT تمنع حذف الفهرس إن كان هناك اعتماد عليه من قبل كائن ما. محتويات · 1بعض أمور التوافقية في المحركات · 2مثال · 3التوافقية · 4مصادر بعض أمور التوافقية في المحركات في محرك Oracle: لدى حذف الفهرس فيُلغى تفعيل كافة الكائنات المعتمدة عليه تلقائيًا. في محركي SQL Server و MySQL: يجب ذكر الجدول في الأمر ليصبح بالشكل الآتي: DROP INDEX index_name ON tbl_name مثال لحذف الفهرس title_index يستخدم الأمر الآتي: DROP INDEX title_index; التعامل مع قواعد البيانات إنشاء قاعدة البيانات CREATE DATABASE يستخدم هذا الأمر لإنشاء قاعدة بيانات جديدة، وله البنية العامة التالية: CREATE DATABASE name; إذ إن name هو اسم قاعدة البيانات التي ستُنشأ ولا يسمح بتنفيذ هذا الاستعلام ضمن بنية عمليات (transaction block). مثال لإنشاء قاعدة بيانات باسم CompanyRecords يُستخدم الأمر: CREATE DATABASE CompanyRecords; حذف قاعدة البيانات DROP DATABASE يستخدم هذا الأمر لحذف قاعدة البيانات، وله البنية العامة التالية: DROP DATABASE [IF EXISTS] name; إذ إن name هو اسم قاعدة البيانات التي ستُحذف ولا يسمح بتنفيذ هذا الاستعلام إلا من مالك قاعدة البيانات ولا يمكن التراجع عن الحذف فيما بعد، وتمنع العبارة IF EXISTS حدوث أي خطأ في حال عدم وجودة قاعدة بيانات بهذا الاسم. يتضمن الحذف كافة الملفات المرتبطة بقاعدة البيانات بالصيغ التالية: ‎.TRN ‎.BAK ‎.DAT ‎.HSH ‎.MRG ‎.frm ‎.ibd ‎.MYD ‎.MYI ‎.TRG ‎.ndb ‎.par ‎.cfg ‎.db مثال لحذف قواعد البيانات Students و Teachers يُستخدم الأمر: DROP DATABASE IF EXISTS Students, Teachers; فإذا وُجدت قاعدة بيانات باسم Students أو Teachers ستحذف. الأمر USE في SQL يستخدم هذا الأمر لتحديد قاعدة البيانات التي يتَعامَل معها لنقل السياق context لها، وله الصيغة الآتية: USE { database_name} [;] مثال لاستخدام قاعدة البيانات المُسماة centre يكون الأمر بالشكل: USE centre; التعامل مع الجداول مفاتيح الجداول تستخدم المفاتيح بهدف الربط ما بين الجداول في قواعد البيانات. محتويات · 1المفتاح الأوليّ PRIMARY KEY · 2المفتاح الثانويّ FOREIGN KEY o 2.1مثال · 3تعيين قيود المفاتيح الأولية والثانوية لأعمدة الجدول o 3.1تعيين أعمدة المفاتيح لجدول جديد § 3.1.1مثال · 4تعيين أعمدة المفاتيح لجدول موجود o 4.1مثال · 5حذف قيود المفاتيح من الجدول · 6التوافقية · 7مصادر المفتاح الأوليّ PRIMARY KEY هو عمود (أو أكثر) من الجدول والذي يميّز السجلات عن بعضها، تكون القيم فيه فريدة (غير مكررة) ولا يمكن ألّا يحتوي قيمة (قيمته NULL)، ويكون للجدول مفتاح أولي وحيد. المفتاح الثانويّ FOREIGN KEY هو عمود (أو أكثر) من الجدول والذي يمكن عدّه مرجعيةً (reference) لعمود آخر في جدول ثانٍ (وغالبًا ما يكون هذا العمود هو المفتاح الأولي للجدول الثاني). مثال تحتوي قاعدة بيانات أحد المراكز التعليمية الجداول الآتية: الجدول الأول: جدول الطلاب students المفتاح الأولي فيه هو عمود StudentID والمفتاح الثانوي هو عمود CourseID للربط مع جدول الدورات التدريبية courses RegDate CourseID LastName FirstName StudentID ‎07-JUL-2017 0206 Najjar Rama 1147 ‎08-NOV-2017 0604 Kordi Jenan 1148 ‎07-JUL-2017 0206 Bitar Rahaf 1149 ‎20-AUG-2017 0607 Taweel Farah 1150 ‎08-NOV-2017 0610 Arab Rami 1151 ‎24-OCT-2017‎ 0803 Akkad Aya 1152 ‎08-NOV-2017 0504 Haddad Abed 1153 ‎20-AUG-2017 0801 Fares Tasneem 1154 ‎24-OCT-2017 0607 Hamsho Monther 1155 ‎30-SEP-2017 0607 Abd Allah Hiba 1156 ‎07-JUL-2017 0509 Khatib Mohammad 1157 ‎20-AUG-2017 0801 Sharif Ibrahim 1158 ‎24-OCT-2017 0802 Fehmi Hanin 1159 ‎20-AUG-2017 0204 Zein Loujain 1160 ‎08-NOV-2017 0503 Helali Ammar 1161 الجدول الثاني: جدول الدورات التدريبية courses المفتاح الأولي فيه هو عمود CourseID والمفتاح الثانوي هو عمود DepartmentID للربط مع جدول الأقسام departments DepartmentID Lecturer Course CourseID EN01 Dr. Reem Hadi English (Adv)‎ 0204 EN01 Dr. Shadi Balid English (Int)‎ 0206 EN02 Dr. Firas Abd English (TOEFL)‎ 0211 IT01 Eng. Nasser Sharif Artificial Intelligence 0604 IT01 Eng. Amal Safi Networks 0607 IT01 Eng. Salem Najm ICDL 0610 IT02 Eng. Nasser Sharif SQL Programming 0703 IT02 Eng. Amal Safi FrontEnd Programming 0704 IT03 Mr. Maher Siraj Photoshop Design 0801 IT03 Ms. Nadia Taleb Illustrator Design 0802 IT03 Mr. Maher Siraj UI Design 0803 الجدول الثالث: جدول الأقسام departments المفتاح الأولي فيه هو DepartmentID وبقاعدة البيانات في هذا المثال لا توجد مرجعية له لربطه مع جدول آخر. Head DepatementName DepartmentID Dr. Firas Abd General English EN01 Dr. Saer Raslan Advanced English EN02 Dr. Osama Najjar Information Technology IT01 Eng. Amal Safi Programming IT02 Eng. Fares Ahmad Graphic Design IT03 تعيين قيود المفاتيح الأولية والثانوية لأعمدة الجدول تعيين أعمدة المفاتيح لجدول جديد لتعيين قيود المفاتيح الأوليّة والثانويّة تضاف العبارة المفتاحية PRIMARY KEY و FOREIGN KEY في تعليمة إنشاء الجدول CREATE TABLE. مثال لإضافة المفاتيح على الجدول السابق students، يصبح الاستعلام بالشكل الآتي: CREATE TABLE students( StudentID INTEGER NOT NULL, LastName TEXT, FirstName TEXT, CourseID INTEGER, RegDate DATE, PRIMARY KEY (StudentID), FOREIGN KEY (CourseID) REFERENCES courses (CourseID) ); أما عندما يكون هناك أكثر من عمود للمفتاح فتُضاف كافة الأعمدة المطلوبة ضمن القوسين بجانب الكلمة المفتاحية لتصبح بالشكل: PRIMARY KEY (StudentID, FirstName) تعيين أعمدة المفاتيح لجدول موجود يُمكن تعيين أعمدة المفاتيح لجدول موجود مسبقًا من خلال الكلمة المفتاحية ADD في تعليمة تعديل الجدول ALTER TABLE ليصبح استعلام إضافة المفتاح الأوليّ بالشكل الآتي: ALTER TABLE tbl_name ADD PRIMARY KEY (col_name); وإضافة المفتاح الثانوي بالشكل: ALTER TABLE tbl_name ADD FOREIGN KEY (col_name) REFERENCES tbl_name2 (col_name2); مثال لإضافة المفتاحين الأوليّ والثانويّ للجدول السابق students يُستخدَم الاستعلام الآتي: ALTER TABLE students ADD PRIMARY KEY (StudentID) ADD FOREIGN KEY (CourseID) REFERENCES courses (CourseID); حذف قيود المفاتيح من الجدول يُمكن حذف قيود المفاتيح لجدول موجود مسبقًا من خلال الكلمة المفتاحية DROP في تعليمة تعديل الجدول ALTER TABLE ليصبح الاستعلام عند حذف المفتاح الأوليّ بالشكل الآتي: ALTER TABLE students DROP PRIMARY KEY; وحذف مفتاح الثانوي بالشكل: ALTER TABLE students DROP FOREIGN KEY; إنشاء جدول CREATE TABLE يستخدم هذا الأمر لإنشاء جدولٍ جديدٍ في قاعدة البيانات وفق البنية العامّة الآتية: CREATE TABLE [ IF NOT EXISTS ] tbl_name ( [ { col_name data_type [ column_constraint [ ... ] | table_constraint } [, ... ] ] ) إذ يُنشأ الجدول الجديد باسم tbl_name وتُحدَّد أعمدته ما بين القوسين وذلك بتحديد اسم العمود col_name ونوع بياناته data_type وتحديد القيود على مستوى العمود أو الجدول. محتويات · 1قيود العمود · 2قيود الجدول · 3مثال · 4التوافقية · 5مصادر قيود العمود يُمكن ضبط بعض القيود على العمود مثل: القيد دلالته NOT NULL ألا تكون قيمة الحقل NULL DEFAULT default_expr لتحديد القيمة الافتراضية للحقل UNIQUE ألا تتكرر القيم ما بين السجلات ضمن نفس الحقل (العمود) PRIMARY KEY لتحديد العمود كمفتاح أولي للجدول REFERENCES reftable [ ( refcolumn )]‎ لتحديد العمود refcolum كمفتاح ثانوي بمرجعية للجدول reftable قيود الجدول يُمكن تحديد بعض القيود على مستوى الجدول مثل: القيد دلالته UNIQUE ( column_name [, ... ] )‎ عدم تكرار القيم ما بين السجلات ضمن الحقل (العمود) المحدد PRIMARY KEY ( column_name [, ... ] )‎ لتحديد العمود (أو الأعمدة) ما بين القوسين كمفتاح أولي للجدول FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ]‎ لتحديد العمود (أو الأعمدة) ما بين القوسين كمفتاح ثانوي بمرجعية للجدول reftable مثال لإنشاء الجدول الآتي باسم students: StudentID FirstName LastName E-mail CourseID RegDate والذي يحتوي على 5 أعمدة بأنواع بيانات مختلفة على ألا يتكرر عنوان البريد الالكتروني بين أكثر من طالب وألا يكون حقل تاريخ التسجيل فارغًا، ويكون حقل StudentID مفتاحًا أوليًا وحقل CourseID مفتاحًا ثانويًا يربط هذا الجدول مع جدول آخر (courses)، ولتحقيق ذلك يستخدم الأمر الآتي: CREATE TABLE students (); StudentID INT PRIMARY KEY, FirstName VARCHAR(20) , LastName VARCHAR(20) , E-mail VARCHAR(50) UNIQUE, CourseID INT REFERENCES courses (courseID), RegDate DATE NOT NULL ); تعديل الجدول ALTER TABLE يُستخدَم هذا الأمر لتعديل تعريف الجدول المُنشأ مسبقًا عبر الأمر CREATE TABLE، وله الصيغ الآتية: ALTER TABLE [ IF EXISTS ] name RENAME [ COLUMN ] col_name TO new_col_name لإعادة تسمية عمود اسمه col_name في الجدول الذي اسمه name (إن وُجد) باسمٍ جديد new_col_name. ALTER TABLE [ IF EXISTS ] name RENAME CONSTRAINT const_name TO new_const_name لإعادة تسمية قيد اسمه const_name في الجدول الذي اسمه name (إن وُجد) باسمٍ جديد new_const_name. ALTER TABLE [ IF EXISTS ] name RENAME TO new_name لإعادة تسمية الجدول الذي اسمه name (إن وُجد) باسمٍ جديد new_name. ALTER TABLE [ IF EXISTS ] name action [, ... ] لتنفيذ تعديل على الجدول من بين التعديلات الآتية: التعديل المُنفّذ الشيفرة action إضافة عمود جديد (إن لم يوجد مسبقًا) باسم column_name وبنوع بيانات data_type وإضافة قيود له ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ column_constraint [ ... ] ]‎ حذف عمود باسم column_name (إن وُجد) وتستخدم الكلمة المفتاحية CASCADE في حال وجود أي اعتماد على هذا العمود من أي عنصر آخر خارج الجدول (مثل حالة المفتاح الثانوي) DROP [ COLUMN ] [ IF EXISTS ] column_name [CASCADE ]‎ تعديل نوع البيانات بالعمود column_name ليصبح بنوع data_type ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type تعديل القيمة الافتراضية للعمود column_name لتصبح بقيمة expression ALTER [ COLUMN ] column_name SET DEFAULT expression حذف القيمة الافتراضية الحالية للعمود column_name ALTER [ COLUMN ] column_name DROP DEFAULT إضافة/حذف قيد ألا تكون القيمة خالية NOT NULL في العمود column_name ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL تعديل قيمة إحدى صفات attribute_option العمود column_name لتصبح value ALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )‎ إعادة ضبط قيمة إحدى صفات attribute_option العمود column_name لتصبح القيمة الافتراضية ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )‎ إضافة قيد على مستوى الجدول ADD table_constraint حذف القيد constraint_name (إن وُجد) DROP CONSTRAINT [ IF EXISTS ] constraint_name لتعديل أيّ من قيم معاملات التخزين المتعلقة بالجدول SET ( storage_parameter = value [, ... ] )‎ لإعادة ضبط قيمة أحد معاملات التخزين المتعلقة بالجدول RESET ( storage_parameter [, ... ] )‎ لنقل ملكية الجدول إلى مالك جديد new_owner أو المستخدم الحالي CURRENT_USER OWNER TO { new_owner | CURRENT_USER }‎ أمثلة لإضافة عمود جديد إلى جدول الطلاب students باسم address يستخدم الأمر الآتي: ALTER TABLE students ADD COLUMN address varchar(50); ولتعديل عدد محارفه المتاحة: ALTER TABLE students ALTER COLUMN address TYPE varchar(100); ولإضافة قيد ألا يكون بقيمة NULL: ALTER TABLE students ALTER COLUMN address SET NOT NULL; ولإزالة هذا القيد: ALTER TABLE students ALTER COLUMN address DROP NOT NULL; ولإضافة قيد على مستوى الجدول students بأن يكون هذا العمود مفتاحًا ثانويًا باسم st_fk يرتبط مع الجدول addresses عبر العمود address: ALTER TABLE students ADD CONSTRAINT st_fk FOREIGN KEY (address) REFERENCES addresses (address); ولجعل هذا العمود بقيمة فريدة بقيدٍ باسم add_uniq: ALTER TABLE students ADD CONSTRAINT add_uniq UNIQUE (address); ولحذفه من جديد: ALTER TABLE students DROP COLUMN address; ولجعل العمود studentID مفتاحًا أوليًا للجدول students: ALTER TABLE students ADD PRIMARY KEY (studentID); ولإعادة تسمية الجدول باسم schoolStudents: ALTER TABLE students RENAME TO schoolStudents; حذف الجدول DROP TABLE يستخدم هذا الأمر لحذف جدول أو أكثر من قاعدة البيانات، وله البنية العامّة الآتية: DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ] إذ يُحذف الجدول المحدد باسم name، وتمنع IF EXISTS حدوث أي خطأ في حال عدم وجود هذا الجدول في قاعدة البيانات، أما الكلمة المفتاحية CASCADE فهي للإعلام بحذف أي كائنات objects معتمدة عليه (مثل Views)، وبالحالة الافتراضية فإن RESTRICT تمنع حذفه إن كان هناك اعتماد عليه من قبل كائن ما. أما لحذف كافة السجلات من الجدول دون الحاجة إلى حذفه يمكن استخدام الأمر DELETE. مثال لحذف الجدولين Students و Teachers من قاعدة البيانات يستخدم الأمر الآتي: DROP TABLE Students, Teachers; أما لحذف الجدول Courses دون تنفيذ أي أمر في حال عدم وجوده: DROP TABLE IF EXISTS Courses; التعامل مع الدوال بعض الدوال المساعدة في SQL محتويات · 1الدوال الرياضية · 2الدوال النصيّة · 3مثال · 4توافقية الدوال مع محركات البيانات الدوال الرياضية الدالة مهمتها COUNT(*)‎ تعيد عدد السجلات الموجودة في الجدول MAX(col_name)‎ تعيد القيمة الأكبر في حقل col_name في سجلات الجدول MIN(col_name)‎ تعيد القيمة الأصغر في حقل col_name في سجلات الجدول AVG(col_name)‎ تعيد قيمة المتوسط الحسابي لقيم الحقل col_name في سجلات الجدول SUM(col_name)‎ تعيد قيمة مجموع قيم الحقل col_name في سجلات الجدول SQRT(m)‎ تعيد قيمة الجذر التربيعي للقيمة m (قد تكون قيمة أحد الحقول) RAND()‎ تعيد قيمة عشوائية مُولّدة واقعة في المجال ما بين القيمة 0 والقيمة 1 MOD(N,M)‎ تعيد باقي قسمة N على M OCT(N)‎ تعيد سلسلة من الخانات الثنائية bits تعبر عن تمثيل العدد N بالنظام الثماني Octal HEX(N)‎ تعيد سلسلة نصية تعبّر عن تمثيل N بالنظام الست عشري Hexadecimal PI()‎ تعيد قيمة النسبة PI POW(X,Y) | POWER(X,Y)‎ تعيد قيمة العدد X مرفوعًا للقوة Y ROUND(X)‎ تعيد أقرب صحيح يمكن تقريب العدد X له الدوال النصيّة الدالة مهمتها CONCAT('string1','string2')‎ تعيد سلسلة نصية وحيدة ناتجة عن لربط السلسلتين 'string1' و 'string2' LOWER('string')‎ تعيد سلسلة نصية بعد تحويل كافة الأحرف الواردة في السلسلة 'string' إلى حالة الأحرف الصغيرة UPPER('string')‎ تعيد سلسلة نصية بعد تحويل كافة الأحرف الواردة في السلسلة 'string' إلى حالة الأحرف الكبيرة CHAR_LENGTH('string')‎ تعيد عدد أحرف السلسلة النصية 'string' TRIM('string')‎ تعيد السلسلة النصية 'string' بعد إزالة الفراغات على طرفيها (إن وُجدت) مثال إذا كان الجدول الآتي cars موجودًا في قاعدة البيانات: Colour Price Year Company Model CarID White 22,500 2018 KIA Optima 05081 Red 25,995 2017 KIA Optima Hybrid 05082 Red 31,900 2018 KIA Stinger 05083 Black 31,990 2017 KIA Cadenza 05084 Blue 23,240 2018 KIA Niro 05085 Grey 14,200 2018 KIA Rio 5-Door 05086 Blue 18,200 2018 KIA Forte5 05087 Blue 32,250 2017 KIA Soul EV 05088 Red 23,385 2017 Nissan Altima 05089 White 46,195 2017 Nissan Armada 05090 Black 33,495 2017 Nissan Maxima 05091 Black 30,715 2017 Nissan Murano 05092 Grey 31,265 2017 Nissan Pathfinder 05093 White 17,875 2017 Nissan Sentra 05094 Red 12,875 2017 Nissan Versa 05095 إن تنفيذ الاستعلام الآتي: SELECT count(*) AS Total Number, MAX(Price) AS Most Expensive, MIN(Price) AS Cheapest, ROUND(AVG(Price)) AS Average, SUM(Price) AS Total Sum FROM cars; سيُظهر العدد الإجمالي للسيارات الموجودة في الجدول بمسمى Total Number وقيمة السيارة الأعلى سعرًا بمسمى Most Expensive وقيمة السيارة الأقل سعرًا Cheapest والمتوسط الحسابي لسعر السيارات من بعد تقريبه لأقرب عدد صحيح Average والمجموع الإجمالي لأسعار السيارات Total Sum، لتظهر النتائج الآتية: Total Sum Average Cheapest Most Expensive Total Number 396,080 26,404 12,875 46,195 15 وعند تنفيذ الاستعلام الآتي: SELECT CONCAT(UPPER(Model), ' - ' , Company, ' - ' , LOWER(Colour)) AS Name FROM cars ORDER BY RAND(); سيظهر عمود واحد يحتوي على نوع السيارة (بعد تحويله لأحرف كبيرة) متبوعًا بشركتها المنتجة ولونها (بعد تحويله لأحرف صغيرة)، وترتيب النتائج الصادرة ترتيبًا عشوائيًا، لتظهر النتائج الآتية: Name RIO 5-DOOR - KIA - grey STINGER - KIA - red ARMADA - Nissan - white SOUL EV - KIA - blue PATHFINDER - Nissan - grey MAXIMA - Nissan - black ALTIMA - Nissan - red OPTIMA HYBRID - KIA - red OPTIMA - KIA - white MURANO - Nissan - black CADENZA - KIA - black NIRO - KIA - blue FORTE5 - KIA - blue SENTRA - Nissan - white VERSA - Nissan - red توافقية الدوال مع محركات البيانات الدالة MySQL PostgreSQL Oracle SQLite SQL Server COUNT(*)‎ نعم نعم نعم نعم نعم MAX(col_name)‎ نعم نعم نعم نعم نعم MIN(col_name)‎ نعم نعم نعم نعم نعم AVG(col_name)‎ نعم نعم نعم نعم نعم SUM(col_name)‎ نعم نعم نعم نعم نعم SQRT(m)‎ نعم نعم نعم لا نعم RAND()‎ نعم RANDOM()‎ DBMS_RANDOM.VALUE()‎ RANDOM()‎ نعم MOD(N,M)‎ نعم نعم نعم % % OCT(N)‎ نعم لا لا لا لا HEX(N)‎ نعم TO_HEX(N)‎ RAWTOHEX(N)‎ نعم لا PI()‎ نعم نعم نعم نعم نعم POW(X,Y) | POWER(X,Y)‎ نعم نعم نعم لا نعم ROUND(X)‎ نعم نعم نعم نعم نعم CONCAT('string1','string2')‎ نعم نعم نعم || نعم LOWER('string')‎ نعم نعم نعم نعم نعم UPPER('string')‎ نعم نعم نعم نعم نعم CHAR_LENGTH('string')‎ نعم نعم LENGTH('string')‎ LENGTH('string')‎ LEN('string')‎ · إنشاء دالة CREATE FUNCTION في SQL يستخدم هذا الأمر لتعريف دالة جديدة، وله البنية العامّة الآتية: CREATE [ OR REPLACE ] FUNCTION name ( [[argmode] [ argname ] argtype [, ...] ] ) [RETURNS rettype] AS 'definition' إذ ينشئ هذا الأمر دالةً جديدةً (أو يستبدلها في حال وجود دالة سابقة) باسم name وتوضع معاملاتها ما بين القوسين وذلك بتحديد نوع المعامل argmode (كدخل IN أو خرج OUT أو دخل وخرج معًا INOUT) ومن ثم اسم المعامل argname ونوع قيمته argtype وكما يمكن تحديد نوع القيمة المُعادة rettype. أمثلة لإنشاء دالة باسم add لجمع عددين صحيحين وإعادة الناتج، يُستخدَم الأمر: CREATE FUNCTION add(x INTEGER, y INTEGER) RETURNS INTEGER AS RETURN x + y; لإنشاء دالة باسم hello تعيد العبارة النصية Hello مضافةً لها السلسلة s التي تدخل للدالة في لائحة المعاملات، يُستخدَم الأمر: CREATE FUNCTION hello (s VARCHAR(20)) RETURNS VARCHAR(50) AS RETURN CONCAT('Hello, ',s,'!'); إذ إن الدالة CONCAT تستخدم للربط ما بين السلاسل النصية التي تدخل في معاملاتها. لإنشاء دالة باسم get_count تعيد عدد السجلات الموجودة في جدول students عبر متحول باسم num، يُستخدَم الأمر: CREATE FUNCTION get_count (OUT num INTEGER) AS SELECT COUNT(*) INTO num FROM students; تعديل الدالة ALTER FUNCTION في SQL يستخدم هذا الأمر لتعديل تعريف دالة مُعرَّفة مسبقًا عبر الأمر CREATE FUNCTION، وله الصيغ الآتية: ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] RENAME TO new_name; لإعادة تسمية الدالة name (والتي معاملاتها محددة بالنوع argmode والاسم argname ونوع البيانات argtype) باسم جديد new_name. ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] OWNER TO { new_owner | CURRENT_USER | SESSION_USER }; لنقل ملكية الدالة name (والتي معاملاتها محددة بالنوع argmode والاسم argname ونوع البيانات argtype) إلى مالك جديد new_owner أو المستخدم الحالي CURRENT_USER. أما لتغيير مهمة الدالة (بنيتها الداخلية body) فيُستخدم الأمر بالشكل: ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) RETURNS return_data_type [ AS ] BEGIN function_body RETURN scalar_expression END ; إذ يمكن تعديل أيّ من الخصائص الواردة بتعريف الدالة كما هو الحال عند إنشائها عبر الأمر CREATE FUNCTION. أمثلة لإعادة تسمية الدالة sqrt لتصبح باسم square_root، يستخدم الأمر: ALTER FUNCTION sqrt(integer) RENAME TO square_root; لتعديل الدالة get_count المُنشأة مسبقًا لتعيد عدد السجلات التي يكون فيها معدل الطالب أكبر من 2 بدلًا من العدد الإجمالي، يستخدم الأمر: ALTER FUNCTION get_count (OUT num INTEGER) AS SELECT COUNT(*) INTO num FROM students WHERE GPA>2; حذف الدالة DROP FUNCTION يستخدم هذا الأمر لحذف دالة (أو إجراء) أو أكثر مُعرَّفة مسبقًا عبر الأمر CREATE FUNCTION، وله البنية العامّة الآتية: DROP {FUNCTION | PROCEDURE} [ IF EXISTS ] name [ ( [argtype [, ...] ] ) ] [, ...] [ CASCADE | RESTRICT ] إذ تُحذف الدالة المحدد باسم name، وتمنع IF EXISTS حدوث أي خطأ في حال عدم وجود دالة بهذا الاسم في قاعدة البيانات، ويُحدد نوع البيانات لمتغيرات الدالة ما بين قوسين لاحتمال تكرار نفس اسم الدالة بلائحة مختلفة لمتغيراتها، أما الكلمة المفتاحية CASCADE فهي للإعلام بحذف أي كائنات objects معتمدة على الدالة، وبالحالة الافتراضية فإن RESTRICT تمنع حذفها إن كان هناك اعتماد عليها من قبل كائن ما. ويمكن الاستغناء عن لائحة المتغيرات للدالة في حال كان اسمها فريدًا. مثال لحذف الدالتين باسم findSqrt (مع اختلاف نوع العدد) يستخدم الأمر الآتي: DROP FUNCTION findSqrt(INTEGER), findSqrt(BIGINTEGER); تعبير الإعادة RETURN في SQL تستخدم لإنهاء الدالة وإعادة قيمة ما للموقع الذي استُدعيت فيه الدالة، وتكون الصيغة العامّة بالشكل الآتي: RETURN [expression]; إذ إن expression هي قيمة التعبير التي ستُعاد (وقد تكون قيمة أوليّة scalar مباشرة أو قيمة مركّبة كسجل)، أما إن كانت الدالة تحتوي بتعريفها متحولات للخرج (من نوع OUT) أو عند الحاجة للخروج من الدالة فيُكتفى بكلمة RETURN فقط، أي بالشكل الآتي: RETURN; مثال تعيد الدالة الآتية double_it المُعرَّفة من المستخدم عبر محرك Oracle القيمة العددية (نوعها NUMBER) المُدخلة إليها بعد مضاعفتها: FUNCTION double_it (n NUMBER) RETURN NUMBER IS BEGIN RETURN n * 2; END double_it; التعامل مع العرض إنشاء العرض CREATE VIEW يستخدم هذا الأمر لإنشاء عرضٍ والذي هو عبارة عن جدول افتراضي يُبنى بالاعتماد على نتائج استعلامٍ ما، وله البنية العامّة الآتية: CREATE VIEW name [ ( col_name [, ...] ) ] AS query إذ إن name هو اسم العرض المُنشَأ وتُحدّد الأعمدة المطلوبة بين قوسين، وتُعبِّر كلمة query عن الاستعلام الذي سيُؤخذ العرضُ منه، ويُمكن استخدام هذا العرض المنشأ في عبارة FROM بأي استعلام SELECT آخر. مثال لإنشاء عرض باسم novels يحتوي كافة الكتب الروائية المتوفرة في سجلات المكتبة الموجودة بالجدول books، يستخدم الأمر التالي: CREATE VIEW novels AS SELECT * FROM books WHERE category= 'Novel'; تعديل العرض ALTER VIEW يستخدم هذا الأمر لتعديل عرضٍ مُنشَأ مسبقًا عبر الأمر CREATE VIEW، وله الصيغ الآتية: ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] col_name SET DEFAULT expression; لتحديد قيمة افتراضية expression للعمود col_name الموجود في العرض name (إن وُجد). ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] col_name DROP DEFAULT; لحذف القيمة الافتراضية للعمود col_name الموجود في العرض name (إن وُجد). ALTER VIEW [ IF EXISTS ] name OWNER TO new_owner; لنقل ملكية العرض name إلى المالك new_owner. ALTER VIEW [ IF EXISTS ] name RENAME TO new_name; لإعادة تسمية العرض name باسم new_name. ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] ); لتعديل أيّ من قيم الخيارات options العرض name. ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] ); لإعادة ضبط أيّ من قيم الخيارات options العرض name لتصبح القيمة الافتراضية. ALTER VIEW name [(column_list)] AS select_statement; لتعديل تعريف العرض name ليصبح اعتمادًا على استعلام جديد select_statement. مثال لإعادة تعريف العرض novels المنشَأ مسبقًا نستخدم الأمر التالي: ALTER VIEW novels AS SELECT * FROM books WHERE category = ‘novel’ OR category = 'story' ; لضبط القيمة الافتراضية 'anonymous' لعمود author في العرض novels يستخدم الأمر: ALTER VIEW novels ALTER author SET DEFAULT 'anonymous'; لإعادة تسمية العرض باسم novels ليصبح stories، يستخدم الأمر التالي: ALTER VIEW novels RENAME TO stories; حذف العرض DROP VIEW يستخدم هذا الأمر لحذف view أو أكثر مُنشئ مسبقًا عبر الأمر CREATE VIEW، وله البنية العامّة الآتية: DROP VIEW [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ] إذ يُحذف view المحدد باسم name، وتمنع IF EXISTS حدوث أي خطأ في حال عدم وجوده في قاعدة البيانات، أما الكلمة المفتاحية CASCADE فهي للإعلام بحذف أي كائنات objects معتمدة عليه، وبالحالة الافتراضية فإن RESTRICT تمنع حذفه إن كان هناك اعتماد عليه من قبل كائن ما. مثال لحذف view باسم showKinds يستخدم الأمر الآتي: DROP VIEW showKinds;
  16. Derbali بالفرنسية اي دربالي باللغة العربية وهو لقب العائلة : لقب منتشر كثيرا بتونس و الجزائر و المغرب و ليبيا مشكور اخي على المرور و على قول استاذنا :Eng.Qassim I care of my self على الاقل في جانب تعلم البرمجة
  17. رحم الله والديك على هذا المثال الجيد صراحة ابدعت استاذي الكريم
  18. قمنا بتصميم قاعدة بيانات و مررنا بكل المراحل بمساعدة الاساتذة الافاضل ووفقنا في ذلك و الحمد لله : لكن لنفترض ان اصبح للبرنامج مثلا 3 سنوات شغل و اصبح يتطلب تحيين و ترقية و اظافة جداول و استعلامات و حذف اخرى : كيف نستطيع فعل ذلك ؟
  19. السلام عليكم و رحمة الله و بركاته : لي طلب للاخوة هل بالامكان مدي بكود او رابط موجود بالمنتدى لطريقة حذف بيانات عدة جداول حسب الخيارات : مثلا عندما اضغط على زر الحذف ينبثق مثلا نموذج فيه جملة من الخيارات مثل هل تريد حذف بيانات الجدول مثلا 1 او 2 او 3 او 4 و هكذا دواليك مشكورين على التفاعل و المساعدة و جعلها الله في ميزان حسناتك
  20. مشاء الله شكرا للاستاذ على النموذج الجيد و السريع و البسيط جعله الله في ميزان حسناتك
  21. وجدت هذه الاكواد فاردت ان يستفاد منها المبرمج المبتدئ مثلي 1 DoCmd.OpenForm "", acNormalفتح نموذج 2 DoCmd.OpenQuery "", acViewNormalفتح استعلام 3 DoCmd.OpenReport "", acViewNormalفتح تقرير 4 DoCmd.OpenTable "", acViewDesignفتح جدول 5 DoCmd.CloseacForm, "" فتح نموذج 6 DoCmd.CloseacQuery, "" فتح استعلام 7 DoCmd.CloseacReport, "" فتح تقرير 8 DoCmd.CloseacTable, "" فتح جدول 9 DoCmd.Beepصوت بيب + فيديو 10 DoCmd.CancelEventالغاء الامر 11 DoCmd.Quitاغلاق البرنامج 12 DoCmd.CloseDatabaseاغلاق قاعدة البيانات 13 DoCmd.DeleteObjectacForm, "" حذف نموذج 14 DoCmd.DeleteObjectacQuery, "" حذف استعلام 15 DoCmd.DeleteObjectacReport, "" حذف تقرير 16 DoCmd.DeleteObjectacTable, "" حذف جدول 17 DoCmd.GoToRecord , , acFirstالذهاب للسجل الاول 18 DoCmd.GoToRecord , ,acLastالذهاب للسجل الاخير 19 DoCmd.GoToRecord , ,acNewRecالذهاب للسجل الجديد 20 DoCmd.GoToRecord , ,acNextالذهاب للسجل التالى 21 DoCmd.GoToRecord , ,acPreviousالذهاب للسجل السابق 22 DoCmd.GoToRecord , , acGoTo, 2 الذهاب للسجل رقم2 23 DoCmd.Maximizeتكبير 24 DoCmd.Minimizeتصغير 25 DoCmd.Restoreاستعادة الوضع 26 DoCmd.MoveSize 2000, 5000 تموضع النموذج من الاعلى5000 واليسار2000 27 DoCmd.RefreshRecordتحديث الصفحة 28 DoCmd.Rename "2", acForm, "20" تغير اسم نموذج من 20 الى2 29 DoCmd.Rename "2", acQuery, "20" تغير اسم استعلام 30 DoCmd.Rename "2", acReport, "20" تغير اسم تقرير 31 DoCmd.Rename "2", acTable, "20" تغير اسم جدول 32 DoCmd.Requeryاعادة الاستعلام 33 [].Requeryاعادة استعلام داخل متغير 34 DoCmd.RunCommandacCmdDataEntryتحويل النموذج الى ادخال بيانات فقط 35 DoCmd.RunCommandacCmdNewObjectFormفتح معالج نموذج 36 DoCmd.RunCommandacCmdNewObjectQueryفتح معالج استعلام 37 DoCmd.RunCommandacCmdNewObjectReportفتح معالج تقرير 38 DoCmd.RunCommandacCmdNewObjectTableفتح معالج جدول 39 DoCmd.RunCommandacCmdOptionsفتح شاشة خيارات 40 DoCmd.RunCommandacCmdStartupPropertiesفتح بدا التشغيل 41 DoCmd.RunCommandacCmdOutputToExcelتصدير نموذج مجدول الى اكسيل 42 DoCmd.RunCommandacCmdPrintمربع حوار الطباعة 43 DoCmd.RunCommandacCmdQuickPrintطباعة الحالى 44 DoCmd.RunCommandacCmdRegisterActiveXControlsإظهار مربع حوار تسجيل عناصر تحكم أكتف أكس 45 DoCmd.RunCommandacCmdRelationshipsالعلاقات 46 DoCmd.RunCommandacCmdUndoتراجع عن 47 DoCmd.RunCommandacCmdWindowHideاخفاء جزء الانتقال 48 DoCmd.OpenReport "2", acViewPreviewDoCmd.RunCommand acCmdZoom500 فتح التقرير فى حجم 5 اضعاف 49 DoCmd.SetWarnings False ايقاف رسائل التاكيد الاجرائية 50 DoCmd.ShowToolbar "ribbon", acToolbarNoاخفاء الاشرطة
  22. استاذي الكريم اذا ممكن هل بالامكان ارفاق مثال بسيط و مشكور
  23. نجحت العملية بامتياز بارك الله فيكم و جعل اعمالكم في ميزان حسنتاكم .....
×
×
  • اضف...

Important Information