MySQL: شرح مفصل لقواعد بناء جملة SELECT في استعلامات MySQL…

آخر تحديث: 2026-08-26

تعد عبارة SELECT هي العبارة الأكثر استخدامًا في لغة SQL — فمعظم عمليات استرجاع البيانات تبدأ بها.

يقدم هذا الدرس شرحًا منهجيًّا لقواعد الصياغة الأساسية والعمليات الشائعة لعبارة SELECT.

100%
graph TB
    A[SELECT Inquiry Process] --> B[FROM<br/>Specify a data source]
    B --> C[WHERE<br/>Conditional Filtering]
    C --> D[GROUP BY<br/>Grouping]
    D --> E[HAVING<br/>Filter Groups]
    E --> F[SELECT<br/>Select a field]
    F --> G[DISTINCT<br/>Remove duplicates]
    G --> H[ORDER BY<br/>Sort]
    H --> I[LIMIT<br/>Pagination]

1. ما ستتعلمه



2. قصة حقيقية وراء تقرير ما

(1) المشكلة: هناك كمية كبيرة جدًا من البيانات التي يتعين مراجعتها

يتعين على محلل البيانات تحديد «العملاء العشرة الذين سجلوا أعلى قيم للطلبات خلال الشهر الماضي» من بين 100,000 طلب.

التنقل يدويًّا بين الصفحات؟ أم التصفية في برنامج Excel؟ لا يُعد أيٌّ منهما فعالاً بشكل كبير.

(2) حل لـ SELECT

SQL
SELECT 
    customer_name,
    SUM(amount) AS total_spent
FROM orders
WHERE order_date >= '2026-06-01' AND order_date < '2026-07-01'
GROUP BY customer_name
ORDER BY total_spent DESC
LIMIT 10;

المزايا: يعرض استعلام SQL واحد النتائج في غضون ثوانٍ.



3. قواعد بناء الجملة الأساسية لعبارة SELECT

▶ مثال: الاستعلام عن جميع الحقول

SQL
-- Query all fields(Use with caution in production environments)
SELECT * FROM employees;

-- Query a Specific Field(Recommendations)
SELECT first_name, last_name, salary FROM employees;
▶ جرّب الكود

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

SQL
-- AS Set Aliases for Keywords
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;

-- If an alias contains spaces, it must be enclosed in quotation marks.
SELECT first_name AS 'First Name' FROM employees;
▶ جرّب الكود

الناتج:

TEXT 📖 للعرض فقط
+--------+--------+--------+
| first_name | last_name | salary |
+--------+--------+--------+
| John   | Smith  | 5000   |
| Jane   | Doe    | 6000   |
+--------+--------+--------+

▶ مثال: حساب التعبير

SQL
-- Calculate Annual Salary
SELECT 
    first_name,
    salary,
    salary * 12 AS annual_salary
FROM employees;

-- String Concatenation
SELECT 
    CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;
▶ جرّب الكود

4. تصفية الشرط WHERE

▶ مثال: الشروط الأساسية

SQL
-- Equal Value Query
SELECT * FROM employees WHERE department = 'Engineering';

-- Non-equality query
SELECT * FROM employees WHERE salary != 5000;

-- Range Query
SELECT * FROM employees WHERE salary BETWEEN 4000 AND 8000;

-- List Query
SELECT * FROM employees WHERE department IN ('Sales', 'Marketing', 'HR');

-- Fuzzy Search
SELECT * FROM employees WHERE first_name LIKE 'J%';

-- NULL Search
SELECT * FROM employees WHERE manager_id IS NULL;
▶ جرّب الكود

▶ مثال: الشروط المجمعة

SQL
-- AND Combination
SELECT * FROM employees 
WHERE department = 'Engineering' AND salary > 6000;

-- OR Combination
SELECT * FROM employees 
WHERE department = 'Sales' OR department = 'Marketing';

-- Mixed Combinations(Use parentheses to specify precedence)
SELECT * FROM employees 
WHERE (department = 'Sales' OR department = 'Marketing')
  AND salary > 5000;

-- NOT Negate
SELECT * FROM employees WHERE NOT (department = 'HR');
▶ جرّب الكود

5. إزالة التكرار باستخدام DISTINCT

▶ مثال: استعلام لإزالة التكرارات

SQL
-- Single-Field Duplicate Removal
SELECT DISTINCT department FROM employees;

-- Multi-field combination dedup
SELECT DISTINCT department, job_title FROM employees;

-- Count the number of unique entries
SELECT COUNT(DISTINCT department) AS dept_count FROM employees;
▶ جرّب الكود

الناتج:

TEXT 📖 للعرض فقط
+-------------+
| department  |
+-------------+
| Engineering |
| Sales       |
| Marketing   |
| HR          |
+-------------+


6. الترتيب باستخدام ORDER BY

▶ مثال: استعلام مرتب

SQL
-- Single-field ascending order (Default)
SELECT * FROM employees ORDER BY salary ASC;

-- Single-field descending order
SELECT * FROM employees ORDER BY salary DESC;

-- Sorting by Multiple Fields
SELECT * FROM employees 
ORDER BY department ASC, salary DESC;

-- Sort by expression
SELECT 
    first_name,
    salary,
    salary * 12 AS annual
FROM employees
ORDER BY annual DESC;

-- Sort by field position (2nd column)
SELECT first_name, salary FROM employees ORDER BY 2 DESC;
▶ جرّب الكود

الناتج:

TEXT 📖 للعرض فقط
+------------+--------+
| first_name | salary |
+------------+--------+
| Charlie    |   8000 |
| Jane       |   6000 |
| John       |   5000 |
+------------+--------+


7. تحديد عدد الصفحات

▶ مثال: الاستعلامات المقسمة إلى صفحات

SQL
-- Query the first 10 rows
SELECT * FROM employees LIMIT 10;

-- Skip the first 10 rows, take 10 rows (Page 2)
SELECT * FROM employees LIMIT 10 OFFSET 10;

-- Shorthand: LIMIT offset, count
SELECT * FROM employees LIMIT 10, 10;  -- Page 2

-- Page numbering formula: LIMIT (page-1) * pageSize, pageSize
-- Page 3, 20 rows per page
SELECT * FROM employees LIMIT 40, 20;
▶ جرّب الكود

▶ مثال: ترقيم الصفحات في الممارسة العملية

SQL
-- Page 1
SELECT * FROM products ORDER BY id LIMIT 0, 10;

-- Page 2
SELECT * FROM products ORDER BY id LIMIT 10, 10;

-- Page 3
SELECT * FROM products ORDER BY id LIMIT 20, 10;
▶ جرّب الكود

8. أمثلة على الاستعلامات الكاملة

▶ مثال: استعلام شامل

SQL
-- Query the top 5 highest-paid employees in Engineering
SELECT 
    CONCAT(first_name, ' ', last_name) AS employee_name,
    department,
    salary,
    hire_date
FROM employees
WHERE department = 'Engineering'
  AND salary IS NOT NULL
ORDER BY salary DESC
LIMIT 5;

-- Query employees hired in 2025, statistics by department
SELECT 
    department,
    COUNT(*) AS employee_count,
    AVG(salary) AS avg_salary
FROM employees
WHERE hire_date BETWEEN '2025-01-01' AND '2025-12-31'
GROUP BY department
ORDER BY avg_salary DESC;
▶ جرّب الكود

❓ أسئلة شائعة

س ما الفرق بين WHERE و HAVING؟
ج تعمل WHERE على تصفية الصفوف قبل التجميع، بينما تعمل HAVING على تصفية المجموعات بعد التجميع. لا يمكن استخدام WHERE مع دوال التجميع، بينما يمكن استخدام HAVING معها.
س ما هي أولوية الترتيب عند استخدام ORDER BY مع حقول متعددة؟
ج تُرتب النتائج أولاً حسب الحقل الأول؛ وإذا كان هناك تعادل في الحقل الأول، تُرتب النتائج بعد ذلك حسب الحقل الثاني.
س ماذا أفعل إذا كان الأداء ضعيفًا عندما يكون إزاحة LIMIT كبيرة؟
ج تؤدي الإزاحات الكبيرة (LIMIT 100000, 10) إلى أداء ضعيف جدًّا. انتقل إلى ترقيم الصفحات باستخدام المؤشر: WHERE id > last_id LIMIT 10.
س هل تؤثر دالة DISTINCT على الأداء؟
ج تتطلب دالة DISTINCT إجراء عملية فرز لإزالة التكرارات، لذا قد تكون بطيئة عند التعامل مع مجموعات بيانات كبيرة. إذا لم تكن بحاجة إلى إزالة التكرارات، فلا تستخدم دالة DISTINCT.

📖 ملخص


📝 تمارين

  1. سؤال أساسي (درجة الصعوبة ⭐): قم بالاستعلام عن الموظفين الذين يزيد راتبهم عن 5,000 من جدول employees، وقم بفرز النتائج بترتيب تنازلي حسب الراتب، وعرض أول 5 صفوف فقط.

  2. مشكلة متقدمة (درجة الصعوبة ⭐⭐): قم بالاستعلام عن الطلبات من عام 2026 في جدول orders، واحسب عدد الطلبات والمبلغ الإجمالي حسب الشهر، ثم قم بفرز النتائج حسب الشهر.

  3. التحدي (الصعوبة: ⭐⭐⭐): قم بتنفيذ استعلام مقسم إلى صفحات يعرض 20 سجلًا في كل صفحة. استعلم عن البيانات الموجودة في الصفحة 5، وقارن الفروق في الأداء بين استخدام إزاحة كبيرة LIMIT والتقسيم إلى صفحات باستخدام المؤشر.

Web-Tutorial.com

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

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

100%