إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

HowTo : MySQL -----> Part_2

تقليص
هذا الموضوع مغلق.
X
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • HowTo : MySQL -----> Part_2

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

    لاي استفسارات تخص هذه الدوره بامكـانك وضعهـا هنـا :
    استفسـارات HowTo : MySQL

    نبدأ مع عنوان الموضوع وهو إستخدامات متقدمة لنظام إدارة قواعد البيانات MySQL ، فى السابق كنا نتحدث عن بعض الأمور الأساسية والتى تُشكل قاعدة أساسية للتعامل مع خادم MySQL بشكل قد يكون يومى لدى البعض ، وتطرقنا إلى عدة نقاط مهمة وقمنا بتطبيق عدة أمثلة على تلك النقاط وأعتقد أننا قد وفينا بشكل أو بآخر تلك النقاط أو على الأقل قمنا بذكر أمثلة مهمة تُوضح وظائف تلك النقاط وتستطيع مراجعة الموضوع على الرابط التالى :



    ومن الآن فصاعداً سنبدأ فى ذكر بعض النقاط المهمة الأخرى والتى تميل إلى الإستخدامات المتقدمة نوعاً ما ، وبالتالى ستشعر بقوة ومتانة MySQL فى أداء وظائف قد ﻻ يتخيلها أو يُدركها البعض ومن ضمن هذه النقاط :


    * دوال المجموع أو Aggregate Functions
    * إستخدام جملة HAVING
    * إستخدامات أخرى لجملة أمر Select
    * الدوال الحسابية فى MySQL أو Mathematical Functions
    * تحديث السجلات (Records) بإستخدام جملة أمر Update


    النقاط الخمس السابقة تحتوى تفاصيل ونقاط فرعية سنقوم بشرحها لاحقاً ، ولكن فى البداية سنغير من خطة العمل التى كنا نعمل عليها بمعنى توجد لدينا الآن شركة ما (نفترض أن إسمها linuxsoft) هذه الشركة متخصصة فى عمل تطبيقات مختلفة تخص نظام التشغيل جنو/لينوكس ، وتريد الشركة عمل قاعدة بيانات تضم تفاصيل الموظفين لديها من أسماء الموظفين ، ورواتبهم ، وعدد سنين العمل فى الشركة لكل موظف ، كذلك الألقاب الوظيفية لكل موظف بالإضافة إلى أعمار هؤﻻء المُوظفين ، علاوة على ذلك عناوين البريد الإلكترونى الخاصة بالموظفين .


    طبعا بدأنا الآن فى عمل حقيقى أى أننا سنتمكن من عمل تطبيق حقيقى يُستخدم فعلياً داخل الشركات التى تحوى عدد من الموظفين ، ونبدأ مباشرة فى تحليل التطبيق السابق لنعرف ماهو المطلوب عمله لكى نبنى قاعدة البيانات تلك :

    أوﻻً : فى البداية سنقوم بإنشاء قاعدة بيانات تخص الموظفين ولذلك سنقوم بتسمية قاعدة البيانات تلك بإسم employees للدلالة على أن هذه القاعدة تخص موظفين .

    ثانيا : سنقوم بإنشاء جدول داخل قاعدة البيانات employees ونقوم بتسميته employee_data أو employee_detail اختر ما يناسبك .

    ملحوظة : إختيار إسم للجدول من الإسمين السابقين ليس فرض اختر أى إسم يحلو لك .

    ثالثا : نبدأ فى تحليل الأعمدة والحقول المطلوب عملها وإنجازها ، سنحتاج إلى التالى :

    * عمود أو حقل لبيان الترتيب الرقمى للموظفين داخل الشركة ونسميه مثلا emp_id أو اختصاراً ل employee identifier .
    * عمود أو حقل لتعريف الإسم الأول بالموظفين ونقوم بتسميته على سبيل المثال f_name أى first name .
    * عمود أو حقل لتعريف الإسم الأخير بالموظفين ونقوم بتسميته ب l_name أى last name .
    * عمود أو حقل لتعريف اللقب الوظيفى للموظف وليكن مثلاً title .
    * عمود أو حقل لتعريف العمر الخاص بكل موظف داخل الشركة ويكون إسم العمود age .
    * عمود أو حقل لتعريف عدد سنين العمل لكل موظف داخل الشركة وليكن إسم العمود yos أو اختصاراً ل years of service .
    * عمود أو حقل لتعريف رواتب الموظفين داخل الشركة وليكن إسم العمود salary .
    * عمود أو حقل لتعريف حوافز الموظفين ونقوم بتسمية العمود بإسم perks .
    * عمود او حقل لتعريف عناوين البريد الإلكترونى للموظفين تحت إسم email .


    من التحليل السابق لقاعدة البيانات التى سوف نقوم بإنشائها أننا سوف نحتاج إلى جدول تحت إسم employee_data بالإضافة إلى تسعة أعمدة هى على الترتيب التالى :

    كود:
    1- emp_id  ( data type = integer )
    2- f_name  ( data type = varchar(25) )
    3- l_name  ( data type = varchar(25) )
    4- title   ( data type = varchar(50) )
    5- age     ( data type = integer )
    6- yos     ( data type  = integer )
    7- salary  ( data type = integer )
    8- perks   ( data type = integer )
    9- email   ( data type = varchar(60) )
    كما تلاحظ كتبنا الأعمدة المطلوبة والتى ينبغى أن تكون مُدرجة داخل الجدول employee_data كما أننا أيضا قمنا بتعريف نوع البيانات التى سيتم إدخالها فى كل عمود سواء كانت تلك البيانات متغيرات نصيبة (strings) أو متغيرات عددية صحيحة (integers) ، سنقوم الآن بالشروع فى إنشاء قاعدة البيانات الجديدة والتى قلنا أنها سوف تحمل الإسم employees كما يلى :

    كود:
    mysql> create database employees;
    Query OK, 1 row affected (0.02 sec)
    ثم نتأكد من إنشاء القاعدة بإستخدام الأمر show databases كما يلى :


    فعلا تم إنشاء القاعدة ، الخطوة التالية نقوم بإنشاء الجدول من خلال الأمر create table والذى سيكون بإسم employee_data ، ثم نقوم بإضافة الأعمدة السابقة مع أنواع البيانات التى سوف تخص كل عمود على حده بالشكل التالى :

    كود:
    mysql> CREATE TABLE employee_data
        -> (
        -> emp_id int unsigned not null auto_increment primary key,
        -> f_name varchar(20),
        -> l_name varchar(20),
        -> title varchar(30),
        -> age int,
        -> yos int,
        -> salary int,
        -> perks int,
        -> email varchar(60)
        -> );
    Query OK, 0 rows affected (0.13 sec)
    لمراجعة تفاصيل إنشاء الجدول إنظر الجزء الأول من الموضوع على الرابط التالى :



    بعد أن قمنا بتنفيذ جملة أمر create table سنتأكد الآن من إضافة الأعمدة بشكل صحيح ، كذلك نوع البيانات التى تخص كل عمود هل هى فعلاً ما نريده أم ﻻ بإستخدام الأمر describe :


    الآن تأكدنا من أن كل شىء يسير على ما يرام ، سنقوم الآن بإدخال بيانات الموظفين إلى الجدول empolyee_data بإستخدام جملة أمر insert into ولكن عملية الإدخال ستتم من خلال إستيراد ملف نصى جاهز يحتوى على جمل أمر insert into بكافة البيانات المطلوبة وتسطيع تحميل الملف من على الرابط التالى :


    بعد الإنتهاد من تحميل الملف قم بالولوج إلى المجلد الذى يحتوى ذلك الملف أﻻ وهو ملف employee.dat ثم تقوم بتنفيذ الأمر التالى فى الطرفية :


    كود:
    debian:~# mysql employees < employee.dat -u root -p
    Enter password:
    بعد ذلك سيظهر مؤشر إدخال كلمة المرور التى تخص المستخدم root لخادم MySQL قم بإخالها ، وإذا لم تظهر لديك أية رسائل تفيد بأن هناك خطأ ما فكل شىء أصبح الآن جاهزاً ولنبدأ فى العمل .
    التعديل الأخير تم بواسطة كريم عبد المجيد; الساعة 07-07-2008, 03:45 AM.
    شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير
    | قناة المجتمع التعليمية | قناة المجتمع للفيديوهات | ويكي مجتمع لينوكس العربي | البريد الألكتروني (eMail) |

  • #2
    النقطة الأولى : دوال المجموع أو Aggregate Functions

    توفر MySQL مجموعة من الدوال الداخلية والتى تمكننا من تلخيص بيانات الجدول بدون الإستعلام عن كل حقل على حده ، بمعنى تستطيع مثلاً الإستعلام عن أكبر قيمة و أقل قيمة داخل عمود الرواتب لكى تعرف من هو صاحب أكبر وأقل راتب ، كذلك تستطيع الإستعلام عن متوسط قيمة معينة داخل عمود إلخ .

    هذه الدوال هى :

    كود:
    MySQL provides 5 aggregate functions. They are:
    
    1). MIN($column_name): Minimum value
    2). MAX($column_name): Maximum value
    3). SUM($column_name): The sum of values
    4). AVG($column_name): The average values
    5). COUNT(): Counts the number of entries.
    توفر الدالة ()min إيجاد أقل قيمة داخل عمود معين ، والدالة ()max تقوم بإيجاد أكبر قيمة ، أما الدالة ()sum فتقوم بجمع عدة قيم والدالة ()avg تقوم بإيجاد متوسط عدة قيم وأخيرا الدالة ()count تقوم بحساب عدد مجموعة قيم من البيانات بناءاً على إسم العمود التى يتم العد منه ، قد يكون الأمر مُبهما فى البداية ولكن عندما نتطرق إلى الأمثلة سيصلك المعنى الذى قمنا بشرحه لوظيفة كل دالة على حده .


    الدالة ()min و ()max


    مثال 1 : نريد الإستعلام عن أقل قيمة لراتب موظف داخل الشركة ؟ كيف يكون شكل جملة أمر select بإستخدام أين من الدوال السابقة ؟

    الإجابة : المثال يريد الإستعلام عن أقل قيمة فى الجدول وبالتالى سوف نقوم بإستخدام الدالة ()min والحقل المُراد الإستعلام عنه هو حقل الرواتب أى salary وبالتالى نستطيع كتابة الجملة بالشكل التالى :


    أي أن ما بداخل أقواس الدالة ()min هو إسم الحقل الذى تريد الإستعلام عن أقل قيمة فيه ، كذلك الأمر مع الدالة ()max مع نفس المثال السابق ولكن سيكون الإستعلام عن قيمة أكبر راتب :


    إذا نستطيع القول :

    أنّ كلاً من الدالتين ()min و ()max يتم إستخدامهما مع الأعمدة التى تحوى بيانات رقمية سواء كانت تلك البيانات رقمية صحيحة أو كسور عشرية .


    ملحوظة : من الممكن أن تقوم بعمل أمثلة على العمود الخاص بالعمر وهو age كذلك العمود الخاص بالحوافز وهو perks .

    الدالة ()sum و ()avg

    تختلف كلاً من وظيفة الدالة ()sum والدالة ()avg عن بعضهما البعض ، فالدالة ()sum تقوم بحساب مجموعة من القيم داخل عمود معين ، بينما تقوم الدالة ()avg بحساب متوسط مجموعة قيم داخل عمود معين . ونبدأ مع الأمثلة على كلا الدالتين كما يلى :

    مثال 2 : نريد الإستعلام عن مجموع قيم الرواتب كلها ، كذلك متوسط قيمة تلك الرواتب ؟


    كما أن من الممكن إستخدام الدالة ()sum لإجراء بعض العمليات الحسابية ، كأن تقول مثلا أريد حساب مجموع الرواتب والحوافز الخاصة بالموظفين داخل الشركة ؟



    دالة لذيذة بالفعل أليس كذلك ؟ ! تستطيع الآن اللعب مع الدالة بإستخدام العمليات الحسابية المختلفة كالضرب والقسمة والطرح بإستخدام هذه العلامات :

    - العلامة / تشير إلى عملية القسمة .
    - العلامة * تشير إلى عملية الضرب .
    - العلامة - تشير إلى عملية الطرح .

    ملحوظة : تستطيع تعقيد الأمور أكثر من ذلك كأن تقول مثلا أريد الإستعلام عن النسبة المئوية لناتج قسمة كلاً من مجموع قيم العمود perks إلى مجموع قيم العمود salary فكيف نقوم بذلك ؟

    لاحظ معى الجملة التالية :


    أما لحساب متوسط قيمة الراتب للموظفين فتكون الجملة بالشكل كالتالى :


    كما ترى قامت الدالة ()avg بحساب متوسط قيمة الرواتب الخاصة بالموظفين بالفعل .

    وقبل أن ننتقل إلى الدالة الأخيرة وهى ()count سنتعرض إلى جزئية مفيدة وهى تسمية الأعمدة أو الحقول أثناء إجراء عملية الإستعلام ! البعض قد يندهش ماذا تقصد بتسمية الإعمدة إثناء إجراء عملية الإستعلام ؟؟

    الأعمدة بالطبع لها أسماء تدل على ما تحتويه من بيانات ، فمثلا ً العمود الذى يحتوى على الإسم الأول للموظفين قمنا بتسميته f_name أو اختصاراً ل first name وكذلك الإسم الأخير والعمر إلى آخر أسماء الأعمدة ، أى أن إسم العمود مُرتبط بشكل ما مع محتوياته لذا ماهو مفهوم تسمية العمود أثناء إجراء عملية الإستعلام ؟

    لو لاحظت معى مثلاً أثناء إجراء الإستعلام عن الإسم الأول للموظفين ستجد إسم العمود الفعلى موجود فى أعلى خانة من خانات القيم المُستعلم عنها فعلى سبيل المثال قم بتنفيذ التالى :


    كما تلاحظ أول خانة فى البيانات الُمستعلم عنها هى إسم العمود والتى كانت فى مثالنا الإسم الأول تحت إسم f_name ، الآن نريد تسميه العمود أثناء إجراء عملية الإستعلام بشكل مؤقت فكيف يتسنى لنا فعل ذلك ؟ كأن نقول مثلا إجعل إسم العمود first name كى يكون واضحاً أن العمود يحتوى على الإسم الأول فربما ﻻ يعرف البعض ما المقصود ب f_name أو إلى ماذا تشير .

    هنا يأتى دور الأداة as والتى تعنى " ك " ثم تقوم بوضع الإسم الذى تريد وصف العمود به والمثال التالى يوضح الإستعلام عن بيانات العمود f_name وفى نفس الوقت قمنا بوصف العمود ب " first name " :


    كما تلاحظ فعلاً تم تغيير إسم العمود إلى الوصف الذى اخترناه ، ولو قمت بعمل جملة الإستعلام مرة أخرى على العمود f_name ستجد أنه يحتفظ بنفس الإسم ولم يتغير ، أى أن تغيير إسم العمود أو وصفه لعمل شىء معين بإستخدام as يكون تغييراً مؤقتاً ليس إﻻ .

    ولكن تظهر فوائد as بشكل أكثر وضوحا عند إستخدامها مع ال aggregate functions ، بمعنى يمكن أن تستخدم as فى وصف حقل أو عمود غير موجود أصلا للدلالة على نتيجة الإستعلام عن شىء معين ، فمثلاً تريد الإستعلام عن النسبة المئوية لناتج قسمة كلاً من مجموع قيم العمود perks إلى مجموع قيم العمود salary وتقوم بتسمية خارج القسمة بإسم يدل على ذلك كما يلى :


    مثال آخر : تريد الإستعلام عن متوسط قيم رواتب الموظفين وتقوم بتسمية النتيجة الخارجة لجملة الإستعلام ب Average Salary ؟

    التعديل الأخير تم بواسطة Xero; الساعة 17-02-2008, 07:04 PM.
    شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير
    | قناة المجتمع التعليمية | قناة المجتمع للفيديوهات | ويكي مجتمع لينوكس العربي | البريد الألكتروني (eMail) |

    تعليق


    • #3
      الدالة ()count

      تقوم الدالة ()count بعمل بعض الوظائف الحيوية ، من ضمن تلك المهام هى حساب عدد المدخلات ثم عرض تلك المدخلات التى تخص قيم معينة فى جدول ، فعلى سبيل المثال تريد حساب عدد المدخلات داخل الجدول employee_data ؟


      ملحوظة : تعلمنا سابقاً أن العلامة * تعنى عند إستخدامها مع MySQL العبارة " All Data " .

      نستطيع إستخدام الدالة ()count لعمل بعض المهام الإضافية ودمجها مع جملة where لتنفيذ مهام أكثر ، فعلى سبيل المثال نريد الإستعلام ومعرفة عدد الموظفين بالشركة ممن يعملون فى مجال فى وظيفة "prgrammer" فكيف نقوم بفعل ذلك ؟


      ﻻحظ هنا قمنا بدمج as مع الدالة ()count بالإضافة إلى جملة where لأداء وظيفة جيدة .


      جملة group by

      خلال السطور السابقة من حديثنا عن الدالة ()count لم نكن لنحصل على الكثير من الذى يمكن أن تقدمه الدالة ، ولكن قد استنتجنا أن الدالة لديها الكثير فى حال دمجها مع أدوات وجمل أخرى كما رأينا سابقاً مع جملة where ، الجديد هنا هو جملة group by والتى تقوم بعمل جروب أو group لقيم متشابهة داخل الجدول ، بمعنى حينما نقول مثلاً أريد الإستعلام عن اللقب الوظيفى لكل الموظفين داخل الجدول وبدون تكرار لألقاب متشابهة كيف يمكن تنفيذ ذلك ؟


      أى قامت جملة group بتخصيص داخلى لا تراه أنت ووضعت كل مجموعة من القيم المتشابهة تحت مجموعة تحمل إسم اللقب المتشابه ، فمثلا إذا كان فى الجدول خمسة موظفين يعملون فى مهنة Web Designer فستقوم جملة group by بعمل مجموعة تحمل نفس إسم الوظيفة ويندرج تحت تلك المجموعة الخمسة موظفين ، وبالتالى نستطيع الإستنتاج أن عند دمج group by مع الدالة ()count فسوف نستطيع الإستعلام عن عدد الموظفين الذى يعملون فى نفس الوظفية ، أو عدد الموظفين الذين يمتلكون نفس العمر أو نفس الراتب إلخ .

      قد يصيح أحد القراء ! مهلاً إذا ما الفارق group by وبين الأدة disticnt !! فى المثال السابق ؟

      سؤال جيد ، جملة group by قد تعمل بالشكل البسيط الذى فعلناه فى المثال السابق وتؤدى نفس الوظفية التى تقوم بها الأداة distinct أى جلب البيانات الغير متكررة ، لكن وظائف الأداة distinct عند إضافتها إلى الدالة ()count ستكون محدودة وﻻ تفى بإحتياجاتنا لذلك جملة group by توفر العديد من الوظائف المفيدة فعلاً والتى سوف تلمسها من خلال الأمثلة القادمة .

      مثال : نريد الإستعلام عن اللقب الوظيفى مع بيان عدد الألقاب المتشابهة لكل وظيفة داخل الجدول :


      كما تلاحظ من خلال تنفذينا لجملة الإستعلام السابقة تم عرض الألقاب الوظيفية داخل الجدول ، بالإضافة إلى بيان عدد الموظفين الذين يشغلون تلك الوظائف داخل الجدول .

      طيب ماذا لو أردنا الإستعلام عن اللقب الوظيفى وعدد الموظفين الذين يعملون فى وظفية "programmer" فقط ؟


      طبعا تستطيع تعقيد الأمور أكثر من ذلك كأن تقول أريد الإستعلام عن اللقب الوظفيى وعدد الموظفين الذين يشغلون مثلا وظيفة Web Designer مع تسمية الحقل الذى يحوى عدد الموظفين الناتج بإسم Number of Web Desingers ؟


      ونأتى إلى إستخدام آخر لجمة where مع جملة group by وهذه المرة مع جملة order by كى نقوم بترتيب مثلا أعداد الموظفين الذين يشغلون الوظائف السابقة بترتيب تصاعدى :


      ﻻحظ : قمنا بعمل إسم مؤقت للحقل الذى سوف يحتوى على أعداد الموظفين الخاصة بكل وظفية وقمنا بتسمية ذلك الحقل Number ، فقد كان من الممكن تنفيذ الجملة السابقة على النحو التالى :


      كما تلاحظ نفس النتيجة السابقة دون إختلاف .
      التعديل الأخير تم بواسطة Xero; الساعة 16-02-2008, 03:56 PM.
      شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير
      | قناة المجتمع التعليمية | قناة المجتمع للفيديوهات | ويكي مجتمع لينوكس العربي | البريد الألكتروني (eMail) |

      تعليق


      • #4
        النقطة الثانية : جملة Having

        جملة Having التى سوف تكون محور حديثنا خلال السطور القادمة ستلعب دوراً محورياً فى إضافة العديد من المهام المفيدة عند دمجها مع كل ٍ من الدالة ()avg وجملة group by ويتضح ذلك جلياً عندما تريد الإستعلام مثلاً عن اللقب الوظيفى و متوسط قيمة راتب مجموعة من الموظفين يعملون فى نفس الوظيفة فيكون شكل جملة الإستعلام كما يلى :


        أما إذا كنت تريد الإستعلام مثلاً عن اللقب الوظيفى و متوسط قيمة راتب مجموعة من الموظفين يعملون فى نفس الوظيفة مع ترتيب القيم الناتجة ترتيباً تصاعديا ًفيكون شكل جملة الإستعلام كما يلى :


        إلى الآن لم نستخدم جملة Having ولم نتعرض لها ونبدأ الآن فى إستعراض ما يمكن أن تقدمه لنا تلك الجملة ونأخد المثال التالى :

        مثال : نريد الإستعلام عن القسم الوظيفى أو اللقب الوظيفى والذى يكون متوسط قيمة راتب العاملين داخل تلك الوظفية أو القسم الوظفي يزيد على 100,000$ فكيف نقوم بذلك ؟ راقب معى شكل الجملة :


        طبعا من المُلاحظ هنا أننا قمنا بإستخدام علامات المقارنة أو Comparison Operators لكى نتمكن من تنفيذ الإستعلام بشكل سليم .


        النقطة الثالثة : إستخدامات أخرى لجملة أمر Select

        قد يتصور البعض أن جملة أمر select يقتصر دورها على الإستعلامات فقط وﻻ تستطيع مهام أخرى فهل هذا صحيح ؟

        لا بالعكس لم ينته دور Select على ما قمنا بتطبيقه من أمثلة خلال السطور السابقة ، بل لجملة أمر select مهام أخرى تجعلها بحق فى طليعة أوامر لغة SQL فجملة أمر select لها مهام أخرى قد ﻻ تتخيلها أو تخطر لك على بال .

        وهنا تجدر الإشارة لتوضيح معنى نستدركه الآن ، أنك لو لاحظت ودققت فى طبيعة المهام التى تقوم بها Select ستجدها تشبه دوال الطباعة مثل print أو echo فى لغات برمجية أخرى ، فعن طريق select تستطيع عرض البيانات والمتغيرات النصية ، كذلك عرض البيانات الرقمية وإجراء عمليات حسابية مختلفة على تلك البيانات الرقمية .

        ولكن ماهى الإستخدامات الأخرى والتى لم تذكرها لنا تقوم بها select ؟

        الإستخدامات التى لم نذكرها خلال السطور السابقة والتى حان دور ذكرها الآن سوف نلخصها فى صورة أمثلة على Select كما يلى :

        مثال 1 : عرض إصدار خادم MySQL الذى نعمل عليه الآن :



        مثال 2 : عرض الوقت والتاريخ الحالى :


        مثال 3 : عرض اليوم الحالى فقط :


        مثال 4 : عرض الشهر الحالى فقط :



        مثال 5 : عرض السنة الحالية فقط:



        مثال 6 : طباعة نصوص كتابية :


        المهام السابقة أعتقد أنها بسيطة وبعضها طريف ، ولكن يمكن أن تسخدم select بشكل مفيد أكثر . قد يحملق البعض فى وجهى يا ترى ماهو وجه الإستفادة الأكبر من تلك المهام السابقة والبسيطة D: مهلا ﻻ داعى للعصبية ! P:

        جملة أمر select يمكن أن تستخدمها كآلة حاسبة !! أرجوك ﻻ تنفعل أكثر قد يؤثر ذلك بشكل أو بآخر على الأوﻻد عندما يطلبون مصروف الجيب الخاص بهم P:

        الآن نترك التهريج قليلا ولنقم ببعض العمليات الحسابية بالشكل التالى :

        مثال 1 : نريد حاصل ضرب كلاً من الرقمين 5.2 و 7.8 ؟



        وتسطيع تحسين وصف نتيجة الضرب السابقة بإستخدام الأداة as بالشكل التالى :


        مثال 2 : نريد خارج قسمة كلاً من الرقمين 120000000 والرقم 1860 ؟


        مثال 3 : تريد ضرب كلاً من الرقمين 140 و 169 ثم تقوم بجمع ناتج عملية الضرب على الرقم 4589 ؟


        وهكذا تستطيع تنويع العمليات الحسابية المختلفة التى تريدها ، وبالتالى ﻻ تترد فى إستخدام MySQL ك Second Calculator ! .
        التعديل الأخير تم بواسطة Xero; الساعة 17-02-2008, 04:02 PM.
        شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير
        | قناة المجتمع التعليمية | قناة المجتمع للفيديوهات | ويكي مجتمع لينوكس العربي | البريد الألكتروني (eMail) |

        تعليق


        • #5
          النقطة الرابعة : الدوال الحسابية فى MySQL أو Mathematical Functions

          توفر MySQL مجموعة من الدوال الحسابية والتى تقوم كلاً منها بمهمة مختلفة ، كحساب رقم مرفوع لأُس رقم معين ، أو كسحاب الجذر التربيعى لعدد معين إلخ من تلك العمليات ، وتجدر الإشارة هنا أيضا أن هذه الدوال تستخدم مباشرة مع جملة أمر Select فكما ذكرنا سابقاً أن Select تُشبه فى طريقة عملها دوال الطباعة فى اللغات البرمجية المختلفة ، عموما نحاول الآن أن نتعرف على تلك الدوال من خلال الأمثلة التى سوف نقوم بتطبيقها على تلك الدوال .


          mod(x,y) Function

          سنبدأ حديثنا عن الدوال الحسابية فى MySQL مع الدالة ()mod أو mod(x,y) Function ولنتعرف أكثر على طبيعة عمل الدالة ، لو لاحظت فى الأمثلة السابقة والتى إستخدمنا فيها جملة أمر select لأداء العمليات الحسابية المختلفة مثل الضرب والقسمة والطرح والجمع أننا حينما أردنا مثلا قسمة عددين ﻻ يقبل أحدمهما القسمة على الآخر كنت ستجد فى نتيجة العملية الحسابية كسور عشرية خرجت نتيجة لذلك الموضوع وهو عدم قابلية قسم أحد العددين على الآخر ، لذلك هنا الدالة ()mod الجديد الذى سوف تقدمه لنا هو توضيح باقى ناتج القسمة من العملية ونأخذ مثالاً على ذلك حتى تتضح الأمور .

          مثال : تريد خارج قسمة كلاً من العددين 17 والعدد 4 ؟ ستقوم بفعل ذلك بالشكل التالى :


          كما ترى خارج عملية القسمة يوجد به كسور عشرية ، والآن نستخدم الدالة ()mod للرقمان المُراد إجراء عملية القسمة لهما بالشكل التالى :


          لاحظ هنا أن خارج عملية القسمة من المُفترض أن يكون 4 و باقى خارج القسمة من العملية هو 1 ، إذاً فائدة الدالة ()mod تقوم بإخراج باقى نتيجة عملية القسمة التى تمت .

          ملحوظة : الدالة ()mod لها متغيران داخل الأقواس الأول المتغير x وهو الرقم الأكبر لعملية القسمة والرقم الثانى y وهو الرقم الأصغر لعملية القسمة وتقوم بالفصل بين المتغيرين بإستخدام , أى colon .


          ABS(x) Function

          تقوم الدالة ()ABS أو ABS(x) Function بحساب القيمة المطلقة لعدد ما ، بمعنى لو قمت بتمرير قيمة للمتغير x وكانت قيمة سالبة ستقوم الدالة بحساب القيمة المطلقة لهذا المتغير عن طريق تحول تلك القيمة السالبة إلى قيمة موجبة ، كذلك القيمة الموجبة تظل كما هى قيمة موجبة لأنها فى حد ذاتها لم يطرأ عليها تغيير قيمة الإشارة بالسالب .

          مثال على ذلك :


          هنا قامت الدالة ()ABS بحساب القيمة المطلقة للرقم 4- وذلك بتحويل تلك القيمة إلى قيمة موجبة وكانت النتيجة لذلك هى فعلا 4 بإشارة موجبة .

          أما لو قمت بتمرير قيمة موجبة للدالة ()ABS فستكون النتيجة هى نفسها لم تتغير وﻻحظ معى التالى :


          كما تلاحظ نفس النتيجة كما ذكرنا لم تتغير .

          SIGN(x) Function

          تقوم الدالة ()Sign بعرض ثلاث قيم مناظرة لأى رقم يتم تمريره لها عن طريق المتغير x ، هذه القيم الثلاث :

          كود:
          Sign(x) display -1 when x is negative 
          sign(x) display  1 when x is positive
          sign(x) display  0 when x is zero value
          أى أن الدالة ()sign تقوم بعرض 1 عندما تكون قيمة x موجبة ، بينما تقوم بعرض 1- عندما تكون قيمة x سالبة وفى الأخير تقوم بعرض 0 عندما تكون قيمة x تساوى صفر .

          أمثلة على ذلك :


          POWER(x,y) Function

          تقوم الدالة ()power بحساب رقم مرفوع لأُس رقم آخر أى مثلا تريد حساب x أس y ، وبالطبع مكان كل من المتغير x و y أرقام ، ونوضح ذلك بالأمثلة التالية :

          مثال : تريد حساب 2 أس 3 والتى من المعلوم أن نتيجة العملية هى 8 :


          فعلا نتيجة العملية كانت 8 وتستطيع تغيير الأرقام السابقة بكل سهولة شريطة أن تعرف أى الرقمين ستبدأ بهما هل تريد مثلاً 4 أس 5 أو العكس 5 أس 4 فطبيعى نتيجة كلا العملتين ستكون مختلفة كل ما هنالك أنك ستقوم بتحديد الأساس والذى كان فى مثالنا السابق هو الرقم 2 ثم بعد ذلك تفصل بين الأساس والأس والذى كان 3 ب colon .


          SQRT(x) Function

          تقوم الدالة ()SQRT أو SQRT(x) Function بحساب الجذر التربيعى للمتغير x ، فمثلاً تريد الجذر التربيعى للرقم 9 :


          فعلا تم حساب الجذر التربيعى للرقم 9 وهو 3 وتستطيع بالتأكيد تغيير الرقم 9 إلى أى رقم آخر .


          ROUND(x) and ROUND(x,y) Functions

          تقوم الدالة ()Round أوRound(x) Function بتقريب المتغير x والذى يحتوى على كسور عشرية إلى أقرب رقم صحيح .

          مثال : تريد تقريب الرقم 20.6 إلى أقرب رقم صحيح :


          كما أن الدالة ()round تستطيع أن تأخذ خيار إضافى يُمرر لها لتقريب المتغير x والذى يحتوى على كسور عشرية إلى عدد أقرب أرقام عشرية ممكنة والتى نحددها للدالة من خلال المتغير y .

          مثال : نريد تقريب الرقم 96.874698563 إلى أقرب ثلاثة أرقام عشرية :



          FLoor(x) Function

          تقوم الدالة ()Floor أو Floor(x) Function بإسترجاع أكبر قيمة صحيحة تكون أقل من أو تساوى قيمة المتغير x ، بمعنى أن المتغير x قيمته مثلاً 20.2 عند ذلك ستكون أكبر قيمة صحيحة أقل من أو تساوى قيمة المتغير x هى الرقم 20 ولاحظ ذلك كما يلى :


          ملحوظة : طبعا من المُسلم به أنه كلما كان الرقم ذو الإشارة السالبة كبيرا كلما قلت قيمته العددية بمعنى الرقم 3- أكبر من الرقم 4- وهكذا الرقم 99- أكبر من الرقم 100- فتنبه لذلك .

          CEILING(x) Function

          تقوم الدالة ()ceiling أو Ceiling (x) Function بإسترجاع أقل قيمة صحيحة تكون أكبر من أو تساوى قيمة المتغير x ، بمعنى أن المتغير x قيمته مثلاً 30.1 عند ذلك ستكون أقل قيمة صحيحة أكبر من أو تساوى قيمة المتغير x هى الرقم 31 ولاحظ ذلك كما يلى :


          Tan(x) , Cos(x) , Sin(x) Trignometic Functions


          أوﻻ الدالة : ()tan

          مثال نريد حساب قيمة الزاوية 30 بإستخدام الدوال المثلثية الثلاث :

          ﻻحظ أن جميع الحسابات السابقة كانت ب radian وليست بال degrees .
          التعديل الأخير تم بواسطة Xero; الساعة 18-02-2008, 08:35 PM.
          شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير
          | قناة المجتمع التعليمية | قناة المجتمع للفيديوهات | ويكي مجتمع لينوكس العربي | البريد الألكتروني (eMail) |

          تعليق


          • #6
            النقطة الخامسة : تحديث السجلات (Records) بإستخدام جملة أمر Update

            تعاملنا السابق مع MySQL كان يتناول محوران رئيسيان :

            الأول : هو كيفية إضافة بيانات جديدة داخل أعمدة الجدول .

            الثانى : هو كيفية الإستعلام عن تلك البيانات .


            لذلك لم نكن لنهتم كثيراً إذا حدث تغير فى أحد بيانات الموظفين سواء كان زيادة الراتب مثلاً ، أو تغير عدد سنين العمل بالشركة وهكذا ، لأنه حينها لم نكن نعلم ماهى الجملة المسئولة عن تحديث تلك البيانات القديمة بأخرى جديدة مُستحدثة ، لذا يأتى هنا دور جملة أمر Update والتى تقوم بتلك المهمة على أكمل وجه وتأخذ جملة أمر Update الصيغة العامة على النحو التالى :

            كود:
            UPDATE table_name SET
            column_name1 = value1,
            column_name2 = value2,
            column_name3 = value3 ...
            [WHERE conditions];
            حيث column_name1 و column_name2 و column_name3 هى أسماء الأعمدة أو الحقول المُراد تحديث البيانات بها ، أما value1 و value2 و value3 هى القيم الجديدة التى تحل مكان القيم القديمة ، وفى الأخير جملة where لوضع الشروط المُراد تمريرها إلى حقل معين ، قد يكون الأمر فى البداية غامضاً ولكن إن شاء الله من خلال تطبيقنا للأمثلة القادمة سنكون قادرين على إستيعاب عمل الجملة بشكل جيد .

            الآن نتطرق إلى بعض الأمثلة العملية كى تستوعب ما قمناه بسرده حول جملة أمر Update سابقا وستكون الأمثلة منوعة لكى نقوم بتغطية ذلك المفهوم بشكل جيد إن شاء الله .

            مثال : نريد تحديث كلاً من العمود salary والعمود perks لإضافة رواتب وحوافز جديدة تخص مثلاً الموظف Sherif Shahin وجعل المُرتب 150000 $ والحوافز 50000 $؟

            فى البداية سنقوم بالإستعلام عن راتب الموظف Sherif Shahin لكى نلاحظ الفارق بعد عملية التحديث :


            الآن سوف نقوم بعملية تحديث لكل من العمود salary والعمود perks بالقيم السابقة والتى ذكرناها فى المثال وكانت $ 150000 بالنسبة للراتب و $ 50000 بالنسبة للحوافز :


            ثم نقوم بالإستعلام مرة أخرى عن الموظف Sherif Shahin للتأكد من تحديث كلاً من بيانات الراتب والحوافز الخاصة به :


            كما تلاحظ أن كلا العمودين salary و perks تم تحديث البيانات الخاصة بهما والتى تخص الموظف Sherif Shahin وبالتالى من خلال الصيغة العامة لجملة أمر Update تستطيع تحديد الحقول المُراد إجراء عملية التحديث لها ، ثم بعد ذلك تقوم بوضع الشروط المناسبة لتنفيذ عملية التحديث .


            ملحوظة مهمة جداً :

            ينبغى عليك عند إستخدامك لجملة أمر Update أن تتحقق من الشروط التى تقوم بوضعها حتى ﻻ تقوم بتحديث أعمدة بالخطأ وتُحدِث بلبلة فى البيانات داخل الجدول ولذلك فلتعطِ ذلك الأمر أهميته حتى ﻻ تتسبب فى ما ﻻ يٌمكن أن تُدرك نتائجه ، كما يجب عليك عند تنفيذ جملة أمر Update التحقق من وجود جملة الشروط where حيث أنه فى حالة عدم وجود الجملة ستقوم جملة أمر update بتحديث جميع السجلات داخل الصفوف كلها مرة واحدة فتنبه لذلك !!!

            إلى هنا تم الإنتهاء من الجزء الثانى وأسأل الله أن أكون قد وُفقت فى طرح الموضوع بشكل يوضح بعض المفاهيم الأساسية والتى تخص MySQL وإن أحيانى الله سوف أقوم بوضع بعض المواضيع المتنوعة الخاصة ب MySQL ولكنها لن تكون فى الوقت الحالى نظراً لظروف الدراسة وكل ما أتمناه منكم وأكرره مراراً وتكراراً دعوة بظاهر الغيب أن يوفقنى الله فى دراستى وأنتهى منها على خير .

            وإن شاء الله سيقوم الأخ OMLX جزاه الله خيراً وأكثر من أمثاله بتجميع الموضوع دفعة واحدة ووضعه فى ملف PDF لكى يسهل قرائته وتوزيعه بإذن الله وبمجرد أن ينتهى سأقوم بوضع الملف بصيغتىّ PDF و ODT لمن يريد أن يحرر الملف بعد ذلك وسيكون ترخيص الموضوع تبعاً لرخصة GNU FDL .

            آراكم إن شاء الله قريباً فى التطبيق الذى كنت قد وعدتكم ووعدت الأخ أبو محمد به وهو إستخدام MySQL لتوثيق المستخدمين على SER-voip-server .

            السلام عليكم ورحمة الله وبركاته
            التعديل الأخير تم بواسطة Xero; الساعة 18-02-2008, 09:28 PM.
            شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير
            | قناة المجتمع التعليمية | قناة المجتمع للفيديوهات | ويكي مجتمع لينوكس العربي | البريد الألكتروني (eMail) |

            تعليق


            • #7
              ابو عبدالرحمن ما عليك اشتغل براحتك وانا بالآخر اعملك تصفية و سيتم حذف اي رد لغاية انتهاء الموضوع بالكامل...
              V.I.P

              (وَاصْبِرْ فَإِنَّ اللَّهَ لَا يُضِيعُ أَجْرَ الْمُحْسِنِينَ)
              هود 115

              Linux is user-friendly, but it happens to be selective about its friends

              "احذر أن تكون مثل البقية تأخذ وﻻتعطي ، فلن يكون هناك مصادر تعليمية على الشبكة، ﻻأكثر الله من أمثالهم"


              مجتمع لينوكس العربي: وقف لله تعالى وصدقة جارية، فلا بارك الله في كل من يحاول الإساءة إليه في الظاهر أو في الخفاء...


              تعليق


              • #8
                وعليكم السلام ...

                << مراسلكم من قاعده الكليه >> معمل 6 .. :>

                ابو عبد الرحمن صباحك احلى من السكر ياملك ..


                صدقني لن اوفيك شكراً مهمها طالت الايام .. لدروسك الرائعه فى التعمق المفيد والمفصل والملل لايصال المعلومه والظهور بنتائج طيبه بارك الله فيك وفى اصلك الرائع ..


                دمتاً مبدعاً ..

                ولي رجعه للموضوع
                :argeeleh:
                Twitter
                : @Linux4SA

                تعليق


                • #9
                  ما تقلقش يا سامر أنا حجزت مشاركات كافية إن شاء الله للجزء وربنا يبارك فيك يا باشا

                  بدور يا غالى صباحك احلى من القشطة وربنا يبارك فيك يارب وشكرا حبيبى على كلامك الحلو ده
                  شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير
                  | قناة المجتمع التعليمية | قناة المجتمع للفيديوهات | ويكي مجتمع لينوكس العربي | البريد الألكتروني (eMail) |

                  تعليق


                  • #10
                    أخوي أبو عبدالرحمن
                    You Are The KinG
                    شكرا على الموضوع الرائع وتم الحفظ في الأرشيف

                    تعليق


                    • #11
                      مشكور حبيبي ابو عبدالرحمن على الشرح الجميل
                      ماادري أنا شاكك انك أبو نجم في منتديات ترياق : )

                      تعليق


                      • #12
                        شكراً لك أخي الكريم .. بارك الله بك .. تحياتي

                        -
                        The
                        Exciting World Is That World Full Of
                        Technology

                        Microsoft Is Not The Answer. Microsoft Is The Question. No ! ( Or Linux ) Is The Answer



                        تعليق


                        • #13
                          مشكورين شباب على المرور ويا رب يكون موضوع مفيد

                          عبدالمهيمن أنا لسه ما بقتش king فى MySQL أنا لسه نقيب :P


                          zAkoo Lord لا يا باشا أنا مش ابو نجم أنا مسجل فى منتديات معدودة حوالى 4 بس ودلوقتى بشارك فى واحد بس linuxac ------< Da BesT !

                          شكرا أخى ProfessorZ وإياكم يارب
                          التعديل الأخير تم بواسطة Xero; الساعة 16-02-2008, 04:34 PM.
                          شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير
                          | قناة المجتمع التعليمية | قناة المجتمع للفيديوهات | ويكي مجتمع لينوكس العربي | البريد الألكتروني (eMail) |

                          تعليق


                          • #14
                            بـارك الله فيـك يا ابو عبد الرحمن علي المقـاله الرائعـه دي وبانتظـار البقيه
                            جزاك الله خيرا

                            تعليق


                            • #15
                              تسلم الأيادي ابوعبدالرحمن

                              و الله ما يدري الواحد كيف يشكرك
                              هذي دعوه من صميم القلب :d
                              الله يجزيك الف خير و يوسع عليك و يرزقك جنات النعيم

                              تعليق

                              يعمل...
                              X
                              😀
                              🥰
                              🤢
                              😎
                              😡
                              👍
                              👎