MySQL: شرح مفصل لمُشغِّلات وتعبيرات MySQL
آخر تحديث: 2026-08-26
تُعد العوامل الأساسية ركيزة استعلامات SQL — فكل شرط في جملة WHERE يعتمد عليها.
يقدم هذا الدرس نظرة عامة منهجية على جميع عوامل التشغيل في MySQL وحالات استخدامها.
graph TB
A[MySQL Operators] --> B[Arithmetic Operators<br/>+ - * / DIV %]
A --> C[Comparison Operators<br/>= != > < BETWEEN LIKE IN]
A --> D[Logical Operators<br/>AND OR NOT XOR]
A --> E[Bitwise operators<br/>& | ^ ~ << >>]
C --> C1[BETWEEN Scope]
C --> C2[IN List]
C --> C3[LIKE Blurred]
C --> C4[IS NULL Null value]
C --> C5[<=> Safety equals]
1. ما ستتعلمه
- العوامل الحسابية (+−×÷)
- عوامل المقارنة (=/>/</BETWEEN/LIKE/IN)
- العوامل المنطقية (AND/OR/NOT)
- عوامل التشغيل البتية (&/|/^)
- أولوية العمليات الحسابية
2. قصة حقيقية وراء تقرير ما
(1) المشكلة: إدخال معايير التصفية بشكل غير صحيح
يرغب أحد أخصائيي العمليات في البحث عن «الطلبات الصادرة خلال آخر 30 يومًا التي يتجاوز مبلغها 100 وتكون حالتها غير "ملغاة"»:
-- Incorrect Formulation
SELECT * FROM orders
WHERE order_date > '2026-06-03' AND amount > 100 AND status != 'cancelled';
-- Missed: status could be NULL
(2) إيجاد قيم العوامل
-- Correct Way: Handle NULL
SELECT * FROM orders
WHERE order_date > DATE_SUB(CURDATE(), INTERVAL 30 DAY)
AND amount > 100
AND (status != 'cancelled' OR status IS NULL);
المزايا: لا يتم تجاهل أي قيم NULL، مما يضمن دقة نتائج الاستعلام.
3. العوامل الحسابية
| المشغل | الوصف | مثال |
|---|---|---|
+ |
إضافة | SELECT 1 + 1; → 2 |
- |
الطرح | SELECT 5 - 3; → 2 |
* |
الضرب | SELECT 2 * 3; → 6 |
/ |
القسم | SELECT 10 / 3; → 3.3333 |
DIV |
القسمة الصحيحة | SELECT 10 DIV 3; → 3 |
% |
المودولوس | SELECT 10 % 3; → 1 |
MOD |
المودولوس | SELECT MOD(10, 3); → 1 |
▶ مثال: العمليات الحسابية
-- Calculate the total order amount
SELECT
product_name,
price,
quantity,
price * quantity AS total
FROM order_items;
-- Calculate the discounted price
SELECT
product_name,
original_price,
discount_rate,
original_price * (1 - discount_rate / 100) AS sale_price
FROM products;
الناتج:
+--------------+-------+----------+-------+
| product_name | price | quantity | total |
+--------------+-------+----------+-------+
| iPhone | 999 | 2 | 1998 |
| MacBook | 1999 | 1 | 1999 |
+--------------+-------+----------+-------+
4. عوامل المقارنة
| المشغل | الوصف | مثال |
|---|---|---|
= |
يساوي | WHERE id = 1 |
<> أو != |
لا يساوي | WHERE status != 'deleted' |
< |
أقل من | WHERE age < 18 |
> |
أكبر من | WHERE price > 100 |
<= |
أقل من أو يساوي | WHERE score <= 60 |
>= |
أكبر من أو يساوي | WHERE amount >= 1000 |
| النطاق | BETWEEN |
WHERE age BETWEEN 18 AND 30 |
IN |
القائمة | WHERE status IN ('active', 'pending') |
LIKE |
مطابقة تقريبية | WHERE name LIKE 'J%' |
IS NULL |
قيمة فارغة | WHERE email IS NULL |
IS NOT NULL |
غير فارغ | WHERE email IS NOT NULL |
<=> |
«آمن» يساوي | NULL <=> NULL → 1 |
▶ مثال: استعلام النطاق BETWEEN
-- Check prices between 100 and 500
SELECT * FROM products WHERE price BETWEEN 100 AND 500;
-- Equivalent to
SELECT * FROM products WHERE price >= 100 AND price <= 500;
-- Query orders within a specific date range
SELECT * FROM orders WHERE order_date BETWEEN '2026-01-01' AND '2026-06-30';
▶ مثال: استعلام قائمة IN
-- Query Orders with a Specific Status
SELECT * FROM orders WHERE status IN ('pending', 'paid', 'shipped');
-- Equivalent to
SELECT * FROM orders WHERE status = 'pending' OR status = 'paid' OR status = 'shipped';
-- Search for employees in a specific department
SELECT * FROM employees WHERE department_id IN (1, 3, 5, 7);
▶ مثال: المطابقة التقريبية باستخدام LIKE
-- % Match any number of characters
SELECT * FROM users WHERE name LIKE 'J%'; -- Starts with J
SELECT * FROM users WHERE name LIKE '%son'; -- Ends with son
SELECT * FROM users WHERE name LIKE '%john%'; -- Contains john
-- _ Match a single character
SELECT * FROM users WHERE phone LIKE '138____1111'; -- Positions 4-7 can be any digit
-- ESCAPE Escape
SELECT * FROM files WHERE name LIKE '%\%%' ESCAPE '\\'; -- Contains %
▶ مثال: مقارنة القيم NULL
-- NULL cannot be compared with =
SELECT * FROM users WHERE email = NULL; -- Wrong, returns null
SELECT * FROM users WHERE email IS NULL; -- Correct
-- NULL cannot be compared with !=
SELECT * FROM users WHERE email != NULL; -- Wrong
SELECT * FROM users WHERE email IS NOT NULL; -- Correct
-- Safe equals <=>
SELECT NULL = NULL; -- NULL (Uncertain)
SELECT NULL <=> NULL; -- 1 (Determines if equal)
5. العوامل المنطقية
| المشغل | الوصف | مثال |
|---|---|---|
AND |
«و» المنطقي | WHERE a = 1 AND b = 2 |
OR |
«أو» المنطقي | WHERE a = 1 OR b = 2 |
NOT |
النفي المنطقي | WHERE NOT (status = 'deleted') |
XOR |
أو الحصري | WHERE a = 1 XOR b = 2 |
▶ مثال: الجمع بين «AND» و«OR»
-- AND: Both conditions must be met
SELECT * FROM employees
WHERE department = 'Engineering' AND salary > 8000;
-- OR: Meets any one of the conditions
SELECT * FROM employees
WHERE department = 'Sales' OR department = 'Marketing';
-- Combination: Note priority (AND > OR)
SELECT * FROM employees
WHERE (department = 'Sales' OR department = 'Marketing')
AND salary > 5000;
▶ مثال: NOT (النفي)
-- NOT IN
SELECT * FROM products WHERE category_id NOT IN (1, 2, 3);
-- NOT BETWEEN
SELECT * FROM orders WHERE amount NOT BETWEEN 100 AND 500;
-- NOT LIKE
SELECT * FROM users WHERE email NOT LIKE '%@test.com';
-- NOT EXISTS
SELECT * FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);
6. عوامل العمليات البتية
| المشغل | الوصف | مثال |
|---|---|---|
& |
عملية «AND» على مستوى البتات | SELECT 5 & 3; → 1 |
| |
عملية «أو» على مستوى البتات | SELECT 5 | 3; → 7 |
^ |
عملية XOR على مستوى البتات | SELECT 5 ^ 3; → 6 |
~ |
عملية «NOT» على مستوى البت | SELECT ~5; → -6 |
<< |
الإزاحة إلى اليسار | SELECT 1 << 3; → 8 |
>> |
الإزاحة إلى اليمين | SELECT 8 >> 2; → 2 |
▶ مثال: تطبيقات العمليات على البتات
-- Permission system (Bit mask)
-- Read=1, Write=2, Execute=4
CREATE TABLE permissions (
user_id INT,
permission TINYINT
);
-- User has Read+Write permissions = 1|2 = 3
INSERT INTO permissions VALUES (1, 3);
-- Check for write permission (3 & 2 = 2, non-zero means "yes")
SELECT * FROM permissions WHERE permission & 2;
7. أولوية العمليات الحسابية
من الأعلى إلى الأدنى:
| الأولوية | المشغل |
|---|---|
| 1 | ! (ليس) |
| 2 | - (علامة السالب)، ~ (ليس) |
| 3 | ^ (XOR) |
| 4 | *، /، DIV، %، MOD |
| 5 | +، - |
| 6 | <<، >> |
| 7 | & |
| 8 | | |
| 9 | =، <=>، <>، !=، <، <=، >، >=، LIKE، IN، BETWEEN |
| 10 | AND، && |
| 11 | OR، ||، XOR |
() لتحديد ترتيب التنفيذ.
❓ أسئلة شائعة
= و<=>؟= القيمة NULL عند مقارنتها بـ NULL، بينما تُرجع <=> القيمة 1 (مما يشير إلى التساوي) عند مقارنتها بـ NULL. <=> هو عامل تساوي آمن خاص بـ MySQL.WHERE a=1 OR b=2 AND c=3 تعادل WHERE a=1 OR (b=2 AND c=3). يُنصح باستخدام الأقواس من أجل الوضوح.1 + NULL = NULL، 'abc' || NULL = NULL.📖 ملخص
- المُشغِّلات الحسابية تُستخدم في العمليات الحسابية:
+−×÷ DIV % - تُستخدم علامات المقارنة في التصفية الشرطية:
= / != / < / > / BETWEEN / LIKE / IN / IS NULL - المشغلات المنطقية: دمج الشروط:
AND / OR / NOT / XOR - المعاملات البتية: تعمل على البتات الثنائية:
& / | / ^ / ~ / << / >> - NULL: تكون نتيجة أي عملية تتضمن القيمة NULL هي NULL؛ استخدم
IS NULLأو<=>لإجراء المقارنات. - استخدم الأقواس عندما تكون الأولوية غير مؤكدة
📝 تمارين
-
المسألة الأساسية (الصعوبة ⭐): اكتب استعلامًا للبحث عن المنتجات التي يتراوح سعر بيعها بين 100 و500، ومخزونها أكبر من 0، واسمها يحتوي على كلمة "phone".
-
مشكلة متقدمة (درجة الصعوبة ⭐⭐): اكتب استعلامًا للبحث عن الطلبات التي تمت خلال الأيام السبعة الماضية، والتي يزيد مبلغها عن 200، وحالتها «مدفوعة» أو «مشحونة»، وعنوان البريد الإلكتروني للعميل غير فارغ.
-
التحدي (مستوى الصعوبة: ⭐⭐⭐): صمم نظام أذونات يستخدم العمليات على مستوى البتات لتخزين والتحقق من أذونات القراءة والكتابة والتنفيذ الخاصة بالمستخدم.