بناء جملة SQL

تُحدد وتُصان قواعد لغة برمجة SQL من قِبل اللجنة الفرعية 32 التابعة لمنظمة ISO/IEC كجزء من معيار ISO/IEC 9075. هذا المعيار غير متاح مجانًا. ورغم وجوده، فإن شيفرة SQL لا يمكن نقلها بالكامل بين أنظمة قواعد البيانات المختلفة دون تعديلات.

عناصر اللغة

يوPدأتيهـ جلأusهـ{يوPدأتيهـ جouنترySهـتي جلأusهـ{Sهـتي صoصuلأتأناoن= صoصuلأتأناoن+1هـxصرهـssأناoندبليوحهـRهـ جلأusهـ{دبليوحهـRهـ نأمهـ=يوSأهـxصرهـssأناoنصرهـدأناجأتهـ؛}إفادة{\displaystyle \left.{\begin{array}{rl}\scriptstyle {\mathtt {UPDATE~clause}}&\{{\mathtt {UPDATE\ country}}\\\scriptstyle {\mathtt {SET~clause}}&\{{\mathtt {SET\ population=~}}\overbrace {\mathtt {population+1}} ^{\mathtt {expression}}\\\scriptstyle {\mathtt {WHERE~clause}}&\{{\mathtt {WHERE\ \underbrace {{name=}\overbrace {'USA'} ^{expression}} _{predicate};}}\end{array}}\right\}{\scriptstyle {\texttt {statement}}}}
مخطط يوضح عدة عناصر من لغة SQL التي تُكوّن عبارة واحدة. هذا يُضيف واحدًا إلى عدد سكان الولايات المتحدة الأمريكية في جدول الدول.

تنقسم لغة SQL إلى عدة عناصر لغوية، بما في ذلك:

  • الكلمات المفتاحية هي كلمات مُعرَّفة في لغة SQL. وهي إما محجوزة (مثل `<sub>1</sub>` SELECTو` COUNT< YEARsub>2</sub>`)، أو غير محجوزة (مثل `<sub>3</sub>` ASCو` DOMAIN< KEYsub>4</sub>`). قائمة الكلمات المحجوزة في SQL .
  • المعرّفات هي أسماء لكائنات قاعدة البيانات، مثل الجداول والأعمدة والمخططات. لا يجوز أن يكون المعرّف مساويًا لكلمة محجوزة، إلا إذا كان معرّفًا محددًا. المعرّفات المحددة هي تلك المحصورة بين علامتي اقتباس مزدوجتين. يمكن أن تحتوي على أحرف غير مدعومة عادةً في معرّفات SQL، ويمكن أن تكون مطابقة لكلمة محجوزة، على سبيل المثال، عمود باسم YEARيُحدد كـ "YEAR".
    • في MySQL ، تُستخدم علامات الاقتباس المزدوجة كفاصل للنصوص النصية افتراضيًا. تفعيل ansi_quotesوضع SQL يفرض سلوك SQL القياسي. ويمكن استخدامها أيضًا بغض النظر عن هذا الوضع باستخدام علامات التنصيص المائلة (`) `YEAR`.
  • العبارات ، وهي مكونات أساسية للعبارات والاستعلامات. (في بعض الحالات، تكون هذه العبارات اختيارية.) [ 1 ]
  • التعبيرات ، التي يمكنها إنتاج قيم عددية ، أو جداول تتكون من أعمدة وصفوف من البيانات
  • المسندات ، التي تحدد الشروط التي يمكن تقييمها إلى منطق SQL ثلاثي القيم (3VL) (صحيح/خطأ/غير معروف) أو قيم الحقيقة المنطقية ، وتستخدم للحد من تأثيرات العبارات والاستعلامات، أو لتغيير تدفق البرنامج.
  • الاستعلامات ، التي تسترجع البيانات بناءً على معايير محددة. هذا عنصر مهم في لغة SQL .
  • البيانات ، التي قد يكون لها تأثير مستمر على المخططات والبيانات، أو قد تتحكم في المعاملات ، أو تدفق البرنامج ، أو الاتصالات، أو الجلسات ، أو التشخيصات.
    • تتضمن عبارات SQL أيضًا فاصلة منقوطة (";") لإنهاء العبارة. على الرغم من أنها ليست مطلوبة في جميع المنصات، إلا أنها تُعرَّف كجزء أساسي من قواعد لغة SQL.
  • يتم تجاهل المسافات البيضاء غير المهمة بشكل عام في عبارات واستعلامات SQL، مما يسهل تنسيق كود SQL من أجل سهولة القراءة.

المشغلون

المشغلوصفمثال
=يساويAuthor='Alcott'
<>لا يساوي (تقبل العديد من اللهجات أيضًا !=)Dept<>'Sales'
>أكبر منHire_Date>'2012-01-31'
<أقل منBonus<50000.00
>=أكبر من أو يساويDependents>=2
<=أقل من أو يساويRate<=0.05
[NOT]BETWEEN[SYMMETRIC]ضمن نطاق شامل. تقوم الدالة SYMMETRIC بعكس حدود النطاق إذا كان الأول أعلى من الثاني.CostBETWEEN100.00AND500.00
[NOT]LIKE[ESCAPE]يبدأ بنمط حرفيFull_NameLIKE'Will%'
يحتوي على نمط حرفيFull_NameLIKE'%Will%'
[NOT]INيساوي أحد القيم الممكنة المتعددةDeptCodeIN(101,103,209)
IS[NOT]NULLمقارنة بالقيمة الفارغة (البيانات المفقودة)AddressISNOTNULL
IS[NOT]TRUEأوIS[NOT]FALSEاختبار القيمة المنطقيةPaidVacationISTRUE
ISNOTDISTINCTFROMيساوي القيمة أو كلاهما فارغ (بيانات مفقودة)DebtISNOTDISTINCTFROM-Receivables
ASتُستخدم لتغيير اسم العمود عند عرض النتائجSELECTemployeeASdepartment1

وقد تم اقتراح أو تنفيذ عوامل تشغيل أخرى في بعض الأحيان، مثل عامل التشغيل skyline (لإيجاد تلك الصفوف التي ليست "أسوأ" من غيرها).

يحتوي SQL على caseالتعبير الذي تم تقديمه في SQL-92 . في شكله الأكثر عمومية، والذي يسمى "حالة البحث" في معيار SQL:

CASE WHEN n > 0 THEN 'positive' WHEN n < 0 THEN 'negative' ELSE 'zero' END

يختبر SQL WHENالشروط بالترتيب الذي تظهر به في المصدر. إذا لم يحدد المصدر تعبيرًا ELSE، فإن SQL يستخدم افتراضيًا ELSE NULL. يمكن أيضًا استخدام صيغة مختصرة تسمى "الحالة البسيطة".

CASE n WHEN 1 THEN 'واحد' WHEN 2 THEN 'اثنان' ELSE 'لا أستطيع العد إلى هذا الحد' END

يستخدم هذا التركيب مقارنات المساواة الضمنية، مع التحذيرات المعتادة للمقارنة مع NULL .

هناك شكلان مختصران CASEللتعبيرات الخاصة: COALESCEو NULLIF.

يُرجع التعبير COALESCEقيمة أول معامل غير فارغ، يتم العثور عليه من خلال العمل من اليسار إلى اليمين، أو قيمة فارغة إذا كانت جميع المعاملات تساوي قيمة فارغة.

COALESCE ( x1 , x2 )

يعادل ما يلي:

CASE WEN x1 IS NOT NULL THEN x1 ELSE x2 END

يحتوي التعبير NULLIFعلى معاملين ويعيد قيمة NULL إذا كان للمعاملين نفس القيمة، وإلا فإنه يأخذ قيمة المعامل الأول.

NULLIF ( x1 , x2 )

يعادل

CASE WEN x1 = x2 THEN NULL ELSE x1 END

تعليقات

يسمح معيار SQL بصيغتين للتعليقات : -- commentالأولى تنتهي بسطر جديد ، والثانية /* comment */يمكن أن تمتد على عدة أسطر.

استفسارات

تُعدّ الاستعلامات العملية الأكثر شيوعًا في لغة SQL، وتستخدم SELECTعبارةً تعريفيةً SELECTلاسترجاع البيانات من جدول واحد أو أكثر ، أو من تعبيرات. SELECTلا تُحدث الاستعلامات القياسية أي تأثيرات دائمة على قاعدة البيانات. بينما قد تُحدث بعض التطبيقات غير القياسية للاستعلامات SELECTتأثيرات دائمة، مثل SELECT INTOالصيغة المُستخدمة في بعض قواعد البيانات. [ 2 ]

تسمح الاستعلامات للمستخدم بوصف البيانات المطلوبة، تاركةً نظام إدارة قواعد البيانات (DBMS) لتنفيذ التخطيط والتحسين وإجراء العمليات المادية اللازمة لإنتاج تلك النتيجة كما يختار.

يتضمن الاستعلام قائمة بالأعمدة المراد تضمينها في النتيجة النهائية، وعادةً ما تلي الكلمة المفتاحية مباشرةً . يمكن استخدام SELECTعلامة النجمة (" *")، أو ما يُعرف بـ " الحرف البدلSELECT "، لتحديد أن الاستعلام يجب أن يُرجع جميع أعمدة الجداول المستعلم عنها. يُعدّ الاستعلام الأكثر تعقيدًا في لغة SQL، حيث يتضمن كلمات مفتاحية اختيارية وعبارات تتضمن ما يلي:

  • يشير هذا FROMالبند إلى الجدول (الجداول) المراد استرداد البيانات منها. [ 3 ] : 400 يمكن أن يتضمن هذا FROMالبند بنودًا فرعية اختيارية JOINلتحديد قواعد ربط الجداول.
  • يتضمن هذا WHEREالشرط شرطًا يُقيّد الصفوف التي تُرجعها الاستعلام. WHEREويحذف هذا الشرط جميع الصفوف من مجموعة النتائج التي لا يتحقق فيها الشرط. [ 3 ] : 402
  • تقوم هذه GROUP BYالعبارة بتقسيم الصفوف ذات القيم المشتركة إلى مجموعة أصغر من الصفوف. تُستخدم غالبًا مع دوال التجميع في لغة SQL أو لحذف الصفوف المكررة من مجموعة النتائج. تُطبق هذه العبارة قبل عبارة أخرى.GROUP BYWHEREGROUP BY
  • يتضمن هذا HAVINGالشرط دالة تُستخدم لتصفية الصفوف الناتجة عنه GROUP BY. ولأنها تعمل على نتائج الشرط GROUP BY، يمكن استخدام دوال التجميع في HAVINGدالة الشرط.
  • تحدد هذه ORDER BYالعبارة العمود (أو الأعمدة) التي سيتم استخدامها لفرز البيانات الناتجة، واتجاه الفرز (تصاعديًا أو تنازليًا). وبدون هذه ORDER BYالعبارة، يكون ترتيب الصفوف التي تُرجعها استعلامات SQL غير محدد.
  • تؤدي الكلمة DISTINCTالمفتاحية إلى إزالة البيانات المكررة. [ 4 ]
  • تحدد هذه OFFSETالعبارة عدد الصفوف التي يجب تخطيها قبل البدء في إرجاع البيانات.
  • تحدد هذه FETCH FIRSTالعبارة عدد الصفوف المطلوب إرجاعها. بعض قواعد بيانات SQL لديها بدائل غير قياسية، مثل LIMITأو TOP.ROWNUM

تخضع بنود الاستعلام لترتيب تنفيذ محدد، [ 5 ] يُشار إليه بالرقم الموجود على الجانب الأيمن. وهو كالتالي:

SELECT <columns>5.
FROM <table>1.
WHERE <predicate on rows>2.
GROUP BY <columns>3.
HAVING <predicate on groups>4.
ORDER BY <columns>6.
OFFSET7.
FETCH FIRST8.

يُظهر المثال التالي استعلامًا SELECTيُعيد قائمة بالكتب باهظة الثمن. يسترجع الاستعلام جميع الصفوف من جدول الكتب التي تحتوي على قيمة في عمود السعر أكبر من 100.00. يتم ترتيب النتائج تصاعديًا حسب العنوان . تشير علامة النجمة (*) في قائمة التحديد إلى ضرورة تضمين جميع أعمدة جدول الكتب في مجموعة النتائج.

SELECT * FROM Book WHERE price > 100 . 00 ORDER BY title ;

يوضح المثال أدناه استعلامًا عن جداول متعددة، وتجميعها، ودمجها، من خلال إرجاع قائمة بالكتب وعدد المؤلفين المرتبطين بكل كتاب.

حدد عنوان الكتاب ( Book.title ) وعدد المؤلفين ( Authors ) من جدول Book، وانضم إلى جدول Book_author بناءً على رقم ISBN الخاص بـ Book.isbn = Book_author.isbn ، ثم قم بتجميع النتائج حسب عنوان الكتاب ( Book.title ).

قد يكون الناتج على النحو التالي:

العنوان المؤلفون ---------------------- ------- أمثلة ودليل SQL 4 متعة لغة SQL 1 مقدمة إلى لغة SQL 2 عيوب لغة SQL 1

بافتراض أن isbn هو اسم العمود المشترك الوحيد بين الجدولين وأن عمودًا باسم title موجود فقط في جدول Book ، يمكن إعادة كتابة الاستعلام أعلاه بالشكل التالي:

حدد العنوان ، وعدد المؤلفين ( * ) من جدول الكتب، مع ربط جدول مؤلفي الكتب ، وتجميع النتائج حسب العنوان .

ومع ذلك، فإن العديد من البائعين إما لا يدعمون هذا النهج، أو يشترطون اتباع اصطلاحات معينة لتسمية الأعمدة لكي تعمل عمليات الربط الطبيعية بشكل فعال.

تتضمن لغة SQL عوامل تشغيل ودوال لحساب القيم المخزنة. تسمح SQL باستخدام التعبيرات في قائمة SELECT لعرض البيانات، كما في المثال التالي، الذي يُرجع قائمة بالكتب التي يزيد سعرها عن 100.00 مع عمود إضافي باسم sales_tax يحتوي على قيمة ضريبة المبيعات المحسوبة بنسبة 6% من السعر .

استعلم عن رقم ISBN ، والعنوان ، والسعر ، وقيمة ضريبة المبيعات ( السعر * 0.06 ) من جدول الكتب حيث السعر أكبر من 100.00 ، ورتب النتائج حسب العنوان .

الاستعلامات الفرعية

يمكن تداخل الاستعلامات بحيث تُستخدم نتائج استعلام ما في استعلام آخر عبر عامل علائقي أو دالة تجميع. يُعرف الاستعلام المتداخل أيضًا بالاستعلام الفرعي . في حين أن عمليات الربط وغيرها من عمليات الجداول توفر بدائل أسرع حسابيًا في كثير من الحالات، فإن استخدام الاستعلامات الفرعية يُنشئ تسلسلًا هرميًا في التنفيذ قد يكون مفيدًا أو ضروريًا. في المثال التالي، تستقبل دالة التجميع AVGنتيجة استعلام فرعي كمدخل:

حدد رقم ISBN ، والعنوان ، والسعر من جدول الكتب حيث يكون السعر أقل من ( حدد متوسط ​​( السعر ) من جدول الكتب ) ورتب النتائج حسب العنوان ؛

يمكن للاستعلام الفرعي استخدام القيم من الاستعلام الخارجي، وفي هذه الحالة يُعرف باسم الاستعلام الفرعي المرتبط .

منذ عام 1999، يسمح معيار SQL WITHباستخدام عبارات للاستعلامات الفرعية، أي الاستعلامات الفرعية المسماة، والتي تُعرف عادةً بتعبيرات الجداول المشتركة (وتُسمى أيضًا تحليل الاستعلامات الفرعية ). يمكن أن تكون تعبيرات الجداول المشتركة تكرارية من خلال الإشارة إلى نفسها؛ وتتيح الآلية الناتجة اجتياز الأشجار أو الرسوم البيانية (عند تمثيلها كعلاقات)، وبشكل عام حسابات النقطة الثابتة .

الجدول المشتق

الجدول المشتق هو استخدام استعلام فرعي SQL في عبارة FROM. بمعنى آخر، الجدول المشتق هو استعلام فرعي يمكن تحديده أو ربطه بجدول آخر. تتيح وظيفة الجدول المشتق للمستخدم الإشارة إلى الاستعلام الفرعي كجدول. يُشار إلى الجدول المشتق أحيانًا باسم عرض مضمن أو استعلام فرعي .

في المثال التالي، تتضمن عبارة SQL ربطًا بين جدول "الكتب" الأصلي وجدول "المبيعات" المشتق. يسجل هذا الجدول المشتق معلومات مبيعات الكتب المرتبطة باستخدام رقم ISBN للربط مع جدول "الكتب". ونتيجة لذلك، يُضيف الجدول المشتق أعمدةً إضافيةً إلى مجموعة النتائج (عدد الكتب المباعة والشركة التي باعت الكتب).

استعلم عن رقم ISBN الخاص بالكتاب ، وعنوانه ، وسعره ، وعدد الأصناف المباعة ، واسم الشركة من جدول الكتب ( Book ) واربطه بجدول المبيعات ( Book_Sales ) مع جدول الكتب (Book_Sales ) واجمع النتائج حسب اسم الشركة ورقم ISBN . ثم اربط النتائج بجدول المبيعات ( Sales ) بناءً على تطابق رقم ISBN الخاص بالكتاب ( Book ) .

المنطق الصفري أو ثلاثي القيم (3VL)

يُمكّن مفهوم القيمة الفارغة (Null) لغة SQL من التعامل مع المعلومات المفقودة في النموذج العلائقي. تُعدّ كلمة NULLNull كلمة محجوزة في SQL، وتُستخدم لتحديد علامة Null الخاصة. تُؤدي المقارنات مع Null، مثل المساواة (=) في عبارات WHERE، إلى قيمة منطقية غير معروفة (Unknown). في عبارات SELECT، تُعيد SQL النتائج التي تُرجع عبارة WHERE الخاصة بها القيمة True فقط؛ أي أنها تستبعد النتائج التي تُرجع القيمة False، وكذلك النتائج التي تكون قيمتها Unknown.

إلى جانب القيمتين "صحيح" و"خطأ"، تُضيف القيمة "غير المعروف" الناتجة عن المقارنات المباشرة مع القيمة "فارغة" جزءًا من المنطق ثلاثي القيم إلى لغة SQL. وتتوافق جداول الحقيقة التي تستخدمها SQL لعمليات AND وOR وNOT مع جزء مشترك من منطق كلين ولوكاسيفيتش ثلاثي القيم (والذي يختلف في تعريف الاستلزام، إلا أن SQL لا تُعرّف مثل هذه العملية). [ 6 ]

p و qص
حقيقيخطأ شنيعمجهول
qحقيقيحقيقيخطأ شنيعمجهول
خطأ شنيعخطأ شنيعخطأ شنيعخطأ شنيع
مجهولمجهولخطأ شنيعمجهول
p أو qص
حقيقيخطأ شنيعمجهول
qحقيقيحقيقيحقيقيحقيقي
خطأ شنيعحقيقيخطأ شنيعمجهول
مجهولحقيقيمجهولمجهول
p = qص
حقيقيخطأ شنيعمجهول
qحقيقيحقيقيخطأ شنيعمجهول
خطأ شنيعخطأ شنيعحقيقيمجهول
مجهولمجهولمجهولمجهول
qليس q
حقيقيخطأ شنيع
خطأ شنيعحقيقي
مجهولمجهول

مع ذلك، توجد خلافات حول التفسير الدلالي للقيم الفارغة (Null) في لغة SQL نظرًا لطريقة التعامل معها خارج نطاق المقارنات المباشرة. كما هو موضح في الجدول أعلاه، NULL = NULLتُرجع المقارنات المباشرة بين قيمتين فارغتين في SQL (مثلاً) قيمة منطقية غير معروفة. يتوافق هذا مع التفسير القائل بأن القيمة الفارغة لا تملك قيمة (ولا تنتمي إلى أي مجال بيانات)، بل هي مجرد عنصر نائب أو "علامة" للمعلومات المفقودة. مع ذلك، يُنتهك مبدأ عدم تساوي قيمتين فارغتين فعليًا في مواصفات SQL للمعاملين ` UNIONand` INTERSECT، اللذين يُحددان القيم الفارغة ببعضها البعض. [ 7 ] بالتالي، قد تُنتج عمليات المجموعات هذه في SQL نتائج لا تُمثل معلومات مؤكدة، على عكس العمليات التي تتضمن مقارنات صريحة مع القيمة الفارغة (مثل تلك الموجودة في WHEREعبارة `a` المذكورة أعلاه). في اقتراح كود لعام 1979 (الذي اعتُمد أساسًا في SQL92)، يُبرر هذا التناقض الدلالي بالقول إن إزالة التكرارات في عمليات المجموعات تحدث "بمستوى تفصيل أقل من اختبار المساواة في تقييم عمليات الاسترجاع". [ 6 ] ومع ذلك، خلص أستاذ علوم الحاسوب رون فان دير ميدن إلى أن "التناقضات في معيار SQL تعني أنه لا يمكن إسناد أي دلالات منطقية بديهية لمعالجة القيم الفارغة في SQL". [ 7 ]

بالإضافة إلى ذلك، ولأن عوامل SQL تُرجع قيمة Unknown عند مقارنة أي شيء مع Null مباشرةً، فإن SQL توفر مُسندَي مقارنة خاصين بـ Null: IS NULLو IS NOT NULLلاختبار ما إذا كانت البيانات Null أم لا. [ 8 ] لا تدعم SQL التحديد الكمي الشامل بشكل صريح ، ويجب عليها حسابه كتحديد كمي وجودي منفي . [ 9 ] [ 10 ] [ 11 ] يوجد أيضًا <row value expression> IS DISTINCT FROM <row value expression>عامل المقارنة الثابت، الذي يُرجع TRUE ما لم يكن كلا المعاملين متساويين أو كلاهما NULL. وبالمثل، يُعرَّف IS NOT DISTINCT FROM على أنه NOT (<row value expression> IS DISTINCT FROM <row value expression>). كما قدم SQL:1999BOOLEAN نوع البيانات ، الذي يمكنه، وفقًا للمعيار، أن يحمل قيم Unknown إذا كان قابلاً للتصفير. عمليًا، تُنفِّذ العديد من الأنظمة (مثل PostgreSQL ) نوع البيانات BOOLEAN Unknown كـ BOOLEAN NULL، حيث ينص المعيار على أنه "يمكن استخدام NULL BOOLEAN و UNKNOWN بشكل تبادلي ليعنيا الشيء نفسه تمامًا". [ 12 ] [ 13 ]

معالجة البيانات

لغة معالجة البيانات (DML) هي مجموعة فرعية من لغة SQL تُستخدم لإضافة البيانات وتحديثها وحذفها:

INSERT INTO example ( column1 , column2 , column3 ) VALUES ( 'test' , 'N' , NULL );
مثال على التحديث : SET column1 = 'القيمة المحدثة' WHERE column2 = 'N' ;
احذف من المثال حيث العمود 2 = 'N' ؛
  • تُستخدم عملية دمج البيانات (MERGE) لدمج بيانات جداول متعددة. وهي تجمع بين عنصري الإدراج (INSERT) والتحديث (UPDATE) . وقد تم تعريفها في معيار SQL:2003؛ قبل ذلك، كانت بعض قواعد البيانات توفر وظائف مماثلة عبر صيغة مختلفة، تُسمى أحيانًا " upsert ".
دمج في جدول_الاسم باستخدام مرجع_الجدول على ( الشرط ) عند التطابق ، قم بتحديث العمود 1 = القيمة1 [ ، العمود2 = القيمة2 ... ] عند عدم التطابق، قم بإدراج ( العمود1 [ ، العمود2 ... ] ) القيم ( القيمة1 [ ، القيمة2 ... ] )

ضوابط المعاملات

تتضمن المعاملات، إن وجدت، عمليات DML:

  • START TRANSACTION(أو BEGIN WORK، أو BEGIN TRANSACTION، اعتمادًا على لهجة SQL) يشير إلى بداية معاملة قاعدة البيانات ، والتي إما أن تكتمل بالكامل أو لا تكتمل على الإطلاق.
  • SAVE TRANSACTION(أو SAVEPOINT) يحفظ حالة قاعدة البيانات عند النقطة الحالية في المعاملة
إنشاء جدول tbl_1 ( id int ); إدراج في tbl_1 ( id ) القيم ( 1 ); إدراج في tbl_1 ( id ) القيم ( 2 ); تأكيد التغييرات ; تحديث tbl_1 تعيين id = 200 حيث id = 1 ; حفظ نقطة id_1upd ; تحديث tbl_1 تعيين id = 1000 حيث id = 2 ; التراجع إلى id_1upd ; تحديد id من tbl_1 ;
  • COMMITيجعل جميع تغييرات البيانات في المعاملة دائمة.
  • ROLLBACKيتجاهل هذا الأمر جميع التغييرات التي طرأت على البيانات منذ آخر COMMITعملية تنفيذ ROLLBACK، تاركًا البيانات كما كانت قبل تلك التغييرات. وبمجرد COMMITاكتمال العملية، لا يمكن التراجع عن التغييرات التي طرأت عليها.

COMMITوإنهاء ROLLBACKالمعاملة الحالية وتحرير أقفال البيانات. في حال عدم وجود START TRANSACTIONعبارة مشابهة، فإن دلالات لغة SQL تعتمد على التطبيق. يوضح المثال التالي معاملة تحويل أموال تقليدية، حيث يتم سحب مبلغ من حساب وإضافته إلى حساب آخر. إذا فشلت عملية السحب أو الإضافة، يتم التراجع عن المعاملة بالكامل.

بدء المعاملة ؛ تحديث الحساب ، تعيين المبلغ = المبلغ - 200 حيث رقم الحساب = 1234 ؛ تحديث الحساب ، تعيين المبلغ = المبلغ + 200 حيث رقم الحساب = 2345 ؛إذا كانت الأخطاء تساوي صفرًا ، فقم بالتنفيذ ؛ إذا كانت الأخطاء لا تساوي صفرًا ، فقم بالتراجع .

تعريف البيانات

تتولى لغة تعريف البيانات (DDL) إدارة بنية الجداول والفهارس. وتشمل العناصر الأساسية في لغة تعريف البيانات عبارات CREATEو ALTERو RENAMEو DROPو TRUNCATE.

  • CREATEيقوم بإنشاء كائن (جدول، على سبيل المثال) في قاعدة البيانات، على سبيل المثال:
إنشاء جدول مثال ( العمود 1 عدد صحيح ، العمود 2 نص ( 50 العمود 3 تاريخ غير فارغ ، المفتاح الأساسي ( العمود 1 ، العمود 2 ) 
  • ALTERيقوم بتعديل بنية كائن موجود بطرق مختلفة، على سبيل المثال، إضافة عمود إلى جدول موجود أو قيد، على سبيل المثال:
ALTER TABLE example ADD column4 INTEGER DEFAULT 25 NOT NULL ;
  • TRUNCATEيحذف هذا الأمر جميع البيانات من جدول بسرعة فائقة، حيث يحذف البيانات الموجودة داخل الجدول وليس الجدول نفسه. وعادةً ما يستلزم ذلك عملية تأكيد لاحقة (COMMIT)، أي أنه لا يمكن التراجع عنه (لا تُكتب البيانات في سجلات النظام للتراجع عنها لاحقًا، على عكس أمر الحذف DELETE).
مثال على أمر TRUNCATE TABLE ؛
  • DROPيحذف كائنًا في قاعدة البيانات، وعادةً ما يكون ذلك بشكل لا رجعة فيه، أي لا يمكن التراجع عنه، على سبيل المثال:
مثال على حذف الجدول ؛

أنواع البيانات

يُحدد كل عمود في جدول SQL نوع (أنواع) البيانات التي قد يحتويها. يتضمن معيار ANSI SQL أنواع البيانات التالية. [ 14 ]

سلاسل الأحرف وسلاسل الأحرف الوطنية

  • CHARACTER(n)(أو ): سلسلة نصية ثابتة العرض مكونة من n حرفًا، مع إضافة مسافات حسب الحاجةCHAR(n)
  • CHARACTER VARYING(n)(أو ): سلسلة نصية متغيرة العرض بحد أقصى n حرفًاVARCHAR(n)
  • CHARACTER LARGE OBJECT(n[K|M|G|T])(أو ): كائن حرفي كبير بحد أقصى حجم n حرفًا من [K|M|G|T]CLOB(n[K|M|G|T])
  • NATIONAL CHARACTER(n)(أو ): سلسلة نصية ثابتة العرض تدعم مجموعة أحرف دوليةNCHAR(n)
  • NATIONAL CHARACTER VARYING(n)(أو ): سلسلة ذات عرض متغيرNVARCHAR(n)NCHAR
  • NATIONAL CHARACTER LARGE OBJECT(n[K|M|G|T])(أو ): رمز وطني، كائن كبير بحد أقصى حجم n حرفًا من [K|M|G|T]NCLOB(n[K|M|G|T])

بالنسبة لأنواع البيانات CHARACTER LARGE OBJECTو NATIONAL CHARACTER LARGE OBJECT، فإن المضاعفات K(1024M(1048576 ) ،G (1 073 741 824 ) و T(يمكن استخدام (1 099 511 627 776 ) بشكل اختياري عند تحديد الطول.

ثنائي

  • BINARY(n)سلسلة ثنائية ذات طول ثابت، أقصى طول لها n .
  • BINARY VARYING(n)(أو ): سلسلة ثنائية ذات طول متغير، أقصى طول لها n .VARBINARY(n)
  • BINARY LARGE OBJECT(n[K|M|G|T])(أو ): كائن ثنائي كبير ذو طول أقصى n [K|M|G|T] .BLOB(n[K|M|G|T])

بالنسبة BINARY LARGE OBJECTلنوع البيانات، فإن المضاعفات K(1024M(1048576 ) ،G (1 073 741 824 ) و T(يمكن استخدام (1 099 511 627 776 ) بشكل اختياري عند تحديد الطول.

منطقي

  • BOOLEAN

يمكن لنوع البيانات BOOLEANتخزين القيم TRUEو FALSE.

عددي

  • INTEGER(أو INTSMALLINTوBIGINT
  • FLOAT، REALوDOUBLE PRECISION
  • NUMERIC(precision, scale)أوDECIMAL(precision, scale)
  • DECFLOAT(precision)

على سبيل المثال، العدد 123.45 له دقة 5 ومقياس 2. الدقة عدد صحيح موجب يحدد عدد الأرقام المعنوية في نظام العد (ثنائي أو عشري). المقياس عدد صحيح غير سالب. يشير المقياس 0 إلى أن العدد صحيح. بالنسبة لعدد عشري ذي مقياس S، فإن قيمته العددية الدقيقة هي القيمة الصحيحة للأرقام المعنوية مقسومة على 10S .

توفر لغة SQL الدوال اللازمة CEILINGلتقريب FLOORالقيم العددية. (من الدوال الشائعة الخاصة بموردين محددين: TRUNC(Informix، DB2، PostgreSQL، Oracle، وMySQL) و ROUND(Informix، SQLite، Sybase، Oracle، PostgreSQL، Microsoft SQL Server، وMimer SQL).

زمني (التاريخ والوقت)

  • DATE: لقيم التاريخ (مثلاً 2011-05-03).
  • TIME: لقيم الوقت (على سبيل المثال 15:51:36).
  • TIME WITH TIME ZONE: نفس الشيء TIME، ولكن مع تضمين تفاصيل حول المنطقة الزمنية المعنية.
  • TIMESTAMPهذا عبارة عن قيمة واحدة DATEتجمع TIMEبين قيمتين (مثلاً 2011-05-03 15:51:36.123456).
  • TIMESTAMP WITH TIME ZONE: نفس الشيء TIMESTAMP، ولكن مع تضمين تفاصيل حول المنطقة الزمنية المعنية.

يمكن استخدام دالة SQL EXTRACTلاستخراج حقل واحد (الثواني، على سبيل المثال) من قيمة تاريخ ووقت أو فاصل زمني. ويمكن استدعاء تاريخ/وقت النظام الحالي لخادم قاعدة البيانات باستخدام دوال مثل ` CURRENT_DATEdate` و` CURRENT_TIMESTAMPtime` و` LOCALTIMEtime` و` time` . ( من LOCALTIMESTAMPالدوال الشائعة الخاصة بموردين محددين: TO_DATE` date` و` time ...TO_TIMETO_TIMESTAMPYEARMONTHDAYHOURMINUTESECONDDAYOFYEARDAYOFMONTHDAYOFWEEK

الفاصل الزمني (التاريخ والوقت)

  • YEAR(precision)عدد من السنوات
  • YEAR(precision) TO MONTHعدد من السنوات والأشهر
  • MONTH(precision)عدد من الأشهر
  • DAY(precision)عدد من الأيام
  • DAY(precision) TO HOURعدد من الأيام والساعات
  • DAY(precision) TO MINUTEعدد من الأيام والساعات والدقائق
  • DAY(precision) TO SECOND(scale)عدد الأيام والساعات والدقائق والثواني
  • HOUR(precision)عدد من الساعات
  • HOUR(precision) TO MINUTEعدد من الساعات والدقائق
  • HOUR(precision) TO SECOND(scale)عدد الساعات والدقائق والثواني
  • MINUTE(precision)عدد من الدقائق
  • MINUTE(precision) TO SECOND(scale)عدد من الدقائق والثواني

التحكم في البيانات

تُخوّل لغة التحكم في البيانات (DCL) المستخدمين الوصول إلى البيانات ومعالجتها. وتتمثل عبارتاها الرئيسيتان فيما يلي:

  • GRANTيُخوّل هذا الأمر مستخدمًا واحدًا أو أكثر لتنفيذ عملية أو مجموعة من العمليات على كائن ما.
  • REVOKEيلغي منحة، والتي قد تكون المنحة الافتراضية.

مثال:

GRANT SELECT , UPDATE ON example TO some_user , another_user ;إلغاء الاستعلام SELECT ، تحديث على المثال من بعض المستخدمين ، مستخدم آخر ؛

مراجع

  1. معيار ANSI/ISO/IEC الدولي (IS). لغة قواعد البيانات SQL - الجزء 2: الأساسيات (SQL/Foundation). 1999.
  2. "عبارة SELECT - INTO (Transact-SQL)" . learn.microsoft.com . 2023-05-23 . تم الاطلاع عليه بتاريخ 2024-11-07 .
  3. 1 2 جون داكيت؛ إيمي ستون؛ كريس أولمان (2022). PHP وMySQL: تطوير مواقع الويب من جانب الخادم . هوبوكين، نيو جيرسي : جون وايلي وأولاده، المحدودة. ISBN 978-1-119-14921-7LCCN 2021951353. مؤرشف من الأصل بتاريخ 30 أبريل 2025. تم الاطلاع عليه بتاريخ 28 أبريل 2026 . 
  4. ليون، ألكسيس ؛ ليون، ماثيوز (1999). "إزالة التكرارات - SELECT باستخدام DISTINCT". SQL: مرجع شامل . نيودلهي: تاتا ماكجرو هيل للتعليم (نُشر عام 2008). ص 143. ISBN  9780074637081تم الاطلاع عليه بتاريخ 21-10-2015 . [...] الكلمة المفتاحية DISTINCT [...] تزيل التكرارات من مجموعة النتائج.
  5. "ما هو ترتيب تنفيذ استعلام SQL؟ - Designcise.com" . www.designcise.com . 29 يونيو 2015. تاريخ الاسترجاع: 4 فبراير 2018 .
  6. 1 2 هانز-يواكيم، ك. (2003). "القيم الفارغة في قواعد البيانات العلائقية وإجابات المعلومات المؤكدة". دلالات قواعد البيانات. ورشة العمل الدولية الثانية، قلعة داغشتول، ألمانيا، 7-12 يناير 2001. أوراق منقحة . سلسلة محاضرات في علوم الحاسوب. المجلد 2582. الصفحات 119-138 . doi : 10.1007/3-540-36596-6_7 . ISBN   978-3-540-00957-3تمت أرشفة هذا النص من النسخة الأصلية في 7 يوليو 2018.
  7. 1 2 رون فان دير ميدن، "المناهج المنطقية للمعلومات غير الكاملة: دراسة استقصائية" في تشوميكي، جان؛ ساكه، غونتر (محرران) منطق قواعد البيانات ونظم المعلومات ، دار نشر كلوير الأكاديمية، رقم ISBN 978-0-7923-8129-7، ص 344
  8. ISO/IEC. ISO/IEC 9075-2:2003، "SQL/Foundation" . ISO/IEC.
  9. نيغري، م.؛ بيلاغاتي، ج.؛ سباتيلا، ل. (فبراير 1989). "دلالات ومشاكل التحديد الكمي الشامل في لغة SQL" . مجلة الكمبيوتر . 32 (1): 90-91 . doi : 10.1093/comjnl/32.1.90 .
  10. فراتاركانجيلي، كلاوديو (1991). "تقنية للقياس الكمي الشامل في لغة SQL" . سجل ACM SIGMOD . 20 (3): 16-24 . doi : 10.1145/126482.126484 . S2CID 18326990 . 
  11. كواش، جلال (2004) التحديد الكمي المركب في لغة الاستعلامات المهيكلة (SQL): دليل تعليمي باستخدام حساب التفاضل والتكامل العلائقي ؛ مجلة الحوسبة في تدريس الرياضيات والعلوم، ISSN 0731-9258 ، المجلد 23، العدد 2، 2004، AACE، نورفولك، فيرجينيا. Thefreelibrary.com 
  12. سي. ديت (2011). لغة SQL ونظرية العلاقات: كيفية كتابة كود SQL دقيق . دار نشر أورايلي ميديا، ص 83. ISBN  978-1-4493-1640-2.
  13. ISO/IEC 9075-2:2011 §4.5
  14. "ISO/IEC 9075-1:2016: تكنولوجيا المعلومات - لغات قواعد البيانات - SQL - الجزء 1: الإطار (SQL/Framework)" .