ورقة SQL المرجعية
آخر تحديث
الاستعلام عن البيانات (SELECT)
جوهر SQL: قراءة الصفوف من جدول واحد أو أكثر.
| العملية | الصياغة |
|---|---|
| تحديد كل الأعمدة | SELECT * FROM users; |
| تحديد أعمدة معيّنة | SELECT id, name FROM users; |
| إعادة تسمية عمود (اسم مستعار) | SELECT name AS full_name FROM users; |
| القيم المميّزة | SELECT DISTINCT country FROM users; |
| تحديد عدد الصفوف | SELECT * FROM users LIMIT 10; |
| التخطّي ثم التحديد (الترقيم) | SELECT * FROM users LIMIT 10 OFFSET 20; |
| عدّ الصفوف | SELECT COUNT(*) FROM users; |
تصفية الصفوف (WHERE)
تضييق نطاق الصفوف التي يُرجعها الاستعلام.
| العملية | الصياغة |
|---|---|
| المساواة / المقارنة | WHERE age >= 18 |
| شروط متعددة | WHERE age >= 18 AND country = 'US' |
| أيّ من الشرطين | WHERE role = 'admin' OR role = 'owner' |
| ضمن مجموعة | WHERE country IN ('US', 'CA', 'MX') |
| ضمن نطاق | WHERE price BETWEEN 10 AND 50 |
| مطابقة النمط | WHERE email LIKE '%@gmail.com' |
| فارغ / غير فارغ | WHERE deleted_at IS NULL |
| النفي | WHERE status NOT IN ('archived') |
الترتيب والتجميع
| العملية | الصياغة |
|---|---|
| ترتيب تصاعدي (افتراضي) | ORDER BY created_at |
| ترتيب تنازلي | ORDER BY created_at DESC |
| الترتيب حسب أعمدة متعددة | ORDER BY country, name DESC |
| تجميع الصفوف | SELECT country, COUNT(*) FROM users GROUP BY country; |
| تصفية المجموعات | GROUP BY country HAVING COUNT(*) > 100 |
عمليات الربط (Joins)
دمج الصفوف من جدولين على أساس عمود متطابق.
| نوع الربط | ما يُرجعه | الصياغة |
|---|---|---|
| INNER JOIN | الصفوف المتطابقة في كلا الجدولين فقط | FROM orders o INNER JOIN users u ON o.user_id = u.id |
| LEFT JOIN | كل صفوف الجدول الأيسر + المتطابقات (قيم فارغة لغير ذلك) | FROM users u LEFT JOIN orders o ON o.user_id = u.id |
| RIGHT JOIN | كل صفوف الجدول الأيمن + المتطابقات | FROM orders o RIGHT JOIN users u ON o.user_id = u.id |
| FULL OUTER JOIN | كل الصفوف من كلا الجانبين | FROM a FULL OUTER JOIN b ON a.id = b.a_id |
| CROSS JOIN | كل التركيبات الممكنة (الضرب الديكارتي) | FROM sizes CROSS JOIN colors |
| الربط الذاتي | جدول مرتبط بنفسه | FROM employees e JOIN employees m ON e.manager_id = m.id |
دوال التجميع
حساب قيمة واحدة عبر مجموعة من الصفوف.
| الدالة | وظيفتها |
|---|---|
COUNT(*) | عدد الصفوف |
COUNT(col) | عدد القيم غير الفارغة |
SUM(col) | مجموع عمود رقمي |
AVG(col) | القيمة المتوسطة |
MIN(col) / MAX(col) | أصغر / أكبر قيمة |
STRING_AGG(col, ',') | دمج القيم في سلسلة نصية (Postgres؛ GROUP_CONCAT في MySQL) |
دوال النوافذ
الحساب عبر مجموعة من الصفوف دون دمجها في صف واحد.
| الدالة | الصياغة |
|---|---|
| رقم الصف | ROW_NUMBER() OVER (ORDER BY score DESC) |
| الترتيب (مع فجوات) | RANK() OVER (PARTITION BY country ORDER BY score DESC) |
| الترتيب الكثيف | DENSE_RANK() OVER (ORDER BY score DESC) |
| المجموع التراكمي | SUM(amount) OVER (ORDER BY created_at) |
| الصف السابق / التالي | LAG(score) OVER (ORDER BY date), LEAD(score) OVER (...) |
تعديل البيانات (INSERT و UPDATE و DELETE)
| العملية | الصياغة |
|---|---|
| إدراج صف | INSERT INTO users (name, email) VALUES ('Ada', 'ada@x.com'); |
| إدراج عدة صفوف | INSERT INTO users (name) VALUES ('Ada'), ('Alan'); |
| تحديث الصفوف | UPDATE users SET active = true WHERE id = 1; |
| حذف الصفوف | DELETE FROM users WHERE active = false; |
| الإدراج أو التحديث (Postgres/SQLite) | INSERT ... ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name; |
تعريف الجداول (DDL)
| العملية | الصياغة |
|---|---|
| إنشاء جدول | CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL); |
| إضافة عمود | ALTER TABLE users ADD COLUMN age INTEGER; |
| حذف عمود | ALTER TABLE users DROP COLUMN age; |
| حذف جدول | DROP TABLE users; |
| إنشاء فهرس | CREATE INDEX idx_users_email ON users (email); |
| مفتاح خارجي | FOREIGN KEY (user_id) REFERENCES users (id) |
كل جملة وعبارة وعملية ربط في SQL قد تحتاجها، على صفحة واحدة. ورقة SQL المرجعية هذه هي مرجع سريع للاستعلام عن البيانات العلائقية وتعديلها - عبارات SELECT، وأنواع JOIN الأربعة، والتجميع، و DDL و DML التي تستخدمها لإنشاء الجداول وتحديثها.
الصياغة هنا هي صياغة ANSI SQL القياسية وتعمل في PostgreSQL و MySQL و SQLite و SQL Server ما لم يُذكر خلاف ذلك. انسخ ما تحتاجه، أو جرّب كل استعلام مباشرة في playground الخاص بـ SQL - دون الحاجة إلى تثبيت أي قاعدة بيانات.
الأسئلة الشائعة حول ورقة SQL المرجعية
هل ورقة SQL المرجعية هذه مجانية؟
هل تعمل مع MySQL و PostgreSQL و SQLite؟
SELECT و WHERE و JOIN و GROUP BY و DDL الموضّحة هنا هي صياغة ANSI SQL القياسية وتعمل بالطريقة نفسها في MySQL و PostgreSQL و SQLite و SQL Server. تختلف بعض الميزات المتقدمة باختلاف اللهجة - الإدراج أو التحديث (upsert) ودمج النصوص هما الأكثر شيوعًا - وتُشير تلك الصفوف إلى الفرق.ما الفرق بين INNER JOIN و LEFT JOIN؟
INNER JOIN الصفوف التي لها مطابقة في كلا الجدولين فقط. أمّا LEFT JOIN فيُرجع كل صف من الجدول الأيسر (الأول)، مع ملء القيمة NULL لأعمدة الجدول الأيمن عندما لا توجد مطابقة - وهذا مفيد عندما تريد كل المستخدمين حتى لو لم يكن لدى بعضهم طلبات.هل يمكنني التدرّب على أوامر SQL هذه عبر الإنترنت؟
SELECT إلى عمليات الربط ودوال النوافذ خطوة بخطوة.