تهدف هذه المقالة إلى إتقان عبارة SELECT في قاعدة بيانات MySQL بسرعة ودقة.
بناء الجملة الأساسي لعبارة SELECT في MySQL هو:
ما يلي هو جزء مقتبس:
حدد [STRAIGHT_JOIN] [SQL_SMALL_RESULT]
[SQL_BIG_RESULT] [عالية_الأولوية]
[مميز|مميز|الكل]
Select_list
[داخل خيارات التصدير {OUTFILE|DUMPFILE} 'اسم_الملف']
[من مراجع الجدول [أين_التعريف]
[المجموعة حسب col_name،...] [يحتوي على تعريف_المكان]
[الترتيب حسب {unsighed_integer|col_name|formura} [ASC|DESC]،...]
[LIMIT [إزاحة،] صفوف] [اسم الإجراء_الإجراء]]
كما يتبين من بناء الجملة الأساسي هذا، فإن أبسط عبارة SELECT هي SELECT Select_list. في الواقع، باستخدام أبسط عبارة SELECT، يمكنك أيضًا إكمال العديد من الوظائف التي تتوقعها. أولاً، يمكنك استخدامها لتنفيذ أي عملية تدعمها MySQL على سبيل المثال: SELECT 1+1، سيُرجع 2؛ ثانيًا، يمكنك أيضًا استخدامه لتعيين قيم للمتغيرات. في PHP، باستخدام هذه الوظيفة في عبارة SELECT، يمكنك استخدام وظائف MySQL بحرية لتنفيذ مهام مختلفة برنامج PHP العمليات وتعيين القيم للمتغيرات. في كثير من الحالات، ستجد أن MySQL لديها العديد من الوظائف الأقوى من PHP.
STRAIGHT_JOIN، وSQL_SMALL_RESULT، وSQL_BIG_RESULT، وHIGH_PRIORITY هي امتدادات MySQL لـ ANSI SQL92. إذا قام المحسن بربط الجداول بترتيب غير مثالي، فإن استخدام STRAIGHT_JOIN يمكن أن يؤدي إلى تسريع الاستعلام.
SQL_SMALL_RESULT وSQL_BIG_RESULT عبارة عن مجموعة من الكلمات الأساسية النسبية. ويجب استخدامها مع GROUP BY أو DISTINCT أو DISTINCTROW. يخبر SQL_SMALL_RESULT المُحسِّن أن النتيجة ستكون صغيرة جدًا، مما يتطلب من MySQL استخدام جدول مؤقت لتخزين الجدول النهائي بدلاً من استخدام الفرز؛ صنع جدول مؤقت.
ستعطي HIGH_PRIORITY أولوية أعلى لـ SELECT من العبارة التي تقوم بتحديث الجدول، مما يسمح لها بإجراء استعلام سريع ذي أولوية.
إن استخدام الكلمات الرئيسية الأربع المذكورة أعلاه هو في الواقع غامض إلى حد ما. لحسن الحظ، في معظم الحالات، يمكننا اختيار عدم استخدام هذه الكلمات الرئيسية الأربع في MySQL.
يوفر DISTINCT وDISTINCTROW التصفية الأساسية ولكن المفيدة لمجموعة النتائج التي يتم إرجاعها بواسطة الاستعلام. أي أن مجموعة النتائج تحتوي على صفوف مميزة فقط. ما يجب ملاحظته هنا هو أنه بالنسبة للكلمات الرئيسية DISTINCT و DISTINCTROW، تكون القيم الخالية متساوية بغض النظر عن عدد القيم NULL الموجودة، يتم تحديد واحدة فقط. استخدام ALL لا لزوم له. ليس له أي تأثير على توليد مجموعة النتائج.
في خيارات التصدير {OUTFILE|DUMPFILE} 'اسم_الملف'، يكتب مجموعة النتائج إلى ملف. تم إنشاء الملف على مضيف الخادم ولا يمكن أن يكون موجودًا بالفعل. بناء جملة جزء Export_options من العبارة هو نفسه المستخدم في عبارات FIELDS وLINES في عبارة LOAD DATAINFILE، وسنناقشها بالتفصيل في مقالة MySQL Advanced_LOAD DATA. الفرق بين الكلمات الأساسية OUTFILE وDUMPFILE هو أنه تتم كتابة سطر واحد فقط في الملف، بدون أي عمود أو نهاية سطر.
قائمة الاختيار: يمكن أن تحتوي على واحد أو أكثر من المحتويات التالية:
1. "*" تعني جميع الأعمدة مرتبة حسب ترتيب إنشاء الجدول.
2. قائمة بأسماء الأعمدة مرتبة حسب الترتيب الذي يطلبه المستخدم.
3. يمكنك استخدام اسم مستعار لاستبدال اسم العمود، بالشكل التالي: اسم العمود كـ column_heading.
4. التعبيرات (أسماء الأعمدة، والثوابت، والدوال، أو أي مجموعة من أسماء الأعمدة، والثوابت، والدوال المرتبطة بعوامل حسابية أو معاملات بت).
5. الوظائف الداخلية أو الوظائف المجمعة.
6. أي مجموعة من العناصر المذكورة أعلاه.
FROM: تحديد الجداول المستخدمة في أمر SELECT. هذا العنصر مطلوب بشكل عام ما لم تكن قائمة التحديد لا تحتوي على أسماء الأعمدة (على سبيل المثال، فقط الثوابت والتعبيرات الحسابية وما إلى ذلك). إذا كان هناك جداول متعددة في إدخال الجدول، فافصل بينها بفواصل. ترتيب الجداول التي تلي الكلمة الأساسية FROM لا يؤثر على النتائج.
يمكن إعطاء أسماء الجداول أسماء مستعارة ذات صلة لتوضيح التعبيرات. بناء الجملة هنا هو tbl_name [AS] alias_name. على سبيل المثال:
حدد t1.name,t2.salary من الموظف كـ t1,info كـ t2 حيث t1.name=t2.name هو نفسه حدد t1.name,t2.salary من الموظف t1,info t2 حيث t1.name= t2.name مكافئ تمامًا.
يجب أن تستخدم جميع المراجع الأخرى إلى الجدول، مثل "حيث العبارات" و"البنود"، أسماء مستعارة، ولا يمكن أن تبدأ الأسماء المستعارة برقم.
تحدد عبارة المكان شروط البحث، وطريقة تطبيقها في عبارات الإدراج والتحديث والحذف هي تمامًا نفس طريقة تطبيقها في عبارات التحديد. تتبع مصطلحات البحث الكلمة الرئيسية حيث. إذا أراد المستخدم استخدام شروط بحث متعددة في عبارة، فيمكن ربطها بواسطة و أو أو. الصيغة الأساسية لشروط البحث هي [ليس] تعبير مقارنة_المشغل [ليس] مثل التعبير "match_string"؛ ] اسم العمود join_operator column_name [ليس] تعبير منطقي.
و: يستخدم للربط بين شرطين وإرجاع النتيجة عندما يكون كلا الشرطين صحيحًا. عند استخدام عوامل تشغيل منطقية متعددة في نفس العبارة، يكون للعامل and الأسبقية دائمًا، ما لم يستخدم المستخدم الأقواس لتغيير ترتيب العمليات.
أو: يستخدم للربط بين شرطين وإرجاع النتيجة عندما يكون أي من الشرطين صحيحًا. عندما يتم استخدام عوامل تشغيل منطقية متعددة في نفس العبارة، فإن عامل التشغيل أو عادة ما يعمل بعد عامل التشغيل و. بالطبع يمكن للمستخدم استخدام الأقواس لتغيير ترتيب العمليات.
بين: كلمة أساسية تستخدم لتحديد الحد الأدنى للنطاق، وتليها قيمة الحد الأعلى للنطاق. النطاق الذي يتضمن @val بين x وy القيمتين الأولى والأخيرة. إذا كانت القيمة الأولى المحددة بعد ما بين أكبر من القيمة الثانية، فلن يقوم الاستعلام بإرجاع أي صفوف.
column_name: اسم العمود المستخدم في المقارنة. عندما ينشأ الغموض، تأكد من تحديد اسم الجدول حيث يوجد العمود.
Compare_operator: عامل المقارنة. انظر الجدول أدناه:
فيما يلي أجزاء الاقتباس:
معنى الرمز
= يساوي
> أكبر من
< أقل من
>= أكبر من أو يساوي
<= أقل من أو يساوي
!= لا يساوي
<> لا يساوي
عند مقارنة بيانات نوع char وvarchar، فإن "<" تعني أقرب إلى رأس الأبجدية، و">" تعني أقرب إلى نهاية الأبجدية. بشكل عام، تكون الأحرف الصغيرة أكبر من الأحرف الكبيرة، والأحرف الكبيرة أكبر من الأرقام، لكن هذا قد يعتمد على ترتيب المقارنة لنظام التشغيل على الخادم.
يتم تجاهل المسافات الزائدة عند المقارنة. على سبيل المثال، "Dirk" يساوي "Dirk".
عند مقارنة التواريخ، فإن "<" تعني ما قبل و">" تعني ما بعد.
عند استخدام عوامل المقارنة لمقارنة بيانات الأحرف والتاريخ والوقت، يجب وضع كافة البيانات بين علامات الاقتباس.
التعبير: قد يكون اسم عمود، أو ثابتًا، أو دالة، أو أي مجموعة من أسماء الأعمدة أو الثوابت، ودالة متصلة بعوامل حسابية أو معاملات بت. يتم عرض العوامل الحسابية في الجدول التالي:
إليك المقتطف المقتبس:
معنى الرمز
+ علامة زائد
- علامة ناقص
* علامة الضرب
/ علامة القسمة
فارغة: تستخدم عند البحث عن قيمة فارغة.
مثل: الكلمة الأساسية، يمكنك استخدام like لـ char وvarchar وdatetime (باستثناء الثواني والميلي ثانية). في MySQL، يمكن أيضًا استخدام like للتعبيرات الرقمية.
عندما يبحث المستخدمون عن بيانات التاريخ والوقت، فمن الأفضل استخدام الكلمة الأساسية مثل، لأن سجل التاريخ والوقت الكامل يحتوي على مجموعة متنوعة من مكونات التاريخ. على سبيل المثال، يضيف المستخدم قيمة "9:20" إلى العمود Arrival_time، لكنه لا يجدها في الجملة حيث Arrival_time = "9:20" لأن MySQL تقوم بتحويل البيانات المدخلة إلى "1 يناير 1900 9:20 صباحًا" . ومع ذلك، يمكن للجملة التي يكون فيها وقت الوصول مثل "%9:20%" العثور عليها.
تعبير منطقي: تعبير يُرجع قيمة "صحيحة" أو "خطأ".
match_string: سلسلة تتكون من أحرف وأحرف بدل، محاطة بعلامات اقتباس مفردة أو علامات اقتباس مزدوجة، هي نمط مطابق. يتم عرض أحرف البدل في الجدول التالي:
وفيما يلي جزء مقتبس:
معنى الرمز
% سلسلة مكونة من 0 أحرف أو أكثر
_ أي حرف واحد
لا: نفي أي تعبير منطقي أو كلمة رئيسية،
مثل مثل، فارغة، بين، الخ.
يتم استخدام المجموعة بواسطة وعبارات في بيان التحديد،
من الممكن تقسيم الجدول إلى مجموعات وإرجاع المجموعات المطابقة لشرط الجملة.
بناء الجملة: بداية عبارة التحديد
تجميع حسب [الكل] complex_free_expression [,aggregate_free_expression]*
[وجود شروط_البحث]
في نهاية عبارة التحديد
: يحدد المجموعة التي سيتم تقسيم الجدول إليها. إذا تم تضمين دالة مجمعة في عنصر الجدول المحدد، فسيتم حساب القيمة الإجمالية لكل مجموعة. ويتم عرض نتائج هذه الإجماليات في أعمدة جديدة بدلاً من الصفوف الجديدة. يمكن للمستخدمين الرجوع إلى أعمدة الإجمالي الجديدة هذه في جملة "الملكية". يمكن استخدام وظائف التجميع مثل المتوسط والعدد والحد الأقصى والدقيقة والمجموع في قائمة التحديد قبل التجميع حسب. يمكن تجميع الجداول حسب أي مجموعة من الأعمدة.
الكل: امتداد Transact-SQL الذي يتضمن كافة المجموعات في النتائج، حتى تلك المستثناة بواسطة عبارة Where. إذا تم استخدام شرط وجود في نفس الوقت، سيتم إلغاء معنى الكل.
Collect_free_expression: تعبير لا يحتوي على دالة تجميعية، يسمح امتداد Transact-SQL بالتجميع حسب تعبير بدون دالة تجميعية أثناء التجميع حسب اسم العمود.
وجود: قم بتعيين الشروط للمجموعة حسب العبارة، على غرار حيث يتم تحديد الشروط لعبارة التحديد. يمكن أن تتضمن شروط البحث عن التعبيرات الوظيفية المجمعة. بخلاف ذلك، فإن معايير البحث الخاصة به هي نفس معايير البحث.
الترتيب حسب: ترتيب النتائج حسب العمود. يمكن الرجوع إلى الأعمدة الناتجة عن طريق التحديد بواسطة أسماء الأعمدة أو الأسماء المستعارة للأعمدة أو مواضع الأعمدة. على سبيل المثال: حدد id كـ myid، واسم كـ myname من مجموعة mytable بواسطة id، وحدد id كـ myid، واسم كـ myname من مجموعة mytable بواسطة myid، وحدد id كـ myid، واسم كـ myname من مجموعة mytable بـ 1. هذه الجمل الثلاثة كاملة يعادل. وبالطبع لا نتفق مع الاستخدام الثالث الذي سيكون له تأثير سيء على سهولة قراءة البرنامج. للفرز بترتيب تنازلي، أضف الكلمة الأساسية DESC إلى جملة الترتيب حسب قبل اسم العمود الذي تريد فرزه. الافتراضي هو ترتيب تصاعدي، ولكن يمكنك تحديده بشكل صريح باستخدام الكلمة الأساسية ASC.
جملة الحد: تستخدم لتحديد عدد الصفوف التي يتم إرجاعها بواسطة عبارة التحديد. يأخذ الحد معلمتين رقميتين. إذا تم إعطاء معلمتين، تحدد الأولى إزاحة الصف الأول المراد إرجاعه، وتحدد الثانية الحد الأقصى لعدد الصفوف المراد إرجاعها. إزاحة الصف الأولي هي 0 (وليس 1). إذا تم إعطاء وسيطة، فهذا يشير إلى الحد الأقصى لعدد الصفوف التي يتم إرجاعها عند الإزاحة 0. بمعنى آخر، الحد 5 والحد 0,5 متساويان تمامًا.
أما بالنسبة لمعنى الكلمة الأساسية للإجراء، فيبدو أنها تدعم الإجراءات المخزنة، ويبدو أن MySQL نفسها لا تدعم الإجراءات المخزنة.