MySQL: شرح مفصل لقواعد بناء جملة SELECT في استعلامات MySQL…
آخر تحديث: 2026-08-26
تعد عبارة SELECT هي العبارة الأكثر استخدامًا في لغة SQL — فمعظم عمليات استرجاع البيانات تبدأ بها.
يقدم هذا الدرس شرحًا منهجيًّا لقواعد الصياغة الأساسية والعمليات الشائعة لعبارة SELECT.
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. ما ستتعلمه
- SELECT: اختيار الحقول (الكل/محدد/اسم مستعار)
- تصفية جملة WHERE
- استعلام DISTINCT لإزالة التكرارات
- الترتيب حسب (ORDER BY)
- تحديد عدد الصفحات
2. قصة حقيقية وراء تقرير ما
(1) المشكلة: هناك كمية كبيرة جدًا من البيانات التي يتعين مراجعتها
يتعين على محلل البيانات تحديد «العملاء العشرة الذين سجلوا أعلى قيم للطلبات خلال الشهر الماضي» من بين 100,000 طلب.
التنقل يدويًّا بين الصفحات؟ أم التصفية في برنامج Excel؟ لا يُعد أيٌّ منهما فعالاً بشكل كبير.
(2) حل لـ SELECT
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
▶ مثال: الاستعلام عن جميع الحقول
-- 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;
▶ مثال: الأسماء المستعارة للحقول
-- 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;
الناتج:
+--------+--------+--------+
| first_name | last_name | salary |
+--------+--------+--------+
| John | Smith | 5000 |
| Jane | Doe | 6000 |
+--------+--------+--------+
▶ مثال: حساب التعبير
-- 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
▶ مثال: الشروط الأساسية
-- 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;
▶ مثال: الشروط المجمعة
-- 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
▶ مثال: استعلام لإزالة التكرارات
-- 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;
الناتج:
+-------------+
| department |
+-------------+
| Engineering |
| Sales |
| Marketing |
| HR |
+-------------+
6. الترتيب باستخدام ORDER BY
▶ مثال: استعلام مرتب
-- 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;
الناتج:
+------------+--------+
| first_name | salary |
+------------+--------+
| Charlie | 8000 |
| Jane | 6000 |
| John | 5000 |
+------------+--------+
7. تحديد عدد الصفحات
▶ مثال: الاستعلامات المقسمة إلى صفحات
-- 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;
▶ مثال: ترقيم الصفحات في الممارسة العملية
-- 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. أمثلة على الاستعلامات الكاملة
▶ مثال: استعلام شامل
-- 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;
❓ أسئلة شائعة
ORDER BY مع حقول متعددة؟WHERE id > last_id LIMIT 10.📖 ملخص
- SELECT تسترد البيانات؛
*تسترد جميع الحقول — يُنصح بتحديد أسماء الحقول - شرط التصفية WHERE؛ يدعم
= / != / < / > / BETWEEN / LIKE / IN / IS NULL - DISTINCT تزيل التكرارات؛ ويمكن تطبيقها على حقل واحد أو مجموعة من الحقول
- ORDER BY: الفرز؛ ASC = تصاعدي (الافتراضي)، DESC = تنازلي
- الحد الأقصى لترقيم الصفحات،
LIMIT offset, countأوLIMIT count OFFSET offset - تحسين ترقيم الصفحات باستخدام إزاحات كبيرة من خلال ترقيم الصفحات باستخدام المؤشر
📝 تمارين
-
سؤال أساسي (درجة الصعوبة ⭐): قم بالاستعلام عن الموظفين الذين يزيد راتبهم عن 5,000 من جدول
employees، وقم بفرز النتائج بترتيب تنازلي حسب الراتب، وعرض أول 5 صفوف فقط. -
مشكلة متقدمة (درجة الصعوبة ⭐⭐): قم بالاستعلام عن الطلبات من عام 2026 في جدول
orders، واحسب عدد الطلبات والمبلغ الإجمالي حسب الشهر، ثم قم بفرز النتائج حسب الشهر. -
التحدي (الصعوبة: ⭐⭐⭐): قم بتنفيذ استعلام مقسم إلى صفحات يعرض 20 سجلًا في كل صفحة. استعلم عن البيانات الموجودة في الصفحة 5، وقارن الفروق في الأداء بين استخدام إزاحة كبيرة
LIMITوالتقسيم إلى صفحات باستخدام المؤشر.