أول استعلام SQL (First Query)
الآن بعد أن فهمنا كيف تُنظم البيانات في قواعد البيانات، حان الوقت لكتابة أول استعلام SQL! في هذا الدرس الشامل، سنتعلم أساسيات جملة SELECT - الأمر الأكثر استخداماً في SQL. سنبدأ من الصفر، نفهم بنية الاستعلام، نكتب أمثلة بسيطة، ثم نتقدم تدريجياً لفهم كيفية استخراج البيانات من الجداول. ستتعلم كيف تقرأ البيانات، تختار أعمدة محددة، وتفهم النتائج التي تظهر لك.
1. ما هو الاستعلام (Query)؟
الاستعلام (Query) هو أمر نكتبه بلغة SQL لنطلب من قاعدة البيانات تنفيذ عملية معينة. هذه العملية قد تكون:
- قراءة البيانات (استخراج معلومات من الجداول) - الأكثر شيوعاً
- إدراج بيانات جديدة (إضافة صفوف جديدة)
- تحديث بيانات موجودة (تعديل قيم معينة)
- حذف بيانات (إزالة صفوف)
- إنشاء أو تعديل هيكل الجداول
في هذا الدرس، سنركز على قراءة البيانات باستخدام جملة SELECT، وهي الجملة الأكثر استخداماً في SQL. تقريباً 80% من عملك مع SQL سيكون قراءة وتحليل البيانات.
2. جملة SELECT: الأساس في قراءة البيانات
جملة SELECT هي الأمر الذي نستخدمه لاستخراج (قراءة) البيانات من الجداول. البنية الأساسية لها بسيطة جداً:
SELECT column1, column2, ...
FROM table_name;
شرح المكونات:
- SELECT: الكلمة المفتاحية التي تبدأ بها الاستعلام (تعني "اختر" أو "حدد")
- column1, column2: أسماء الأعمدة التي تريد استخراجها (مفصولة بفواصل)
- FROM: كلمة مفتاحية تعني "من" (تحدد مصدر البيانات)
- table_name: اسم الجدول الذي تريد قراءة البيانات منه
- الفاصلة المنقوطة (;): تُنهي الاستعلام (اختيارية في بعض الأنظمة، لكن يُفضل استخدامها دائماً)
SELECT أو select أو Select. لكن العُرف هو كتابة الكلمات المفتاحية بأحرف كبيرة لتسهيل القراءة.
3. أول استعلام عملي: استخراج جميع البيانات
لنبدأ بأبسط استعلام ممكن: استخراج جميع البيانات من جدول. لنفترض أن لدينا جدول اسمه 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 صفوف.
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 لمتجر إلكتروني:
+----+------------------+--------+----------+
| 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 (الموظفين) بالهيكل التالي:
+----+-------------+------------+--------+
| id | name | department | salary |
+----+-------------+------------+--------+
| 1 | أحمد محمد | IT | 8000 |
| 2 | فاطمة علي | HR | 6000 |
| 3 | محمد حسن | Sales | 7000 |
| 4 | سارة أحمد | IT | 8500 |
+----+-------------+------------+--------+
حاول كتابة استعلامات للحالات التالية:
- اعرض جميع بيانات الموظفين
- اعرض أسماء الموظفين فقط
- اعرض الاسم والقسم لكل موظف
- اعرض الاسم والراتب لكل موظف
الحلول (اضغط لعرض)
-- 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) وتطوير مهاراتك في قواعد البيانات.
الانتقال إلى الدرس التالي