SQL: إعداد البيئة والاستعلام الأول
1. 🎯 تشبيه من الحياة
تخيل أنك تريد تعلم الطبخ. قبل البدء بالطبخ، تحتاج إلى:
- تجهيز المطبخ — تثبيت قاعدة بيانات مثل تثبيت الموقد والفرن
- تجهيز الأدوات — أدوات سطر الأوامر والواجهة الرسومية مثل الملاعق القاشطة وأكواب القياس
- تجهيز المكونات — إنشاء قاعدة بيانات مثل ترتيب المكونات على الطاولة
- بدء الطبخ — أول استعلام SQL مثل أول قطعة تقوم بها
لا يمكنك الطبخ بدون مطبخ، وبالمثل، لا يمكنك تعلم SQL بدون إعداد بيئة قاعدة البيانات. سيرشدك هذا الدرس من الصفر إلى بناء "مطبخ SQL" الخاص بك.
2. 📚 المفاهيم الأساسية
(1) تثبيت قاعدة البيانات
هناك ثلاث قواعد بيانات علائقية رئيسية. يجب على المبتدئين تثبيت واحدة أولاً والتوسع لاحقًا.
MySQL
MySQL هي قاعدة البيانات المفتوحة المصدر الأكثر شعبية في العالم، مستخدمة على نطاق واسع في تطوير الويب.
التثبيت على Windows:
- اذهب إلى الموقع الرسمي لـ MySQL لتنزيل المثبت
- شغّل المثبت واختر "Developer Default"
- اضبط كلمة مرور root (تذكرها!)
- بعد التثبيت، تبدأ خدمة MySQL تلقائيًا
التثبيت على macOS:
# التثبيت باستخدام Homebrew
brew install mysql
# بدء خدمة MySQL
brew services start mysql
# التثبيت الآمن
mysql_secure_installation
التثبيت على Linux (Ubuntu):
sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo mysql_secure_installation
PostgreSQL
PostgreSQL هي قاعدة البيانات المفتوحة المصدر الأقوى، مناسبة للاستعلامات المعقدة وتطبيقات المؤسسات.
التثبيت على Windows:
- اذهب إلى الموقع الرسمي لـ PostgreSQL لتنزيل المثبت
- شغّل المثبت، اضبط كلمة المرور والمنفذ (الافتراضي 5432)
- حدد مكون "pgAdmin" (أداة إدارة الواجهة الرسومية)
التثبيت على macOS:
brew install postgresql@16
brew services start postgresql@16
التثبيت على Linux (Ubuntu):
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
SQLite
SQLite هي قاعدة بيانات مدمجة خفيفة الوزن لا تحتاج إلى تثبيت خادم، مما يجعلها مثالية للتعلم والمشاريع الصغيرة.
التثبيت على Windows:
- اذهب إلى صفحة تنزيل SQLite وقم بتنزيل
sqlite-tools-win64 - استخرج إلى أي مجلد وأضف ذلك المجلد إلى متغير PATH في النظام
التثبيت على macOS / Linux:
# macOS (عادة مثبت مسبقًا)
brew install sqlite
# Linux
sudo apt install sqlite3
التحقق من التثبيت:
sqlite3 --version
(2) الاتصال بقاعدة البيانات باستخدام سطر الأوامر
سطر الأوامر هو الطريقة الأكثر مباشرة للتفاعل مع قاعدة البيانات.
الاتصال بـ MySQL:
mysql -u root -p
# أدخل كلمة المرور للوصول إلى واجهة MySQL التفاعلية
بعد الإدخال، سترى أن المطالبة تتغير إلى mysql>، مما يشير إلى أنه يمكنك الآن إدخال جمل SQL.
الاتصال بـ PostgreSQL:
# باستخدام عميل psql
psql -U postgres
# تحديد قاعدة بيانات
psql -U postgres -d mydb
بعد الإدخال، تتغير المطالبة إلى mydb=#.
الاتصال بـ SQLite:
# إنشاء أو فتح ملف قاعدة بيانات
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 (موصى به):
- اذهب إلى الموقع الرسمي لـ DBeaver وقم بتنزيل النسخة المجتمعية
- بعد التثبيت، افتحه وانقر على "New Database Connection"
- اختر نوع قاعدة البيانات (مثل MySQL)
- املأ المضيف والمنفذ واسم المستخدم وكلمة المرور
- انقر على "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، تُستخدم لاستعلام البيانات من قاعدة البيانات. أبسط شكل هو:
SELECT expression;
لنبسط الاستعلام الأبسط:
SELECT 1;
تعني هذه الجملة: احسب وأعد القيمة 1. لا تتضمن أي جدول — فقط للتحقق من أن قاعدة البيانات تعمل بشكل صحيح.
بناء الجملة في قواعد البيانات المختلفة:
-- يعمل في MySQL / PostgreSQL / SQLite
SELECT 1;
-- إرجاع نص
SELECT 'Hello, SQL!';
-- إرجاع نتيجة حساب
SELECT 2 + 3;
;. على الرغم من أنه يمكن حذفها في بعض الأدوات، فمن الجيد تضمينها دائمًا.
(2) عرض معلومات قاعدة البيانات
بعد الاتصال بقاعدة البيانات، قد ترغب في معرفة البيئة الحالية:
MySQL:
-- عرض جميع قواعد البيانات
SHOW DATABASES;
-- عرض قاعدة البيانات الحالية
SELECT DATABASE();
-- عرض الإصدار
SELECT VERSION();
PostgreSQL:
-- عرض جميع قواعد البيانات
\l
-- عرض قاعدة البيانات الحالية
SELECT current_database();
-- عرض الإصدار
SELECT version();
SQLite:
-- عرض جميع الجداول
.tables
-- عرض معلومات قاعدة البيانات
.database
-- عرض الإصدار
SELECT sqlite_version();
SHOW و \l هي "أوامر ميتا" خاصة بكل قاعدة بيانات وليست جزءًا من SQL المعيارية. كن على علم بهذه الاختلافات عند الترحيل بين قواعد البيانات.
(3) إنشاء أول قاعدة بيانات وجدول
قبل تعلم SELECT بشكل رسمي، نحتاج بيانات للاستعلام. إليك العملية الكاملة لإنشاء قاعدة بيانات وجدول:
مثال MySQL:
-- إنشاء قاعدة بيانات
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:
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:
-- 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
الآن بعد أن أصبحت البيانات جاهزة، للاستعلام عنها:
-- استعلام جميع المعلومات لجميع الطلاب
SELECT * FROM students;
الإخراج:
+----+---------+------+-----------+
| 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 |
+----+---------+------+-----------+
استعلام أعمدة محددة فقط:
-- استعلام الاسم والمدينة فقط
SELECT name, city FROM students;
الإخراج:
+---------+-----------+
| name | city |
+---------+-----------+
| John | New York |
| Jane | Los Angeles|
| Bob | Chicago |
| Alice | Houston |
| Charlie | New York |
+---------+-----------+
4. 🧪 الأمثلة
▶ مثال: التحقق من اتصال قاعدة البيانات باستخدام SELECT
الخطوة الأولى بعد تثبيت قاعدة البيانات هي تأكيد أن الاتصال يعمل.
-- التحقق من أن قاعدة البيانات تستجيب بشكل طبيعي
SELECT 'Database connected!' AS message;
-- عرض الوقت الحالي والمستخدم
SELECT NOW() AS current_time, CURRENT_USER AS db_user;
بناء جملة SQLite مختلف قليلاً:
SELECT 'Database connected!' AS message;
SELECT datetime('now') AS current_time;
مثال على الإخراج:
+---------------------+
| message |
+---------------------+
| Database connected! |
+---------------------+
هذا الاختبار البسيطيمكن أن تساعدك في استكشاف مشاكل الاتصال بسرعة — إذا تم تنفيذ هذه الجملة، فإن بيئتك معدة بشكل صحيح.
▶ مثال: إنشاء جدول وإدراج بيانات واستعلام
لنفترض أننا نريد إدارة مكتبة صغيرة للكتب.
-- إنشاء جدول الكتب
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;
الإخراج:
+----+-------------------------+-----------------+-------+---------------+
| 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 |
+----+-------------------------+-----------------+-------+---------------+
استعلام العنوان والسعر فقط:
SELECT title, price FROM books;
بتحديد أسماء الأعمدة (
title, price) بدلاً من استخدام*، يمكنك جعل الإخراج أوضح والاستعلام أكثر كفاءة.
▶ مثال: استعلام مع حسابات وأسماء مستعارة
يمكن لـ SELECT في 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;
الإخراج:
+-------------------------+-------------+----------------+------------------+--------------------+
| 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لإنشاء أسماء مستعارة للأعمدة، مما يجعل الإخراج أكثر قابلية للقراءة - يمكنك إجراء عمليات حسابية على الأعمدة (مثل
price * 0.8) - يمكنك مزج الثوابت وأسماء الأعمدة (مثل
2026 - publish_year)
AS عبر جميع قواعد البيانات الرئيسية وهي واحدة من أكثر ميزات SQL استخدامًا.
5. 🏢 تطبيقات السيناريوهات
(1) السيناريو 1: إعداد بيئة التطوير
أنت مطور واجهة خلفية، ومشروع جديد يتطلب قاعدة بيانات MySQL. أكمل المهام التالية:
- ثبت MySQL وابدأ الخدمة
- أنشئ قاعدة بيانات المشروع
project_db - أنشئ جدول
usersلتخزين معلومات المستخدمين - أدرج سجل تجريبي وتحقق
-- الخطوة 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 للاستعلام.
# التشغيل في سطر الأوامر
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:
- تثبيت قواعد البيانات — تعلمنا كيفية تثبيت MySQL و PostgreSQL و SQLite
- الاتصال بسطر الأوامر — أتقنا الاتصال وتشغيل قواعد البيانات باستخدام أدوات سطر الأوامر
- أدوات الواجهة الرسومية — استكشفنا DBeaver و Navicat و DB Browser وغيرها من الأدوات الرسومية
- المنصات الإلكترونية — اكتشفنا SQL Fiddle و DB Fiddle وغيرها من بيئات التدريب عبر الإنترنت
- أول استعلام — تعلمنا أساسيات جملة
SELECT، بما في ذلك الاستعلام والحسابات والأسماء المستعارة
قد يكون إعداد البيئة مملًا، لكنه الأساس لجميع التعلم اللاحق. تمامًا كما أن تعلم الطبخ يتطلب التعرف على المطبخ أولاً، فإن معرفة أدواتك تسمح לך بالتركيز على "الطبخ" نفسه.
📝 تمارين
(1) التمرين 1: التحقق من البيئة
اتصل بقاعدة البيانات المثبتة لديك، ونفّذ الاستعلام التالي، وأكد أن الإخراج صحيح:
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، اكتب استعلامًا يحسب إجمالي قيمة المخزون (السعر × المخزون) لكل منتج، واستخدم أسماء مستعارة عربية لأعمدة الإخراج.
مثال على الإخراج المتوقع:
+----------+------+--------+------------+
| اسم المنتج | السعر | المخزون | إجمالي قيمة المخزون |
+----------+------+--------+------------+
| ... | ... | ... | ... |
+----------+------+--------+------------+
الدرس التالي: الدرس 3: الاستعلامات الأساسية — SELECT و FROM