أول استعلام SQL (First Query)

الآن بعد أن فهمنا كيف تُنظم البيانات في قواعد البيانات، حان الوقت لكتابة أول استعلام SQL! في هذا الدرس الشامل، سنتعلم أساسيات جملة SELECT - الأمر الأكثر استخداماً في SQL. سنبدأ من الصفر، نفهم بنية الاستعلام، نكتب أمثلة بسيطة، ثم نتقدم تدريجياً لفهم كيفية استخراج البيانات من الجداول. ستتعلم كيف تقرأ البيانات، تختار أعمدة محددة، وتفهم النتائج التي تظهر لك.

1. ما هو الاستعلام (Query)؟

الاستعلام (Query) هو أمر نكتبه بلغة SQL لنطلب من قاعدة البيانات تنفيذ عملية معينة. هذه العملية قد تكون:

  • قراءة البيانات (استخراج معلومات من الجداول) - الأكثر شيوعاً
  • إدراج بيانات جديدة (إضافة صفوف جديدة)
  • تحديث بيانات موجودة (تعديل قيم معينة)
  • حذف بيانات (إزالة صفوف)
  • إنشاء أو تعديل هيكل الجداول

في هذا الدرس، سنركز على قراءة البيانات باستخدام جملة SELECT، وهي الجملة الأكثر استخداماً في SQL. تقريباً 80% من عملك مع SQL سيكون قراءة وتحليل البيانات.

تشبيه: فكر في قاعدة البيانات كمكتبة ضخمة، والاستعلام هو السؤال الذي تطرحه على أمين المكتبة: "أريد كل الكتب المنشورة بعد 2020" أو "أعطني أسماء جميع المؤلفين". الاستعلام هو طريقتك للتواصل مع قاعدة البيانات.

2. جملة SELECT: الأساس في قراءة البيانات

جملة SELECT هي الأمر الذي نستخدمه لاستخراج (قراءة) البيانات من الجداول. البنية الأساسية لها بسيطة جداً:

البنية الأساسية لجملة SELECT
SELECT column1, column2, ...
FROM table_name;

شرح المكونات:

  • SELECT: الكلمة المفتاحية التي تبدأ بها الاستعلام (تعني "اختر" أو "حدد")
  • column1, column2: أسماء الأعمدة التي تريد استخراجها (مفصولة بفواصل)
  • FROM: كلمة مفتاحية تعني "من" (تحدد مصدر البيانات)
  • table_name: اسم الجدول الذي تريد قراءة البيانات منه
  • الفاصلة المنقوطة (;): تُنهي الاستعلام (اختيارية في بعض الأنظمة، لكن يُفضل استخدامها دائماً)
ملاحظة مهمة: SQL غير حساسة لحالة الأحرف (Case-insensitive) في معظم الأنظمة. يمكنك كتابة SELECT أو select أو Select. لكن العُرف هو كتابة الكلمات المفتاحية بأحرف كبيرة لتسهيل القراءة.

3. أول استعلام عملي: استخراج جميع البيانات

لنبدأ بأبسط استعلام ممكن: استخراج جميع البيانات من جدول. لنفترض أن لدينا جدول اسمه students يحتوي على معلومات الطلاب:

جدول students (قبل الاستعلام)
+----+-----------+-----+--------+
| id | name      | age | city   |
+----+-----------+-----+--------+
| 1  | أحمد      | 20  | الرياض |
| 2  | فاطمة     | 19  | جدة    |
| 3  | محمد      | 21  | الدمام |
| 4  | سارة      | 20  | مكة    |
+----+-----------+-----+--------+

لاستخراج جميع الأعمدة من هذا الجدول، نستخدم الرمز * (النجمة) الذي يعني "كل الأعمدة":

استعلام: استخراج جميع البيانات
SELECT * FROM students;

شرح الاستعلام:

  • SELECT * - اختر جميع الأعمدة
  • FROM students - من جدول students

النتيجة:

نتيجة الاستعلام
+----+-----------+-----+--------+
| id | name      | age | city   |
+----+-----------+-----+--------+
| 1  | أحمد      | 20  | الرياض |
| 2  | فاطمة     | 19  | جدة    |
| 3  | محمد      | 21  | الدمام |
| 4  | سارة      | 20  | مكة    |
+----+-----------+-----+--------+
4 rows in set (0.00 sec)

النتيجة تُظهر جميع الصفوف وجميع الأعمدة من الجدول. السطر الأخير 4 rows in set يخبرنا أن الاستعلام أرجع 4 صفوف.

تهانينا! لقد كتبت أول استعلام SQL ناجح! هذا الاستعلام البسيط هو الأساس الذي ستبني عليه استعلامات أكثر تعقيداً.

4. اختيار أعمدة محددة

في كثير من الأحيان، لا نحتاج إلى جميع الأعمدة. قد نريد فقط أسماء الطلاب، أو الأسماء والأعمار. لفعل ذلك، نحدد أسماء الأعمدة بدلاً من *:

مثال 1: استخراج عمود واحد فقط
استخراج أسماء الطلاب فقط
SELECT name FROM students;

النتيجة:

نتيجة الاستعلام
+-----------+
| name      |
+-----------+
| أحمد      |
| فاطمة     |
| محمد      |
| سارة      |
+-----------+
4 rows in set (0.00 sec)

لاحظ أن النتيجة تحتوي على عمود واحد فقط (name)، لكن جميع الصفوف الأربعة موجودة.

مثال 2: استخراج عدة أعمدة محددة
استخراج الاسم والعمر
SELECT name, age FROM students;

النتيجة:

نتيجة الاستعلام
+-----------+-----+
| name      | age |
+-----------+-----+
| أحمد      | 20  |
| فاطمة     | 19  |
| محمد      | 21  |
| سارة      | 20  |
+-----------+-----+
4 rows in set (0.00 sec)

ملاحظة مهمة: ترتيب الأعمدة في النتيجة يتبع ترتيبها في الاستعلام، وليس ترتيبها في الجدول الأصلي.

مثال 3: تغيير ترتيب الأعمدة
العمر ثم الاسم (ترتيب مختلف)
SELECT age, name FROM students;

النتيجة:

نتيجة الاستعلام
+-----+-----------+
| age | name      |
+-----+-----------+
| 20  | أحمد      |
| 19  | فاطمة     |
| 21  | محمد      |
| 20  | سارة      |
+-----+-----------+
4 rows in set (0.00 sec)

5. فهم تنفيذ الاستعلام: ماذا يحدث خلف الكواليس؟

عندما تكتب استعلاماً وتنفذه، تحدث عدة خطوات:

خطوات تنفيذ الاستعلام
1. تحليل الاستعلام (Parsing)
   ↓ التحقق من صحة بناء الجملة
   
2. التحقق من الصلاحيات (Authorization)
   ↓ هل لديك صلاحية قراءة هذا الجدول؟
   
3. تحسين الاستعلام (Optimization)
   ↓ إيجاد أفضل طريقة لتنفيذ الاستعلام
   
4. التنفيذ (Execution)
   ↓ قراءة البيانات من القرص/الذاكرة
   
5. إرجاع النتائج (Return Results)
   ↓ عرض البيانات لك

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

6. أمثلة عملية متنوعة

لنطبق ما تعلمناه على جدول آخر. لنفترض أن لدينا جدول products لمتجر إلكتروني:

جدول products
+----+------------------+--------+----------+
| id | name             | price  | stock    |
+----+------------------+--------+----------+
| 1  | لابتوب Dell      | 3500   | 15       |
| 2  | ماوس لاسلكي      | 50     | 200      |
| 3  | لوحة مفاتيح      | 120    | 80       |
| 4  | شاشة Samsung     | 800    | 25       |
| 5  | سماعات Bluetooth | 150    | 60       |
+----+------------------+--------+----------+
مثال 1: عرض أسماء المنتجات فقط
الاستعلام
SELECT name FROM products;
النتيجة
+------------------+
| name             |
+------------------+
| لابتوب Dell      |
| ماوس لاسلكي      |
| لوحة مفاتيح      |
| شاشة Samsung     |
| سماعات Bluetooth |
+------------------+
مثال 2: عرض المنتج والسعر
الاستعلام
SELECT name, price FROM products;
النتيجة
+------------------+--------+
| name             | price  |
+------------------+--------+
| لابتوب Dell      | 3500   |
| ماوس لاسلكي      | 50     |
| لوحة مفاتيح      | 120    |
| شاشة Samsung     | 800    |
| سماعات Bluetooth | 150    |
+------------------+--------+
مثال 3: عرض جميع معلومات المخزون
الاستعلام
SELECT * FROM products;

النتيجة ستكون الجدول كاملاً كما رأيناه في الأعلى.

7. نصائح وأفضل الممارسات

1. تجنب استخدام SELECT * في الإنتاج

رغم أن SELECT * مفيد للتعلم والاختبار، يُفضل تجنبه في التطبيقات الحقيقية:

  • الأداء: قد يُرجع أعمدة لا تحتاجها، مما يُبطئ الاستعلام
  • الوضوح: لا يُظهر بوضوح ما تحتاجه بالضبط
  • الصيانة: إذا تغير هيكل الجدول، قد يتأثر الكود

الأفضل: حدد الأعمدة التي تحتاجها فقط.

2. استخدم أسماء أعمدة واضحة
مثال على كود واضح
-- جيد: واضح وسهل القراءة
SELECT name, price, stock 
FROM products;

-- سيء: غير واضح
SELECT * FROM products;
3. اكتب الاستعلامات على أسطر متعددة

للاستعلامات الطويلة، اكتبها على عدة أسطر لتسهيل القراءة:

تنسيق جيد
SELECT 
    id,
    name,
    price,
    stock
FROM products;
4. استخدم التعليقات
استخدام التعليقات
-- هذا الاستعلام يعرض جميع المنتجات المتوفرة
SELECT name, stock FROM products;

/* 
   استعلام متعدد الأسطر
   يعرض معلومات المنتجات الأساسية
*/
SELECT name, price FROM products;

8. تمرين عملي: اختبر فهمك

لنفترض أن لدينا جدول employees (الموظفين) بالهيكل التالي:

جدول employees
+----+-------------+------------+--------+
| id | name        | department | salary |
+----+-------------+------------+--------+
| 1  | أحمد محمد   | IT         | 8000   |
| 2  | فاطمة علي   | HR         | 6000   |
| 3  | محمد حسن    | Sales      | 7000   |
| 4  | سارة أحمد   | IT         | 8500   |
+----+-------------+------------+--------+

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

  1. اعرض جميع بيانات الموظفين
  2. اعرض أسماء الموظفين فقط
  3. اعرض الاسم والقسم لكل موظف
  4. اعرض الاسم والراتب لكل موظف
نصيحة: جرب كتابة الاستعلامات بنفسك قبل النظر إلى الحلول أدناه!
الحلول (اضغط لعرض)
الحلول
-- 1. جميع البيانات
SELECT * FROM employees;

-- 2. الأسماء فقط
SELECT name FROM employees;

-- 3. الاسم والقسم
SELECT name, department FROM employees;

-- 4. الاسم والراتب
SELECT name, salary FROM employees;

9. الأخطاء الشائعة وكيفية تجنبها

خطأ 1: نسيان FROM
خطأ شائع
-- خطأ: نسيان FROM
SELECT name;

-- صحيح
SELECT name FROM students;
خطأ 2: اسم جدول أو عمود خاطئ
خطأ في الاسم
-- خطأ: اسم عمود غير موجود
SELECT fullname FROM students;
-- Error: Unknown column 'fullname'

-- صحيح: استخدم الاسم الصحيح
SELECT name FROM students;
خطأ 3: نسيان الفاصلة بين الأعمدة
خطأ في الفاصلة
-- خطأ: نسيان الفاصلة
SELECT name age FROM students;

-- صحيح
SELECT name, age FROM students;
ملخص الدرس
  • SELECT: الأمر الأساسي لقراءة البيانات من قاعدة البيانات
  • FROM: تحدد الجدول المصدر للبيانات
  • *: تعني "جميع الأعمدة"
  • يمكنك تحديد أعمدة معينة بكتابة أسمائها مفصولة بفواصل
  • ترتيب الأعمدة في النتيجة يتبع ترتيبها في الاستعلام
  • الفاصلة المنقوطة (;) تُنهي الاستعلام

الخطوة التالية: أنواع البيانات في SQL (Data Types)

أكمل رحلتك التعليمية وانتقل إلى الدرس التالي لتعلم أنواع البيانات في (Data Types) وتطوير مهاراتك في قواعد البيانات.

الانتقال إلى الدرس التالي
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن