أوامر SQL في لمحة
تنقسم أوامر SQL إلى مجموعات قليلة حسب وظيفتها. يسرد الجدول الأوامر التي ستستخدمها أكثر من غيرها، وكل قسم أدناه يشغّل واحدًا منها.
| الأمر | المجموعة | ماذا يفعل |
|---|---|---|
CREATE TABLE | DDL | يعرّف جدولًا جديدًا وأعمدته |
ALTER TABLE | DDL | يضيف عمودًا أو يعيد تسميته، أو يعيد تسمية جدول |
DROP TABLE | DDL | يحذف جدولًا مع كل صفوفه |
INSERT | DML | يضيف صفوفًا جديدة |
UPDATE | DML | يغيّر القيم في صفوف موجودة |
DELETE | DML | يحذف صفوفًا |
SELECT | DQL | يقرأ الصفوف، ويصفّيها بـ WHERE ويرتّبها بـ ORDER BY |
BEGIN, COMMIT, ROLLBACK | TCL | يجمع التغييرات بحيث تنجح معًا أو تفشل معًا |
DDL هي لغة تعريف البيانات، وDML لغة معالجة البيانات، وDQL لغة الاستعلام عن البيانات، وTCL لغة التحكم في المعاملات. الأسماء أقل أهمية من التقسيم نفسه: DDL تغيّر شكل قاعدة البيانات، وDML تغيّر ما بداخلها.
أمر CREATE TABLE: تعريف جدول
يسمّي CREATE TABLE الجدول ويسرد أعمدته مع أنواعها وقواعدها. كل أمر آخر في هذه الصفحة يحتاج إلى جدول ليعمل عليه.
تشرح صفحة CREATE TABLE قواعد مثل NOT NULL وUNIQUE وDEFAULT.
أمر INSERT: إضافة الصفوف
يضيف INSERT INTO صفًا واحدًا أو عدة صفوف. اذكر الأعمدة، ثم القيم بالترتيب نفسه.
امتلأ العمود id تلقائيًا: العمود من نوع INTEGER PRIMARY KEY يحصل على الرقم التالي عندما تتركه. المزيد عن ذلك في INSERT.
أمر SELECT: قراءة الصفوف
SELECT هو الأمر الذي ستكتبه أكثر من أي أمر آخر. اختر الأعمدة، وصفِّ الصفوف بـ WHERE، ورتّبها بـ ORDER BY.
لا تعود إلا الصفوف التي تجتاز شرط WHERE، والدرجة الأعلى أولًا. راجع أساسيات SELECT وWHERE للتفاصيل.
أمر UPDATE: تعديل الصفوف
يضع UPDATE قيمًا جديدة في صفوف موجودة بالفعل. يحدّد شرط WHERE الصفوف المقصودة، وإذا حذفته تتغيّر كل الصفوف.
عندما لا تكون متأكدًا مما يطابقه شرط WHERE، شغّله أولًا ضمن SELECT. تعرض صفحة UPDATE أنماطًا أخرى.
أمر DELETE: حذف الصفوف
يحذف DELETE FROM الصفوف التي تطابق شرط WHERE الخاص به. ومثل UPDATE، يؤثّر في كل الصفوف إذا غاب الشرط.
اختفى صف Chen وبقيت الصفوف الأخرى كما هي. راجع DELETE.
أمرا ALTER TABLE وDROP TABLE: تعديل جدول أو حذفه
يغيّر ALTER TABLE جدولًا موجودًا دون فقدان صفوفه. أما DROP TABLE فيحذف الجدول بالكامل.
يبدأ العمود الجديد بالقيمة NULL في الصفوف الموجودة حتى تملأه. تسرد صفحة ALTER وDROP TABLE ما يسمح به SQLite.
أمر JOIN: ربط الجداول
يقرأ JOIN صفوفًا من جدولين في الوقت نفسه، ويطابق بينها عبر عمود مشترك.
ليس لدى Boris أي تسجيل، لذا يستبعده INNER JOIN. أما LEFT JOIN فيُبقيه، مع مقرر فارغ.
أمر GROUP BY: تلخيص الصفوف
يدمج GROUP BY الصفوف التي تشترك في قيمة واحدة في صف واحد، وتلخّص دالة تجميع مثل COUNT أو AVG كل مجموعة.
تتعمّق صفحتا دوال التجميع وGROUP BY وHAVING أكثر.
أوامر BEGIN وCOMMIT وROLLBACK: تجميع التغييرات
تجعل المعاملة عدة تغييرات تُحسب كتغيير واحد. يحتفظ COMMIT بها جميعًا، ويتراجع ROLLBACK عنها جميعًا.
ثُبّت التحويل وتُراجع عن التغيير الثاني، لذا ينتهي رصيد Ada عند 70 ورصيد Boris عند 80. تشرح صفحة المعاملات متى تستخدمها.
أين يختلف SQLite
الأوامر في هذه الصفحة من SQL القياسية، وما تتعلمه هنا ينفعك في MySQL وPostgreSQL. لكن الأمثلة القابلة للتشغيل مكتوبة لـ SQLite، وتتغير ثلاثة تفاصيل في قواعد البيانات الأكبر:
- عرض الجداول. تقرأ الأمثلة
sqlite_master، وهو جدول المخطط الخاص بـ SQLite. يستخدم MySQL الأمرSHOW TABLES، ويستخدم PostgreSQL العرضinformation_schema.tables(أو\dtداخلpsql). - المعرّفات التلقائية. في SQLite يرقّم العمود المعرّف بـ
INTEGER PRIMARY KEYالصفوف الجديدة تلقائيًا، ولهذا تحذف أمثلةINSERTالعمودid. أما MySQL فيحتاج إلىAUTO_INCREMENTعلى العمود، ويحتاج PostgreSQL إلى عمود هوية (GENERATED BY DEFAULT AS IDENTITY) أوSERIAL. - الصلاحيات وتغييرات المخطط. لا يوجد في SQLite الأمران
GRANTوREVOKE، لأن قاعدة بيانات SQLite ملف واحد بلا حسابات مستخدمين، ولا يستطيعALTER TABLEفيه تغيير نوع العمود.
الأسئلة الشائعة
ما أوامر SQL الأساسية؟
خمسة أوامر تغطّي معظم العمل اليومي: CREATE TABLE لتعريف جدول، وINSERT لإضافة الصفوف، وSELECT لقراءتها، وUPDATE لتعديلها، وDELETE لحذفها. ثم تأتي بعدها ALTER TABLE وDROP TABLE وJOIN وGROUP BY وأوامر المعاملات BEGIN وCOMMIT وROLLBACK.
ما الفرق بين DDL وDML؟
تغيّر DDL (لغة تعريف البيانات) بنية قاعدة البيانات: CREATE وALTER وDROP. وتغيّر DML (لغة معالجة البيانات) الصفوف الموجودة داخل الجداول: INSERT وUPDATE وDELETE. أما SELECT فيقرأ فقط، لذا يُذكر غالبًا وحده تحت اسم DQL.
هل أوامر SQL حساسة لحالة الأحرف؟
لا. تعمل SELECT وselect وSelect كلها. كتابة الكلمات المفتاحية بأحرف كبيرة عُرف يميّزها عن أسماء الجداول والأعمدة. لكن النص بين علامات التنصيص يُقارن حرفيًا، لذا 'Ada' و'ada' سلسلتان مختلفتان في SQLite ما لم تطلب مقارنة لا تفرّق بين الأحرف الكبيرة والصغيرة.
هل تعمل هذه الأوامر بالطريقة نفسها في MySQL وPostgreSQL؟
هذه الجمل من SQL القياسية ولها المعنى نفسه في الثلاثة، لذا فما تتعلمه هنا ينفعك هناك أيضًا. لكن الأمثلة القابلة للتشغيل مكتوبة لـ SQLite: لعرض الجداول نقرأ هنا sqlite_master، والمعرّفات التلقائية تحتاج إلى AUTO_INCREMENT في MySQL أو إلى عمود هوية في PostgreSQL، ولا يوجد في SQLite الأمران GRANT وREVOKE.