MySQL: مقدمة إلى قواعد بناء الجمل الأساسية في لغة SQL وشرح…
آخر تحديث: 2026-08-26
لغة SQL هي لغة عالمية للتعامل مع قواعد البيانات — وبمجرد تعلمها، ستحصل على مفتاح الوصول إلى جميع قواعد البيانات العلائقية.
يقدم هذا الدرس مقدمة منهجية لتصنيف لغة SQL وقواعدها النحوية الأساسية، مما يضع أساسًا متينًا لمواصلة الدراسة.
1. ما ستتعلمه
- الفئات الخمس الرئيسية لـ SQL واستخداماتها
- بناء جملة الاستعلام الأساسي في لغة SELECT
- طريقتان لكتابة التعليقات في لغة SQL
- الفرق بين الكلمات المفتاحية والكلمات المحجوزة
- قواعد تسمية المعرّفات
2. قصة حقيقية لمحلل
(1) المشكلة: ما كان هذا ليحدث لو انتقلنا إلى قاعدة بيانات أخرى
محلل بيانات كان يستخدم «أوراكل» في شركته السابقة، ويستخدم الآن «ماي إس كيو إل» في شركته الجديدة:
"أنا أكتب لغة SQL الخاصة بـ Oracle منذ ثلاث سنوات، وبعد أن انتقلت إلى MySQL، لاحظت أن بعض قواعد الصياغة قد تغيرت — فقد أصبح ROWNUM هو LIMIT، وSYSDATE أصبح NOW(). فهل عليّ أن أبدأ من الصفر مرة أخرى؟"
في الواقع، لا داعي لذلك — فبنية لغة SQL الأساسية موحدة عالميًا، ولا تمثل الاختلافات سوى 5٪.
(2) الحل وفقًا لمعيار SQL
SQL هو معيار دولي (ISO/IEC 9075) تلتزم به جميع قواعد البيانات العلائقية:
-- This SQL runs on MySQL, PostgreSQL, Oracle, and SQL Server
SELECT 1 + 1 AS result;
المزايا: تعلم قواعد لغة SQL القياسية؛ فعند الانتقال إلى قاعدة بيانات أخرى، لن تحتاج سوى إلى تعلم 5% من الاختلافات.
| قاعدة البيانات | الصيغة المتطابقة | الصيغة المختلفة |
|---|---|---|
| MySQL | 95% | LIMIT، AUTO_INCREMENT |
| PostgreSQL | 95% | SERIAL، ILIKE |
| Oracle | 95% | ROWNUM، SYSDATE |
| SQL Server | 95% | TOP، GETDATE() |
3. الفئات الخمس الرئيسية لـ SQL
graph TB
A[SQL Language] --> B[DDL Data Definition]
A --> C[DML Data Manipulation]
A --> D[DQL Data Query]
A --> E[DCL Data Control]
A --> F[TCL Transaction Control]
B --> B1[CREATE]
B --> B2[ALTER]
B --> B3[DROP]
C --> C1[INSERT]
C --> C2[UPDATE]
C --> C3[DELETE]
D --> D1[SELECT]
E --> E1[GRANT]
E --> E2[REVOKE]
F --> F1[COMMIT]
F --> F2[ROLLBACK]
| الفئة | الاسم الكامل | الكلمات المفتاحية | الغرض | مستوى الخطر |
|---|---|---|---|---|
| DDL | لغة تعريف البيانات | CREATE/ALTER/DROP/TRUNCATE | تحدد بنية قاعدة البيانات | ⚠️ متوسطة |
| DML | لغة معالجة البيانات | INSERT/UPDATE/DELETE | إدراج البيانات وتحديثها وحذفها | ⚠️ متوسط |
| DQL | لغة استعلام البيانات | SELECT | استعلام البيانات | ✅ آمن |
| DCL | لغة التحكم في البيانات | GRANT/REVOKE | إدارة الأذونات | 🔴 عالية |
| TCL | لغة التحكم في المعاملات | COMMIT/ROLLBACK/SAVEPOINT | التحكم في المعاملات | ⚠️ متوسط |
(1) DDL — لغة تعريف البيانات
تحديد هيكل قاعدة البيانات (قواعد البيانات، والجداول، والفهارس).
-- Create a Database
CREATE DATABASE mydb;
-- Create a Table
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- Modify the table structure
ALTER TABLE users ADD COLUMN email VARCHAR(100);
-- Delete Table
DROP TABLE users;
-- Clear Table Data (Keep Structure)
TRUNCATE TABLE users;
(2) DML — لغة معالجة البيانات
البيانات الواردة في الجدول (إضافة، حذف، تحديث).
-- Insert data
INSERT INTO users (id, name) VALUES (1, 'Alice');
-- Update Data
UPDATE users SET name = 'Bob' WHERE id = 1;
-- Delete Data
DELETE FROM users WHERE id = 1;
(3) DQL — لغة استعلام البيانات
استعلام عن البيانات الموجودة في الجدول.
-- Query All Fields
SELECT * FROM users;
-- Conditional Query
SELECT name, email FROM users WHERE id > 10;
-- Sorted Queries
SELECT * FROM users ORDER BY created_at DESC;
-- Limit Results
SELECT * FROM users LIMIT 10;
(4) DCL — لغة التحكم في البيانات
إدارة أذونات المستخدمين.
-- Grant Permissions
GRANT SELECT, INSERT ON mydb.* TO 'user'@'localhost';
-- Revoke Permissions
REVOKE INSERT ON mydb.* FROM 'user'@'localhost';
(5) TCL — لغة التحكم في المعاملات
إدارة عملية إرسال المعاملات وإلغائها.
-- Start Transaction
START TRANSACTION;
-- Perform an action
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- Commit Transaction
COMMIT;
-- Or roll back the transaction
ROLLBACK;
4. قواعد بناء الجملة الأساسية لعبارة SELECT
(1) الصيغة الكاملة لأمر SELECT
SELECT [DISTINCT] column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column [ASC|DESC]]
[LIMIT offset, count];
▶ مثال: استعلام أساسي
-- Query All Fields
SELECT * FROM employees;
-- Query a Specific Field
SELECT first_name, last_name, salary FROM employees;
-- Using Aliases
SELECT first_name AS first_name, last_name AS last_name, salary AS salary FROM employees;
-- (Omit) AS (same result)
SELECT first_name first_name, last_name last_name FROM employees;
SELECT DISTINCT department FROM employees;
الناتج:
+------+--------+---------+
| first_name | last_name | salary |
+------+--------+---------+
| John | Smith | 5000.00 |
| Jane | Doe | 6000.00 |
+------+--------+---------+
▶ مثال: الاستعلام الشرطي
-- Equal Value Query
SELECT * FROM employees WHERE department = 'Engineering';
-- Range Query
SELECT * FROM employees WHERE salary BETWEEN 4000 AND 8000;
-- List Query
SELECT * FROM employees WHERE department IN ('Sales', 'Marketing');
-- Fuzzy Search
SELECT * FROM employees WHERE first_name LIKE 'J%';
-- Null Value Query
SELECT * FROM employees WHERE manager_id IS NULL;
الناتج:
+-------------+-----------+--------+-------------+
| first_name | last_name | salary | department |
+-------------+-----------+--------+-------------+
| John | Smith | 5000.00| Engineering |
| Jane | Doe | 6000.00| Engineering |
+-------------+-----------+--------+-------------+
5. تعليقات SQL
(1) التعليقات أحادية السطر
-- This is a single-line comment (Standard Format)
SELECT * FROM users; -- Query All Users
# This is also a single-line comment (MySQL-specific)
SELECT * FROM users;
(2) التعليقات متعددة الأسطر
/*
This is a multi-line comment
Can span multiple lines
Commonly used to illustrate complex queries
*/
SELECT * FROM users
WHERE status = 'active';
▶ مثال: التطبيقات العملية للتعليقات
/*
Features: Query statistics on active users
Author: Alice
Date: 2026-07-03
Revision History:
- 2026-07-02 Add email_verified condition
- 2026-07-03 Add a filter for registration date
*/
SELECT
COUNT(*) AS total_users, -- Total Number of Users
AVG(age) AS avg_age, -- Average Age
MIN(created_at) AS earliest_reg -- Earliest registration date
FROM users
WHERE status = 'active' -- Count only active users
AND email_verified = TRUE -- Email verified
AND created_at >= '2025-01-01'; -- Registered after 2025
6. الكلمات المفتاحية والكلمات المحجوزة
(1) ما هي الكلمة المفتاحية؟
الكلمات الرئيسية هي كلمات لها معانٍ خاصة في لغة SQL، مثل SELECT وFROM وWHERE.
| النوع | الوصف | مثال |
|---|---|---|
| الكلمة المفتاحية | لها معنى خاص، ولكن يمكن استخدامها كمعرّف (يجب وضعها بين علامتي اقتباس مائلة) | order، group |
| الكلمات المحجوزة | لا يمكن استخدامها كمعرّفات (لا يُنصح باستخدامها حتى عند وضعها بين علامات الاقتباس المائلة) | SELECT، TABLE |
▶ مثال: التعامل مع تعارضات الكلمات المفتاحية
-- Error: order is a keyword
CREATE TABLE order (id INT);
-- Correct: Enclose in backticks
CREATE TABLE `order` (id INT);
-- Better: Avoid using keywords as table names
CREATE TABLE orders (id INT);
7. قواعد تسمية المعرّفات
(1) قواعد تسمية الملفات
| القاعدة | الوصف | مثال |
|---|---|---|
| نطاق الأحرف | الأحرف والأرقام وعلامات التسطير | user_name ✅ |
| الحرف الأول | يجب أن يكون حرفًا أو شرطة سفلية | 1user ❌ |
| الحد الأقصى للطول | 64 حرفًا كحد أقصى | — |
| التمييز بين الأحرف الكبيرة والصغيرة | نظام ويندوز لا يميز بين الأحرف الكبيرة والصغيرة، بينما نظام لينكس يميز بينها | Users ≠ users (لينكس) |
| كلمة محجوزة | تجنب استخدامها | order ❌ → orders ✅ |
(2) قواعد التسمية الموصى بها
| النمط | المثال | التوصية |
|---|---|---|
| snake_case | user_name، order_id |
⭐⭐⭐ |
| camelCase | userName، orderId |
⭐⭐ |
| PascalCase | UserName، OrderId |
⭐ |
snake_case، وهو ما يتوافق مع أسلوب التوثيق الرسمي.
▶ مثال: الممارسات الجيدة في تسمية الملفات
-- Good Naming Practices
CREATE TABLE user_orders (
id INT PRIMARY KEY,
user_id INT,
order_number VARCHAR(20),
total_amount DECIMAL(10,2),
created_at TIMESTAMP
);
-- Poor Naming
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(20),
c3 DECIMAL(10,2)
);
8. إرشادات لكتابة عبارات SQL
(1) إرشادات التنسيق
-- Recommended Format: Capitalize keywords, one field per line
SELECT
first_name,
last_name,
salary
FROM employees
WHERE department = 'Engineering'
ORDER BY salary DESC
LIMIT 10;
(2) أهمية الفاصلة المنقوطة
-- A semicolon is a statement terminator.
SELECT * FROM users; -- Statement 1
SELECT * FROM orders; -- Statement 2
-- Multiple statements must be separated by semicolons when executed.
❓ أسئلة شائعة
* أم حقل محدد؟* خلال مرحلة التعلم.user_name بدلاً من 用户名.📖 ملخص
- SQL هي اللغة القياسية لمعالجة قواعد البيانات العلائقية، وتنقسم إلى خمس فئات: DDL وDML وDQL وDCL وTCL.
- DDL تُعرِّف الهياكل (CREATE/ALTER/DROP)، DML تعالج البيانات (INSERT/UPDATE/DELETE)
- DQL تُستخدم لاستعلام البيانات (SELECT)، وDCL تُستخدم لإدارة الأذونات (GRANT/REVOKE)، وTCL تُستخدم للتحكم في المعاملات (COMMIT/ROLLBACK)
- هناك نوعان من التعليقات في لغة SQL:
--التعليقات أحادية السطر و/* */التعليقات متعددة الأسطر - نوصي باستخدام
snake_caseكمعرّف؛ وتجنب استخدام الكلمات المفتاحية. - تنتهي عبارات SQL بفاصلة منقوطة
;
📝 تمارين
-
سؤال أساسي (درجة الصعوبة ⭐): اكتب عبارة DDL لإنشاء الجدول
students، الذي يتضمن الحقول id (المفتاح الأساسي)، و name (غير فارغ)، و age، و grade. -
سؤال متقدم (درجة الصعوبة ⭐⭐): اكتب جملة SELECT لاسترداد الموظفين من الجدول
employeesالذين يزيد راتبهم عن 5,000 والذين ينتمون إلى قسم «المبيعات»، مرتبةً حسب الراتب بترتيب تنازلي، مع عرض أول 5 صفوف فقط. -
تحدي (الصعوبة: ⭐⭐⭐): اكتب معاملة كاملة تنقل مبلغ 100 يوان من الحساب «أ» إلى الحساب «ب»، على أن تتضمن بداية المعاملة، وعبارتي «UPDATE»، وعمليتي «commit» أو «rollback».