SQL معرفی عملگرهای
- عملگرهای زیادی در SQL وجود دارند که میتوانند در شرط WHERE نیز مورد استفاده قرار بگیرند.
- از جمله این عملگرها میتوان از AND، OR، NOT، LIKE، BETWEEN و … نام برد.
AND، OR و NOT عملگرهای
- از عملگرهای AND و OR برای استفاده از چندین شرط همزمان برای WHERE استفاده میکنیم.
- عملگر AND زمانی مورد استفاده قرار میگیرد که چندین شرط همزمان و کنار هم باید True شوند.
SELECT column1, column2, … FROM table_name WHERE condition1 AND condition2 AND condition3 …
- عملگر OR نیز زمانی کاربرد دارد که چندین شرط همزمان برای WHERE در نظر گرفته شود و در این صورت کافیست یکی از شروط True شوند تا کل عبارت True شود.
SELECT column1, column2, … FROM table_name WHERE condition1 OR condition2 OR condition3 …
- عملگر NOT زمانی کاربرد دارد که نتیجه شرط در حالت NOT مقدار ورودی True شود.
SELECT column1, column2, … FROM table_name WHERE NOT condition
مثال:
- در مثال زیر مشخصات کاربرانی که سفارش آن ها برای شهر تهران و در تاریخ 1401/01/03 ثبت شده است نمایش داده میشود.
SELECT * FROM sales WHERE City=‘Tehran’ AND Date=14010103
- در نمونه زیر اطلاعات کامل مشتریانی که در شهرهای تهران یا کرج ثبت سفارش انجام داده اند را چاپ میکنیم.
SELECT * FROM sales WHERE City=‘Tehran’ OR City=‘Karaj’
- در مثالی دیگر برای نمایش نحوه عملکرد NOT مشخصات مشتریانی که در تهران نیستند را نمایش داده ایم.
SELECT * FROM Customers WHERE NOT City=‘Tehran’
AND، OR و NOT استفاده ترکیبی از
مثال:
نتیجه کوئری پیش رو مشخصات کاربرانی است که در تاریخ 1401/01/05 و در شهرهای تهران یا کرج ثبت سفارش انجام داده اند.
SELECT * FROM sales WHERE Date=14010105 AND (City=‘Tehran’ OR City=‘Karaj’)
IN عملگر
- عملگر IN میتواند چندین مقدار را برای شرط WHERE یک ستون تخصیص دهد. یعنی بجای اینکه برای یک ستون چندین شرط OR با مقادیر مختلف درنظر بگیریم میتوانیم مقادیر موردنظرمان را در IN قرار دهیم.
SELECT column_name(s) FROM table_name WHERE column_name IN (value1, value2, …)
- کاربرد دیگر عملگر IN گرفتن مقدار از کوئری دیگری به عنوان ورودی WHERE است.
SELECT column_name(s) FROM table_name WHERE column_name IN (SELECT STATEMENT)
- عملگر NOT IN هم کاربرد و هم syntax مشابه را دارد فقط برعکس IN عمل میکند و شرط درصورتی محقق میشود که مقادیر ورودی عملگر وجود نداشته باشند.
مثال:
- با استفاده از کوئری پیش رو مشخصات مشتریانی که در شهرهای تهران، کرج یا یزد هستند را واکشی میکنیم.
SELECT * FROM sales WHERE City IN (‘Tehran’, ‘Karaj’, ‘Yazd’)
- با استفاده از کد زیر مشخصات مشتریانی که یک محصول با ProductID برابر 42658 را خریداری کرده اند نمایش میدهیم.
SELECT * FROM sales WHERE CustomerID IN (SELECT CustomerID FROM Products WHERE ProductID=42658)
BETWEEN عملگر
- این عملگر وظیفه دارد داده هایی را از طریق WHERE در دستور SELECT انتخاب کند که در یک بازه مشخص (بین دو مقدار تعیین شده) وجود داشته باشند.
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
در نمونه زیر محصولاتی که قیمت آن ها بین 10000 و 20000 بوده و دارای CategoryID با مقادیر 425,652,853 نیستند انتخاب میشوند.
SELECT * FROM Products WHERE Price BETWEEN 10000 AND 20000 AND CategoryID NOT IN (425,652,853)
- از این عملگر میتوان برای مقادیر متنی نیز استفاده کرد که براساس ترتیب حروف الفبای اولین حرف متون عمل میکند.
SELECT * FROM Products WHERE ProductName BETWEEN ‘shrit’ AND ‘Tshirt’ ORDER BY ProductName
- برای واکشی دیتا در یک بازه تاریخی مشخص میتوانیم از دو نوع فرمت برای ذکر تاریخ موردنظرمان استفاده کنیم:
- قرار دادن تاریخ داخل #:
SELECT * FROM Orders WHERE OrderDate BETWEEN #01/01/1400# AND #01/01/1401#
2. قرار دادن تاریخ داخل کوتیشن:
SELECT * FROM Orders WHERE OrderDate BETWEEN ‘1400-01-01’ AND ‘1401-01-01’
LIKE عملگر
- عملگر LIKE زمانی کاربرد دارد که شرط WHERE در جستجوی یک الگوی مشخص در ستون ها باشد.
- در استفاده از عملگر LIKE علامت های (_) و (%) کاربرد کلیدی دارند.
- وجود (_) نشان دهنده یک کاراکتر است که میتواند هر کاراکتری باشد و علامت (%) نیز نشان دهنده هر تعداد از هر کاراکتر است (تعداد صفر یا بیشتر)
- نحوه استفاده از عملگر LIKE:
SELECT column1, column2, … FROM table_name WHERE columnN LIKE pattern
حالتهای مختلفLIKE | توضیحات |
---|---|
WHERE Name LIKE ‘a%’ | هر مقداری که با حرف a شروع شود را برمیگرداند. |
WHERE Name LIKE ‘%a’ | هر مقداری که به حرف a ختم شود را جستجو میکند. |
WHERE Name LIKE ‘%a%’ | مقادیری که حرف a در هر پوزیشنی از آنها وجود داشته باشد را برمیگرداند. |
WHERE Name LIKE ‘_a%’ | در جستجوی مقادیری خواهد بود که حرف دوم آنها a است. |
WHERE Name LIKE ‘a_%’ | مقادیری را که با حرف a شروع شده و حداقل یک حرف بعد از a نیز وجود دارد را جستجو میکند. |
WHERE Name LIKE ‘a__%’ | مقادیری که با حرف a شروع شده و حداقل دو حرف بعد از آن نیز وجود دارد را جستجو میکند. |
WHERE Name LIKE ‘a%o’ | تمام مقادیری که با حرف a شروع و با حرف o پایان میابند را برمیگرداند. |
EXISTS عملگر
- نتیجه این عملگر True یا False خواهد بود. و درواقع بررسی میکند که آیا سطری برای عبارت SELECT وارد شده وجود دارد یا نه؟
- نحوه استفاده از عملگر EXISTS:
SELECT column_name(s) FROM table_name WHERE EXISTS (SELECT column_name FROM table_name WHERE condition);
مثال:
در این مثال با استفاده از عملگر EXISTS بررسی میکند که آیا نتیجه ای برای واکشی داده های ProductName از جدول Products در حالتی که SupplierID محصول موردنظر در موجودی فروشندگان نیز باشد و قیمت آن برابر ۲۲ تومان باشد وجود دارد یا خیر؟ اگر وجود داشته باشد SupplierName مربوط به سطر موجود چاپ میشود.
SELECT SupplierName FROM Suppliers WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price = 22
ANY و ALL عملگرهای
عملگر ANY:
- نتیجه این عملگر مقدار boolean خواهد بود و درصورتیکه مقدار شرط برآورده شود True را برمیگرداند.
- نحوه استفاده از عملگر ANY:
SELECT column_name(s) FROM table_name WHERE column_name operator ANY (SELECT column_name FROM table_name WHERE condition)
مثال:
در این مثال درصورتیکه ProductID در جدول OrderDetails با Quantity به مقدار ۱۰ وجود داشته باشد یک لیست از ProductName با شرایط مذکور نمایش داده میشود.
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)
عملگر ALL:
- اگر تمام مقادیر موجود در یک جدول شرط SELECT را داشته باشند مقدار این عملگر True خواهد بود.
- نحوه استفاده از این عملگر:
SELECT column_name(s) FROM table_name WHERE column_name operator ALL (SELECT column_name FROM table_name WHERE condition)
مثال:
در این مثال بررسی میشود که آیا تمام مقادیر موجود در جدول OrderDetails در ستون Quantity مقدار ۱۰ دارند یا خیر؟ اگر جواب مثبت باشد که لیست ProductName های موجود در جدول Products با ProductID برگردانده شده توسط ALL نمایش داده خواهند شد ولی اگر جواب منفی باشد هیچ مقداری نمایش داده نمیشود.
SELECT ProductName FROM Products WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10)