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

أبو امين

03 عضو مميز
  • Posts

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

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

مشاركات المكتوبه بواسطه أبو امين

  1. استاذي الكريم : نجحت العملية و استطعت الدخول للاستيراد لكن تخرج رسالة مثل ما هو مبين بالصورة 

     

    7878.PNG.d918254db306e94f4f37ff95d25f2580.PNG

     

    مع العلم ان الجدول الذي اردت تصديره يوجد به 4 حقول فقط و هم

    1/ الاسم و اللقب 

    2/ تاريخ الولادة 

    3/ الجنس 

    4/ اسم الاب 

    في حين الجدول الموجود بالاكساس يوجد به العديد من الحقول 

    هل ان المشكلة تتمثل في ضرورة وجود نفس الحقول في الاكسيس و الاكسال ام هناك مشكلة اخرى 

     

    4545.PNG.c7895a6c6f7948171ae13314a11ab995.PNG

     

  2. استاذي الكريم طبقت الكود مثلما ذكر لكن اولا 

    1/ المكتبة التي ذكرتها لم اجدها و انما وجدت المكتبة التالية المبينة بالصورة 

    55.PNG.dacde267970f7fc7b8a800cb60820c10.PNG

    2/ عندما اردت استيراد الحقول ظهر هذا الخطا 

    555.PNG.df750643cbba7cb94ece9f26559c45db.PNG

     

    مع العلم انني مثبت الاكساس 2010 على حاسوبي بنظام 32 بايت 

    و اشتغل على اكسيس 2007 

    شكرا 

  3. في 16‏/5‏/2022 at 20:16, ابا عمرو said:

    الاساتذة أعضاء المنتدى الكرام / السلام عليكم ورحمة الله

    لدي قاعدة بيانات اكسس 2003 تم انشاءها منذ فترة طويلة جدا

    في اسماء الحقول في الجدول قمت بتسجيل الاسماء باللغة الانجليزية

    وفي الخصائص قمت بتسجيل في تسمية توضيحة بالاسماء العربية لكل حقل

    المشكلة عند تصدير الجدول في جداول اكسل تظهر عناوين بعض الحقول باللغة الاجنبية

    المطلوب تحويل اسماء الاعمدة عند تصدير الجداول الى اكسل تظهر باللغة العربية في الاكسل

    علما بأن بعض اسماء هذه الاعمدة تظهر باللغة العربية وذلك منذ انشائها قديما (وبنفس الطريقة) ولم أنجح حاليا في تحويل جميع الحقول باللغة العربية لاني نسيت كيف تم تحويلها سابقا الى اللغة العربية في جداول اكسل
    وجزاكم الله خيرا

    السلام عليكم و رحمة الله و بركاته هذه صورة تبين لك كيفية جعل  تسمية الحقول بالعربية  انظر للون الاصفر : تسمية class  تسمية الحقل في الجدول ثم انظر اسفل الصورة  اللون الاصفر امام كلمة legend اكتب التسمية بالعربية و ستظهر لك ان شاء الله في الاكساس بالعربية 00000.PNG.f3d29b840e09d7d7efe17ae08798f406.PNG

  4. السلام عليكم و رحمة الله و بركاته اساتذتي الافاضل هذا بالنسبة لاستيراد جدول كامل من الاكسال الى الاكساس

    و في  عندما اريد جلب حقل او اثنين فقط من جدول اكسال لاضافتهما الى جدول موجود بالاكسيس 

    مثال :

    لي جدول على الاكسال يحتوي على

    1/ الاسم و اللقب 

    2/ تاريخ الولادة 

    3/ الجنس 

    4/ اسم الاب 

    و جدول على الاكسيس يحتوي 

    1/ الاسم و اللقب 

    2/ تاريخ الولادة 

    3/ الجنس 

    4/ اسم الاب 

    5/ القسم 

    6/ المنحة 

    7/ الحالة 

     

    لكنني اريد جلب الحقول التالية من الاكسال و اضافتها مكان نفس الحقول  في الاكسيس 

    1/ الاسم و اللقب 

    2/ تاريخ الولادة 

    3/ الجنس 

    4/ اسم الاب 

    حيث ياخذ حقل :

    الاسم و اللقب) من جدول الاكسال مكان حقل (الاسم و اللقب) بجدول الاكسيس 

    تاريخ الولادة) من جدول الاكسال مكان حقل (تاريخ الولادة) بجدول الاكسيس 

    الجنس ) من جدول الاكسال مكان حقل (الجنس ) بجدول الاكسيس 

    و هكذا دواليك 

     

    شكرا على كل حال و على المساعدة و النصح و الارشاد الذي تقدمونه لكل مبتدئ بهذا المنتدى الرائع 

  5. السلام عليكم و رحمة الله و بركاته اساتذتي الافاضل هذا بالنسبة لاستيراد جدول كامل من الاكسال الى الاكساس

    و في  عندما اريد جلب حقل او اثنين فقط من جدول اكسال لاضافتهما الى جدول موجود بالاكسيس 

    مثال :

    لي جدول على الاكسال يحتوي على

    1/ الاسم و اللقب 

    2/ تاريخ الولادة 

    3/ الجنس 

    4/ اسم الاب 

    و جدول على الاكسيس يحتوي 

    1/ الاسم و اللقب 

    2/ تاريخ الولادة 

    3/ الجنس 

    4/ اسم الاب 

    5/ القسم 

    6/ المنحة 

    7/ الحالة 

     

    لكنني اريد جلب الحقول التالية من الاكسال و اضافتها مكان نفس الحقول  في الاكسيس 

    1/ الاسم و اللقب 

    2/ تاريخ الولادة 

    3/ الجنس 

    4/ اسم الاب 

    حيث ياخذ حقل :

    الاسم و اللقب) من جدول الاكسال مكان حقل (الاسم و اللقب) بجدول الاكسيس 

    تاريخ الولادة) من جدول الاكسال مكان حقل (تاريخ الولادة) بجدول الاكسيس 

    الجنس ) من جدول الاكسال مكان حقل (الجنس ) بجدول الاكسيس 

    و هكذا دواليك 

     

    شكرا على كل حال و على المساعدة و النصح و الارشاد الذي تقدمونه لكل مبتدئ بهذا المنتدى الرائع 

  6. في 4‏/1‏/2004 at 03:40, Alhaithm said:

    الأخوة الأعزاء

    تحياتي وتقديري لكم على جهودكم

    بالرغم من أنكم لم توفقوا في الإجابة أو فهم ما أريد.

     

    وقد وجدت الجواب وانتهت المشكلة ، شكرا ، شكرا ، شكرا.

    مادام من الله سبحانه و تعالى عليك بالاجابة افدنا بها حتى نتمكن من التعلم و شكرا حتى لا نكون من المستهلكين فقط ههههههه

  7. كيفية تحويل ملف أكسيس ( 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=sharing0.PNG.4e0c3fe505721b9fcf01591adf36c009.PNG

     

     

     

  8. الان, محمد احمد لطفى said:

    من تنسيق الخلية فى الجدول اجعله 

    d/m/yyyy
    or 
    dd/mm/yyyy

    حسب ما تريد 🚋

     

    test.mdb 380 kB · 0 downloads

    مشكور استاذ :          محمد احمد لطفى         على المعلومة القيمة : بارك الله فيك 

     

    تابعت المثال وهو حل جيد التحويل من

    DD/MM/YYYY   الى YYYY/MM/DD    حتى يصبح التاريخ مقروء بالعربي 
     

     

    • Like 2
    • Thanks 1
  9. في 10‏/2‏/2022 at 14:11, Ahmed_J said:

    السلام عليكم

    توجد اكثر من طريقة لاستيراد ملفات الاكسل الى الاكسس

    احدى هذه الطرق هذا الملف لاحد الاخوة بالموقع

    اول شيء تختار مسار الملف

    ثاني شيء تختار اسم ورقة العمل من القائمة المنسدلة تحت مسار الملف

    ثالث شيء تضغط على البيانات من ملف اكسل

    اتمنى ان يكون المطلوب

    Ju_ Import Frome Excel File.rar 152.1 kB · 22 downloads

    ما شاء الله شكرا كثيرا على هذا المثال الرائع 

    • Like 1
  10.  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;

     

    • Like 2
  11. Derbali بالفرنسية اي دربالي باللغة العربية وهو لقب العائلة : لقب منتشر كثيرا بتونس و الجزائر و المغرب و ليبيا 

    مشكور اخي على المرور 

    و على  قول استاذنا :Eng.Qassim

    I care of my self 

    على الاقل في جانب تعلم البرمجة 

    • Like 1
  12. في 18‏/8‏/2021 at 21:42, د.كاف يار said:

    تفضل هذا التعديل شامل لكل ما طلبت

    سوف تتمكن من اختيار الجداول التي ترغب في افراغ البيانات منها

    الرقم السري داخل الكود لإفراغ البيانات 123

    T2t2.accdb 868 kB · 15 downloads

    رحم الله والديك على هذا المثال الجيد صراحة ابدعت استاذي الكريم 

  13. قمنا بتصميم قاعدة بيانات و مررنا بكل المراحل بمساعدة الاساتذة الافاضل ووفقنا في ذلك و الحمد لله

    لكن لنفترض ان اصبح للبرنامج مثلا 3 سنوات شغل و اصبح يتطلب تحيين و ترقية و اظافة جداول و استعلامات و حذف اخرى

    كيف نستطيع فعل ذلك ؟

  14. السلام عليكم و رحمة الله و بركاته : 

    لي طلب للاخوة هل بالامكان مدي بكود او رابط موجود بالمنتدى لطريقة حذف بيانات عدة جداول حسب الخيارات : 

    مثلا عندما اضغط على زر الحذف ينبثق مثلا نموذج فيه جملة من الخيارات مثل هل تريد حذف بيانات الجدول مثلا 1 او 2 او 3 او 4 و هكذا دواليك 

    مشكورين على التفاعل و المساعدة و جعلها الله في ميزان حسناتك

  15. وجدت هذه الاكواد فاردت ان يستفاد منها المبرمج المبتدئ مثلي 

    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اخفاء الاشرطة

     

    • Like 3
    • Thanks 1
×
×
  • اضف...

Important Information