SQL: إعداد البيئة والاستعلام الأول

1. 🎯 تشبيه من الحياة

تخيل أنك تريد تعلم الطبخ. قبل البدء بالطبخ، تحتاج إلى:

  1. تجهيز المطبخ — تثبيت قاعدة بيانات مثل تثبيت الموقد والفرن
  2. تجهيز الأدوات — أدوات سطر الأوامر والواجهة الرسومية مثل الملاعق القاشطة وأكواب القياس
  3. تجهيز المكونات — إنشاء قاعدة بيانات مثل ترتيب المكونات على الطاولة
  4. بدء الطبخ — أول استعلام SQL مثل أول قطعة تقوم بها

لا يمكنك الطبخ بدون مطبخ، وبالمثل، لا يمكنك تعلم SQL بدون إعداد بيئة قاعدة البيانات. سيرشدك هذا الدرس من الصفر إلى بناء "مطبخ SQL" الخاص بك.



2. 📚 المفاهيم الأساسية

(1) تثبيت قاعدة البيانات

هناك ثلاث قواعد بيانات علائقية رئيسية. يجب على المبتدئين تثبيت واحدة أولاً والتوسع لاحقًا.

MySQL

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

التثبيت على Windows:

  1. اذهب إلى الموقع الرسمي لـ MySQL لتنزيل المثبت
  2. شغّل المثبت واختر "Developer Default"
  3. اضبط كلمة مرور root (تذكرها!)
  4. بعد التثبيت، تبدأ خدمة MySQL تلقائيًا

التثبيت على macOS:

BASH
# التثبيت باستخدام Homebrew
brew install mysql

# بدء خدمة MySQL
brew services start mysql

# التثبيت الآمن
mysql_secure_installation

التثبيت على Linux (Ubuntu):

BASH
sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo mysql_secure_installation

PostgreSQL

PostgreSQL هي قاعدة البيانات المفتوحة المصدر الأقوى، مناسبة للاستعلامات المعقدة وتطبيقات المؤسسات.

التثبيت على Windows:

  1. اذهب إلى الموقع الرسمي لـ PostgreSQL لتنزيل المثبت
  2. شغّل المثبت، اضبط كلمة المرور والمنفذ (الافتراضي 5432)
  3. حدد مكون "pgAdmin" (أداة إدارة الواجهة الرسومية)

التثبيت على macOS:

BASH
brew install postgresql@16
brew services start postgresql@16

التثبيت على Linux (Ubuntu):

BASH
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql

SQLite

SQLite هي قاعدة بيانات مدمجة خفيفة الوزن لا تحتاج إلى تثبيت خادم، مما يجعلها مثالية للتعلم والمشاريع الصغيرة.

التثبيت على Windows:

  1. اذهب إلى صفحة تنزيل SQLite وقم بتنزيل sqlite-tools-win64
  2. استخرج إلى أي مجلد وأضف ذلك المجلد إلى متغير PATH في النظام

التثبيت على macOS / Linux:

BASH
# macOS (عادة مثبت مسبقًا)
brew install sqlite

# Linux
sudo apt install sqlite3

التحقق من التثبيت:

BASH
sqlite3 --version
💡 نصيحة: يُنصح المبتدئين بالبدء بـ SQLite — بدون تكوين، بدون عوائق، أمر واحد لبدء تعلم SQL.


(2) الاتصال بقاعدة البيانات باستخدام سطر الأوامر

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

الاتصال بـ MySQL:

BASH
mysql -u root -p
# أدخل كلمة المرور للوصول إلى واجهة MySQL التفاعلية

بعد الإدخال، سترى أن المطالبة تتغير إلى mysql>، مما يشير إلى أنه يمكنك الآن إدخال جمل SQL.

الاتصال بـ PostgreSQL:

BASH
# باستخدام عميل psql
psql -U postgres

# تحديد قاعدة بيانات
psql -U postgres -d mydb

بعد الإدخال، تتغير المطالبة إلى mydb=#.

الاتصال بـ SQLite:

BASH
# إنشاء أو فتح ملف قاعدة بيانات
sqlite3 mydb.db

# إذا لم يكن الملف موجودًا، سيتم إنشاؤه تلقائيًا

بعد الإدخال، تتغير المطالبة إلى sqlite>.

الخروج من سطر أوامر قاعدة البيانات:

قاعدة البيانات أمر الخروج
MySQL exit; أو quit;
PostgreSQL \q
SQLite .exit أو Ctrl+D
💡 نصيحة: على الرغم من أن عمليات سطر الأوامر قد تبدو "بدائية"، إلا أنها شائعة الاستخدام في صيانة الخوادم وسكربتات الأتمتة. تأكد من إتقانها.


(3) أدوات الواجهة الرسومية

إذا كنت تفضل الواجهة المرئية، يُوصى بالأدوات التالية:

الأداة قواعد البيانات المدعومة المميزات السعر
DBeaver MySQL / PostgreSQL / SQLite /تقريبا جميع قواعد البيانات متكامل المميزات، إضافات غنية مجاني (النسخة المجتمعية)
Navicat MySQL / PostgreSQL / SQLite واجهة جميلة، تشغيل سلس مدفوع
DB Browser for SQLite SQLite مصمم خصيصًا لـ SQLite، خفيف الوزن مجاني
pgAdmin PostgreSQL منتج رسمي مجاني
MySQL Workbench MySQL منتج رسمي مجاني

مثال تثبيت DBeaver (موصى به):

  1. اذهب إلى الموقع الرسمي لـ DBeaver وقم بتنزيل النسخة المجتمعية
  2. بعد التثبيت، افتحه وانقر على "New Database Connection"
  3. اختر نوع قاعدة البيانات (مثل MySQL)
  4. املأ المضيف والمنفذ واسم المستخدم وكلمة المرور
  5. انقر على "Test Connection" — بمجرد نجاحه، أنت مستعد للاستخدام
💡 نصيحة: يُشجع المبتدئون على إتقان كل من سطر الأوامر وأدوات الواجهة الرسومية — سطر الأوامر يبني الأساسيات، والواجهة الرسومية تحسّن الكفاءة اليومية.


(4) منصات التدريب على SQL عبر الإنترنت

إذا كنت لا تريد تثبيت أي برنامج حاليًا، يمكنك التدريب مباشرة على المنصات الإلكترونية:

المنصة الرابط المميزات
SQL Fiddle http://sqlfiddle.com يدعم MySQL / PostgreSQL / SQLite
DB Fiddle https://www.db-fiddle.com واجهة حديثة، يدعم إصدارات متعددة
SQLiteOnline https://sqliteonline.com بدون تكوين، جاهز للاستخدام
LeetCode SQL https://leetcode.cn/problemset/database تدريب بالمسائل، تعلم بالممارسة
💡 نصيحة: المنصات الإلكترونية ممتازة للتحقق السريع من الأفكار، لكن للتعلم طويل المدى، يُنصح بتثبيت قاعدة بيانات محليًا.



3. 📝 بناء الجملة والاستخدام الأساسي

(1) أول جملة SQL: SELECT

SELECT هي الجملة الأكثر استخدامًا في SQL، تُستخدم لاستعلام البيانات من قاعدة البيانات. أبسط شكل هو:

SQL
SELECT expression;

لنبسط الاستعلام الأبسط:

SQL
SELECT 1;

تعني هذه الجملة: احسب وأعد القيمة 1. لا تتضمن أي جدول — فقط للتحقق من أن قاعدة البيانات تعمل بشكل صحيح.

بناء الجملة في قواعد البيانات المختلفة:

SQL
-- يعمل في MySQL / PostgreSQL / SQLite
SELECT 1;

-- إرجاع نص
SELECT 'Hello, SQL!';

-- إرجاع نتيجة حساب
SELECT 2 + 3;
💡 نصيحة: كل جملة SQL تنتهي بفاصلة منقوطة ;. على الرغم من أنه يمكن حذفها في بعض الأدوات، فمن الجيد تضمينها دائمًا.


(2) عرض معلومات قاعدة البيانات

بعد الاتصال بقاعدة البيانات، قد ترغب في معرفة البيئة الحالية:

MySQL:

SQL
-- عرض جميع قواعد البيانات
SHOW DATABASES;

-- عرض قاعدة البيانات الحالية
SELECT DATABASE();

-- عرض الإصدار
SELECT VERSION();

PostgreSQL:

SQL
-- عرض جميع قواعد البيانات
\l

-- عرض قاعدة البيانات الحالية
SELECT current_database();

-- عرض الإصدار
SELECT version();

SQLite:

SQL
-- عرض جميع الجداول
.tables

-- عرض معلومات قاعدة البيانات
.database

-- عرض الإصدار
SELECT sqlite_version();
💡 نصيحة: أوامر مثل SHOW و \l هي "أوامر ميتا" خاصة بكل قاعدة بيانات وليست جزءًا من SQL المعيارية. كن على علم بهذه الاختلافات عند الترحيل بين قواعد البيانات.


(3) إنشاء أول قاعدة بيانات وجدول

قبل تعلم SELECT بشكل رسمي، نحتاج بيانات للاستعلام. إليك العملية الكاملة لإنشاء قاعدة بيانات وجدول:

مثال MySQL:

SQL
-- إنشاء قاعدة بيانات
CREATE DATABASE learn_sql;

-- التبديل إلى قاعدة البيانات
USE learn_sql;

-- إنشاء جدول
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT,
    city VARCHAR(50)
);

-- إدراج بيانات تجريبية
INSERT INTO students (name, age, city) VALUES
('John', 20, 'New York'),
('Jane', 22, 'Los Angeles'),
('Bob', 21, 'Chicago'),
('Alice', 23, 'Houston'),
('Charlie', 20, 'New York');

مثال PostgreSQL:

SQL
CREATE DATABASE learn_sql;

-- قطع الاتصال وإعادة الاتصال بـ learn_sql
\c learn_sql

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    city VARCHAR(50)
);

INSERT INTO students (name, age, city) VALUES
('John', 20, 'New York'),
('Jane', 22, 'Los Angeles'),
('Bob', 21, 'Chicago'),
('Alice', 23, 'Houston'),
('Charlie', 20, 'New York');

مثال SQLite:

SQL
-- SQLite لا يحتاج إنشاء قاعدة بيانات؛ إنشاء الجدول مباشرة
CREATE TABLE students (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER,
    city TEXT
);

INSERT INTO students (name, age, city) VALUES
('John', 20, 'New York'),
('Jane', 22, 'Los Angeles'),
('Bob', 21, 'Chicago'),
('Alice', 23, 'Houston'),
('Charlie', 20, 'New York');
💡 نصيحة: سيتم تغطية CREATE TABLE و INSERT INTO بالتفصيل في الدروس اللاحقة. حاليًا، فقط تابع.


(4) تنفيذ أول استعلام SELECT

الآن بعد أن أصبحت البيانات جاهزة، للاستعلام عنها:

SQL
-- استعلام جميع المعلومات لجميع الطلاب
SELECT * FROM students;

الإخراج:

TEXT 📖 للعرض فقط
+----+---------+------+-----------+
| id | name    | age  | city      |
+----+---------+------+-----------+
|  1 | John    |   20 | New York  |
|  2 | Jane    |   22 | Los Angeles|
|  3 | Bob     |   21 | Chicago   |
|  4 | Alice   |   23 | Houston   |
|  5 | Charlie |   20 | New York  |
+----+---------+------+-----------+

استعلام أعمدة محددة فقط:

SQL
-- استعلام الاسم والمدينة فقط
SELECT name, city FROM students;

الإخراج:

TEXT 📖 للعرض فقط
+---------+-----------+
| name    | city      |
+---------+-----------+
| John    | New York  |
| Jane    | Los Angeles|
| Bob     | Chicago   |
| Alice   | Houston   |
| Charlie | New York  |
+---------+-----------+


4. 🧪 الأمثلة

▶ مثال: التحقق من اتصال قاعدة البيانات باستخدام SELECT

الخطوة الأولى بعد تثبيت قاعدة البيانات هي تأكيد أن الاتصال يعمل.

SQL
-- التحقق من أن قاعدة البيانات تستجيب بشكل طبيعي
SELECT 'Database connected!' AS message;

-- عرض الوقت الحالي والمستخدم
SELECT NOW() AS current_time, CURRENT_USER AS db_user;
▶ جرّب الكود

بناء جملة SQLite مختلف قليلاً:

SQL
SELECT 'Database connected!' AS message;

SELECT datetime('now') AS current_time;

مثال على الإخراج:

TEXT 📖 للعرض فقط
+---------------------+
| message             |
+---------------------+
| Database connected! |
+---------------------+

هذا الاختبار البسيطيمكن أن تساعدك في استكشاف مشاكل الاتصال بسرعة — إذا تم تنفيذ هذه الجملة، فإن بيئتك معدة بشكل صحيح.


▶ مثال: إنشاء جدول وإدراج بيانات واستعلام

لنفترض أننا نريد إدارة مكتبة صغيرة للكتب.

SQL
-- إنشاء جدول الكتب
CREATE TABLE books (
    id INT PRIMARY KEY,
    title VARCHAR(100) NOT NULL,
    author VARCHAR(50),
    price DECIMAL(8, 2),
    publish_year INT
);

-- إدراج بيانات تجريبية
INSERT INTO books (id, title, author, price, publish_year) VALUES
(1, 'Database Systems', 'Connolly', 45.00, 2014),
(2, 'SQL in 10 Minutes', 'Ben Forta', 39.00, 2020),
(3, 'High Performance MySQL', 'Baron Schwartz', 89.00, 2013),
(4, 'PostgreSQL in Action', 'Tan Feng', 69.00, 2018);

-- استعلام جميع الكتب
SELECT * FROM books;
▶ جرّب الكود

الإخراج:

TEXT 📖 للعرض فقط
+----+-------------------------+-----------------+-------+---------------+
| id | title                   | author          | price | publish_year  |
+----+-------------------------+-----------------+-------+---------------+
|  1 | Database Systems        | Connolly        | 45.00 |          2014 |
|  2 | SQL in 10 Minutes       | Ben Forta       | 39.00 |          2020 |
|  3 | High Performance MySQL  | Baron Schwartz  | 89.00 |          2013 |
|  4 | PostgreSQL in Action    | Tan Feng        | 69.00 |          2018 |
+----+-------------------------+-----------------+-------+---------------+

استعلام العنوان والسعر فقط:

SQL
SELECT title, price FROM books;

بتحديد أسماء الأعمدة (title, price) بدلاً من استخدام *، يمكنك جعل الإخراج أوضح والاستعلام أكثر كفاءة.


▶ مثال: استعلام مع حسابات وأسماء مستعارة

يمكن لـ SELECT في SQL ليس فقط استعلام البيانات ولكن أيضًا إجراء الحسابات.

SQL
-- حساب السنوات منذ النشر لكل كتاب (بناءً على 2026)
SELECT
    title AS book_title,
    author AS book_author,
    price AS original_price,
    price * 0.8 AS discounted_price,
    2026 - publish_year AS years_since_publish
FROM books;
▶ جرّب الكود

الإخراج:

TEXT 📖 للعرض فقط
+-------------------------+-------------+----------------+------------------+--------------------+
| book_title              | book_author | original_price | discounted_price | years_since_publish|
+-------------------------+-------------+----------------+------------------+--------------------+
| Database Systems        | Connolly    |          45.00 |            36.00 |                 12 |
| SQL in 10 Minutes       | Ben Forta   |          39.00 |            31.20 |                  6 |
| High Performance MySQL  | Baron S.    |          89.00 |            71.20 |                 13 |
| PostgreSQL in Action    | Tan Feng    |          69.00 |            55.20 |                  8 |
+-------------------------+-------------+----------------+------------------+--------------------+

النقاط الأساسية:

💡 نصيحة: تعمل الكلمة المفتاحية AS عبر جميع قواعد البيانات الرئيسية وهي واحدة من أكثر ميزات SQL استخدامًا.



5. 🏢 تطبيقات السيناريوهات

(1) السيناريو 1: إعداد بيئة التطوير

أنت مطور واجهة خلفية، ومشروع جديد يتطلب قاعدة بيانات MySQL. أكمل المهام التالية:

  1. ثبت MySQL وابدأ الخدمة
  2. أنشئ قاعدة بيانات المشروع project_db
  3. أنشئ جدول users لتخزين معلومات المستخدمين
  4. أدرج سجل تجريبي وتحقق
SQL
-- الخطوة 1: إنشاء قاعدة بيانات
CREATE DATABASE project_db CHARACTER SET utf8mb4;

-- الخطوة 2: التبديل إلى قاعدة البيانات
USE project_db;

-- الخطوة 3: إنشاء جدول المستخدمين
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- الخطوة 4: إدراج بيانات تجريبية
INSERT INTO users (username, email) VALUES
('testuser', 'test@example.com');

-- الخطوة 5: التحقق
SELECT * FROM users;

(2) السيناريو 2: التحضير لتحليل البيانات

أنت محلل بيانات تحتاج إلى فحص بيانات CSV بسرعة. استورد البيانات إلى SQLite للاستعلام.

BASH
# التشغيل في سطر الأوامر
sqlite3 sales.db

# إنشاء جدول
CREATE TABLE sales (
    id INTEGER PRIMARY KEY,
    product TEXT,
    quantity INTEGER,
    unit_price REAL,
    sale_date TEXT
);

# استيراد بيانات CSV (باستخدام أمر .import)
.mode csv
.import sales_data.csv sales

# عرض نتائج الاستيراد
SELECT * FROM sales LIMIT 5;

# عرض إجمالي عدد السجلات
SELECT COUNT(*) AS total_records FROM sales;
💡 نصيحة: أمر .import في SQLite مريح جدًا لتحميل ملفات CSV بسرعة كجداول قاعدة بيانات، مما يجعله ممتازًا لاستكشاف البيانات والتحليل المؤقت.



❓ أسئلة شائعة

س: هل أختار MySQL أم PostgreSQL أم SQLite؟ ج: يجب على المبتدئين البدء بـ SQLite — بدون تكوين، ملف واحد هو قاعدة بيانات. اختر MySQL لتطوير الويب، و PostgreSQL لتطبيقات المؤسسات أو الاستعلامات المعقدة. تعلم الثلاثة مثالي، لكن أتقن واحدًا أولاً.

س: ماذا لو نسيت كلمة مرور root أثناء التثبيت؟ ج: لـ MySQL، ابدأ بـ mysqld_safe --skip-grant-tables وأعد ضبط كلمة المرور. لـ PostgreSQL، عدّل ملف pg_hba.conf لتغيير المصادقة إلى trust وأعد تشغيل الخدمة. SQLite لا تحتوي على آلية كلمة مرور، لذا لا داعي للقلق.

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

س: ما الفرق بين المنصات الإلكترونية والتثبيت المحلي؟ ج: المنصات الإلكترونية لا تحتاج تثبيت وجاهزة للاستخدام، لكنها عادة ما تكون لديها حدود للوقت وحجم البيانات، وتفقد البيانات عند إغلاق المتصفح. التثبيت المحلي ليس لديه حدود، البيانات محفوظة بشكل دائم، ويناسب التعلم طويل المدى وتطوير المشاريع الحقيقية.


📖 ملخص

في هذا الدرس، أكملنا تحضير البيئة لتعلم SQL:

  1. تثبيت قواعد البيانات — تعلمنا كيفية تثبيت MySQL و PostgreSQL و SQLite
  2. الاتصال بسطر الأوامر — أتقنا الاتصال وتشغيل قواعد البيانات باستخدام أدوات سطر الأوامر
  3. أدوات الواجهة الرسومية — استكشفنا DBeaver و Navicat و DB Browser وغيرها من الأدوات الرسومية
  4. المنصات الإلكترونية — اكتشفنا SQL Fiddle و DB Fiddle وغيرها من بيئات التدريب عبر الإنترنت
  5. أول استعلام — تعلمنا أساسيات جملة SELECT، بما في ذلك الاستعلام والحسابات والأسماء المستعارة

قد يكون إعداد البيئة مملًا، لكنه الأساس لجميع التعلم اللاحق. تمامًا كما أن تعلم الطبخ يتطلب التعرف على المطبخ أولاً، فإن معرفة أدواتك تسمح לך بالتركيز على "الطبخ" نفسه.


📝 تمارين

(1) التمرين 1: التحقق من البيئة

اتصل بقاعدة البيانات المثبتة لديك، ونفّذ الاستعلام التالي، وأكد أن الإخراج صحيح:

SQL
SELECT 'Hello SQL!' AS greeting, 1 + 1 AS result;

(2) التمرين 2: إنشاء واستعلام جدول المنتجات

أنشئ جدول products بالحقول التالية، وأدرج 3 سجلات على الأقل، ثم استعلم عن جميع السجلات:

الحقل النوع الوصف
id Integer مفتاح رئيسي
name Text اسم المنتج
category Text الفئة
price Decimal السعر
stock Integer كمية المخزون

(3) التمرين 3: استعلام مع حسابات

باستخدام جدول products من التمرين 2، اكتب استعلامًا يحسب إجمالي قيمة المخزون (السعر × المخزون) لكل منتج، واستخدم أسماء مستعارة عربية لأعمدة الإخراج.

مثال على الإخراج المتوقع:

TEXT 📖 للعرض فقط
+----------+------+--------+------------+
| اسم المنتج | السعر | المخزون | إجمالي قيمة المخزون |
+----------+------+--------+------------+
| ...      | ...  | ...    | ...        |
+----------+------+--------+------------+

الدرس التالي: الدرس 3: الاستعلامات الأساسية — SELECT و FROM

Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%