
أساسيات SQL في MySQL: SELECT والتصفية والترتيب وCRUD والدوال التجميعية
يعد MySQL أحد أنظمة database العلائقية الأكثر استخدامًا على نطاق واسع في تطوير الويب وتطبيقات backend ولوحات المعلومات وأنظمة إدارة المحتوى والأنظمة الأساسية المعتمدة على البيانات. للعمل مع MySQL بشكل صحيح، يجب على المطور فهم عبارات SQL وقواعد التصفية والفرز وتعديل البيانات ومعالجة NULL والوظائف التجميعية ومطابقة الأنماط والنطاقات وaliases.
تشرح هذه المقالة موضوعات MySQL الرئيسية SQL الموضحة في مسار التعلم: SQL، SELECT، SELECT DISTINCT، WHERE، ORDER BY، AND، أو، لا، INSERT INTO، قيم NULL، UPDATE، DELETE، LIMIT، الوظائف المجمعة، MIN()، MAX()، COUNT()، SUM() وAVG() وLIKE وأحرف البدل وIN وBETWEEN وaliases.
الهدف ليس فقط حفظ بناء الجملة. الهدف هو فهم كيفية استخدام commands في المشاريع الحقيقية، وكيفية تأثيرها على البيانات، وما هي الأخطاء التي يجب تجنبها عند قراءة السجلات أو تصفيتها أو إدراجها أو تحديثها أو حذفها.
MySQL SQL
SQL يرمز إلىلغة الاستعلام المنظمة. إنها اللغة المستخدمة للتواصل مع databases العلائقية. في MySQL، يتم استخدام SQL لإنشاء الجداول وقراءة البيانات وإدراج سجلات جديدة وتحديث السجلات الموجودة وحذف السجلات وتصفية النتائج وتجميع البيانات وحساب الملخصات.
يتبع MySQL مبادئ SQL ولكن له أيضًا ميزاته وتفاصيل بناء الجملة الخاصة به. وهذا يعني أن معظم عبارات SQL الشائعة متشابهة عبر databases العلائقية، بينما قد تكون بعض السلوكيات خاصة بـ MySQL.
SQL commands تتم كتابتها عادةً بأحرف كبيرة لسهولة القراءة، ولكن الكلمات الأساسية MySQL بشكل عام ليست حساسة لحالة الأحرف. على سبيل المثال،SELECT,حدد، واختريمكن أن تعمل بنفس الطريقة. ومع ذلك، فإن كتابة الكلمات الأساسية SQL بأحرف كبيرة تجعل قراءة الاستعلامات أسهل.
SELECT name, email
FROM users
WHERE status = 'active';يطلب هذا الاستعلام من MySQL إرجاع الاسم والبريد الإلكتروني للمستخدمين الذين تكون حالتهم نشطة. يحتوي على ثلاثة أجزاء مهمة: ما يجب تحديده، والجدول الذي يجب القراءة منه، والشرط الذي يجب تطبيقه.
في التطبيقات الحقيقية، يتم استخدام SQL خلف العديد من الميزات: أنظمة تسجيل الدخول، وقوائم المنتجات، وصفحات search، ولوحات الإدارة، والتقارير، والفواتير، والأوامر، والتحليلات، ولوحات معلومات المستخدم.
MySQL SELECT
الSELECTيستخدم البيان لقراءة البيانات من الجدول. يعد من أهم commands في MySQL لأن معظم صفحات التطبيق تحتاج إلى استرجاع البيانات قبل عرضها للمستخدم.
يمكنك تحديد كافة الأعمدة باستخدام*، أو يمكنك تحديد أعمدة محددة فقط. في التطوير الاحترافي، عادةً ما يكون تحديد الأعمدة التي تحتاجها فقط أفضل لأنه يقلل من نقل البيانات غير الضرورية ويجعل الاستعلام أكثر وضوحًا.
SELECT *
FROM users;يقوم هذا الاستعلام بإرجاع كافة الأعمدة من جدول المستخدمين.
SELECT id, name, email
FROM users;يقوم هذا الاستعلام بإرجاع أعمدة المعرف والاسم والبريد الإلكتروني فقط. يكون هذا أكثر نظافة عندما لا يحتاج التطبيق إلى كل عمود.
يمكن أن يتضمن استعلام SELECT أيضًا التصفية والفرز والحدود وaliases والحسابات والوظائف المجمعة. ولهذا السبب، عادةً ما يكون SELECT هو الأساس لاستعلامات MySQL الأكثر تقدمًا.
MySQL SELECT DISTINCT
الSELECT DISTINCTيتم استخدام العبارة لإرجاع قيم فريدة فقط. يقوم بإزالة الصفوف المكررة من النتيجة بناءً على الأعمدة المحددة.
على سبيل المثال، إذا كان العديد من المستخدمين يعيشون في نفس المدينة، فقد يعرض SELECT العادي اسم المدينة عدة مرات. تقوم DISTINCT بإرجاع كل مدينة مرة واحدة فقط.
SELECT DISTINCT city
FROM users;يقوم هذا الاستعلام بإرجاع قائمة بالمدن الفريدة من جدول المستخدمين.
عند استخدام DISTINCT مع أكثر من عمود واحد، يتحقق MySQL من تفرد المجموعة المحددة بالكامل، وليس كل عمود على حدة.
SELECT DISTINCT city, country
FROM users;يُرجع هذا الاستعلام مجموعات فريدة من نوعها للمدينة والبلد. إذا كان اسم المدينة نفسه موجودًا في بلدان مختلفة، فيمكن أن تظهر كل مجموعة مختلفة بشكل منفصل.
يُعد DISTINCT مفيدًا للمرشحات والقوائم المنسدلة والتقارير والحالات التي يجب ألا تظهر فيها القيم المتكررة في المخرجات.
MySQL WHERE
الWHEREيتم استخدام العبارة لتصفية السجلات. بدون WHERE، يقوم استعلام SELECT بإرجاع كافة الصفوف من الجدول. باستخدام WHERE، تقوم MySQL بإرجاع الصفوف التي تطابق الشرط فقط.
SELECT id, name, email
FROM users
WHERE status = 'active';يُرجع هذا الاستعلام المستخدمين النشطين فقط.
يمكن استخدام WHERE مع المقارنة operators مثل=,<>,>,<,>=، و<=.
SELECT id, name, price
FROM products
WHERE price > 100;يقوم هذا الاستعلام بإرجاع المنتجات التي يزيد سعرها عن 100.
يتم استخدام WHERE أيضًا في عبارات UPDATE وDELETE. وهذا يجعلها قوية ولكنها خطيرة إذا تم استخدامها بشكل غير صحيح. يمكن أن تؤثر عبارة WHERE المفقودة في UPDATE أو DELETE على كل صف في الجدول.
MySQL ORDER BY
الORDER BYيتم استخدام العبارة لفرز نتائج الاستعلام. بدون ORDER BY، لا يضمن MySQL إرجاع الصفوف بترتيب معين، حتى لو كانت النتيجة قد تظهر مرتبة في بعض الأحيان.
يمكنك فرز النتائج بترتيب تصاعدي باستخدامASCأو ترتيب تنازلي باستخدامDESC. إذا لم يتم توفير أي اتجاه، يستخدم MySQL ترتيبًا تصاعديًا بشكل افتراضي.
SELECT id, name, created_at
FROM users
ORDER BY created_at DESC;يقوم هذا الاستعلام بإرجاع المستخدمين من الأحدث إلى الأقدم بناءً على العمود create_at.
يمكنك أيضًا الفرز حسب أكثر من عمود واحد.
SELECT id, name, city, created_at
FROM users
ORDER BY city ASC, created_at DESC;يقوم هذا الاستعلام بفرز المستخدمين حسب المدينة أولاً، ثم فرز المستخدمين داخل كل مدينة من الأحدث إلى الأقدم.
يعد ORDER BY مهمًا للجداول والتقارير وترقيم الصفحات ونتائج search وصفحات المنتج ولوحات المعلومات حيث يتوقع المستخدم طلبًا واضحًا.
MySQL و
الويتم استخدام operator عندما تكون جميع الشروط صحيحة. إنه يضيق النتيجة لأن كل شرط مرتبط بـ AND يجب أن يتطابق.
SELECT id, name, email
FROM users
WHERE status = 'active'
AND country = 'Turkey';يعرض هذا الاستعلام المستخدمين النشطين وبلدهم تركيا. إذا كان المستخدم نشطًا ولكنه يعيش في بلد آخر، فلن يتم تضمين هذا المستخدم.
يُستخدم AND بشكل شائع في عوامل تصفية الإدارة ونماذج search وعمليات التحقق من الأذونات والتقارير حيث يجب تلبية متطلبات متعددة في نفس الوقت.
SELECT id, name, price
FROM products
WHERE category_id = 5
AND price >= 100
AND stock > 0;يقوم هذا الاستعلام بإرجاع منتجات من class 5 بسعر لا يقل عن 100 ومخزون متاح.
MySQL أو
الأويتم استخدام operator عندما يجب أن يكون شرط واحد على الأقل صحيحًا. يقوم بتوسيع النتيجة لأن الصف يمكن أن يتطابق مع أي شرط من الشروط.
SELECT id, name, role
FROM users
WHERE role = 'admin'
OR role = 'editor';يقوم هذا الاستعلام بإرجاع المستخدمين الذين يكون دورهم مسؤولاً أو محررًا.
عند استخدام AND وOR معًا، تكون الأقواس مهمة. إنها تجعل المنطق واضحًا وتمنع النتائج غير المتوقعة.
SELECT id, name, status, role
FROM users
WHERE status = 'active'
AND (role = 'admin' OR role = 'editor');يقوم هذا الاستعلام بإرجاع المستخدمين النشطين الذين هم إما مسؤولين أو محررين. بدون الأقواس، قد يتم تفسير الاستعلام بشكل مختلف وقد يُرجع سجلات غير مقصودة.
MySQL لا
اللاoperator يعكس الشرط. يتم استخدامه لاستبعاد السجلات التي تطابق قاعدة معينة.
SELECT id, name, status
FROM users
WHERE NOT status = 'inactive';يقوم هذا الاستعلام بإرجاع المستخدمين الذين ليست حالتهم غير نشطة.
الطريقة الأكثر شيوعًا لكتابة نفس الفكرة هي استخدام operator غير المتساوي.
SELECT id, name, status
FROM users
WHERE status <> 'inactive';لا يمكن استخدامه أيضًا مع IN وBETWEEN وLIKE.
SELECT id, name
FROM users
WHERE country NOT IN ('Turkey', 'Germany');يستبعد هذا الاستعلام المستخدمين الذين بلدهم تركيا أو ألمانيا.
NOT مفيد لمرشحات الاستبعاد والحالات المحظورة والمنتجات غير المتاحة والسجلات المؤرشفة وشروط search السلبية.
MySQL INSERT داخل
الINSERT داخليتم استخدام العبارة لإضافة سجلات جديدة إلى الجدول. في معظم التطبيقات، يتم استخدام INSERT عندما يقوم المستخدمون بالتسجيل أو إنشاء منشورات أو إرسال نماذج أو إضافة منتجات أو إنشاء طلبات أو حفظ بيانات جديدة.
النموذج الأكثر أمانًا وأوضحًا هو تحديد أسماء الأعمدة ثم توفير القيم.
INSERT INTO users (name, email, status)
VALUES ('Adnan', 'adnan@example.com', 'active');يقوم هذا الاستعلام بإدراج مستخدم جديد بالاسم والبريد الإلكتروني والحالة.
يمكنك أيضًا إدراج سجلات متعددة في عبارة واحدة.
INSERT INTO categories (name, slug)
VALUES
('Programming', 'programming'),
('Databases', 'databases'),
('Backend Development', 'backend-development');عند إدراج البيانات، يجب أن تتطابق القيم مع أنواع الأعمدة المتوقعة. على سبيل المثال، يجب إدراج الأرقام في أعمدة رقمية، والتواريخ الصالحة في أعمدة التاريخ، والسلاسل في الأعمدة النصية.
في التطبيقات الحقيقية، لا ينبغي للمطورين أبدًا إنشاء استعلامات INSERT عن طريق تسلسل مدخلات المستخدم غير الآمنة مباشرةً. يجب استخدام البيانات المعدة أو منشئي استعلام إطار العمل لحماية التطبيق من SQL injection.
قيم MySQL NULL
NULLيعني أن القيمة مفقودة أو غير معروفة أو غير متوفرة. إنها ليست مثل سلسلة فارغة أو صفر أو خطأ.
على سبيل المثال، قد لا يكون لدى المستخدم تاريخ ميلاد مخزّن بعد. في هذه الحالة، قد يحتوي عمود تاريخ الميلاد على NULL.
للتحقق من قيم NULL، استخدمهو NULL. لا تستخدم= NULL، لأن NULL يمثل قيمة غير معروفة ولا تعمل مقارنة المساواة العادية كما هو متوقع.
SELECT id, name, birth_date
FROM users
WHERE birth_date IS NULL;يقوم هذا الاستعلام بإرجاع المستخدمين الذين تاريخ ميلادهم مفقود.
لإرجاع السجلات التي توجد بها القيمة، استخدمهو NOT NULL.
SELECT id, name, birth_date
FROM users
WHERE birth_date IS NOT NULL;تؤثر قيم NULL أيضًا على الوظائف المجمعة. على سبيل المثال، COUNT(column) لا يحسب قيم NULL، بينما COUNT(*) يحسب الصفوف بغض النظر عن قيم NULL.
عندما تحتاج إلى استبدال NULL بقيمة قابلة للقراءة في النتيجة، يمكنك استخدامالتئام().
SELECT name, COALESCE(phone, 'No phone number') AS phone_display
FROM users;يعرض هذا الاستعلام نصًا احتياطيًا عندما يكون عمود الهاتف هو NULL.
MySQL UPDATE
الUPDATEيتم استخدام العبارة لتعديل السجلات الموجودة في الجدول. يتم استخدامه بشكل شائع عندما يقوم المستخدمون بتحرير ملف التعريف الخاص بهم، أو تغيير حالة الطلب، أو تحديث سعر المنتج، أو نشر مقال، أو تعديل الإعدادات.
UPDATE users
SET status = 'active'
WHERE id = 10;يقوم هذا الاستعلام بتحديث المستخدم بالمعرف 10 وتغيير الحالة إلى نشط.
يمكنك تحديث أكثر من عمود في نفس الوقت.
UPDATE products
SET price = 149.99,
stock = 25
WHERE id = 7;يقوم هذا الاستعلام بتحديث سعر ومخزون المنتج بالمعرف 7.
تعد جملة WHERE مهمة للغاية في استعلامات UPDATE. بدون WHERE، يقوم MySQL بتحديث كل صف في الجدول.
UPDATE users
SET status = 'inactive';يغير هذا الاستعلام حالة كافة المستخدمين إلى غير نشط. في معظم المشاريع الحقيقية، سيكون ذلك خطأً فادحًا ما لم يتم التخطيط له عمدًا.
قبل تشغيل UPDATE الخطير، غالبًا ما يكون من الآمن تشغيل استعلام SELECT بنفس شرط WHERE أولاً لتأكيد السجلات التي ستتأثر.
MySQL DELETE
الDELETEيتم استخدام العبارة لإزالة السجلات من الجدول. يتم استخدامه بشكل شائع لحذف المنشورات والتعليقات والسجلات المؤقتة والإشعارات وعناصر سلة التسوق والبيانات الأخرى التي لم تعد موجودة.
DELETE FROM users
WHERE id = 10;يحذف هذا الاستعلام المستخدم بالمعرف 10.
يجب استخدام DELETE بعناية لأن البيانات التي تمت إزالتها قد يكون من الصعب أو من المستحيل استردادها إذا لم يكن هناك نظام نسخ احتياطي أو حذف بسيط.
تمامًا مثل UPDATE، يصبح DELETE خطيرًا عند استخدامه بدون WHERE.
DELETE FROM users;يحذف هذا الاستعلام كافة الصفوف من جدول المستخدمين. لا يحذف بنية الجدول، ولكنه يزيل السجلات.
في التطبيقات الاحترافية، غالبًا ما يستخدم المطورون عمليات الحذف البسيطة لبيانات العمل المهمة. بدلاً من إزالة السجل نهائيًا، يضع التطبيق علامة عليه كمحذوف باستخدام عمودdelete_at أو حقل الحالة.
MySQL LIMIT
الLIMITيتم استخدام العبارة لتقييد عدد الصفوف التي يتم إرجاعها بواسطة الاستعلام. وهو مفيد لترقيم الصفحات وأحدث السجلات والقوائم العليا والمعاينات ولوحات المعلومات والتحكم في الأداء.
SELECT id, title, created_at
FROM posts
ORDER BY created_at DESC
LIMIT 10;يعرض هذا الاستعلام آخر 10 مشاركات.
يمكن أيضًا استخدام LIMIT مع الإزاحة. تخبر الإزاحة MySQL بعدد الصفوف التي يجب تخطيها قبل إرجاع النتائج.
SELECT id, title, created_at
FROM posts
ORDER BY created_at DESC
LIMIT 10 OFFSET 20;يتخطى هذا الاستعلام أول 20 صفًا ويعيد الصفوف العشرة التالية. ويمكن استخدامه للصفحة 3 عندما تحتوي كل صفحة على 10 سجلات.
يدعم MySQL أيضًا بناء الجملة الأقصر:
SELECT id, title, created_at
FROM posts
ORDER BY created_at DESC
LIMIT 20, 10;في بناء الجملة هذا، الرقم الأول هو الإزاحة والرقم الثاني هو عدد الصفوف المطلوب إرجاعها.
للحصول على ترقيم صفحات مستقر، يجب عادةً دمج LIMIT مع ORDER BY. بدون ترتيب واضح، قد يعرض database نتائج ترقيم صفحات غير متناسقة.
MySQL الوظائف المجمعة
تقوم الدالات التجميعية بإجراء عمليات حسابية على مجموعة من الصفوف وترجع نتيجة واحدة. يتم استخدامها في التقارير ولوحات المعلومات والإحصائيات والتحليلات والملخصات المالية وأعداد المنتجات وإجماليات الطلبات وتقارير نشاط المستخدم.
وظائف التجميع MySQL الأكثر شيوعًا هيMIN(),MAX(),COUNT(),SUM()، وAVG().
SELECT COUNT(*) AS total_orders,
SUM(total_amount) AS revenue,
AVG(total_amount) AS average_order_value
FROM orders
WHERE status = 'paid';يقوم هذا الاستعلام بحساب عدد الطلبات المدفوعة وإجمالي الإيرادات ومتوسط قيمة الطلب.
غالبًا ما يتم استخدام الوظائف التجميعية معGROUP BY، على الرغم من أن GROUP BY ليس محور التركيز الرئيسي لهذه المقالة. يسمح GROUP BY بإجراء العمليات الحسابية لكل class، لكل مستخدم، لكل حالة، أو لكل تاريخ.
SELECT status, COUNT(*) AS total
FROM orders
GROUP BY status;يقوم هذا الاستعلام بحساب الطلبات حسب الحالة.
MySQL MIN()
الMIN()ترجع الدالة أصغر قيمة في العمود. يمكن استخدامه مع الأرقام والتواريخ والقيم النصية.
SELECT MIN(price) AS lowest_price
FROM products;يُرجع هذا الاستعلام أقل سعر للمنتج.
يعد MIN() مفيدًا للعثور على أرخص منتج أو تاريخ أولي أو أصغر نتيجة أو أقل راتب أو تاريخ الطلب الأول أو الحد الأدنى للكمية.
SELECT MIN(created_at) AS first_order_date
FROM orders
WHERE user_id = 15;يقوم هذا الاستعلام بإرجاع تاريخ الطلب الأول للمستخدم 15.
عند استخدام MIN() في عمود يحتوي على قيم NULL، يتم تجاهل قيم NULL ما لم تكن كافة القيم NULL.
MySQL MAX()
الMAX()ترجع الدالة أكبر قيمة في العمود. وهو عكس MIN().
SELECT MAX(price) AS highest_price
FROM products;يُرجع هذا الاستعلام أعلى سعر للمنتج.
يعد MAX() مفيدًا للعثور على أغلى منتج أو أحدث تاريخ أو أعلى نتيجة أو أكبر كمية أو أحدث تاريخ طلب أو الحد الأقصى للقيمة في التقرير.
SELECT MAX(created_at) AS latest_login
FROM login_logs
WHERE user_id = 15;يُرجع هذا الاستعلام آخر وقت لتسجيل الدخول للمستخدم 15.
مثل الدوال التجميعية الأخرى، يتجاهل MAX() قيم NULL في العمود المحدد.
MySQL COUNT()
الCOUNT()ترجع الدالة عدد الصفوف أو القيم غير NULL. إنها واحدة من الوظائف التجميعية الأكثر استخدامًا في MySQL.
SELECT COUNT(*) AS total_users
FROM users;يقوم هذا الاستعلام بحساب كافة الصفوف في جدول المستخدمين.
يقوم COUNT(*) بحساب الصفوف، حتى إذا كانت بعض الأعمدة تحتوي على NULL. COUNT(column_name) يحسب فقط الصفوف التي لا يكون فيها هذا العمود المحدد NULL.
SELECT COUNT(phone) AS users_with_phone
FROM users;يقوم هذا الاستعلام بحساب المستخدمين الذين لديهم قيمة هاتف غير NULL.
يعد COUNT() مفيدًا للوحات المعلومات وإجماليات ترقيم الصفحات والتقارير والإشعارات غير المقروءة وأعداد المنتجات وأعداد الطلبات والتحليلات.
SELECT COUNT(*) AS active_users
FROM users
WHERE status = 'active';يحسب هذا الاستعلام المستخدمين النشطين فقط.
MySQL SUM()
الSUM()ترجع الدالة المجموع الإجمالي للقيم الرقمية في عمود. يتم استخدامه للتقارير المالية وإجماليات الطلبات وإيرادات المبيعات وكميات المخزون والأرصدة والملخصات الرقمية.
SELECT SUM(total_amount) AS total_revenue
FROM orders
WHERE status = 'paid';يقوم هذا الاستعلام بإرجاع إجمالي الإيرادات من الطلبات المدفوعة.
يجب استخدام SUM() مع الأعمدة الرقمية. إذا كان العمود يحتوي على قيم NULL، فسيتم تجاهل هذه القيم.
SELECT user_id, SUM(total_amount) AS total_spent
FROM orders
WHERE status = 'paid'
GROUP BY user_id;يحسب هذا الاستعلام المبلغ الذي أنفقه كل مستخدم على الطلبات المدفوعة.
تعتبر SUM() ذات أهمية خاصة في أنظمة التجارة الإلكترونية وميزات المحاسبة والفواتير والمحافظ والاشتراكات ولوحات معلومات الأعمال.
MySQL AVG()
الAVG()ترجع الدالة القيمة المتوسطة لعمود رقمي. فهو يحسب مجموع القيم مقسومًا على عدد القيم غير NULL.
SELECT AVG(price) AS average_price
FROM products;يقوم هذا الاستعلام بإرجاع متوسط سعر المنتج.
يعد AVG() مفيدًا لمتوسط قيمة الطلب ومتوسط التقييم ومتوسط الراتب ومتوسط الدرجات ومتوسط وقت التسليم وتقارير الأداء.
SELECT AVG(rating) AS average_rating
FROM product_reviews
WHERE product_id = 12;يقوم هذا الاستعلام بإرجاع متوسط التصنيف للمنتج 12.
نظرًا لأن AVG() يتجاهل قيم NULL، فإن التصنيفات المفقودة أو القيم المفقودة لا تقلل من المتوسط كما تفعل الأصفار. هذا الاختلاف مهم عند تحليل البيانات.
MySQL LIKE
الLIKEيتم استخدام operator لمطابقة الأنماط في أعمدة النص. يتم استخدامه بشكل شائع في ميزات search حيث يقوم المستخدم بإدخال جزء من الاسم أو البريد الإلكتروني أو العنوان أو السلسلة الثابتة أو class أو الوصف.
SELECT id, name, email
FROM users
WHERE name LIKE 'A%';يقوم هذا الاستعلام بإرجاع المستخدمين الذين تبدأ أسماؤهم بالحرف A.
SELECT id, title
FROM posts
WHERE title LIKE '%mysql%';يقوم هذا الاستعلام بإرجاع المشاركات التي يحتوي عنوانها على كلمة mysql.
يعد LIKE مفيدًا، ولكنه قد يصبح بطيئًا في الجداول الكبيرة عندما تبدأ الأنماط بحرف بدل مثل%mysqlأو%ماي اس كيو ال%. بالنسبة لأنظمة search المتقدمة، قد تكون محركات indexes ذات النص الكامل أو محركات search الخارجية أفضل.
عند استخدام إدخال المستخدم في استعلامات LIKE، يجب الاستمرار في استخدام prepared statements لتجنب SQL injection وبناء استعلام غير آمن.
MySQL أحرف البدل
أحرف البدل هي أحرف خاصة تستخدم مع LIKE لمطابقة الأنماط. أكثر حرفي البدل MySQL شيوعًا هما%و_.
%يطابق صفرًا أو أكثر من الأحرف.
_يطابق حرفًا واحدًا بالضبط.
SELECT id, name
FROM users
WHERE name LIKE 'Ad%';يطابق هذا الاستعلام الأسماء التي تبدأ بـ Ad، مثل عدنان أو آدم.
SELECT id, code
FROM coupons
WHERE code LIKE 'A_1';يتطابق هذا الاستعلام مع قيم مثل AA1 أو AB1 أو A91 لأن الشرطة السفلية تمثل حرفًا واحدًا بالضبط.
يغير موضع حرف البدل معنى search:
"ماي أس كيو إل٪"يعني يبدأ بـ mysql.
'% ماي سكل'يعني ينتهي بـ mysql.
'%ماي أس كيو إل%'يعني يحتوي على MySQL في أي مكان.
تعد أحرف البدل بسيطة ومفيدة، ولكن يجب استخدامها بعناية في مجموعات البيانات الكبيرة لأن عمليات البحث ذات الأنماط الواسعة يمكن أن تؤثر على الأداء.
MySQL إن
الفييتحقق operator مما إذا كانت القيمة تتطابق مع أي قيمة في القائمة. إنه أنظف من كتابة العديد من شروط OR.
SELECT id, name, role
FROM users
WHERE role IN ('admin', 'editor', 'author');يقوم هذا الاستعلام بإرجاع المستخدمين الذين يكون دورهم مسؤولاً أو محررًا أو مؤلفًا.
يمكن كتابة نفس المنطق باستخدام OR، ولكن IN تكون أسهل في القراءة عندما تكون هناك قيم متعددة.
SELECT id, title, status
FROM posts
WHERE status IN ('draft', 'published');يمكن أيضًا استخدام IN مع الاستعلامات الفرعية.
SELECT id, name
FROM users
WHERE id IN (
SELECT user_id
FROM orders
WHERE status = 'paid'
);يعرض هذا الاستعلام المستخدمين الذين لديهم طلب مدفوع واحد على الأقل.
يعد IN مفيدًا للمرشحات والأدوار والحالات وclasses والمعرفات المحددة والاستعلامات القائمة على الأذونات.
MySQL BETWEEN
الBETWEENيتحقق operator مما إذا كانت القيمة موجودة داخل النطاق. يتم استخدامه بشكل شائع مع الأرقام والتواريخ والأوقات.
SELECT id, name, price
FROM products
WHERE price BETWEEN 100 AND 500;يقوم هذا الاستعلام بإرجاع المنتجات بأسعار تتراوح من 100 إلى 500.
BETWEEN شامل. وهذا يعني أنه يتم تضمين قيمة البداية وقيمة النهاية في النتيجة.
SELECT id, title, created_at
FROM posts
WHERE created_at BETWEEN '2026-01-01' AND '2026-01-31';يقوم هذا الاستعلام بإرجاع المشاركات التي تم إنشاؤها بين التاريخين. عند العمل مع قيم التاريخ والوقت، يجب على المطورين توخي الحذر لأن تاريخًا مثل "31-01-2026" قد يمثل بداية ذلك اليوم اعتمادًا على نوع العمود وسياق المقارنة.
بالنسبة لتصفية التاريخ والوقت، غالبًا ما يكون استخدام تاريخ البدء والحدود الحصرية لليوم التالي أو الشهر التالي أكثر وضوحًا.
SELECT id, title, created_at
FROM posts
WHERE created_at >= '2026-01-01'
AND created_at < '2026-02-01';يعرض هذا الاستعلام جميع المنشورات التي تم إنشاؤها خلال شهر يناير 2026 عندما يتضمن create_at قيم الوقت.
MySQL الأسماء المستعارة
الأسماء المستعارة تعطي أسماء مؤقتة للأعمدة أو الجداول في نتيجة الاستعلام. إنها تجعل المخرجات أسهل في القراءة وتجعل الاستعلامات المعقدة أقصر.
يتم إنشاء العمود aliases بشكل شائع باستخدامAS.
SELECT name AS full_name,
email AS contact_email
FROM users;يُرجع هذا الاستعلام عمود الاسم بالاسم الكامل وعمود البريد الإلكتروني بالاسم contact_email.
الأسماء المستعارة مفيدة جدًا مع الوظائف المجمعة.
SELECT COUNT(*) AS total_users
FROM users;بدلاً من إرجاع اسم عمود مثل COUNT(*)، تستخدم النتيجة الاسم القابل للقراءة Total_users.
يكون الجدول aliases مفيدًا عندما يحتوي الاستعلام على أسماء جداول طويلة أو عندما يتضمن عدة جداول.
SELECT u.id, u.name, u.email
FROM users AS u
WHERE u.status = 'active';في هذا الاستعلام،شهو اسم مستعار لجدول المستخدمين. وهذا يجعل الاستعلام أقصر ويجهز النمط المستخدم في الصلات والتقارير المعقدة.
تعد الكلمة الأساسية AS اختيارية في العديد من حالات الأسماء المستعارة، ولكن استخدامها يمكن أن يجعل فهم SQL سهل الاستخدام للمبتدئين.
كيف تعمل مفاهيم MySQL SQL معًا
في التطبيقات الحقيقية، عادةً لا يتم استخدام مفاهيم MySQL هذه بشكل منفصل. قد يقوم استعلام واحد بتحديد أعمدة محددة، وتصفية السجلات، واستخدام AND وOR، وفرز النتائج، وتطبيق LIMIT، واستخدام aliases.
SELECT id,
title,
status,
created_at
FROM posts
WHERE status IN ('published', 'scheduled')
AND title LIKE '%mysql%'
ORDER BY created_at DESC
LIMIT 10;يعرض هذا الاستعلام آخر 10 منشورات تم نشر حالتها أو جدولتها ويحتوي عنوانها على mysql.
تجمع التقارير غالبًا بين شروط WHERE والوظائف المجمعة.
SELECT COUNT(*) AS paid_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS average_order_value,
MIN(total_amount) AS smallest_order,
MAX(total_amount) AS largest_order
FROM orders
WHERE status = 'paid'
AND created_at >= '2026-01-01'
AND created_at < '2026-02-01';يلخص هذا الاستعلام الطلبات المدفوعة خلال شهر يناير 2026. فهو يقوم بإحصاء الطلبات، وحساب إجمالي الإيرادات، ومتوسط قيمة الطلب، وأصغر أمر مدفوع، وأكبر أمر مدفوع.
تعديل البيانات commands يعتمد أيضًا بشكل كبير على الظروف.
UPDATE posts
SET status = 'archived'
WHERE status = 'draft'
AND created_at < '2025-01-01';يقوم هذا الاستعلام بأرشفة مسودات المشاركات القديمة. قبل تشغيل UPDATE مثل هذا، يجب على المطور أولاً اختبار حالة WHERE باستخدام SELECT.
SELECT id, title, status, created_at
FROM posts
WHERE status = 'draft'
AND created_at < '2025-01-01';توضح هذه الخطوة الأكثر أمانًا السجلات التي ستتأثر قبل تنفيذ UPDATE.
الأخطاء الشائعة التي يجب تجنبها في MySQL SQL
العديد من أخطاء SQL ليست أخطاء في بناء الجملة. إنها أخطاء منطقية. قد يتم تشغيل الاستعلام بنجاح ولكنه يعرض بيانات غير صحيحة أو يغير صفوفًا أكثر من المتوقع.
تشمل الأخطاء الشائعة ما يلي:
استخدام UPDATE أو DELETE بدون جملة WHERE.
استخدام = NULL بدلاً من IS NULL.
استخدام SELECT * عند الحاجة إلى عدد قليل من الأعمدة فقط.
نسيان الأقواس عند الجمع بين AND وOR.
استخدام LIMIT بدون ORDER BY لترقيم الصفحات.
بافتراض أن BETWEEN يستبعد قيمة البداية أو النهاية، على الرغم من أنها شاملة.
استخدام LIKE '%keyword%' على جداول كبيرة جدًا دون مراعاة الأداء.
عدم استخدام aliases للأعمدة المحسوبة، مما يجعل استخدام أسماء النتائج أكثر صعوبة.
تتطلب كتابة SQL الموثوقة تفكيرًا دقيقًا في البيانات والظروف والنتيجة المتوقعة والآثار الجانبية المحتملة.
أفضل الممارسات لكتابة استعلامات MySQL
استعلامات MySQL الجيدة قابلة للقراءة وآمنة ومحددة. يجب أن يوضح الاستعلام نيته بوضوح للمطور التالي الذي يقرأه.
اكتب الكلمات الرئيسية SQL بأحرف كبيرة لسهولة القراءة.
حدد فقط الأعمدة التي تحتاجها بدلاً من استخدام SELECT * في كل مكان.
استخدم دائمًا WHERE بعناية مع UPDATE وDELETE.
استخدم aliases للقيم المجمعة وأسماء الجداول الطويلة.
استخدم الأقواس عند الخلط بين AND وOR.
استخدم IS NULL وIS NOT NULL لعمليات التحقق من NULL.
استخدم ORDER BY مع LIMIT عندما يكون ترتيب النتائج مهمًا.
اختبر شروط UPDATE وDELETE المحفوفة بالمخاطر باستخدام SELECT أولاً.
استخدم prepared statements أو منشئي استعلام إطار العمل عند العمل مع إدخال المستخدم.
هذه الممارسات بسيطة، لكنها تمنع العديد من مشاكل الإنتاج الحقيقية.
الاستنتاج
MySQL SQL هي مهارة أساسية لمطوري backend ومطوري البرامج الكاملة ومحللي البيانات وأي شخص يعمل مع التطبيقات التي تعتمد على database. نقطة البداية الأكثر أهمية هي فهم كيفية قراءة البيانات باستخدام SELECT، وتصفيتها باستخدام WHERE، وفرزها باستخدام ORDER BY، والتحكم في المنطق باستخدام AND وOR وNOT.
بعد ذلك، يجب على المطورين فهم كيفية إدراج السجلات وتحديثها وحذفها بأمان. تعمل هذه البيانات على تغيير database مباشرةً، لذا يجب كتابتها دائمًا مع مراعاة الشروط وأنواع البيانات والنتائج المتوقعة.
تجعل الوظائف المجمعة مثل MIN() وMAX() وCOUNT() وSUM() وAVG() MySQL مفيدة للتقارير ولوحات المعلومات. تعمل عوامل التشغيل مثل LIKE وIN وBETWEEN على جعل عملية التصفية أكثر قوة، بينما تجعل aliases النتائج أكثر وضوحًا وأسهل في الاستخدام.
من خلال إتقان أساسيات MySQL، يمكنك بناء الأساس اللازم لموضوعات database الأكثر تقدمًا مثل الصلات وindexes والتجميع والاستعلامات الفرعية والمعاملات وتصميم database وتحسين الاستعلام.

