اپراتورهای IN و BETWEEN در زبان SQL

11 اسفند 1397
درسنامه درس 13 از سری آموزش زبان SQL
sql-language-in-between

با سلام خدمت شما دوستان گرامی، امروز میخواهیم در مورد یکی دیگر از اپراتورهای زبان SQL به نام IN (به معنی «در» یا «درون») صحبت کنیم.

اپراتور IN در SQL

این اپراتور به شما اجازه می دهد که در شرط WHERE از مقادیر مختلفی استفاده کنید. به عبارت دیگر اپراتور IN به عنوان روش کوتاه تر نوشتن چندین مقدار مختلف با اپراتور OR می باشد. ساختار کلی این اپراتور به شکل زیر است:

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);

البته به این شکل نیز استفاده می شود:

SELECT column_name(s)
FROM table_name
WHERE column_name IN (SELECT STATEMENT);

بیایید قبل از صحبت در مورد مثال ها نگاهی به جدول پایگاه داده ی Northwind بیندازیم:

Country PostalCode City Address ContactName CustomerName CustomerID
Germany 12209 Berlin Obere Str. 57 Maria Anders Alfreds Futterkiste 1
Mexico 05021 México D.F. Avda. de la Constitución 2222 Ana Trujillo Ana Trujillo Emparedados y helados 2
Mexico 05023 México D.F. Mataderos 2312 Antonio Moreno Antonio Moreno Taquería 3
UK WA1 1DP London 120 Hanover Sq. Thomas Hardy Around the Horn 4
Sweden S-958 22 Luleå Berguvsvägen 8 Christina Berglund Berglunds snabbköp 5

مثال استفاده از اپراتور IN

مثال اول - دستور SQL زیر تمام مشتریانی را انتخاب می کند که در Germany یا France و یا UK باشند:

SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');

برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.

اگر بخواهیم این کار را با اپراتور OR انجام دهیم باید مدام آن را تکرار کنیم (OR 'France' Or 'UK' OR و ....)


مثال دوم - دستور SQL زیر دقیقا برعکس دستور بالاست و تمام مشتریانی را انتخاب می کند که در Germany یا France و یا UK نباشند:

SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');

برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.


مثال سوم - این مثال کمی پیشرفته تر است و در آن از ساختار کلی دوم استفاده کرده ایم. در این مثال می گوییم تمام مشتریانی را انتخاب کن که کشورشان با کشور Suppliers یکی باشد. در جدول ما Supplier ها (به معنی «تامین کننده ها») شرکت هایی هستند که محصولات خود را از آن ها می خریم. در واقع محصولات را برای ما تامین می کنند:

SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);

برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.

توضیح اجرای کد:

  • ابتدا تمام کشور های مربوط به Customers انتخاب می شوند.
  • سپس کد داخل پرانتز، یعنی SELECT Country FROM Suppliers، محاسبه می شود. به عبارت دیگر کد داخل پرانتز اجرا شده و تمام کشور های مربوط به Suppliers انتخاب می شوند.
  • و در آخر این کشور ها با هم مقایسه شده و آن هایی که یکی هستند انتخاب می شوند.

اپراتور BETWEEN در SQL

این اپراتور مقادیری را از بین محدوده ای (range) خاص انتخاب می کند. این مقادیر ممکن است عدد، رشته و تاریخ باشند. یادتان باشد که این اپراتور inclusive است یعنی اگر محدوده ای به آن بدهید، خود اعداد اول و آخر محدوده نیز شامل محدوده خواهند بود.

ساختار کلی اپراتور BETWEEN به این شکل است:

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

جدول زیر قسمتی از جدول Products در پایگاه داده ی Northwind است:

Price Unit CategoryID SupplierID ProductName ProductID
18 10 boxes x 20 bags 1 1 Chais 1
19 24 - 12 oz bottles 1 1 Chang 2
10 12 - 550 ml bottles 2 1 Aniseed Syrup 3
22 48 - 6 oz jars 2 1 Chef Anton's Cajun Seasoning 4
21.35 36 boxes 2 1 Chef Anton's Gumbo Mix 5

می خواهیم مثال های اپراتور BETWEEN را روی این جدول اجرا کنیم.

مثال استفاده از اپراتور BETWEEN

مثال اول - دستور SQL زیر تمام محصولاتی (products) را انتخاب می کند که قیمتی بین 10 تا 20 داشته باشند:

SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;

برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.


مثال دوم - دستور SQL زیر دقیقا برعکس دستور بالاست و تمام محصولاتی (products) را انتخاب می کند که قیمتی بین 10 تا 20 نداشته باشند:

SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;

برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.


مثال سوم - دستور SQL زیر تمام محصولاتی (products) را انتخاب می کند که قیمتی بین 10 تا 20 داشته باشند و از طرفی CategoryID  شان مساوی با 1 یا 2 یا 3 نباشد:

SELECT * FROM Products
WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);

برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.


مثال چهارم - دستور SQL زیر تمام محصولاتی (products) را انتخاب می کند که ProductName شان بین  'Carnarvon Tigers' و 'Mozzarella di Giovanni' باشد:

SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;

برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.


مثال پنجم - دستور SQL زیر تمام محصولاتی (products) را انتخاب می کند که ProductName شان بین  'Carnarvon Tigers' و 'Mozzarella di Giovanni' نباشد:

SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;

برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.

جدول زیر قسمتی از جدول Orders در پایگاه داده ی Northwind است که میخواهیم دو مثال بعد را روی آن اجرا کنیم:

ShipperID OrderDate EmployeeID CustomerID OrderID
3 7/4/1996 5 90 10248
1 7/5/1996 6 81 10249
2 7/8/1996 4 34 10250
1 7/9/1996 3 84 10251
2 7/10/1996 4 76 10252

مثال ششم- دستور SQL زیر تمام سفارشاتی (orders ) را انتخاب می کند که OrderDate شان بین '01-July-1996' و '31-July-1996' باشد:

SELECT * FROM Orders
WHERE OrderDate BETWEEN #01/07/1996# AND #31/07/1996#;

برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.

البته می توان این مثال را به شکل زیر نیز نوشت:

SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';

برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.

خلاصه ی مقاله

در این قسمت با دو اپراتور جدید در زبان SQL آشنا شدیم: اپراتور IN و اپراتور BETWEEN که کار های مختلفی برای ما انجام می دهند. ما انواع این کارکردها را به ذکر مثال توضیح داده و با ساختارشان کاملا آشنا شدیم. امیدوارم این قسمت مورد قبول شما قرار گرفته باشد.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش زبان SQL توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما (1 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

مرتضی
15 اسفند 1397
سلام من کوئری زیر رو نوشتم اما وقتی اجراش می کنم هیچی بر نمیگردونه. میشه بگید مشکلش چیه؟ SELECT * FROM `objects` WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
16 اسفند 1397
سلام دوست عزیز، جای زمان ها رو اشتباه نوشتید. قالب کلی اش این شکلیه: `select * from table between `lowerdate` and `upperdate یعنی زمان کمتر رو باید اول بنویسین.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

مرتضی
17 اسفند 1397
دمت گرم مشکلم حل شد.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
17 اسفند 1397
خواهش می کنم، وظیفه است.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.