سؤال

في أي مجموعة من المعلومات منظم رسميا، تبدأ في القراءة إما من البداية في النهاية، أو من حين لآخر من النهاية نحو البداية (عناوين الشارع، على سبيل المثال.) ولكن في SQL، حدد استعلامات تحديد ذلك، من أجل فهمه بشكل صحيح مما يعني أنه يجب أن تبدأ في الوسط، في الفقرة من. هذا يمكن أن يجعل استفسارات طويلة يصعب قراءتها، خاصة إذا كانت تحتوي على استعلامات محددة متداخلة.

عادة في البرمجة، عندما يبدو أن هناك شيئا ما يكون له أي معنى، هناك سبب تاريخي وراءه. بدءا من التحديد بدلا من ذلك من غير منطقي. هل يعرف أحد السبب في الأمر بهذه الطريقة؟

هل كانت مفيدة؟

المحلول

ال دخول SQL ويكيبيديا يصف بإيجاز بعض التاريخ:

خلال 1970s، قامت مجموعة في مختبر أبحاث IBM San Jose بتطوير نظام إدارة قواعد البيانات العلائقية SYSTEM R، بناء على النموذج الذي قدمه إدغار F. Codd في ورقته المؤثرة، "نموذجا أساسيا للبيانات لبنوك البيانات المشتركة الكبيرة". دونالد د. شامباني وريموند ف. بويس من IBM خلقت في وقت لاحق لغة الاستعلام الإنجليزية المهيكلة (تتمة) لمعالجة وإدارة البيانات المخزنة في النظام R. تم تغيير تتمة الاختصار لاحقا إلى SQL لأن "تتمة" كانت علامة تجارية لشركة Hawker Siddeley Aircraft في المملكة المتحدة.

الاسم الأصلي المذكورة صراحة إنجليزي, ، شرح بناء الجملة.

حفر أعمق قليلا، نجد تدفق ماتيتش لغة برمجة.

التدفق ماتيتش، المعروف أصلا باسم B-0 (إصدار لغة الأعمال 0)، ربما تكون أول لغة معالجة البيانات باللغة الإنجليزية. وبعد تم اختراعه وتحديده من قبل نعمة هوبر، وتطوير البديل التجاري بدأ في ريمنجتن راند في عام 1955 بالنسبة لمجلس الأمم المتحدة للعام 2009. بحلول عام 1958، كانت المترجم ووثائقها متاحة بشكل عام ويتم استخدامها تجاريا.

كان التدفق ماتيتش الإلهام وراء لغة مشتركة موجهة نحو العمل, ، واحدة من أقدم لغات البرمجة لا تزال في الاستخدام النشط. الحفاظ على تلك الروح، تتمة تم تصميمه مع بناء جملة يشبه اللغة الإنجليزية (1970s حديثا، مقارنة مع 1950s و 1960s).

في المنظور، لا تزال أنظمة البرمجة "الحديثة" إمكانية الوصول إلى قواعد البيانات باستخدام الأفكار القديمة في العمر

MULTIPLY PRICE BY QUANTITY GIVING COST.

نصائح أخرى

أعتقد أن الطريقة التي يتم بها تنظيم عبارة SQL تنظيم حاسة منطقية بقدر ما يتم تنظيم الجمل الإنجليزية. في الأساس

I WANT THIS
FROM HERE
WHERE WHAT I WANT MEETS THESE CRITERIA

لا أعتقد أنه من المنطقي، باللغة الإنجليزية على الأقل، أن أقول

FROM HERE
I WANT THIS
WHERE WHAT I WANT MEETS THESE CRITERIA  

يجب أن أختلف. SQL Grammar ليس من الداخل.

من النظرة الأولى جدا يمكنك معرفة ما إذا كان الاستعلام سيختار أو إدراج أو تحديث أو حذف البيانات (كل ما تبقى من SQL، على سبيل المثال DDL، حذفت عن قصد).


العودة إلى اختيارك بيان الارتباك: الهدف من SQL هو أن يكون تصريحي. وبعد مما يعني أنك تعبر عن ما تريد وليس كيف تريد ذلك. لذلك يجعل كل معنى أول الدولة ما تريد (قائمة السمات أنت تحديدجي) و ومن بعد قم بتوفير DBMS مع بعض المعلومات الإضافية حول المكان الذي يجب البحث عنه.

إن وضع جملة WHERE في النهاية يجعل شعورا كبيرا أيضا: تخيل قمعا، واسعة في القمة، ضيقة في الأسفل. من خلال إضافة جملة أين في نهاية العبارة، فإنك تخنق كمية البيانات الناتجة. تطبيق القيود على الاستعلام الخاص بك أي مكان آخر مما كان عليه في الأسفل سيتطلب المطور تحويل رأسه.


النظام عن طريق جملة في النهاية: بمجرد أن تمر البيانات عبر القمع، فرزه.

الانضمام (معايير الانضمام) ينتمي حقا إلى الفقرة من.

تجميع: تشغيل البيانات بشكل أساسي من خلال قمع قبل أن يحصل في قمع آخر.

SQL Sytax حلو. لا يوجد شيء من الداخل بعد ذلك. ربما هذا هو السبب في أن SQL تحظى بشعبية كبيرة حتى بعد عدة عقود. من السهل للغاية فهمه وله من الفشل. (على الرغم من أنني قد واجهت مرة واحدة عبارة SQL م 7 صفحات (A4-SIZE) التي استغرقتني بعض الوقت للحصول على رأسي.)

انها مصممة لتكون الإنجليزية مثل. أعتقد أن هذا هو السبب الرئيسي.

كملاحظة جانبية، أتذكر أن المعاينات الأولية ل LINQ كانت على غرارها مباشرة بعد ذلك (select ... from ...). تم تغيير ذلك في معاينات لاحقة لتكون لغة البرمجة مثل (حتى يذهب النطاق إلى أسفل). ذكر أندرز Hejlsberg على وجه التحديد هذه الحقيقة الغريرة حول SQL (مما يجعل IntelliSense أكثر صعوبة ولا تتطابق مع قواعد نطاق C #) كسبب اتخذته هذا القرار.

على أي حال، جيد أو سيء، فهذا هو وما بعد فوات الأوان لتغيير أي شيء.

ترتيب البنود في SQL هو منطقي تماما. تذكر أن SQL هي لغة إعلانية، حيث تعلن ما تريد وأرقام النظام أرخص أفضل طريقة للحصول عليه من أجلك. البند الأول هو جملة مختارة حيث تقوم بإدراج الأعمدة التي تريدها في جدول النتائج. هذا هو الغرض الأساسي من الاستعلام. بعد أن أعلن ما تريد أن تبدو النتيجة، أنت الحالة التالية حيث يجب أن تأتي البيانات. يقود الفقلة حيث يتم إرجاع كمية البيانات. لا توجد نقطة في التفكير في كيفية الحد من بياناتك إلا إذا كنت تعرف من أين تأتي من، لذلك يستمر بعد البند. تعمل المجموعة حسب جملة مع مشغلي التجميع في جملة Select ويمكن أن تذهب إلى أي مكان بعد البند الموجود من الأفضل من الأفضل التفكير في التجميع على البيانات المرتبطة، لذلك يأتي بعد جملة حيث. يجب أن يأتي جملة وجود جملة المجموعة. يعد الترتيب حسب البند حول كيفية تقديم البيانات ويمكن أن تذهب إلى أي مكان بعد الاختيار.

يتفق مع بقية بناء جملة SQL من وجود كل عبارة تبدأ بحرف (CREATE, DROP, UPDATE, ، إلخ.).

العيب الرئيسي لوجود قائمة الأعمدة أولا هو أنه غير مريح للإكمال التلقائي (كما ذكر Hejlsberg)، لكن هذا لم يكن مصدر قلق عندما تم تصميم بناء الجملة في السبعينيات.

كان بإمكاننا الحصول على أفضل ما في العالمين مع بناء جملة SELECT FROM SomeTable: ColumnA, ColumnB, ، ولكن بعد فوات الأوان لتغييره الآن.

أي حال، SQL SELECT أمر بيان ليس فريدا. يطابق بالضبط أنه من فهم قائمة الثعبان:

[(rec.a, rec.b) for rec in data where rec.a > 0]

تاريخ اللغة جانبا (على الرغم من أنه رائع) أعتقد أن الشيء الذي تفتقده هو أن SQL لا يدور حول إخبار النظام بما يجب عليك فعله، وكذلك ما هي النتيجة النهائية التي تريدها (وأرقى أن تفعل ذلك)

قائلا "انتقل إلى هناك إلى هذا الرف، والتقاط القبعات مع hatbands، والأقبعاء الزرقاء أولا، ثم الأخضر، ثم الأحمر، وإحضارها لي" يخبر النظام كيف للقيام بما تريد. إنه مبرمج التفكير حيث نفترض العامل هو غبي للغاية ويحتاج إلى تعليمات مفصلة بدقة.

يبدأ SQL بالنتيجة النهائية أولا، البيانات التي تريدها، ترتيب الأعمدة، إلخ. إنه منظور شخص بناء تقرير. "أريد الاسم الأول، اسم العائلة، ثم العمر، ثم ....." هذا هو بعد كل الغرض من تقديم الطلب. لذلك يبدأ في ذلك، شكل النتائج التي تريدها. ثم يذهب إلى المكان الذي تتوقعه أن تجد البيانات، ما هي المعايير التي تبحث عنها، النظام لتقديمه، إلخ.

بحيث يكون بديلا لتحديد التفاصيل الدقيقة ما تريد القيام به العامل، يفترض SQL أن النظام يعرف كيفية القيام بذلك، والمراكز أكثر على ما تريد.

لذا، بدلا من إخبار عاملك بالميذوبة بالذهاب إلى هنا، احصل على هذا، قم بإحضاره إلى هناك .. أشبه بقولها "أريد القبعات، من Rack 12، التي تحتوي على Hatbands، والرجاء فرزها بالون".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top