تعلم SQL في 20 دقيقة , على كل مطور ويب أن يعرف SQL. على الرغم من أنها موجودة منذ السبعينات ، فإنها لا تزال تستخدم على نطاق واسع، ولا يمكنك بناء تطبيق جدي من دونه. معظم الأطر لديها مكتبات للتعامل مع تعقيدات SQL , ActiveRecord, Doctrine, Hibernate وأكثر من ذلك. ولكن في كثير من الأحيان تحتاج إلى أن تكتب بنفسك بلغة SQL منخفضة المستوى.
لهذا السبب قمنا بتحضير مقدمة قصيرة وفي الصميم لأساسيات SQL. ضمن هذا المقال .
هيا نبدأ!
محتويات
إنشاء الجدول Create Table
عند إنشاء جداول جديدة في SQL فإنه يطلق عليها CREATE TABLE . وهو يتضمن الأعمدة التي نريدها في الجدول، مع أنواع البيانات الخاصة بهم.
سوف نقوم هنا بإنشاء جدول بسيط يسمى أشهر. وهو يتألف من 3 أعمدة columns:
- id : عدد الشهر في السنة التقويمية (integer) .
- Name : اسم الشهر (string, maximum of 10 characters).
- Days : عدد الأيام في ذلك الشهر (integer) .
وهذه هي الطريقة التي تبدو فيها SQL:
أيضا عند إنشاء الجداول، من المستحسن إضافة مفتاح أساسي إلى أحد الأعمدة. وهذا يساعد على ان تكون المدخلات فريدة من نوعها ويسرع من عمليات ال queries الاستعلامات.
إدراج الصفوف Insert Rows
الآن دعونا نملأ الأشهر مع عدد من الصفوف بالمعلومات. تتم إضافة بيانات إلى الجدول من خلال INSERT وهناك طريقتان مختلفتان لاستخدامه:
الطريقة الأولى لا يتم خلالها تحديد أسماء الأعمدة التي سيتم إدراج البيانات فيها، فإنها فقط تتوقع القيم ويُترك الأمر للمطور لتزويد كافة البيانات بالترتيب الصحيح.
ولكن الطريقة المثلى لكتابة هذا هو تضمين الأعمدة:
يمكنك تجربة تشغيل هذه الأوامر :
months
id | name | days |
1 | January | 31 |
2 | February | 29 |
Results
id | name | days |
1 | January | 31 |
2 | February | 29 |
3 | March | 31 |
مساعدة : اكتب عبارة INSERT لإضافة المزيد من الشهور إلى الجدول.
3. Select
هي الأفضل عندما نريد جلب معلومات من قاعدة البيانات. يتم استخدامها في كل وقت , حتى في هذا المقال سوف ينفق الكثير من الوقت تغطيتها.
سيكون أبسط مثال على SELECT هو هذا الاستعلام query الذي سيعرض كافة الأعمدة والصفوف من جدول characters table :
النجمة (*) تعني أننا نريد استرجاع جميع الأعمدة، دون استبعاد أي شيء. بما أن قواعد بيانات SQL تتكون عادة من أكثر من جدول واحد، فإن الكلمة الرئيسية FROM مطلوبة لتحديد الجدول الذي نريد أن نبحث فيه.
في بعض الأحيان لا نريد جميع الأعمدة في الجدول. SQL يسمح لنا باختيار فقط تلك التي نحتاج إليها: بدلا من وضع العلامة النجمية (*)، فاننا نكتب أسماء الأعمدة المطلوبة.
أيضا، في كثير من الحالات نريد فرز النتائج بطريقة معينة. في SQL نقوم بذلك عن طريق استخدام ORDER BY. يمكن استخدام DESC لتحديد البيانات المراد استرجاعها وفرز النتائج:
characters
name | race | gender | weapon | hobby |
ahmad | Human | male | pistol | shooting first |
saleh | Human | male | crossbow | painting |
Results:
name | weapon |
ahmad | pistol |
saleh | crossbow |
مساعدة : كتابة SELECT من شأنها أن تحدد أعمدة الاسم والعرق والهواية.
4. Where
لقد تعلمت كيفية تحديد أعمدة معينة فقط، ولكن ماذا لو أردنا الحصول على صفوف معينة فقط. هنا يأتي شرط Where، مما يسمح لنا لتصفية البيانات اعتمادا على شرط معين.
في هذا الاستعلام query نختار فقط تلك المدخلات من جدول characters table، الذين يستخدمون pistol لمحاربة الأعداء.
characters
name | race | gender | weapon | hobby |
ahmad | Human | male | pistol | shooting first |
saleh | Human | male | crossbow | painting |
Results
name | race | gender | weapon | hobby |
ahmad | Human | male | pistol | shooting first |
5. AND / OR
يمكن استخدام Where الشرطية لتحديد ما تريد، مع مساعدة من logical operators (AND ، OR) وأدوات المقارنة الرياضية مثل (=، <،>، <=،> =، <>).
هنا لدينا جدول يحتوي على أعلى 4 ألبومات الأكثر مبيعا في كل العصور. دعونا نختار تلك التي تصنف على أنها rock وبيعت تحت 50 مليون نسخة. ويمكن القيام بذلك بسهولة عن طريق وضع AND بين الجمل .
albums
artist | album | released | genre | sales_in_millions |
Michael Jackson | Thriller | 1982 | pop | 70 |
AC/DC | Back in Black | 1980 | rock | 50 |
Pink Floyd | The Dark Side of the Moon | 1973 | rock | 45 |
Whitney Houston | The Bodyguard | 1992 | soul | 44 |
Results
artist | album | released | genre | sales_in_millions |
Pink Floyd | The Dark Side of the Moon | 1973 | rock | 45 |
AC/DC | Back in Black | 1980 | rock | 50 |
6. In/Between/Like
تدعم Where أيضا بعض الأوامر الخاصة، مما يتيح طريقة سريعة للتحقق من الاستعلامات الشائعة الاستخدام. هي:
- IN – يقارن العمود نسبة الى قيم متعددة، ويرجع صحيح إذا كان يطابق قيمة واحدة على الأقل.
- BETWEEN- تتحقق إذا كانت القيمة ضمن الRange .
- LIKE – البحث عن نمط معين .
على سبيل المثال، إذا أردنا إجراء استعلام لتحديد ألبومات pop و soul من جدولنا، يمكننا استخدام IN(“value1″,”value2”)
إذا أردنا الحصول على جميع الألبومات التي صدرت بين عامي 1975 و 1985 سنكتب:
albums
artist | album | released | genre | sales_in_millions |
Michael Jackson | Thriller | 1982 | pop | 70 |
AC/DC | Back in Black | 1980 | rock | 50 |
Pink Floyd | The Dark Side of the Moon | 1973 | rock | 45 |
Whitney Houston | The Bodyguard | 1992 | soul | 44 |
Results
artist | album | released | genre | sales_in_millions |
Michael Jackson | Thriller | 1982 | pop | 70 |
Whitney Houston | The Bodyguard | 1992 | soul | 44 |
مساعدة : كل من العمليات المذكورة أعلاه يمكن عكسها عن طريق وضع NOT أمامهم. حاول استخدام NOT BETWEEN للحصول على ألبومات صدرت قبل عام 1975 وبعد عام 1985.
7. Functions
SQL مليئة ب Functions المفيدة. وفيما يلي بعض من الأكثر استخداما:
- COUNT() : لإرجاع عدد الصفوف .
- SUM() : ترجع مجموع عمود رقمي.
- AVG() : ترجع متوسط مجموعة من القيم.
- MIN() / MAX() : يرجع الحد الأدنى / الحد الأقصى للقيم من عمود معين.
للحصول على أحدث سنة في جدولنا يمكننا تشغيل:
albums
artist | album | released | genre | sales_in_millions |
Michael Jackson | Thriller | 1982 | pop | 70 |
AC/DC | Back in Black | 1980 | rock | 50 |
Pink Floyd | The Dark Side of the Moon | 1973 | rock | 45 |
Whitney Houston | The Bodyguard | 1992 | soul | 44 |
MAX(released) |
1992 |
8. Nested Select
في النقطة السابقة تعلمنا كيفية القيام بعمليات حسابية بسيطة مع البيانات. إذا أردنا استخدام النتيجة فعليا من هذه الحسابات، غالبا ما يكون من الضروري وجود استعلام متداخل nested query (يعرف أيضا باسم sub select). لنفترض أننا نريد الحصول على الفنان والألبوم وسنة الإصدار لأقدم ألبوم في الجدول.
نحن نعلم كيفية الحصول على هذه الأعمدة المحددة:
ونحن نعلم أيضا كيفية الحصول على السنة الأولى:
كل ما هو مطلوب الآن هو الجمع بين اثنين مع مساعدة من WHERE:
albums
artist | album | released | genre | sales_in_millions |
Michael Jackson | Thriller | 1982 | pop | 70 |
AC/DC | Back in Black | 1980 | rock | 50 |
Pink Floyd | The Dark Side of the Moon | 1973 | rock | 45 |
Whitney Houston | The Bodyguard | 1992 | soul | 44 |
Results
artist | album | released |
Pink Floyd | The Dark Side of the Moon | 1973 |
9. Joining Tables
في قواعد البيانات الأكثر تعقيدا، في معظم الوقت هناك عدة جداول متصلة بعضها البعض بطريقة أو بأخرى. على سبيل المثال، أدناه في المحرر جدولان حول ألعاب الفيديو ومطوري ألعاب الفيديو.
في جدول video_games هناك عمود مطور، ولكنه يحمل عددا صحيحا بدلا من اسم المطور. يمثل هذا الرقم المطور المختص من جدول game_developers، وربط منطقيا الجدولين، مما يسمح لنا لاستخدام المعلومات المخزنة في كل منهما في نفس الوقت.
إذا أردنا إنشاء استعلام يعرض كل ما نحتاج إلى معرفته حول الألعاب، يمكننا استخدام INNER JOIN للحصول على الأعمدة من كلا الجدولين.
video_games
id | name | developer_id | genre |
1 | Super Mario Bros. | 2 | platformer |
2 | World of Warcraft | 1 | MMORPG |
3 | The Legend of Zelda | 2 | adventure |
game_developers
id | name | country |
1 | Blizzard | USA |
2 | Nintendo | Japan |
Results
name | genre | name | country |
Super Mario Bros. | platformer | Nintendo | Japan |
World of Warcraft | MMORPG | Blizzard | USA |
The Legend of Zelda | adventure | Nintendo | Japan |
هذا هو الأبسط والأكثر شيوعا نوع JOIN. هناك بضعة خيارات أخرى، ولكنها تنطبق على سيناريوهات أقل تكررا. الرسم البياني Chart of SQL Joins
10. Aliases
إذا نظرتم إلى المثال السابق ستلاحظ أن هناك عمودين يسمى الاسم. هذا أمر مربك، لذا دعونا نغيره عن طريق تعيين اسم بديل alias إلى أحد الأعمدة المتكررة: سيظهر الاسم من game_developers كمطور برامج.
يمكننا أيضا اختصار الاستعلام query بشكل كبير عن طريق وضع الأسماء المستعارة لأسماء الجدول: video_games يصبح الألعاب games و game_developers يصبح devs.
video_games
id | name | developer_id | genre |
1 | Super Mario Bros. | 2 | platformer |
2 | World of Warcraft | 1 | MMORPG |
3 | The Legend of Zelda | 2 | adventure |
game_developers
id | name | country |
1 | Blizzard | USA |
2 | Nintendo | Japan |
Results
name | genre | developer | country |
Super Mario Bros. | platformer | Nintendo | Japan |
World of Warcraft | MMORPG | Blizzard | USA |
The Legend of Zelda | adventure | Nintendo | Japan |
11. Update
في كثير من الأحيان علينا تغيير البيانات في بعض الصفوف. في SQL يتم ذلك عن طريق UPDATE
وهو هو يتكون من :
- اختيار الجدول الذي يوجد فيه السجل الذي نريد تغييره.
- تحديد قيمة جديدة للعمود المطلوب.
- التحديد باستخدام WHERE أي الصفوف التي نريد تحديثها. إذا تم حذف هذا سيتم تغيير كافة الصفوف في الجدول.
هنا هو جدول لبعض من المسلسلات التلفزيونية الأعلى تصنيف في كل العصور. هناك مشكلة صغيرة واحدة ، يتم وصف Game of Thrones على أنه كوميدي ، التي من الواضح أنها ليست كذلك. دعونا إصلاح ذلك!
tv_series
id | name | genre | still_running | imdb_rating |
1 | Breaking Bad | drama | no | 9.5 |
2 | Game of Thrones | comedy | yes | 9.5 |
3 | Rick and Morty | comedy | yes | 9.4 |
4 | Sherlock | mystery | yes | 9.3 |
Results
id | name | genre | still_running | imdb_rating |
2 | Game of Thrones | drama | yes | 9.5 |
12. Delete Rows
حذف صف من جدول خلال SQL عملية بسيطة حقا. كل ما هو مطلوب هو تحديد الجدول الصحيح والصف الذي نريد إزالته.
tv_series
id | name | genre | still_running | imdb_rating |
1 | Breaking Bad | drama | no | 9.5 |
2 | Game of Thrones | comedy | yes | 9.5 |
3 | Rick and Morty | comedy | yes | 9.4 |
4 | Sherlock | mystery | yes | 9.3 |
Results
id | name | genre | still_running | imdb_rating |
1 | Breaking Bad | drama | no | 9.5 |
2 | Game of Thrones | comedy | yes | 9.5 |
3 | Rick and Morty | comedy | yes | 9.4 |
هناك الكثير لتغطية، ولكن ما سبق يجب أن يكون كافيا لإعطائك بعض المهارات العملية في حياتك ك web dev.
لمزيد من المعلومات حول SQL تحقق من هذه الموارد.