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

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

HowTo : MySQL

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

  • HowTo : MySQL

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

    ملحوظـه : لاي استفسـارت تخص هذه الدوره بامكانك وضعها هنــا :
    الاستفسارات الخاصه HowTo MySQL
    كيفكم شباب إن شاء الله تكونوا بخير وفى أتم صحة وحال

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

    * تعريف بسيط لقواعد البيانات بالإضافة لنبذه عن لغة SQL
    * لماذا MySQL على وجه التحديد ؟
    * تثبيت MySQL على Debian Gnu/Linux
    * مقدمة للتعامل مع MySQL
    * إنشاء جداول داخل قاعدة بيانات موجودة
    * إضافة بيانات داخل تلك الجداول
    * الإستعلام عن بيانات داخل الجداول
    * الإستعلام عن بيانات داخل الجداول بتطبيق شروط
    * Pattern Matching Operators
    * العلامات المنطقية Logical Operators
    * العلامتان Between , In
    * جملة order by
    * جملة limit
    * الأدة distinct

    النقاط السابقة هى جزء من الموضوع الذى سوف أقوم بشرحه إن أحيانى الله وفى ختام الموضوع سوف أقوم بعمل تطبيق عملى لأستخدام ال MySQL فى تطبيقات ال Voip-Servers وذلك تنفيذاً للوعد الذى وعدته للأخ أبو محمد [email protected] وأعتذر للاخ أبو محمد عن التأخير فى تنفيذ وعدى ولكن يعلم الله كانت ظروف الدراسة هى السبب فى تأخير ظهور الموضوع للنور .

    حقوق الموضوع : يحق لأى عضو داخل مجتمع لينوكس العربى نشر الموضوع والتعديل عليه بما يناسبه ولكن داخل إطار الفهم العلمى ليس إلا ، كذلك عند وضع الموضوع فى منتديات أخرى ﻻبد من كتابه إسم الموقع وهو " مجتمع لينوكس العربى " ، اما حقوق التأليف والبطيخ إلى غيره من تلك الأمور فلا يهمنى إن قام بذكر إسمى من عدمه المهم أن يتم ذكر إسم موقعنا المجتمع .

    النقطة الأولى : تعريف قواعد البيانات ولغة SQL

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

    قاعدة البيانات أو Database :

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

    وهنا تجدر الإشارة إلى قاعدة البيانات التى تخص الحاسوب ، ذلك أن البرنامج المسؤل عن إدارة قواعد بيانات الحاسوب تسمى نظم إدارة قواعد البيانات أو فيما يعرف ب Database Management System .

    ولكن هناك مفهوم خاطىء قد يتصوره البعض أن قواعد البيانات ﻻ توجد إلا على الحاسوب فقط !!

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

    وما يهمنا فى التعامل الآن هو قواعد البيانات التى تخص الحاسب أو الكمبيوتر وذلك أن قاعدة البيانات التى بداخل الحاسب ما هى إلا مجموعة من الجداول تستخدم لتخزين المعلومات المنظمة أو البيانات التى نريدها ثم بعد ذلك يتم إجراء مجموعة من العمليات على تلك الجداول بصورة معينة لحذف وإضافة أو تحديث تلك البيانات .

    لغة ال SQL :

    أحيانا يخطىء البعض أيضا وﻻ يستطيع التفرقة بين SQL وبين MySQL على سبيل المثال كبرنامج وللتفرقة بين اللغة وهى SQL وبين نظم إدارة قواعد البيانات نبسط تلك النبذة عن SQL كما يلى :

    يرمز المصطلح SQL إلى الكلمات Structured Query Language وهى عبارة عن لغة تستخدم فى معالجة البيانات المخزنة فى نظم إدارة قواعد البيانات العلائقية أو فيما يعرف ب RDBMS أو Relational Database Management System . ولذلك توفر ال SQL مجموعة من الأوامر قادرة على التعامل مع البيانات لكى يتم استخراج أو تخزين أو حذف أو ادخال تلك البيانات .

    ولكى تكون تلك الأوامر متوافقة لشريحة أكبر من الأفراد فتم إخضاع ال SQL كلغة للتعامل مع أنظمة إدارة قواعد البيانات تحت معايير ال ANSI أو American National Institute ، والتى تم وضع قواعد معينة لها لتنفيذ تلك الأوامر عند التعامل مع أنظمة إدارة قواعد البيانات المختلفة.


    يمكن ان تستخدم ال SQL لكى تعمل مع انظمة إدارة قواعد بيانات مختلفة مثل MySQL ، mSQL ، PostgreSQL ، Oracle ، Microsoft SQL Server ، Access ، Sybase وغيرها من تلك البرامج .

    ونظراً لأن لغة ال SQL تندرج تحت معايير ال ANSI فإن معظم أوامر وجمل ال SQL تكون مدعومة من قبل تلك ال RDBMS ، وفى نفس الوقت توجد بعض الأختلافات بين تلك ال RDBMS المختلفة وذلك يتضح فى عمل أوامر جديدة تخص كلا منها على حده فأنا أطور نفس الشىء الذى يقوم زميلى بتطويره وكلانا بفكره الخاص ولكن يوجد بيننا قاسم مشترك يشمل أغلب الأشياء ، كذلك الوضع مع كل تلك أنظمة إدارة قواعد البيانات المختلفة والتى سبق ذكرها وأشهرها على الإطلاق فى بيئة مفتوحة المصدر هى ال MySQL والتى تم شراء الشركة المسئولة عن تطوير البرنامج مؤخراً وهى شركة MySQL AB من قبل شركة SUN MicroSystems .


    فى الكلام السابق أشرت إلى مصطلح جديد وهو RDBMS أو Relational Database Management System أو نظم إدارة قواعد البيانات العلائقية وكما ذكرنا سابقا أن قاعدة بيانات الحاسب ماهى إﻻ مجموعة من الجداول أو Tables ، ولذلك مصطلح Relational يعنى أنك تستطيع تخزين البيانات فى جدوال مختلفة ، تكون تلك الجدول متربط ببعضها البعض بصورة معينة أو نستطيع القول أن تلك الجدوال تكون ذات علاقة معينة ببيعضها البعض .

    النقطة الثانية : لماذا MySQL على وجه الخصوص ؟

    اختيار نظام قواعد البيانات يعتمد على عاملين مهمين هما :

    1- نوع بيئة نظام التشغيل التى تعمل أنت عليها .

    2- الواجبات المطلوبة منك والمراد انجازها .


    ووقع الإختيار بالنسبة ل MySQL لانها تعمل على أنظمة ال Unix وال Unix-Like بشكل أكثر من رائع كما أنها برنامج حر و مفتوح المصدر .

    ملحوظة : توجد نسخة من ال MySQL تحت إسم ال Enterprise Edition والتى تندرج تحت فئة الدعم مقابل المال .


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

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

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

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

    سأكتفى فى هذه المشاركة بالنقتطين السابقتين وأكُمل تباعاً فى المشاركات القادمة .

    وأرجو منكم إن كانت هناك أخطاء تقنية بالموضوع فُيرجى تنبيهى إليها أخوكم جديد العهد بنظم إدارة قواعد البيانات وﻻ يوجد بيننا كامل فالكمال لله وحده .

    وكل ما أتمناه منكم دعوة بظاهر الغيب أن يوفقنى الله فى دراستى .


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

  • #2
    النقطة الثالثة : تثبيت MySQL على Debian Gnu/Linux

    تستطيع تثبيت النسخة الأخيرة المستقرة من ال MySQL على Debian Gnu/Linux من خلال الأمر التالى :

    كود:
    debian:~# apt-get install mysql-server
    كما سوف نحتاج إلى حزمة ال mysql-client أيضا لكى نستطيع التعامل مع حزمة ال mysql-server ونستطيع تثبيت تلك الحزمة من خلال الأمر التالى :

    كود:
    debian:~# apt-get install mysql-client
    ملحوظة : من الممكن تثبيت الحزمتين السابقتين فى سطر واحد دون مشاكل فقط افصل بين الإسمين ب مسافة من لوحة المفاتيح .

    بعد أن يتم تثبيت كلا من حزمة الmysql-server وحزمة ال mysql-client بنجاح سنبدأ العمل بوضع كلمة سر للمستخدم root لكى يكون له الحق للولوج إلى قاعدة البيانات باستخدام الأمر التالى :

    كود:
    debian:~# mysqladmin -u root password 'ur_password'
    طبعا المكون الرئيسى لل MySQL هى حزمة ال mysql-server والتى هى عبارة عن برنامج يستخدم لتخزين وإدارة البيانات ، أما حزمة ال mysql-client فهى عبارة عن برنامج يستخدم للتعامل مع ال mysql-server وفيه يتم كتابة أوامر ال SQL والجمل الاستعلامية المختلفة الخاصة بال SQL .

    ولذلك وبصورة عامة كلمة MySQL تستخدم للتعبير عن الخادم نفسه وهو ال mysql-server اما كلمة mysql بالحروف الصغيرة تستخدم للتعبير عن حزمة ال mysql-client وبالتالى نستخدم حزمة ال client لكى نتمكن من تنفيذ الأوامر داخل خادم ال MySQL وذلك باستخدام أوامر ال SQL كما ذكرنا سابقا .

    والآن لنبدأ فى التعامل مع الخادم ونقوم بتنفيذ الأمر التالى فى الطرفية على الشكل التالى :

    كود:
    debian:~# mysql -u root -p
    Enter password:
    بمجرد أن قمت بالضغط على زر Enter ظهر لك فى الطرفية مباشرة جملة طلب كلمة السر التى قمت بإنشائها سابقا ، والآن قم بإدخال كلمة السر ليظهر لك محث الأوامر على الصورة التالية :


    كود:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 7
    Server version: 5.0.32-Debian_7etch1-log Debian etch distribution
    
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    
    mysql>

    النقطة الرابعة : مقدمة للتعامل مع MySQL

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

    كود:
    mysql> show databases;
    
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | ser                |
    +--------------------+
    
    3 rows in set (0.00 sec)

    بعد أن استعرضنا قواعد البيانات التى توجد داخل ال MySQL سنقوم الآن بإنشاء قاعدة بيانات خاصة بنا ولتكن linux_ac ويكون ذلك باستخدام الأمر التالى من خلال محث أوامر mysql بالشكل التالى :

    كود PHP:
    mysqlcreate database linux_ac;

    Query OK1 row affected (0.00 sec
    نتأكد الآن من وجود قاعدة البيانات الجديدة لدينا من خلال الأمر التالى :

    كود:
    mysql> show databases;
    
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    |linux_ac           |
    |mysql              |
    |ser                |
    +--------------------+
    
    4 rows in set (0.00 sec)
    فعلا تم إنشاء قاعدة البيانات الجديدة تحت إسم linux_ac ، وﻻحظ أن الأوامر دائما تنهى ب ; او semi-colon ومن المهم ذكره هنا أن قاعدة البيانات linux_ac تم إنشائها من قبل المستخدم root وبالتالى فإن إى مستخدم آخر على التوزيعة لن يستطيع استخدام قاعدة البيانات تلك والعمل عليها إﻻ إذا تم منح التصريح للمستخدم الذى يريد العمل على تلك القاعدة من قبل ال root ، فعلى سبيل المثال نريد مثلا منح تصريح العمل على قاعدة البيانات linux_ac لمستخدم على التوزيعة تحت اسم muhammad فنستطيع عمل ذلك من خلال الأمر grant كما يلى :

    كود:
    mysql> grant all on linux_ac.* to [email protected] identified by 'solaris';
    
    Query OK, 0 rows affected (0.05 sec)
    فى المثال السابق قمنا بمنح المستخدم muhammad على ال localhost بكل التصاريح الخاصة بقاعدة البيانات المنشأة حديثا وهى linux_ac كذلك قمنا بوضع كلمة السر الخاصة به وفى مثالنا كانت solaris ومن البديهى تستطيع تغيير كلمة السر التى تريدها إلى أى كلمة سر أخرى كما تستطيع منح التصاريح لأى مستخدم آخر .

    وللتأكد من ذلك نقوم بالخروج من ال mysql بكتابة التالى :

    كود:
    mysql> \q
    Bye
    او كتابة كلمة quit أيضا :

    كود:
    mysql> quit
    Bye
    بعد ذلك نقوم بالاتصال بقاعدة البيانات عن طريق ال mysql ولكن هذه المرة مع المستخدم muhammad بالشكل التالى :

    كود:
    debian:~# mysql -u muhammad -p
    Enter password:
    قم بادخال كلمة السر التى منحتها للمستخدم muhammad والتى كانت فى مثالنا solaris ، بعد ذلك ستتمكن من الاتصال بال MySQL والعمل على قاعدة البيانات linux_ac بكل سهولة كما يلى :

    كود:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 14
    Server version: 5.0.32-Debian_7etch1-log Debian etch distribution
    
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    
    mysql>
    ولاحظ أن المستخدم muhammad قد مُنح التصريح للعمل على قاعدة البيانات linux_ac فقط وبالتالى فلا يحق له العمل على أى قاعدة بيانات أخرى مال لم يتم منح التصريح الكافى له ، فمثلا لو قمت بتنفيذ التالى اما محث أوامر ال mysql :

    كود:
    mysql> use ser;
    
    ERROR 1044 (42000): Access denied for user 'muhammad'@'localhost' to database 'ser'
    الأمر السابق أخبرت محث أوامر ال mysql أننى أريد العمل على قاعدة البيانات والتى تسمى ser فظهرت رسالة خطأ تفيد بأن المستخدم muhammad ليست له الصلاحية للعمل على قاعدة البيانات ser ، أما لو قمت بتغيير الأمر للعمل على قاعدة البيانات linux_ac من خلال نفس الأمر use بالشكل التالى :

    كود:
    mysql> use linux_ac;
    
    Database changed
    فنجد فعلا أنه تم التغيير إلى قاعدة البيانات linux_ac والتى تم منح التصريح اللازم للعمل عليها إلى المستخدم muhammad .
    التعديل الأخير تم بواسطة Xero; الساعة 10-02-2008, 09:14 PM.
    شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير
    | قناة المجتمع التعليمية | قناة المجتمع للفيديوهات | ويكي مجتمع لينوكس العربي | البريد الألكتروني (eMail) |

    تعليق


    • #3
      النقطة الخامسة : إنشاء الجدوال أو ال Tables

      بعد أن استعرضنا كيفية إنشاء قاعدة بيانات جديدة باستخدام الأمر create database سوف ننتقل إلى جزئية أخرى وهى إنشاء جداول أو Tables داخل تلك قاعدة البيانات ، وبالتالى نستطيع القول أن قواعد البيانات تقوم بتخزين البيانات اللازمة داخل الجداول .

      ولكن ماهى الجداول أو ال Tables ؟

      الجدول أو ال Table عبارة عن هيكل مكون من صفوف أو rows وأعمدة أو columns وكل عمود يقوم بتعريف نوع معين من البيانات أو data type سواء كانت بيانات رقمية أو عددية ، أما الصفوف فتحتوى على مجموع البيانات التى يتم تخزينها وتسمى سجلات أو records ومثال على ذلك الجدول التالى :



      الجدول السابق يحتوى على ثلاثة أعمدة تشمل الإسم الأول والذى رمزنا إليه ب f_name كذلك الإسم الأخير والذى رمزنا إليه ب l_name وأخيرا العمر والذى رمزنا إليه ب age ، وكما أشرنا سابقا أن الأعمدة تعرف نوع البيانات المدخلة والصفوف تمثل البيانات المدخلة نفسها أو فيما تسمى بالسجلات أو ال records ، ونود أن نشير أيضا أن قاعدة البيانات قد تحتوى جدول واحد أو أكثر من جدول يتم الاستعلام عن البيانات المتعلقة ببعضها فى تلك الجداول باستخدام جمل ال SQL الإستعلامية ، وسوف نقوم بإنشاء جدولان كمثال على ذلك فى قاعدة البيانات linux_ac ولكن فى البداية سوف بإنشاء جدول واحد يحتوى على تفاصيل وبيانات مجموعة من الإعضاء لمجتمع لينوكس العربى داخل قاعدة البيانات linux_ac كمرحلة أولية ثم بعد ذلك نتطرق للجدول الثانى وكيفية الربط والإستعلام من خلال الجدولان.

      والآن نبدأ بالتعامل الحقيقى مع قاعدة البيانات linux_ac والتى سيتم إنشاء جدول فيها يحتوى على مجموعة من الأعمدة والتى بدورها سوف تحتوى على البيانات الحقيقة التى سوف يتم ادخالها لذلك الجدول ونبدأ مباشرة بتنفيذ الأمر التالى من أمام محث أوامر mysql :

      كود:
      mysql> use linux_ac;
      
      Database changed
      
      mysql> create table members_data
          -> (
          -> mem_id int unsigned not null auto_increment primary key,
          -> f_name varchar(20),
          -> l_name varchar(20),
          -> age int,
          -> email varchar(60)
          -> );
      
      Query OK, 0 rows affected (0.08 sec)
      ملحوظة : الأوامر وأسماء الأعمدة فى ال MySQL ليست حساسة تجاه الحروف الكبيرة والصغيرة أى تكون not case-sensitive بمعنى الأمر create هو نفسه الأمر CREATE هو نفسه الأمر Create إلخ ، أما أسماء قواعد البيانات والجداول فمن الممكن أن تكون حساسة تجاه الحروف الكبيرة والصغيرة وذلك اعتماد على بيئة نظام التشغيل التى تعمل عليها ولذلك فى حالتنا هذه أى بالعمل على Debian Gnu/Linux فإننا سوف نتنبه لهذه النقطة . نبدأ الآن فى شرح السابق :

      الأمر create table : يستخدم الأمر create table لإنشاء جدول داخل قاعدة بيانات نعمل عليها ويتم إلحاق إسم الجدول المراد إنشاؤه بعد الأمر create table وفى حالتنا هذه قمنا تسمية الجدول بإسم members_data ويحق لك تسمية الجدول بأى إسم تريده .

      بعد ذلك قمنا بضغط زر Enter كنوع من ترتيب المدخلات بشكل جيد ثم ضغطنا Enter مرة أخرى ، بعد ذلك قمنا بإنشاء أول عمود داخل الجدول تحت إسم mem_id والذى سوف يحتوى على ال id الخاص بكل عضو وهنا قمنا بتعريف ذلك العمود بالقيم integer أو int أى أن المتغير mem_id سوف يأخذ قيم أعداد صحيحة ليس فيها كسور ، بعد ذلك منحنا العمود mem_id ال attribute الخاصة به وهى unsigned أى أن رقم العضو سيكون عدد صحيح وبإشارة موجبة (Positive Integer) ، ثم أضفنا خاصية أخرى وهى not null أى أن العمود mem_id سوف يأخد قيمة على الدوام ولا يمكن أن يكون فارغاً ، بعد ذلك أضفنا الخاصية auto_increment والتى تعنى بزيادة رقم العضوية بشكل تلقائى دون تدخل منا أو وضع قيم لهذا العمود بشكل يدوى وبالتالى لن نحتاج أبدا لإضافة قيم لهذا العمود طالما أن ال MySQL سوف تقوم بهذه المهمة ، كما أن ذلك سوف يؤدى بدوره ﻷن تكون قيم العمود mem_id قيم وحيدة لن تتكر أى لن تجد رقمىّ عضوية متشابهان ، ثم أخيرا الصفة primary key والتى تساعد فى فهرسة العمود لتسهيل أكثر عند عملية البحث عن قيمة معينة وكل قيمة أيضا لابد أن تكون قيمة وحيدة أى ﻻ تتكرر .

      ولنوضح قليلا مفهوم صفة الفهرسة باستخدام ال primary key مثلا حينما تشترى كتاب فى صورة ورقية فيوجد للكتاب فهرس منظم يسهل على القارىء البحث فى موضوعات الكتاب إما عن طريق إسم الموضوع أو عن طريق القسم الذى يخضع إليه عنوان البحث وهكذا ، ولذلك فى مثالنا عرفنا العمود mem_id أنه ذو صفة primary key أى أننا قررنا تنظيم بيانات الأشخاص تبعا للعمود mem_id ولذلك يجب أن نخبر MySQL ان هذا العمود هو مفتاح التعامل مع محتويات الجدول و ذلك بأن نعطيه الصفة PRIMARY KEY ، وال primary key فى حد ذاته كما ذكرنا يتضمن فهرسا للقيم وفى نفس الوقت لا تتغير والفائدة من ذلك تتضح جليا من المثال التالى :

      نفترض أنه يوجد لدينا عضوان يحملان نفس الإسم فى العمود f_name والعمود l_name فالفيصل مثلا حينها هو رقم ال mem_id الخاص بكل واحد منها ، ﻷنه كما ذكرنا أننا وضعنا صفة ال primary key للعمود بحيث ﻻ يمكن أن يتكرر رقمان فى نفس العمود وهو mem_id .

      بعد ذلك قمنا بإضافة العمود الثانى وهو خاص بالإسم الأول للعضو تحت إسم f_name وعرفنا نوع البيانات التى سيتضمنها ذلك الحقل أو العمود من نوع varchar أو اختصارا ل variable character وقمنا بوضع حد ﻷقصى عدد من الحروف للإسم الأول وهو 20 حرف بين قوسين ، ثم أضفنا عموداً آخر خاص بالإسم الأخير للعضو تحت إسم l_name وعرفنا نوع البيانات التى سيتضمنها ذلك الحقل أو العمود من نوع varchar أيضا وقمنا بوضع حد ﻷقصى عدد من الحروف للإسم الأول وهو 20 حرف بين قوسين ، ثم أضفنا عمودا يشمل العمر أو age وتعريف تعريف نوع البيانات الخاصة به من نوع int أو integer ، ثم أخيرا أضفنا حقلاً آخر للبريد الإلكترونى تحت إسم email وتم تعريف نوع البيانات الخاصة به من نوع varchar وتم تحديد أقصى عدد للحروف تخص هذا الحق وكانت 60 حرفا ً ثم أخيراً أنهينا الأمر بوضع قوس ثم مباشرة بوضع ; أو semi-colon .


      ملحوظة : لابد أن تفصل بين كل إسم عمود وعمود ب , أو colon ثم تنهى الأمر ب ; أو semi-colon لكى يتم تنفيذ الأمر بشكل صحيح داخل ال MySQL وذلك بالضغط على زر Enter لكى تتم عملية التنفيذ .

      أيضا سوف تلاحظ كلما ضغطت على زر Enter مع نهاية كل سطر إذا لم يحتوى على ; أو semi-colon أن محث أوامر mysql قد فهم أن الأمر لم يكتمل بعد ومازال هناك بعض الأمور لم يتم ادخالها ولذلك يتحول محث الأوامر مع كل ضغطة Enter إلى العلامة <- وبمجرد وضعك لل semi-colon بعد القوس الأخير فحينها سوف يتم تنفيذ الأمر كما أشرنا سابقا .

      والآن بعد أن قمنا بإنشاء أول جدول داخل قاعدة البيانات linux_ac سنقوم باستعراض الجداول داخل القاعدة linux_ac لنتأكد فعليا من إنشاء الجدول وذلك كما يلى :



      كما تلاحظ فعلا تم إنشاء الجدول ووضعه داخل قاعدة البيانات linux_ac ، والآن لنتعرض لأمر آخر لاستعراض أعمدة الجدول أو الحقول التى بداخله وهو الأمر describe كما يلى :




      ملحوظة : بالنسبة للصورة الأخيرة قمت بقطع عمود ال Extra والذى يحتوى على الصفة auto_increment من الصورة حتى تظهر بشكل واضح فى نفس الموضوع وﻻ يتشتت ذهن القارىء بفتح صفحة أخرى لمشاهدة الصورة بحجمها الطبيعى .

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

      تعليق


      • #4
        النقطة السادسة : إضافة بيانات داخل ال Tables

        الصيغة العامة لإضافة بيانات داخل جداول ال MySQL تكون على الشكل التالى :

        كود:
        INSERT into table_name (column1, column2....)
        values (value1, value2...);
        حيث table_name إسم الجدول الذى سيتم إضافة البيانات فيه ويكون إضافة البيانات داخل الأعمدة التى نريدها على وجه التحديد والتى تتمثل فى إسم العمود الأول والعمود الثانى وهكذا .... ثم بعد ذلك تأتى القيم التى ينبغى إضافتها وذلك من خلال value1 و value2 ...

        ونأخد مثالا عمليا على ذلك :

        كود:
        mysql> insert into members_data (f_name, l_name, age, email) values ("muhammad","ahmad",23,"[email protected]");
        
        Query OK, 1 row affected (0.06 sec)
        شرح الأمر :

        أوﻻ: قمنا بإستخدام الأمر insert مع into لإضافة مدخلات داخل الجدول members_data .

        ثانيا: القيم التى تخص كل من العمود f_name والعمود l_name والعمود email تكون داخل " " أو double quotes وذلك للدلالة على أنها عبارة عن قيم حرفية نصية سوف تدخل إلى تلك الحقول كما هى .

        ثالثا : القيمة بالنسبة للعمود age لم نضعها داخل " " لأنها عبارة عن أرقام صحيحة .

        رابعا: لو لاحظت فى الأمر السابق أننا لم نضع العمود mem_id داخل جملة أمر ال insert لأننا كما قلنا سابقا أن ال MySQL سوف تتولى هذه المهمة وتقوم بمنح كل صف جديد داخل الجدول رقم id غير مكرر مع التنبيه أن الأرقام التى يتم إضافتها إلى قاعدة البيانات تكون أكبر من سابقتها بمقدار واحد فى العدد .

        ومن ذلك يتضح أنه عند الرغبة فى إضافة بيانات جديدة ﻻبد من تكرار جملة أمر ال insert بحسب عدد البيانات المراد ادخالها ، ولكن قد يكون الأمر شاق عندما تريد ادخال 100 إسم داخل الجدول أليس كذلك ؟

        لجعل الأمور أكثر سهولة نقوم بإنشاء ملف نصى على سطح المكتب مثلا تحت إسم members.dat ونقوم بإضافة جميع البيانات المراد ادخالها من خلال جملة أمر ال insert ثم بعد ذلك نستدعى الملف إلى قاعدة البيانات المراد إدخال جمل أمر ال insert من خلال الطرفية بالشكل التالى :

        كود:
        debian:~# mysql linux_ac <members.dat -u root -p 
        Enter password:
        طبعا فى البداية ﻻبد أن تكون المجلد الذى يحتوى الملف members.dat ، بعد الضغط على زر Enter ستتطلب منك الطرفية إدخال كلمة المرور الخاص بالمستخدم الذى تريده أن يعمل على قاعدة البيانات linux_ac وفى حالتنا هذه قمنا بالدخول عن طريق المستخدم الجذر أو root ولنتأكد فعلا من ادخال البيانات داخل قاعدة البيانات linux_ac بشكل سليم ننفذ الأمر التالى :



        فعلا تم وضع البيانات التى قمت بتحرريها داخل الملف النصى members.dat بشكل سليم كما ترى .


        النقطة السابعة : الإستعلام عن بيانات داخل ال Tables

        الآن أصبح الجدول members_data ملىء بالبيانات التى تمكننا من العمل عليه بشكل أوسع وتطبيق جمل استعلامية أخرى ثمل جملة الأمر select والتى نحن بصدد الحديث عنها ، فالآن سوف نرى كيفية استخراج بيانات أو الاستعلام عنها كما قلنا باستخدام الأمر select وتكون صيغته العامة بالشكل التالى :

        كود:
        SELECT column_names from table_name [WHERE ...conditions];
        كما تلاحظ فى البداية جملة أمر ال select بدأت بالأمر نفسه ثم بعد ذلك إسم العمود أو الحقل المراد استخراج البيانات منه أو الإستعلام عنها وذلك من خلال إسم الجدول الخاص بنا أما جملة [WHERE ...conditions] فيمكن أن نضعها أو ﻻ نضعها وسوف نتطرق إلى الخيارات المتاحة مع تلك الجملة ﻻحقا فالهيكل الأساسى لعملية الإستعلام أو إستخراج البيانات هو إسم الحقل أو العمود كذلك إسم الجدول الذى يحتوى ذلك العمود .

        وعلى سبيل المثال لكى نقوم بالإستعلام عن الإسم الأول والأخير لكل الأعضاء داخل الجدول members_data نقوم بتنفيذ التالى :



        طبعا تنبه للفاصلة أو ال colon بين كل إسم عمود وعمود ثم فى آخر جملة الإستعلام تنبه أيضا لوضع ال ; أو ال semi-colon لكى يبدأ mysql prompt فى تنفيذ الحملة .

        وبالتالى تستطيع الآن اللعب مع جملة أمر select لتنفيذ إستعلامات أخرى مختلفة كأن تستعلم مثلا عن عمر كل الأعضاء من خلال الجملة التالية :



        جملة ترفيهية أليس كذلك حسناً إلعب قليلا مع الجملة !!

        وتستيطع أيضا استخدام ال * والتى تعنى كل الأعمدة لجلب كل البيانات الخاصة بالأعضاء دفعة واحدة دون كتابة جميع الحقول وذلك كما فعلنا سابقا من خلال التالى :


        ﻻحظ أيضا أن العمود mem_id فعلا قم تم إدخال البيانات فيه بشكل تلقائى دون تدخل منا أثناء تنفيذ جملة أمر insert .
        شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير
        | قناة المجتمع التعليمية | قناة المجتمع للفيديوهات | ويكي مجتمع لينوكس العربي | البريد الألكتروني (eMail) |

        تعليق


        • #5
          النقطة الثامنة : الإستعلام عن البيانات مع وضع شروط


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

          كود:
          SELECT column_names from table_name [WHERE ...conditions];
          كما ذكرنا سابقا أن جملة [WHERE ...conditions] هى جملة اختيارية يمكن وضعها او قد ﻻ نحتاج إليه كما ذكرنا فى الأمثلة السابقة ، وسنتعرض فى كلامنا التالى إلى استخدام الجمل الإستعلامية مع الشروط وهنا تظهر قوة نظم قواعد البيانات العلائقية أو RDBMS بصورة جلية حيث يمكن تطبيق شروط معينة لجلب أو استخراج بيانات بناء على تلك الشروط ، وسنبدأ أوﻻ مع شروط التى تخص عمليات المقارنة وأولها :

          العلامتان = والتى تعنى " يساوى " و =! والتى تعنى " ﻻ يساوى "

          ونبدأ مع مثال يوضح إستخدامات تلك العلامات :


          هنا بعمل جملة أمر select لجلب الإسم الأول والأخير من الجدول members_data ولكن قمنا بوضع الشرط وهو جلب كل المستخدمين والذى يبدأ إسم كل منهم ب muhammad وظهرت النتيجة بالشكل السابق .

          لاحظ : الشرط الذى قمنا ببناء جملة أمر ال select وهو أن يكون الإسم الأول للمستخدمين هو muhammad تم وضعه داخل single quotes أى الموضوع سيان لا يوجد فرق بين ال double quotes أو single quotes المهم أن القيم التى تكون من نوع varchar لابد من وضعها داخل quotes سواء كانت single أو double .

          مثال آخر :


          أترك لكم شرح الأمر P:

          طبعا تستطيع إستخدام العلامة =! والتى تعنى " ﻻ يساوى " فضع ما تشاء من أمثلة تريدها .


          العلامتان < والتى تعنى " أكبر من " و > والتى تعنى " أصغر من "

          تعتبر كل من العلامة " أكبر من أو < " والعلامة " أصغر من أو > " من الأهمية بمكان داخل جملة الشروط ويتضح ذلك جلياً مثلا ًعندما تريد الإستعلام عن عدد من الأعضاء يكون سنهم أكبر من قيمة معينة وهكذا.

          ونأخذ مثالاً عمليا على ذلك من خلال جدولنا members_data داخل قاعدة البيانات linux_ac وفى المثال نريد الإستعلام عن الإسم الأول والأخير للإعضاء أصحاب عمر أكبر من 32 عام كالتالى :




          كذلك الأمر مع العلامة "أصغر من" أو > تستطيع عمل أمثلة عليها بنفسك للتدريب .


          العلامتان =< والتى تعنى " أكبر من أو يساوى " و => والتى تعنى " أصغر من أو يساوى "

          رأينا فى الأمثلة السابقة كيفية إستخدام العلامات الأربع وهى " يساوى أو = " ، والعلامة الثانية " ﻻ يساوى أو =! " ، والعلامة الثالثة " أكبر من أو < " والعلامة الرابعة " أصغر من أو > " ورأينا الفائدة التى تعود علينا من إستخدام تلك العلامات ولكن لو تلاحظ فى المثال الأخير عن كيفية تطبيق الشرط بإستخدام العلامة " أكبر من " كانت النتائج كلها أكبر من الشرط الذى قمنا بوضعه وهو عمر 32 أى أن أصحاب ذلك العمر لم يظهروا من خلال نتيجة جملة أمر ال select ولكن ماذا لو أردنا الإستعلام عن الأعضاء أصحاب عمر أكبر من أو يساوى 32 مثلا ؟

          يأتى هنا دور العلامة =< والتى تعنى " أكبر من أويساوى " ، والآن لنقوم بتطبيق الجملة السابقة مرة أخرى ولكن باستخدام العلامة =< وتكون بالشكل التالى :


          كما ترى ظهر العضو ahmad صاحب العمر 32 عام فى نتيجة الجملة التى قمنا بتنفيذها سابقاً ونفس الشىء مع العلامة => والتى تعنى " أصغر من أويساوى " وقم بتطبيق عدة امثلة عليها كى تستقر الأمور لديك .



          النقطة التاسعة : Pattern Matching Operatos

          بعد إن تطرقنا فى الجزء الأول من الموضوع إلى كيفية إستخدام علامات المقارنة أو Comparison Operators مثل = و =! و < و > ، سننتقل الآن إلى جزئية أخرى وهى ال Pattern Matching وصراحة لا أريد ترجمة المصطلح حتى ﻻ يفقد معناه المطلوب وسأكتفى بتوضيح معنى مصطلح ال Pattern Matching من خلال الأمثلة التى سوف نطبقها على تلك الجزئية وسيكون تطبيق ال Pattern Matching بإستخدام جملة where أيضا ، وبذلك تتفق ال Pattern Matching مع ال Comparison Operators فى استخدامها لجملة Where ، كما أننا سوف نستعمل أداة تسمى like أو like operator بدلا من العلامة = أو يساوى .

          كما تعلمنا سابقا أن ال Operator " يساوى " أو = كانت تُستخدم للإستعلام المشروط وجلب بيانات متماثلة للشرط الذى وضعناه ، فمثلا حينما أردنا جلب كل المستخدمين أصحاب الإسم الأول "muhammad" كل ما فعلناه وضعنا الشرط وهو أن يكون الإسم الأول يساوى "muhammad"وكانت جملة الشرط بالشكل التالى :

          كود:
          where f_name='muhammad'
          أى أن ال Operator "يساوى" أو = استخدمناه لعمل موائمة لجملة الإستعلام المشروطة فمثلا نريد الإستعلام عن أسماء الإعضاء ( الإسم الأول ، الإسم الأخير ) بشرط أن يكون الإسم الأول للعضو sherif فكيف ننفذ ذلك ؟

          للإجابة على ذلك السؤال تعالوا أوﻻ نحلل السؤال خطوة خطوة ، فجملة الإستعلام المطلوبة تريد أوﻻ الإستعلام عن الإسم الأول وهو f_name والذى يمثل عموداً أو حقلا داخل قاعدة البيانات لدينا ،كذلك نريد الإستعلام عن الإسم الأخير وهو l_name والذى يمثل لدينا عموداً أو حقلا داخل قاعدة البيانات ولكن فى السؤال ظهر قيد أو شرط جديد أﻻ وهو أن يكون الإسم الأول للعضو sherif وتكون الجملة بالشكل التالى :



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

          أرى أن الملل بدأ يتسرب إلى أذنيك P: وأسمع همس القراء ولسان حالهم يقول " قد شرحت ذلك سابقا فى الجزء الأول من الموضوع " ! D:

          فى الحقيقة نعم شرحت ذلك الجزء سابقاً ولكن أردت التركيز على تلك الجزئية لكى تلمس الفارق بين ال Oprtator الذى سوف نستخدمه وهو like وبين ال Operator الذى استخدمناه وهى علامة يساوى أو = .

          ولكى نوضح الفارق فى الإستخدام بين like وبين = سأقوم بتطبيق مثال ، وليكن التالى نفترض أنك تريد الإستعلام عن أسماء الإعضاء الإسم الأول والإسم الأخير لكل عضو بشرط أن يبدأ الإسم الأول للعضو بحرف "m" هل تستطيع فعل ذلك بال Operator يساوى أو = ؟

          من البديهى والمنطقى ﻻ ، ﻷن = تقوم بعملية مماثلة لمتغير نصى بصورة كاملة أى أنك مثلا لو كتبت الجملة على الصورة التالية :

          كود:
          mysql> select f_name, l_name from members_data where f_name = 'm';
          Empty set (0.00 sec)
          فكانت النتيجة هى أن الجدول ﻻ يوجد به الشرط الذى قمت أنت بوضعه مع أنك تعلم تمام العلم أنه توجد أسماء لديك داخل الجدول تبدأ بحرف " m " هل اتضح الأمر قليلا لديك واستطعت الآن أن تميز الفارق ؟؟ مازال فى الأمر غموضا ! ﻻ تقلق سأوضح أكثر وبتفصيل .

          الجملة التى تستخدم فى السماح لنا بعمل Pattern Matching تكون بالشكل التالى :


          ﻻحظ فى المثال السابق أن ال Pattern Matching فى جملة الإستعلام كانت مع شرط أن يبدأ الإسم الأول للعضو بحرف " m " وتم استخدام ال Operator فى الجملة وهو like مع ال percentage sign وهى " % " والتى تعنى أهمال تأثير ما قبلها أو إهمال تأثير ما بعدها كما هو حال ال * أو asterisk على أنظمة ال unix و unix-like .

          ملحوظة : أود أن ألفت انتباهك إلى جزئية مهمة هنا أن " % " تساوى فى الوظيفة " * " ولكن ذلك يتم على أنظمة unix و unix-like أما عند إستخدام ال * مع ال MySQL فهى تعنى " All Columns " فأرجو أن تنتبه لتلك النقطة وﻻ تخلط بين معنى ال" * " على Gnu/linux وبين معنى ال" * " على MySQL .

          ولنُكمل حديثنا مع مثال آخر وهو كيفية الإستعلام عن أسماء الإعضاء (الإسم الأول والإسم الأخير ) والذى يبدأ إسم العضو بحرف " s " فيكف نفعل ذلك راقب معى التالى :




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

          كود:
          where f_name = 'sherif';
          أو

          كود:
          where f_name = 'sarah';
          هنا ظهرت قوة like بشكل واضح أليس كذلك ؟ كذلك تستطيع عمل العكس بمعنى أنك تريد الإستعلام عن أسماء الإعضاء (الإسم الأول والإسم الأخير ) ولكن هذه المرة بشرط أن يكون الإسم الأول منتهى بحرف d مثلا فيكون ذلك كالتالى :


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



          طبعا تستطيع اللعب مع like مثلا بأن تقول إريد الإستعلام عن أسماء الإعضاء (الإسم الأول والأخير ) وأعمارهم بشرط أن يكون عمر العضو محتويا على رقم 3 فكيف تفعل ذلك ؟




          النقطة العاشرة : العلامات المنطقية أو Logical Operators


          فى هذا الجزء إن شاء الله سنلقى الضوء على كيفية العلامات المنطقية أو Logical Operators داخل جملة أمر select ، والعلامات المنطقية تمكننا من تطبيق أكثر من شرط داخل الجملة الواحدة وهى ثلاث علامات :
          كود:
          1- and
          2- or
          3- not

          كأن تقول مثلا أريد الإستعلام عن أسماء الأعضاء (الإسم الأول والإسم الأخير ) وأعمارهم بشرط أن يكون الإسم الأول يبدأ بحرف " m " وفى نفس الوقت عمره يكون أكبر من 32 عاما .

          تريد تطبيق ذلك تخيل معى شكل الجملة ...... :



          أو كأن تقول مثلا أريد الإستعلام عن أسماء الأعضاء (الإسم الأول والإسم الأخير ) وأعمارهم بشرط أن يكون العمر أكبر من 20 وأقل من 30 :


          من هنا يتضح أن العلامة المنطقية and تعمل فقط فى حال توافر الشرطين معا أى ﻻ بد من وجود كلا الشرطين لكى تكون هناك نتيجة لجملة الإستعلام أما العلامة المنطقية or فتستخدم فى حال توافر أحد الشرطين ، فمثلا تريد الإستعلام عن أسماء الإعضاء (الإسم الأول والإسم الأخير) وأعمارهم ولكن بشرط أن ينتهى الإسم الأخير للعضو بحرف " a " أو أن يكون عمره أكبر من 20 عاماً :


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

          والآن لنأخد مثالا أكثر صعوبة : أريد الإستعلام عن أسماء الإعضاء (الإسم الأول والإسم الأخير ) وأعمارهم بشرط أن يبدأ الإسم الأخير بحرف " m " أو حرف " a " و تكون أعمارهم أكبر من 25 عاماً ؟

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

          أوﻻ : أن يبدأ الإسم الأخير بحرف m أو بحرف a وتسطيع فعل ذلك باستخدام ال Operator وهو like مع ال percentage sign وهى % إلى جانب إستخدام العلامة المنطقية or .

          ثانيا : فى نفس الوقت أن يكون العمر أكبر من 25 عاما أى أننا سنتخدم هنا Comparison Operator وهى العلامة < .

          الآن لنرى كيفية كتابة الجملة من التحليل السابق للسؤال :



          ﻻحظ أننى قمت بالفصل بين كل من العلامة المنطقية or والعلامة المنطقية and فى جملة where وذلك فقط للتوضيح أن هناك علامتان منطقيتان وكسبيل للترتيب ،فمن الممكن إستخدام جملة where بدون تلك الأقواس وستعمل معك الجملة بدون أى مشاكل .

          أما العلامة الأخيرة not فتستخدم لنفى شىء والإتيان بنقيضه كأن نقول مثلا أريد الإستعلام عن أسماء الأعضاء (الإسم الأول والإسم الأخير ) وأعمارهم بشرط ألا يبدأ الإسم الإخير بحرف m :



          النقطة الحادية عشر : العلامتان In و Between

          ذكرنا فى الجزء السابق الخاص بالعلامات المنطقية أو Logical Operators أنها تقوم للربط بين أكثر من شرط سواء كانوا شرطين أو ثلاثة أو أكثر ، فعلى سبيل المثال لو أنك تريد الإستعلام عن أسماء الإعضاء (الإسم الأول والإسم الأخير) وأعمارهم بشرط أن يكون الإسم الأخير ahmad أو taha فتكون جملة الإستعلام بالشكل التالى :



          فتستطيع عمل ذلك بإستخدام IN Operator وحصر الشروط داخل الأقواس بالشكل التالى :



          أظن أن إستخدام In فى تحديد الشروط افضل من إستخدام or عدة مرات أليس كذلك ؟ فمن الممكن أن تكون جملة الشرط تحتوى على أكثر من عنصر للشرط فمثلا جملة الشرط قد تكون الإستعلام عن أسماء الأعضاء وأعمارهم بشرط أن يكون الإسم الأخير يكون ahmad أو youssef أو mahmoud أو kamal إلخ فتستطيع توفير على نفسك بعض ال Ors ! عموما الأختيار متروك لك .

          كما يمكننا إستخدام not مع In للإستعلام عن نقيض ما بداخل الأقواس أو قد نقول مُكمل ما بداخل الأقواس وﻻحظ معى المثال التالى :


          أى أننا فى المثال السابق قمنا بالإستعلام عن كل الإسماء مع عدا كل من الإسم ahmad والإسم taha .

          أما العلامة الثانية وهى between فتستخدم لتحديد فترة داخل الأرقام الصحيحة فمثلا تريد الإستعلام عن أسماء الأعضاء (الإسم الأول والإسم الأخير) وأعمارهم بشرط أن يكون العمر محصورا من 20 إلى 25 عاماً :


          كما أنك تستطيع أيضا إستخدام not مع between لعمل وظيفة أخرى وهى الإستعلام عن أسماء الأعضاء وأعمارهم بشرط أﻻ يكون العمر محصوراً ما بين 20 و 25 عاماً :




          كما رأيت فعلا ﻻ توجد الأعمار داخل الفترة التى قمنا بتحديدها .


          النقطة الثانية عشر : جملة order by



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

          قد يُخمن البعض الآن ما سوف أقوم بشرحه ، أو ما سنقوم بالتركيز عليه خلال تلك الجزئية وهى كيفية ظهور البيانات نفسها وكيفية ترتيب نتيجة جمل الإستعلام المختلفة . فى السابق كنا نستخدم جملة [Where ......Conditions] لوضع مجموعة من الشروط أو القيوم على جملة الإستعلام بغرض تطويع الجملة لكى نستعلم عما نريد ، ولكن لم نكن لنهتم كثيراً هل ظهرت البيانات بشكل مرتب أم لم تظهر ، كذلك كيفية ظهور تلك البيانات بوضعية معينة مثلا تريد أن تستعرض البيانات عن طريق حقل ال age وتريد ترتيب أعمار الأعضاء بشكل تصاعدى أو تنازلى طبقا لعمر العضو داخل الجدول وهكذا .

          من السابق نستنتج أن محور الحديث خلال السطور القادمة سيكون عن كيفية ظهور البيانات من خلال جمل الإستعلام المختلفة ولكن سنستخدم جملة أخرى بدلاً من جملة where وستكون هذه المرة الجملة المُسماة order by والتى هى مسئولة عن تلك النقطة أى ترتيب البيانات بشكل معين .

          ظهور البيانات فى السابق كان معتمداً على مفهوم مهم وهو ما يدخل أوﻻً يُعرض أوﻻً ، نعم ولنفترض مثلاً أن قمت بإدخال أسماء عدة أعضاء جدد داخل الجدول الخاص بنا وهو members_data داخل قاعدة البيانات linux_ac فعند عمل جملة إستعلام عن الإسم الأول والإسم والأخير داخل الجدول سيظهر لديك ترتيب أسماء الأعضاء ترتيباً زمنياً أى كما ذكرنا سابقاً أن من تمت إضافته أوﻻ سيظهر فى البداية ثم يليه الذى تم إضافته مؤخراً وهكذا ، وبالتالى تلك الجزئية أنت مجبر عليها من قبل نتيجة جملة أمر الإستعلام Select ، ولكن الجديد هنا بإستخدام جملة order by أن نتمكن من إظهار البيانات بوضعيات وأشكال مختلفة نحن نريدها لسنا مُجبرين عليا ، البعض قد سئم الكلام وكثرة الحديث ولذلك سنقوم بتسخين أيدينا ونبدأ بمثال عملى يوضح تلك الجزئية بالشكل التالى :




          ماهى ملاحظاتك لنتيجة جملة أمر ال select ؟ هلا تلاحظ شيئاً جديداً لم تكن معتاداً على رؤيته ؟ بالطبع نعم !

          أوﻻ نبدأ مع شرح جملة أمر ال select : فى البداية قمنا بالإستعلام عن الإسم الأول والإسم الأخير للأعضاء ولكن هذه المرة قمنا بإستخدام جملة جديدة هى order by بدلاً من جملة where ، ولكن وضعنا شرط لعملية الترتيب أن تكون عن طريق العمود الخاص بالإسم الأول للأعضاء وفى نفس الوقت بترتيب تصاعدى للحروف الإنجليزية أى أن يكون ترتيب الأسماء بحسب ترتيب الحروف باللغة الإنجليزية وبشكل أبسط من ذلك أن يكون العمود بادئاً بالأسماء التى تبدأ بحرف a ثم الأسماء التى تبدأ بحرف b وهكذا حتى نهاية العمود وذلك بالأسماء التى تبدأ بحرف z .

          وبالتالى يتضح من ذلك أن الوضع الإفتراضى عند إستخدام جملة order by إعتماداً على إسم عمود يحتوى على نصوص سيكون الترتيب الظاهر لدينا هو ترتيب حرفى بحسب وضعية الحروف وترتيبها داخل نطاق اللغة التى تشمل تلك الحروف ، ففى مثالنا السابق قمنا بوضع شرط لجملة order by أن يكون الترتيب الظاهر لدينا فى الجدول بحسب الإسم الأول فظهرت الأسماء التى تبدأ ب a أوﻻ ثم التى تليها ثم التى تليها ..... وهكذا

          أى نستطيع إستنتاج قاعدة مهمة :

          ترتيب الحقول أو الأعمدة عند وضعها كشرط بعد جملة order by سيكون ترتيب تصاعدى سواء كانت تلك الحقول تشمل متغيرات نصية أو (Strings) او متغيرات عددية صحيحة أو (Integers) ، ففى حالة الأعداد والأرقام سيكون ظهور الرقم من أقل إلى أكبر ، وفى حالة ظهور الحروف سيكون بموقعها الترتيبى داخل حروف اللغة نفسها ، فعلى سبيل المثال حروف اللغة الإنجليزية ستبدأ من a ثم b ثم c ....... انتهاءاً ب z .

          مثال : نريد الإستعلام عن الإسم الأول والإسم الأخير لأعضاء قاعدة البيانات linux_ac داخل الجدول members_data بحسب ترتيب الإسم الأخير ؟




          لاحظ فى المثال السابق أن العمود المُسمى l_name هو الذى ظهر بالترتيب الحرفى وذلك لأننا أردنا الإستعلام عن أسماء الأعضاء ولكن بحسب ترتيب الإسم الأخير ومن ثمّ لمزيد من السهولة فى كيفية إكتشاف ذلك قم بالتبديل بين إسم العمود l_name و f_name داخل جملة أمر ال select لكى يسهل عليك فهم ذلك كأن يكون بالصورة التالية :




          كل ما فعلناه أننا بدلنا عمود مكان الآخر لكى يسهل علينا فهم ما فعلناه سابقاً ليس إﻻ .

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





          هنا تم ظهور العمر بشكل تصاعدى كما ذكرنا من قبل أى العمر الأقل ، ثم الأكبر فالأكبر وهكذا دواليك .

          ولكن قد أرى فى عيون البعض سؤالاً يفرض نفسه علينا ماذا لو أردت قلب الموضوع رأساً على عقب ؟ بمعنى أريد مثلا الإستعلام عن أسماء الأعضاء (الإسم الأول والإسم الأخير ) وأعمارهم أيضا ولكن بحسب ترتيب العمر ترتيباً تنازلياً أى الأكبر ثم الأقل فالأقل فكيف لنا فعل ذلك ؟

          سؤال منطقى وقد يخطر لدى البعض ، وهنا يأتى دور الخيار descending والتى يدخل ضمن نطاق جملة order by وﻻيوجد أسرع من الأمثلة لكى تفهم ذلك سريعاً فقد يغنى مثالاً واحداً تقوم بتطبيقه عن عدة صفحات نقوم بسردها ، ونفذ معى التالى من أمام محث أوامر mysql :




          لاحظ فى نهاية الجملة قمت بوضع الخيار DESC بالحروف الكبيرة لمجرد أن تلاحظ ما قمنا بإضافته بعد إسم العمود الُمراد ظهور البيانات إعتماداً عليه ، وبالتالى يمكنك إستخدام خاصية DESC مع أى عمود تريد ظهور البيانات فيه بشكل تنازلى سواء كان ذلك للأرقام العددية أو للحروف وطبيعى فى حالة الحروف سيكون ظهور أسماء الأعضاء بداية من الحرف z وانتهاءاً بالحرف a ولنلمس ذلك عن قرب كما يلى :



          ملحوظة : كما قلنا سابقاً أن الترتيب التصاعدى هو الوضع الإفتراضى بالنسبة للجملة order by ويمكنك أن تستخدمه أيضا داخل نطاق الجملة وذلك بوضع asc كأن تقول :

          كود:
          order by f_name ASC;

          النقطة الثالثة عشر : جملة limit


          بعد أن استطعنا من خلال جملة order by عرض وترتيب شكل البيانات بالطريقة التى تعجبنا ننتقل إلى جزئية أخرى وهى كيفية تحديد عدد البيانات التى تظهر نتيجة لجملة أمر select كأن تقول مثلاً أريد عرض أقل أربعة أعمار بإستخدام حقل العمر داخل نطاق جملة order by أو أن تقول أريد عرض أول خمس نتائج داخل الجدول وهكذا ، والجملة التى تمكننا من فعل ذلك هى جملة limit ويتبعها مباشرة الرقم الذى تريد تحديد فيه عدد النتائج ونأخذ مثالاً على ذلك :

          تريد الإستعلام عن أول خمسة أسماء للأعضاء ( الإسم الأول والإسم الأخير )من خلال الجدول members_data :


          ستلاحظ التالى فعلا أن أول خمسة أسماء من أسماء الأعضاء هى التى ظهرت بالفعل وتستطيع تغيير الرقم 5 إلى أى رقم تريده ، ولكن تظهر قوة limit بصورة أكبر من المثال السابق عند دمج limit مع جمل order by ، فالمثال التالى نريد الإستعلام فيه عن أصغر أربعة أعضاء فى العمر من خلال الجدول وتكون صيغة جملة أمر select كما يلى :


          كما ترى أن لجملة limit خاصية مفيدة فى حال دمجها مع جملة order by لتكوين جمل تؤدى مهام عديدة وتستطيع اللعب مع معها !


          لجملة limit خاصية مهمة جداً وهى تحديد السطر الذى تريد إستخراج منه مجموعة فرعية من البيانات ، فمثلا تريد الإستعلام عن بعض بيانات الأعضاء ولكن تريد تحديد بداية الإستعلام كأن تقول لجملة الإستعلام بإستخدم جملة limit إبدأ من السطر السادس وإستعلم عن أربع نتائج ، فكيف يمكننا فعل ذلك ؟ :

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



          بعد ذلك سأقوم الآن بتحديد لجملة الإستعلام كى تبدأ من السطر السادس بعدد أربع نتائج لجملة limit ويكون شكل الجملة كما يلى :



          حيث الرقم 6 هو الرقم الذى سوف يبدأ بعده مباشرة للإستعلام عن النتائج ثم بعد ذلك الرقم 4 وهو الرقم الذى يحدد عدد النتائج المُستعلم عنها .

          ملحوظة مهمة : الرقم 6 هو عدد الصفوف التى سيتم إهمالها لتبدأ جملة الإستعلام فى العمل ، ففى المثال السابق تم إهمال أول ستة صفوف وبدأت جملة الإستعلام فى جلب النتائج بداية من الصف رقم 7 وهكذا إذا أردت الإستعلام عن بيانات بداية من الرقم 4 كمثال سيتم إهمال أول أربعة نتائج وتبدأ جملة الإستعلام فى جلب النتائج بداية من الصف رقم 5 .

          النقطة الرابعة عشر : الأداة Distinct


          النتائج السابقة التى كانت تظهر لنتيجة جمل أمر ال select المختلفة كان تشمل إحتمالية حدوث عدة بيانات مختلفة فى نفس الحقل كأن يحدث مثلاً أن تظهر عدة أسماء فى العمود f_name بنفس الإسم وليكن على سبيل المثال ، ولكن فى بعض الأحيان ﻻ نريد أن تظهر تلك النتائج المتشابهة ونريد ظهور البيانات دون تكرار بيان فى حقل معين فكيف لنا ذلك ؟

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

          نريد الإستعلام عن الأسماء داخل العمود الأول f_name بشرط أﻻ تظهر أسماء مُكررة فى نتائج الجملة :



          طبعا قمنا أوﻻ بعرض الأسماء داخل العمود لكى نتأكد من وجود أسماء مُكررة لكى تلاحظ الفارق ، الآن لاحظ التالى :



          ومثال آخر إذا أردت الإستعلام عن العمود الخاص بأعمار الأعضاء وفى نفس الوقت عدم تكرار أعمار متشابهة خلال نتائج جملة أمر select سيكون ذلك بالشكل التالى :



          هنا أيضا إستخدمنا جملة order by لكى تظهر البيانات المُستعلم عنها بشكل بترتيب تصاعدى .

          إلى هنا إنتهينا فى هذا الموضوع من بناء تطبيق بسيط للتعريف بقواعد البيانات إن شاء الله سأقوم بفتح موضوع آخر يتضمن الجزء الثانى وبناء تطبيق أكثر عملياً من الذى قمنا بإنشائه بأعلى

          إن أصبت فمن الله وإن أخطأت فمن نفسى والشيطان وكل ما أرجوه وأتمناه دعوة بظاهر الغيب منكم



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

          تعليق


          • #6
            شكـرا ابو عبد الرحمـن علي الكورس الجميـل جدا وفي انتظـار كل ما هو جديد :clown::clown:

            تعليق


            • #7
              السلام عليكم

              ﻻ شكر على واجب يا كريم ده واجب على كل واحد إنه يرد ولو جزء بسيط من الدين اللى عليه تجاه الموقع

              وجزاك الله كل خير على التثبيت

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

              تعليق


              • #8
                ابدااااااااااااااااااع أخوي أبو عبدالرحمن
                الله يعطيك ألف عافية على هذا الشرح الرائع
                الله يكثر من أمثالك وبانظار المزيد ...

                كل الود... Br4v3-H34r7.

                تعليق


                • #9
                  درس ما شاء الله اقل ما يمكن ان يقال عنه "رائع" ...

                  اثابك الله بكل حرف حسنة .. وللحسنة عشرة امثالها.. والله يضاعف لمن يشاء ...
                  V.I.P

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

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

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


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


                  تعليق


                  • #10
                    الله يجزيكم كل خير إخوانى ومشكورين على المرور ويارب أكون رديت ولو جزء بسيط تجاه هذا الصرح الرائع
                    التعديل الأخير تم بواسطة Xero; الساعة 10-02-2008, 06:03 AM.
                    شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير
                    | قناة المجتمع التعليمية | قناة المجتمع للفيديوهات | ويكي مجتمع لينوكس العربي | البريد الألكتروني (eMail) |

                    تعليق


                    • #11
                      أبو عبدالرحمن ،، الله يجزيك كل خير ،، يستاهل التثبيت ب 100 دبوس مش بواحد بس

                      لي عوده لتكمله القراءه ،،
                      اخوك ،
                      EncrYpted Just a Learner
                      شبكة الذكر الحكيم
                      لاتنسى ذكر الله....

                      تعليق


                      • #12
                        مين هيتكلم عن MySQL احسن من MySQL نفسه :P
                        تسلم ايدك يامحمد
                        Programming-Fr34ks[dot]NET
                        Ma Weblog
                        ابدأ بتعلم Python | Ruby
                        كتاب البايثون متوافر الآن
                        لا اتواجد بهذا المنتدى ... للإتصال

                        تعليق


                        • #13
                          اللهم آمين وإياكم يا EncrYpted وشكرا حبيبى على المرور ويارب يكون الموضوع على مستوى

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

                          تعليق


                          • #14
                            أود أن أسجل إعجابي بموضوعك الرائع ،، بارك الله فيك ،،

                            ننتظر الجزء الثاني... وإلى الامام دوما ...
                            تفضل بزيارة: وادي التقنية

                            تعليق


                            • #15
                              الصراحة .. بدأت من بالموضوع ومادريت الا انا مخلصه على طول مع التطبيق وكل شي ..
                              ما شالله عليك ابو عبدالرحمن شرح جميل جدا ً وطريقة طرح ولااحلى ... موضوع استفدت منه الكثير .. بالتأكيد منتظر الجزء الثاني ..
                              Macbook Air: OS X 10.9.2 + Kali Linux 1.0.6

                              تعليق

                              يعمل...
                              X