يقوم عامل التشغيل BETWEEN بإجراء اختبار منطقي لقيمة مقابل نطاق من القيم. يقوم عامل التشغيل بإرجاع TRUE إذا كانت القيمة في النطاق وFALSE إذا كانت القيمة ليست في النطاق. إذا كانت أي قيمة في النطاق فارغة (غير معروفة)، فستكون النتيجة فارغة.

عامل التشغيل EXISTS يعادل لغويًا عامل التشغيل ANY/SOME.

بناء جملة SQL 2003

حدد * حيث يقع التعبير بين الحد الأدنى والأعلى

الكلمات الدالة

حيث التعبير

يختبر التعبير العددي (مثل العمود) مقابل نطاق القيم الذي يقع بين الحد العلوي والحد الأدنى. بين الحد الأدنى والحدود العليا

يقارن التعبير مع Lower_bound و Upper_bound. تتضمن المقارنة قيمًا متطرفة، أي أنها مماثلة "حيث يكون التعبير [ليس] أكبر من أو يساوي الحد الأدنى وأقل من أو يساوي الحد الأعلى>.

قواعد عامة

يتم استخدام عامل التشغيل BETWEEN لاختبار تعبير مقابل نطاق من القيم. يمكن استخدام عامل التشغيل BETWEEN مع أي نوع بيانات باستثناء BLOB وCLOB وNCLOB وREF وARRAY.

على سبيل المثال، نحتاج إلى رؤية عدد الأعمال (title_id) التي تتراوح مبيعاتها منذ بداية العام (ytd_sales) بين 10000 و20000.

حدد title_id من العناوين حيث تتراوح مبيعات ytcL بين 10000 و20000

يتضمن عامل التشغيل BETWEEN حدود النطاق. في هذه الحالة ستتضمن النتيجة القيمتين 10000 و 20000. إذا كنت بحاجة إلى البحث دون تضمين حدود النطاق، فيجب عليك استخدام أكبر من (>) وأقل من (<).

حدد title_id من العناوين حيث ytd.sales > 10000 وytd_sales< 20000

يسمح لك عامل التشغيل NOT بالبحث خارج النطاق المحدد بواسطة عامل التشغيل BETWEEN. لذلك، يمكنك العثور على أرقام جميع الأعمال (title_id) التي لم يتم نشرها في عام 2003.

بعض المبرمجين مهتمون جدًا بكيفية استخدام الكلمة الأساسية AND في جمل WHERE. لمنع أي شخص ليس على دراية بالرمز من الاعتقاد بأن عامل التشغيل AND المستخدم في عبارة BETWEEN هو عامل تشغيل منطقي، يمكنك وضع جملة BETWEEN بأكملها بين قوسين.

حدد title_id من العناوين حيث (ytd_sales بين" 10000 و20000) وpubdate >= "1991-06-12 00:00:00.000"

الاختلافات في التنفيذ على منصات مختلفة

تدعم جميع الأنظمة الأساسية عامل التشغيل BETWEEN كما هو موضح أعلاه.

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

المدينون

رقم شهر سنة اسم مدينة عنوان دَين
0001 يوليو2012 إيفانوفستافروبولستافروبولسكايا، 150000
0002 ديسمبر2019 كونونوفالتتارزاجورودنايا، 254684068
0003 يمكن2013 يامشينميخائيلوفسكسيلسكايا، 48165840
0004 أغسطس2012 برينيستافروبولالوسطى، 1646580
... ... ... ... ... ... ...
9564 يمشي2015 أوليفاديمينوالدولية، 156435089
9565 اكتوبر2012 بافلوفاستافروبولفوكزالنايا، 3768059
9566 يناير2012 أوريوباميخائيلوفسكفونتانايا، 1951238
9567 شهر نوفمبر2017 فاليتوفالتتارفيزدنايا، 65789654

لنفترض أنك بحاجة إلى تحديد جميع المدينين لمدينة ستافروبول أو تاتاركا. قياسا على الإدخال السابق، سوف تحتاج إلى استخدام الطلب
يختار *
من المدينين
أين المدينة = "ستافروبول"
أو المدينة = "تاتاركا";

أولًا، الكود الناتج مرهق. باستخدام عوامل خاصة، يمكنك الحصول على تعليمات برمجية أكثر إحكاما.
يختار *
من المدينين
أين المدينة ("ستافروبول"، "تاتاركا")؛

ستكون النتيجة

دعونا نتبع منطق البرنامج. باستخدام الكلمات الرئيسية SELECT ومن وWHERE. ولكن بعد ذلك يظهر عامل التشغيل IN. يقوم بتعيين تسلسل الإجراءات للبرنامج - من الضروري عرض معلومات قاعدة البيانات الموجودة في عمود "المدينة". وللعرض تحتاج إلى تحديد البيانات "ستافروبول" و"تاتاركا".
اسمحوا لي أن أفكر في مثال تحتاج فيه إلى الاختيار بناءً على مبالغ معينة من الديون.
يختار *
من المدينين
أين الديون (435089, 789654, 684068);

وستكون النتيجة ما يلي

أولئك. يقوم مشغل IN بمسح قاعدة البيانات بأكملها بحثًا عن وجود معلمات تحديد المعلومات المحددة.
الوضع مختلف باستخدام مشغل خاص آخر بين. إذا كان المشغل فيتعتبر المعلومات مع المعلمات المحددة حصرا، ثم المشغل بين- بين نطاقات معينة. ومع ذلك، لا ينبغي إجراء مقارنة بين الترجمة الإنجليزية لهذا المشغل والغرض الفعلي منه. إذا قمت بتحديد بين 1 و5، فهذا لا يعني أن الأرقام 2 و3 و4 ستكون صحيحة، حيث تعتبر SQL هذا العامل بمثابة قيمة معينة يمكن العثور عليها بين القيم الأخرى. في المثال سوف يبدو مثل هذا.
يختار *
من المدينين
حيث تتراوح الديون بين 30000 و100000؛

ستكون النتيجة

أي أن SQL قبلت عامل التشغيل بينكأي قيمة في النطاق من 30000 إلى 100000 في عمود "الديون".
بالإضافة إلى تحديد النطاقات التقريبية من الناحية الرقمية، يمكنك تحديد النطاقات الأبجدية، والتي تعرض معلومات تحتوي على الأحرف الأولى من النطاق المحدد. ولكن هناك نقطة واحدة مثيرة للاهتمام هنا. لنقم بإنشاء الطلب التالي
يختار *
من المدينين
حيث الاسم بين "أنا" و"P"؛

ثم سيتم عرض البيانات التالية

سؤال منطقي: لماذا المدينون بالاسم الأخير صريني و صافلوفا؟ بعد كل شيء، يتم تضمين الأحرف الأولى من ألقابهم في النطاق المحدد!" يتم تضمين الحروف، ولكن الألقاب ليست كذلك. ويرجع ذلك إلى حقيقة أن لغة SQL في هذا النوع من الاستعلامات تقبل فقط طول البحث بمعنى آخر، طول السلسلة "P" في الاستعلام هو حرف واحد، وطول السلسلة "Preni" و"Pavlova" في قاعدة البيانات هو خمسة وسبعة، على التوالي اسم العائلة ". و vanov" يقع ضمن النطاق لأن النطاق يبدأ بـ و، كبداية، حرف واحد طويل.

في هذه المقالة سوف ننظر T-SQL بين العامل المنطقيسوف تتعلم ما هو هذا المشغل وكيفية استخدامه. سننظر أيضًا بالطبع في أمثلة لاستعلامات SQL باستخدام عامل التشغيل BETWEEN.

بين المشغل في T-SQL

بينهو عامل T-SQL Boolean الذي يحدد النطاق المراد اختباره. بمعنى آخر، باستخدام BETWEEN، يمكننا التحقق مما إذا كانت القيمة تقع ضمن نطاق معين.

بناء الجملة

test_expression[ ليس بينهما begin_expressionو end_expression

وصف الحجج

  • test_expression – تعبير يخضع لاختبار العضوية في النطاق من begin_expression إلى end_expression؛
  • begin_expression – تعبير يميز بداية النطاق؛
  • end_expression – تعبير يميز نهاية النطاق.

يجب أن يكون لجميع التعبيرات نفس نوع البيانات.

يقوم عامل التشغيل BETWEEN بإرجاع القيم التالية (منطقية):

  • TRUE - إذا كانت قيمة وسيطة test_expression أكبر من أو تساوي قيمة begin_expression، وأقل من أو تساوي قيمة end_expression، أي. يقع test_expression في النطاق من begin_expression إلى end_expression؛
  • خطأ - إذا كانت قيمة وسيطة test_expression ليست في النطاق من begin_expression إلى end_expression.

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

في هذه الحالة، سيرجع عامل التشغيل NOT BETWEEN TRUE إذا كانت قيمة وسيطة test_expression ليست في النطاق من begin_expression إلى end_expression.

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

المذكرة! أذكرك أنه يجب أن تتذكر دائمًا أن هناك قيمًا مثل NULL (هذه ليست فارغة أو 0، إنها غياب القيمة)، والتي تتم معالجتها بواسطة خادم SQL بطريقة خاصة؛ قد لا يكون استعلام SQL الذي يتضمن قيمًا فارغة واضحًا ولا يمكن التنبؤ به.

المذكرة! إذا كنت مبرمجًا مبتدئًا وترغب في تعلم لغة T-SQL من الصفر فأنصحك بقراءة كتابي “The T-SQL Programmer’s Way” الذي أتحدث فيه بالتفصيل عن أساسيات لغة T-SQL، و انتبه أيضًا إلى الإنشاءات المتقدمة.

بيانات المصدر للحصول على أمثلة

الخادم الخاص بي هو Microsoft SQL Server 2016 Express. على سبيل المثال، لنتخيل أن لدينا جدول TestTable ويحتوي على البيانات التالية ( قائمة السلع مع بيان الأسعار). أقوم بإضافة صفوف إلى الجدول باستخدام عبارة INSERT INTO.

إنشاء جدول إنشاء جدول TestTable( IDENTITY(1,1) NOT NULL, (100) NOT NULL, NULL) GO - إضافة صفوف إلى الجدول INSERT INTO TestTable(ProductName, Price) VALUES ("وحدة النظام"، 300)، ("الشاشة"، 200)، ("لوحة المفاتيح"، 100)، ("الماوس"، 50)، ("الطابعة"، 200)، ("الماسح الضوئي"، 150)، ("الهاتف"، 250)، (" Tablet" ، 300) GO - حدد البيانات SELECT * FROM TestTable

مثال على استخدام عامل التشغيل BETWEEN في جملة WHERE

لنكتب استعلام SQL يوضح لنا جميع المنتجات التي يتراوح سعرها من 100 إلى 200 روبل.

الحالة باستخدام عامل التشغيل بين SELECT ProductID وProductName والسعر من TestTable حيث السعر بين 100 و200

يمكننا كتابة هذا الاستعلام دون استخدام عامل التشغيل BETWEEN، على سبيل المثال، استعلام SQL التالي مكافئ تمامًا.

الحالة باستخدام عوامل المقارنة حدد معرف المنتج واسم المنتج والسعر من جدول الاختبار حيث السعر >= 100 والسعر<= 200

كما ترون، النتيجة هي نفسها، ولكن في حالة BETWEEN تبدو الحالة أكثر وضوحًا وفهمًا، بالإضافة إلى أننا كتبنا تعبير التحقق (السعر) مرة واحدة فقط، وفي حالة عوامل المقارنة مرتين.

مثال على استخدام عامل التشغيل BETWEEN في عبارة IF الشرطية

يمكن استخدام عامل التشغيل BETWEEN ليس فقط في جملة WHERE، ولكن أيضًا في بنيات T-SQL الأخرى، على سبيل المثال، في البنية الشرطية IF. في المثال التالي، سوف نقوم بفحص المتغير @TestVar لمعرفة ما إذا كانت قيمة هذا المتغير تقع في النطاق من 1 إلى 10، وإذا كان الأمر كذلك، فسوف نقوم بتنفيذ الإجراء الذي نحتاجه، على سبيل المثال سأرسل ببساطة طلب SELECT .

أعلن @TestVar INT = 5 إذا كان @TestVar بين 1 و10 حدد "المتغير @TestVar موجود في النطاق من 1 إلى 10" AS [النتيجة]


مثال على استخدام عامل التشغيل NOT BETWEEN

الآن دعنا نكتب استعلامًا باستخدام الكلمة الأساسية NOT، على سبيل المثال، نحتاج إلى عرض جميع المنتجات التي لا يتراوح سعرها بين 100 إلى 200 روبل ( وأرفق أيضًا مثالًا مكافئًا باستخدام عوامل المقارنة).

الشرط باستخدام عامل التشغيل ليس بين تحديد معرف المنتج واسم المنتج والسعر من جدول الاختبار حيث لا يتراوح السعر بين 100 و200 - الشرط باستخدام عوامل المقارنة حدد معرف المنتج واسم المنتج والسعر من جدول الاختبار حيث السعر< 100 OR Price > 200

في هذه الحالة، حصلنا على جميع السلع التي يقل سعرها عن 100 أو أكثر من 200 روبل.

في لغة T-SQL، بالإضافة إلى عامل التشغيل BETWEEN، هناك عوامل تشغيل منطقية أخرى، على سبيل المثال، عامل التشغيل EXISTS، والذي يمكن أن يكون مفيدًا جدًا في بعض الحالات، وقد ناقشناه أيضًا في هذا الموقع.

هذا كل ما لدي الآن!

عند العمل مع أنظمة إدارة قواعد البيانات العلائقية، حيث يتم تخزين البيانات في شكل جدول، غالبًا ما يواجه المستخدمون مهمة اختيار القيم المضمنة (غير المضمنة) في نطاق معين. تتيح لك لغة SQL تحديد مجموعة يجب (لا ينبغي) أن تنتمي إليها القيمة باستخدام خيارات متنوعة - عامل التشغيل In، وعامل التشغيل Like، ومجموعة من أكبر من - أقل من الشروط، بالإضافة إلى عامل التشغيل SQL Between. سوف يركز الوصف والأمثلة في هذه المقالة على الخيار الأخير.

عامل التشغيل "بين" في SQL: بناء الجملة والقيود

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

بناء جملة المشغل بسيط للغاية:

حيث t1.n بين 0 و 7

كما ترون، بعد الكلمة الأساسية "بين"، يجب عليك تحديد قيمة الحد الأدنى للنطاق، ثم "و" وقيمة الحد الأعلى.

دعنا ندرج أنواع البيانات التي يمكن لمشغل SQL التعامل معها:

  1. مع الأرقام - كاملة وكسرية.
  2. مع التواريخ.
  3. مع النص.

هذا بين مشغل SQL له ميزات معينة. دعونا نتعرف عليهم:

  1. عند العمل مع الأرقام والتواريخ، يتم تضمين قيم القيد من وإلى في التحديد.
  2. يجب أن تكون قيمة الحد الأدنى للنطاق أقل من قيمة الحد الأعلى، وإلا لن يتم عرض أي شيء، لأن الشرط غير صالح منطقيا. يجب أن تكون حذرًا بشكل خاص عند تضمين متغيرات في الشرط بدلاً من قيم محددة.

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

اختيار الأرقام والتواريخ في نطاق معين

لنقم بإعداد جدول يحتوي على بيانات عن المديرين العاملين في المنظمة. سيكون للجدول البنية التالية:

اسم الحقل

نوع البيانات

وصف

معرف الموظف الفريد

نص

الاسم الأخير للموظف

نص

اسم الموظف

اسم العائلة

نص

الاسم الأوسط للموظف

نص

جنس الموظف (رجال/نساء)

تاريخ استلام

التاريخ والوقت

تاريخ تعيين الموظف

عدد الاطفال

عددي

عدد الأطفال لدى الموظف

لنملأ الجدول بالبيانات التالية:

شفرة

اسم العائلة

اسم

اسم العائلة

أرضية

تاريخ استلام

عدد الاطفال

الكسندروفا

نيكولاييفنا

ستيبانوفيتش

فينوغرادوف

بافلوفيتش

الكسندر

بوريسوفيتش

فيشنياكوف

الكسندروفيتش

تروبنيكوف

سيرجيفيتش

زيمتشوجوف

فاسيليفيتش

كونستانتينوفنا

نيكولايفيتش

دعونا ننشئ ما بين، مما سيساعدنا في اختيار جميع الموظفين الذين لديهم طفلين أو ثلاثة أطفال:

ستكون النتيجة ثلاثة أسطر تحتوي على بيانات عن الموظفين بأسماء شوميلين وتروبنيكوف وأفديفا.

سنقوم الآن باختيار الموظفين المعينين في الفترة من 1 يناير 2005 إلى 31 ديسمبر 2016. تجدر الإشارة إلى أن أنظمة إدارة قواعد البيانات المختلفة تسمح لك بكتابة التواريخ في الظروف بشكل مختلف. في معظم الحالات، يتم ببساطة إدخال التاريخ في النموذج يوم - شهر - سنة (أو أي شيء أكثر ملاءمة) ويتم كتابته بشكل فردي أو في نظام إدارة قواعد البيانات (DBMS)، يتم وضع التاريخ في علامة "#". لنقم بتشغيل مثال بناءً عليه:

حدد المديرين.*، Managers.Reception_date

من المديرين

حيث المديرين. تاريخ_الاستلام بين #1/1/2005# و #31/12/2016#

وستكون النتيجة تعيين خمسة موظفين خلال الفترة المحددة ضمناً.

العمل بين السلاسل

من المشاكل الشائعة جدًا التي يتعين عليك حلها عند العمل مع ألقاب الموظفين هي الحاجة إلى اختيار أولئك الذين تبدأ ألقابهم بحرف معين فقط. دعونا نحاول تلبية الطلب واختيار الموظفين الذين تبدأ أسماؤهم الأخيرة بالأسماء الأخيرة من A إلى B:

والنتيجة هي على النحو التالي:

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

عند تنفيذ هذا الطلب ستكون النتيجة مرضية لنا تماما.

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


يغلق