با سلام خدمت شما دوستان گرامی، امروز میخواهیم در مورد یکی دیگر از اپراتورهای زبان SQL به نام IN (به معنی «در» یا «درون») صحبت کنیم.
این اپراتور به شما اجازه می دهد که در شرط 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 |
مثال اول - دستور 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 به این لینک مراجعه کنید.
توضیح اجرای کد:
SELECT Country FROM Suppliers
، محاسبه می شود. به عبارت دیگر کد داخل پرانتز اجرا شده و تمام کشور های مربوط به Suppliers انتخاب می شوند.این اپراتور مقادیری را از بین محدوده ای (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 را روی این جدول اجرا کنیم.
مثال اول - دستور 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 که کار های مختلفی برای ما انجام می دهند. ما انواع این کارکردها را به ذکر مثال توضیح داده و با ساختارشان کاملا آشنا شدیم. امیدوارم این قسمت مورد قبول شما قرار گرفته باشد.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.