پس از آشنایی با دستوراتی که برای اِعمال تغییر در دادههای ذخیرهشده در دیتابیس به کار میروند، در این آموزش به بررسی یکسری اپراتور (عملگر) پرکاربرد در زبان SQL خواهیم پرداخت.
اپراتور IN
برای مشخص کردن چندین مقدار در کِلاز WHERE
میتوان از اپراتور IN
به شکل زیر استفاده کرد:
SELECT column_name(s) FROM table_name WHERE column_name IN (value1, value2, …);
به عنوان مثال، فرض کنید میخواهیم از جدول students
که در آموزشهای قبل مورد استفاده قرار دادیم، رکوردهای مربوط به دانشجویانی که سن آنها ۲۵ یا ۲۷ است را فِچ (بازیابی) کنیم در این صورت میتوان از کوئری زیر استفاده نمود:
SELECT * FROM students WHERE age IN (25, 27);
که خروجی دستور بالا ریزالتسِتی به صورت زیر خواهد بود:
+----+-------+---------+----------+------+
| id | name | address | phone | age |
+----+-------+---------+----------+------+
| 1 | Amir | Ilam | 33856972 | 25 |
| 4 | Sogol | Semnan | 88695214 | 27 |
+----+-------+---------+----------+------+
در اینجا حتی میتوانیم به جای تعیین مقادیر مختلف، از دستور SELECT
نیز همچون کوئری زیر استفاده کرد:
SELECT column_name(s) FROM table_name WHERE column_name IN (SELECT STATEMENT);
مثلاً فرض کنید میخواهیم تمامی دانشجویانی را که همسن یکی از اساتید هستند را از جدول students
فِچ کنیم که در این صورت خواهیم داشت:
SELECT * FROM students WHERE age IN (SELECT age FROM professors);
لازم به یادآوری است برای اینکه نتیجهٔ کوئریمان شامل یکسری از رکوردهایی نباشد که نیازی به آنها نداریم، میتوان از کیورد یا کلمهٔ کلیدی NOT
قبل از اپراتور IN
استفاده کرد به طوری که مثلاً برای دست یافتن به تمامی دانشجویان به جز آنهایی که اهل تهران و ایلام هستند، میتوان به شکل زیر عمل کرد:
SELECT * FROM students WHERE address NOT IN ('Tehran', 'Ilam');
همچنین به جای استفاده از NOT
میتوان از عملگر <>
نیز همچون کوئری زیر استفاده نمود:
SELECT * FROM students WHERE address <> 'Tehran' AND address <> 'Ilam';
که ریزالتسِت دو کوئری فوق دقیقاً یکسان است و به شکل زیر خواهد بود:
+----+--------+---------+----------+------+
| id | name | address | phone | age |
+----+--------+---------+----------+------+
| 3 | Sahand | Karaj | 55698265 | 33 |
| 4 | Sogol | Semnan | 88695214 | 27 |
| 5 | Parviz | Mashhad | 87597704 | 28 |
+----+--------+---------+----------+------+
اپراتور BETWEEN
از این اپراتور جهت مشخص کردن دامنهٔ خاصی از مقادیر استفاده میشود. به عنوان مثال، برای به دست آوردن اطلاعات دانشجویانی که سن آنها بین ۳۰ تا ۴۰ سال است میتوان از کوئری زیر استفاده کرد:
SELECT * FROM students WHERE age BETWEEN 30 AND 40;
با توجه به دیتای موجود در جدول students
نتیجهٔ کوئری فوق ریزالتسِتی به شکل زیر خواهد بود:
+----+--------+---------+----------+------+
| id | name | address | phone | age |
+----+--------+---------+----------+------+
| 3 | Sahand | Karaj | 55698265 | 33 |
+----+--------+---------+----------+------+
دقت کنید که این اپراتور شامل مقادیر ابتدایی و انتهایی دامنه (مثلاً ۳۰ و ۴۰ در مثال بالا) نیز میشود.
اپراتور LIKE
این اپراتور جهت جستجوی یک پَترن (الگو) خاص در مقادیر یک فیلد خاص در WHERE
استفاده میشود. به طور کلی، دو به اصطلاح Wildcard (کاراکترهایی که جایگزین دیگر کاراکترها در یک استرینگ یا رشتهٔ متنی میشوند) که همراه این اپراتور استفاده میشوند عبارتند از:
- علامت %
که اشاره به صفر، یک و یا چندین کاراکتر در پَترن دارد.
- علامت _
یا اصطلاحاً آندراِسکُر که اشاره به فقط و فقط یک کاراکتر در پترن دارد.
برای مثال '%a'
به دنبال مجموعه کاراکترهایی میگردد که با حرف «a» شروع میشوند و یا '%r_'
به یک اِسترینگ اشاره میکند که دقیقاً حرف دومش «r» باشد.
به خاطر داشته باشید توجه داشته باشید که این دو وایلکارد میتوانند همزمان با هم نیز استفاده شوند.
به عنوان مثالی دیگر، برای بازیابی رکوردهای مربوط به دانشجویانی که نام آنها با حرفِ «s» شروع میشود و حداقل شامل سه کاراکتر باشد میتوان از کوئری زیر استفاده کرد:
SELECT * FROM students WHERE name LIKE 's_%_%';
که نتیجهٔ کوئری فوق یک ریزالتسِت به شکل زیر خواهد بود:
+----+--------+---------+----------+------+
| id | name | address | phone | age |
+----+--------+---------+----------+------+
| 3 | Sahand | Karaj | 55698265 | 33 |
| 4 | Sogol | Semnan | 88695214 | 27 |
| 7 | Saeid | NULL | NULL | 31 |
+----+--------+---------+----------+------+
انجام عملیات جستجوی یک اِسترینگ در اکثر وب اپلیکیشنها معمولاً با استفاده از اپراتور LIKE
به سادگی قابل پیادهسازی خواهد بود. به عنوان مثال، کوئری زیر را مد نظر قرار میدهیم:
SELECT * FROM students WHERE name LIKE '%gol%';
فرض کنیم کاربری به دنبال اطلاعات دانشجویانی است که در نام آنها کلمهٔ «gol» باشد که در این صورت میتوان با کوئری فوق تمامی دانشجویان که این شرط در موردشان صدق میکند را فیلتر کرد.