زنگ

کسانی هستند که این خبر را قبل از شما می خوانند.
برای دریافت آخرین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید The Bell را بخوانید
بدون اسپم

هر پرس و جو ایجاد شده برای کار در پایگاه داده دسترسی به اطلاعات لازم را ساده می کند. در پست قبلی در مورد اظهارات شرطی کلی صحبت کردم. در همان پست من در مورد اپراتورهایی صحبت خواهم کرد که به شما امکان می دهد نمایش داده شد که می تواند اطلاعات دقیق تری در مورد علاقه شما ایجاد کند ، که در عین حال ، یافتن آن با سؤالات با اپراتورهای AND ، OR آسان نیست.
یکی از اپراتورهای ویژه است که در. این اپراتور به شما امکان می دهد محدوده مورد نیاز نمایش اطلاعات مورد نظر را تنظیم کنید. برگردیم به داده های مربوط به سگ ها

بدهکاران

شماره ماه سال نام شهر نشانی بدهی
0001 جولای2012 ایوانفاستاوپولاستاوروپولسایا ، 150000
0002 دسامبر2019 کونونفتاتارزاگورودنایا ، 254684068
0003 ممکن است2013 یامشینمیخائیلوفسکروستایی ، 48165840
0004 اوت2012 متاسفاستاوپولCentralnaya ، 1646580
... ... ... ... ... ... ...
9564 مارس2015 اولیوادمینوبین المللی ، 156435089
9565 اکتبر2012 پاولووااستاوپولVokzalnaya، 3768059
9566 ژانویه2012 اوریوپامیخائیلوفسکفونتانایا ، 19 ساله51238
9567 نوامبر2017 والتوفتاتارخروج ، 65789654

فرض کنید می خواهید همه بدهکاران شهر Stavropol یا Tatarka را انتخاب کنید. به قیاس با پست قبلی ، استفاده از پرس و جو ضروری است
انتخاب کنید *
از بدهکاران
کجا شهر \u003d "Stavropol"
یا شهر \u003d "تاتارکا"؛

اول از همه ، کد دست و پا گیر است. با استفاده از اپراتورهای ویژه می توانید کد فشرده تری دریافت کنید.
انتخاب کنید *
از بدهکاران
در کجای شهر ("Stavropol" ، "Tatarka")؛

نتیجه خواهد بود

منطق برنامه را ردیابی کنیم. با کلمات کلیدی SELECT ، FROM و WHERE. و سپس عملگر IN ظاهر می شود. این برنامه به دنباله ای از اقدامات می دهد - شما باید اطلاعات پایگاه داده موجود در ستون "شهر" را مشاهده کنید. و برای نمایش باید داده های "Stavropol" و "Tatarka" را انتخاب کنید.
مثالی را در نظر می گیرم که در آن شما باید مبلغ مشخصی از بدهی را انتخاب کنید.
انتخاب کنید *
از بدهکاران
WHEE بدهی در (435089 ، 789654 ، 684068)؛

نتیجه زیر خواهد بود

آن اپراتور IN کل پایگاه داده را برای پارامترهای انتخاب اطلاعات مشخص اسکن می کند.
وضعیت با استفاده از اپراتور ویژه دیگر متفاوت است بین... اگر اپراتور که در اطلاعات را فقط با پارامترهای مشخص شده در نظر گرفته ، سپس اپراتور بین - بین محدوده خاص. با این حال ، نباید قیاس بین ترجمه انگلیسی از این اپراتور و هدف واقعی آن برقرار کرد. اگر بین 1 و 5 را مشخص کنید ، به این معنا نیست که اعداد 2 ، 3 و 4 صحیح خواهند بود.این عبارت به راحتی توسط SQL به عنوان یک مقدار مشخص درک می شود که می توان در بین سایر مقادیر یافت. به عنوان مثال ، اینگونه به نظر می رسد.
انتخاب کنید *
از بدهکاران
از کجا بدهی بین 30،000 و 100،000؛

نتیجه خواهد بود

یعنی SQL بیانیه را پذیرفت بین به عنوان هر مقدار بین 30،000 تا 100،000 در ستون "بدهی".
علاوه بر مشخص کردن دامنه های عددی تقریبی ، می توانید دامنه های الفبایی را مشخص کنید که اطلاعات حاوی اولین حروف محدوده مشخص شده را نشان می دهد. اما یک نکته جالب وجود دارد. بیایید پرس و جو زیر را ایجاد کنیم
انتخاب کنید *
از بدهکاران
از کجا نام در میان و AND و P؛

سپس داده های زیر نمایش داده می شود

یک سوال منطقی: "چرا بدهکاران با نام خانوادگی از لیست خارج شدند پرنی و پآلووا؟ از این گذشته ، حروف اول نام خانوادگی آنها در محدوده مشخص شده قرار می گیرد! "حروف شامل می شوند ، اما نام خانوادگی ها هم نیستند. این به این دلیل است که زبان SQL در این نوع نمایش داده ها فقط طول رشته های جستجو را مشخص می کند. در پرس و جو یک کاراکتر است ، و طول رشته های "Pregny" و "Pavlova" در بانک اطلاعاتی به ترتیب پنج و هفت است. اما نام خانوادگی " وwanov "در محدوده قرار می گیرد زیرا محدوده شروع می شود و، به عنوان آغاز ، طول از یک شخصیت.

در این مقاله به بررسی خواهیم پرداخت اپراتور منطقی T-SQL بینشما خواهید آموخت که این اپراتور چیست و نحوه استفاده از آن. و همچنین ، البته ، ما تجزیه و تحلیل خواهیم کرد مثالهای SQL با استفاده از اپراتور BETWEEN نمایش داده شد.

T-SQL بین اپراتور

بین یک عملگر منطقی T-SQL است که دامنه ای را برای آزمایش تعریف می کند. به عبارت دیگر ، با وجود BETWEEN می توانیم بررسی کنیم که آیا مقداری در محدوده مشخصی قرار دارد یا خیر.

نحو

test_expression [نه] در زیر start_expression و end_expression

شرح استدلال ها

  • test_expression - عبارتی که باید برای تعلق به دامنه از شروع_عکس اکسپرسیون گرفته تا انتهای_عباس آزمایش شود.
  • start_expression - عبارتی که شروع محدوده را توصیف می کند.
  • end_expression عبارتی است که مشخصه انتهای دامنه است.

همه عبارات باید از نوع داده مشابه باشند.

در نتیجه عملگر BETWEEN مقادیر (Boolean) را به عنوان نتیجه باز می گرداند:

  • اگر مقدار آرگومان test_expression بزرگتر یا مساوی با مقدار start_expression باشد ، در حالی که کمتر از یا برابر است با ارزش end_expression ، یعنی. عبارت test_expression از آغاز_عکس بیان تا پایان_عمل بیان است.
  • FALSE اگر test_expression خارج از محدوده از start_expression تا end_expression است.

از طریق کلمه کلیدی نه ما می توانیم نتیجه محمول را معکوس کنیم ، به عبارت دیگر ، NOT BETWEEN به این معنی است که می خواهیم مقدار را بررسی کنیم تا ببینیم در محدوده معین است یا خیر.

در این حالت ، اگر test_expression خارج از محدوده از fill_expression تا end_expression باشد ، BETWEEN TRUE را باز نمی گرداند.

اگر حداقل یکی از عبارات موجود در BETWEEN شامل مقدار NULL باشد ، نتیجه نامشخص خواهد بود.

یادداشت! یادآوری می کنم که همیشه باید به یاد داشته باشید که مقادیری مانند NULL وجود دارد (این خالی نیست و 0 نیست ، این عدم وجود یک مقدار است) ، که توسط سرور SQL به روشی خاص پردازش می شوند ، نتیجه یک درخواست SQL با مقادیر NULL ممکن است آشکار و غیرقابل پیش بینی نباشد.

یادداشت! اگر شما یک برنامه نویس مبتدی هستید و می خواهید زبان T-SQL را از ابتدا یاد بگیرید ، توصیه می کنم کتاب من "راه برنامه نویس T-SQL" را بخوانید ، که در آن با جزئیات در مورد اصول اولیه زبان T-SQL صحبت می کنم ، و همچنین به سازه های پیشرفته توجه زیادی می کنم.

داده های اولیه برای مثال

سرور من Microsoft SQL Server 2016 Express است. به عنوان مثال ، تصور می کنیم که یک TestTable داریم و داده های زیر را شامل می شود ( لیست کالاهای دارای نشانگر قیمت) با استفاده از عبارت INSERT INTO ردیف هایی را به جدول اضافه می کنم.

ایجاد جدول CREATE TABLE TestTable (IDENTITY (1،1) NOT NULL، (100) NULL، NULL) GO - افزودن ردیف ها به جدول INSERT INTO TestTable (نام محصول ، نام و قیمت) ارزش ها (" واحد سیستم"، 300) ، (" مانیتور "، 200) ، (" صفحه کلید "، 100) ، (" موس "، 50) ، (" چاپگر "، 200) ، (" اسکنر "، 150) ، (" تلفن "، 250) ، ("لوح" ، 300) GO - داده های انتخاب SELECT * از TestTable

نمونه ای از استفاده از عملگر BETWEEN در بند WHERE

بیایید یک سؤال SQL بنویسیم که تمام محصولاتی را نشان دهد که قیمت آنها در محدوده 100 تا 200 روبل باشد.

شرایط با جمله زیر SELECT ProductID ، نام محصول ، قیمت از جدول آزمایشی که در آن قیمت بین 100 و 200 وجود دارد

ما می توانیم بدون استفاده از اپراتور BETWEEN ، این پرس و جو را بنویسیم ، برای مثال ، Query SQL زیر کاملاً معادل است.

شرایط استفاده از عملگرهای مقایسه SELECT ProductID ، نام محصول ، قیمت از جدول آزمایشی که در آن قیمت\u003e \u003d 100 و قیمت<= 200

همانطور که مشاهده می کنید ، نتیجه همان است ، اما در مورد BETWEEN شرط واضح تر و قابل درک تر به نظر می رسد ، علاوه بر این ، ما این عبارت را برای چک کردن (Price) فقط یک بار نوشتیم ، در مورد اپراتورهای مقایسه.

نمونه ای از استفاده از عملگر BETWEEN در شرط IF

اپراتور BETWEEN می تواند نه تنها در بند WHERE بلکه در سایر سازه های T-SQL نیز به عنوان مثال در ساختار شرطی IF استفاده شود. در مثال بعدی متغیرTestVar را بررسی خواهیم کرد تا ببینیم آیا مقدار این متغیر در محدوده 1 تا 10 است و اگر این کار را انجام دهد ، عمل موردنیاز خود را انجام خواهیم داد ، به عنوان مثال ، من فقط یک سؤال SELECT ارسال می کنم.

DECLARETestVar INT \u003d 5 IFTestVar از بین 1 و 10 انتخاب "TestVar در دامنه 1 تا 10" قرار دارد [نتیجه]


نمونه ای از استفاده از عملگر NOT BETWEEN

حال بیایید با استفاده از کلمه کلیدی NOT یک کوئری بنویسیم ، برای مثال ، باید تمام محصولاتی را نشان دهیم که قیمت آنها در محدوده 100 تا 200 روبل نباشد ( یک مثال معادل با استفاده از اپراتورهای مقایسه ای که من به آن پیوست می کنم).

شرط استفاده از زیر اپراتور SELECT ProductID ، نام محصول ، قیمت از TestTable که در آن قیمت بین 100 و 200 وجود ندارد - شرط استفاده از اپراتورهای مقایسه SELECT ProductID ، نام محصول ، نام از قیمت تست شده از کجا قیمت< 100 OR Price > 200

در این حالت ، تمام کالاهایی را نشان داده ایم که قیمت آنها کمتر از 100 یا بیشتر از 200 روبل است.

در زبان T-SQL علاوه بر اپراتور BETWEEN ، اپراتورهای منطقی دیگری نیز وجود دارد ، مثلاً اپراتور EXISTS که در بعضی موارد بسیار مفید است ، ما آن را نیز در این سایت بررسی کردیم.

این همه برای من است ، خداحافظ!

اپراتور BETWEEN یک مقدار چک بولی را در برابر یک مقدار از مقادیر انجام می دهد. اگر مقدار در دامنه باشد و اگر مقدار در دامنه نباشد ، عملگر TRUE را بازگرداند. اگر هر مقدار در محدوده NULL (ناشناخته) باشد ، نتیجه آن NULL است.

عملگر EXISTS از نظر معنایی معادل اپراتور ANY / SOME است.

نحو 2003 SQL

SELECT * در کجای بیان BETWEEN پایین تر و حاشیه فوقانی

کلید واژه ها

بیان کجا

عبارتی مقیاس پذیر (مانند ستون) را در برابر طیف وسیعی از مقادیر بین upper_bound و under_bound بررسی می کند. BETWEEN under_borderary AND upper_border

عبارت را با حروف پایین و حاشیه ای برتر مقایسه می کند. مقایسه شامل مقادیر افراطی است ، یعنی همان است که "در جایی که بیان [نه] بزرگتر از یا مساوی با حروف پایین و یا کمتر از یا برابر با upper_bound" باشد.

قوانین عمومی

عملگر BETWEEN برای آزمایش یک عبارت در برابر طیف وسیعی از مقادیر استفاده می شود. اپراتور BETWEEN با هر نوع داده ای به جز BLOB ، CLOB ، NCLOB ، REF و ARRAY قابل استفاده است.

به عنوان مثال ، باید تعداد آثار (title_id) را مشاهده کنیم که حجم فروش از ابتدای سال (ytd_sales) در محدوده 10،000 تا 20،000 باشد.

عنوان_id را از عناوین انتخاب کنید که ytcLsales بین 10000 و 20000

اپراتور BETWEEN شامل مرزهای محدوده ای است. در این حالت ، نتیجه شامل مقادیر 10،000 و 20،000 می شود. اگر بدون نیاز به محدوده دامنه جستجو کنید ، باید از بزرگتر (\u003e) و کمتر از () استفاده کنید.<).

SELECT title_id از عناوین WHERE ytd.sales\u003e 10000 AND ytd_sales< 20000

عملگر NOT اجازه می دهد تا جستجوهای خارج از محدوده مشخص شده در اپراتور BETWEEN را انجام دهد. بنابراین ، می توانید تعداد کلیه آثار (title_id) را که در سال 2003 منتشر نشده اند ، بیابید.

برخی از برنامه نویسان درباره نحوه استفاده از کلمه کلیدی AND در بندهای WHERE بسیار دلپذیر هستند. برای جلوگیری از این که کسی با کد نا آشنا فکر نکند که اپراتور AND که در اپراتور BETWEEN به کار رفته است یک عملگر منطقی است ، می توانید کل بند زیر را در پرانتز ببندید.

SELECT title_id از عناوین WHERE (ytd_sales BETWEEN "10000 AND 20000) و pubdate" \u003d "1991-06-12 00: 00: 00.000"

تفاوت در اجرای در سیستم عامل های مختلف

همه سیستم عامل ها همانطور که در بالا توضیح داده شد از عملگر BETWEEN پشتیبانی می کنند.

هنگام کار با DBMS رابطه ای ، که در آن داده ها به صورت جدولی ذخیره می شوند ، کاربران اغلب با وظیفه انتخاب مقادیری که در یک محدوده خاص گنجانده شده است ، روبرو می شوند. زبان SQL به شما امکان می دهد مجموعه ای را مشخص کنید ، که باید (نباید) متعلق به مقدار با گزینه های مختلف باشد - عملگر In ، عملگر Like ، ترکیبی از شرایط بیشتر - کمتر ، و همچنین SQL بین اپراتور. توضیحات و نمونه های موجود در این مقاله به گزینه دوم می پردازد.

بین عملگر در SQL: نحو ، محدودیت ها

اپراتور بین SQL به معنای واقعی کلمه به عنوان "بین" ترجمه می شود. استفاده از آن به شما امکان می دهد محدودیت "از و به" را در قسمت مشخص قرار دهید و اگر مقدار بعدی در محدوده قرار بگیرد ، محمول مقدار "True" را می گیرد ، و مقدار در انتخاب نهایی گنجانده می شود.

نحو اپراتور بسیار ساده است:

جایی که t1.n بین 0 تا 7 است

همانطور که مشاهده می کنید ، پس از بین کلمه کلیدی ، باید مقدار مرز پایین دامنه ، سپس AND و مقدار مرز بالایی را مشخص کنید.

بیایید لیست کنیم که چه نوع داده ای بین اپراتور SQL می تواند با آن کار کند:

  1. با اعداد - کامل و کسری.
  2. با خرما
  3. با متن

این بین اپراتور SQL ویژگی های خاصی دارد. بیایید با آنها آشنا شویم:

  1. هنگام کار با اعداد و تاریخ ، محدودیت ها از و به قسمت انتخاب گنجانده شده است.
  2. مقدار حد پایین دامنه باید کمتر از مقدار حد بالایی باشد ، در غیر این صورت هیچ چیزی نمایش داده نمی شود ، زیرا شرایط منطقی نادرست است. وقتی متغیرها به جای مقادیر خاص در شرایط گنجانده می شوند ، باید به ویژه احتیاط کنید.

در صورت کار با متن ، مقدار حد بالایی در این محدوده در صورت انتخاب دقیق ترین حد ممکن در گنجانده نمی شود. در بخش های بعدی این ویژگی را با جزئیات بیشتری بررسی خواهیم کرد.

تعداد و تاریخ نمونه برداری در محدوده مشخص

بیایید یک جدول با داده های مربوط به مدیرانی که در سازمان کار می کنند تهیه کنیم. جدول ساختار زیر را دارد:

نام زمینه

نوع داده

شرح

شناسه منحصر به فرد کارمند

متن

نام خانوادگی کارمند

متن

نام کارمند

نام میانه

متن

حمایت کارمند

متن

جنسیت کارمندان (M / F)

تاریخ رسید

زمان قرار

تاریخ استخدام کارمندان

شماره_کودکان

عددی

تعداد کودکانی که یک کارمند دارد

جدول را با داده های زیر پر می کنیم:

کد

نام خانوادگی

نام

نام میانه

کف

تاریخ رسید

شماره_کودکان

الكساندروا

نیکولاوا

استپانوویچ

وینوگروف

پاولوویچ

اسکندر

بوریسوویچ

ویشنیاکوف

الكساندرویچ

تروپنیکوف

سرگیویچ

مروارید

واسیلیویچ

کنستانتینوا

نیکولاویچ

بیایید بین آنها تألیف کنیم ، که به ما کمک می کند تا همه کارمندان با 2 یا 3 فرزند را انتخاب کنیم:

این نتیجه به سه خط با داده های مربوط به کارمندان با نام های Shumilin ، Tropnikov و Avdeeva خواهد بود.

اکنون کارمندان استخدام شده را از اول ژانویه 2005 تا 31 دسامبر 2016 انتخاب خواهیم کرد. لازم به ذکر است که DBMS های مختلف به شما امکان می دهند تاریخ ها را به روش های مختلف بنویسید. در بیشتر موارد ، تاریخ به سادگی به فرم روز-ماه-سال (یا هرچه راحت تر باشد) مجبور می شود و به صورت تک یا در DBMS نوشته می شود تاریخ در یک علامت "#" محصور می شود. بیایید یک مثال را بر اساس آن اجرا کنیم:

مدیران SELECT. * ، مدیران.روش_Date

از مدیران

مدیران کجا. پذیرش_دستی بین # 1/1/2005 # و # 31/12/2016 #

نتیجه 5 نفر از کارمندان استخدام شده در مدت زمان مشخص خواهد بود.

کار بین رشته ها

یک کار بسیار متداول که هنگام کار با نام کارمندان باید حل شود ، لزوم انتخاب فقط کسانی است که نام خانوادگی آنها با یک حرف خاص شروع می شود. بیایید این درخواست را انجام دهیم و کارمندانی را انتخاب کنیم که نام خانوادگی آنها با نام خانوادگی از A تا B شروع می شود:

نتیجه به شرح زیر است:

همانطور که مشاهده می کنید ، دو کارمند با نام خانوادگی که با حرف B شروع می شوند در این لیست قرار نگرفتند. دلیل این چیست؟ نکته این است که دقیقاً چگونه اپراتور رشته های طول نابرابر را مقایسه می کند. خط "B" کوتاهتر از خط "Vinogradov" است و با فضاها پر شده است. اما هنگام مرتب سازی بر اساس حروف الفبا ، فضاها شخصیت های اصلی خواهند بود و نام خانوادگی در انتخاب گنجانده نخواهد شد. DBMS های مختلف راه حلهای مختلفی را ارائه می دهند این مشکل، اما مشخص کردن نامه زیر الفبای زیر در محدوده بسیار ساده است:

با انجام دادن این درخواست نتیجه کاملاً ما را راضی خواهد کرد.

چنین ظرافتی فقط هنگام کار با داده های کاراکتر وجود دارد ، اما نشان می دهد که هنگام کار حتی با چنین اپراتورهای ساده ای بین ، باید مراقب باشید.

تعیین می کند که آیا مقدار عبارت در محدوده مشخص قرار می گیرد یا خیر. این عملگر را می توان در عبارت SQL استفاده کرد.

نحو

اصطلاح [نه] بینمقدار 1ومقدار2

نحو عملگر بین و شامل اجزای زیر است:

ملاحظات

اگر مقدار جزء باشد اصطلاح بین است مقدار 1 و مقدار2 (شامل) ، اپراتور بین و مقدار را برمی گرداند درست است، واقعی؛ در غیر این صورت باز می گردد غلط... روشن کردن عملگر منطقی نه منجر به تأیید شرایط مخالف می شود (با فرض اینکه مؤلفه اصطلاح خارج از محدوده ای است که توسط اجزا تعریف شده است مقدار 1 و مقدار2).

از طریق بیتویn ... و می توانید تعیین کنید که آیا مقدار فیلد در یک محدوده عددی مشخص قرار می گیرد یا خیر. مثال زیر تعیین می کند که آیا سفارش با کد پستی در یک محدوده معین به آدرس ارسال شده است یا خیر. اگر کد پستی بین 98101 تا 98199 باشد ، عملکرد IIf برمی گردد محلی. در غیر این صورت ، Nonlocal را برمی گرداند.

SELECT IIf (کد پستی بین 98101 و 98199 ، "محلی" ، "غیرمجاز") از ناشران

اگر یک اصطلاح, مقدار 1 یا مقدار2 این دارد مقدار null, بین و مقدار را برمی گرداند خالی.

از آنجا که کارتهای وحشی مانند ستاره (*) به معنای واقعی کلمه در نظر گرفته می شوند ، نمی توان از آنها در اپراتور استفاده کرد بین و... به عنوان مثال ، شما نمی توانید از عباراتی مانند 980 * و 989 * برای یافتن تمام شاخص های شروع شده با اعداد در محدوده 980 تا 989 استفاده کنید. برای حل این مشکل دو روش وجود دارد. می توانید یک عبارت را به پرس و جو که به اپراتور منتقل می شود اضافه کنید بین و سه شخصیت اول جعبه متن. گزینه دیگر اضافه کردن رقم های اضافی به مرزهای پایین و بالایی از فاصله بازرسی شده است ، در این حالت - از 98000 به 98999 یا از 98000 به 98999-9999 در صورت استفاده از کد پستی طولانی (برای اشتراک ها ، شما باید -0000 را حذف کنید ، زیرا در غیر اینصورت اگر برخی از ایندکس ها دارای پسوند هستند و برخی دیگر اینگونه نیستند ، از فهرست 98000 صرفنظر کردند.

زنگ

کسانی هستند که این خبر را قبل از شما می خوانند.
برای دریافت آخرین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید The Bell را بخوانید
بدون اسپم