«زبان کوئری ساختاریافته» (Structured Query Language |SQL) از دستور WHERE در SQL برای فیلتر کردن دادهها بر پایههای شرایط اعمال شده استفاده میکند. این دستور به صورت رایجی در عبارتهای SELECT
و UPDATE
و DELETE
استفاده میشود. از میان انبوه دادههای ممکنی که توسط کوئریها از پایگاه داده فراخوانده میشوند با کمک دستور WHERE در SQL دادههای مورد نظر خود را استخراج میکنیم. در این مطلب از مجله فرادرس، به طور کلی به ساختار سینتکس و کاربرد این دستور، با یک یا چند شرط مختلف میپردازیم. همچنین روش استفاده از این دستور را برای شامل کردن یا استثنا کردن دادههای خاصی بر اساس کوئری بررسی کردهایم.
جداول پایگاه های داده رابطهای میتوانند شامل میلیونها ردیف داده شوند. در سناریویی عملی، شاید نخواهید با کل مجموعه داده به صورت همزمان کار کنید. برای مثال، فرض کنیم جدولی برای ضبط همه سفارشات مشتریان داریم، شاید نخواهیم تمام دادههای در دسترس برنامه را از لحظه ایجاد جدول تا الان نمایش دهیم. شاید داده سفارش خاصی یا سفارشهایی در یک محدوده زمانی خاص مانند محدوده سه ماهه یا یکساله را نیاز داریم یا حتی نیاز به داشتن سفارشهای مشتری خاصی یا سفارشها داده شده از منطقه خاصی را پیدا کردهایم. دستور WHERE در چنین مواردی به فیلترکردن دادههای هدف از میان انبوه دادههای موجود به کمک مدیران پایگاههای داده میآید.
دستور WHERE در SQL چه کاربردی دارد؟
دستور WHERE در SQL برای فیلتر کردن نتایجی بهکار میرود که توسط عبارتهای «زبان کار با داده» (Data Manipulation Language | DML) مانند SELECT
و UPDATE
و DELETE
بدست میآیند. با استفاده از دستور WHERE میتوانیم از درون یک یا چندین جدول مختلف -با استفاده از عملیات JOIN- دادهها را فراخوانی کنیم.
برای نمونه، با استفاده از دستور WHERE میتوانیم جزییات مربوط به کارمندان بخشی از سازمان را یا کارمندانی که درآمدی بیشتر یا کمتر از حد مشخصی دارند یا حتی جزییات مربوط به دانشآموزان مستحق دریافت بورسیه را از جدول پایگاه داده استخراج کنیم. این عبارت به صورت پایه مشخصات خاصی را درباره دادهها فراهم میکند. این مشخصات تعیین میکنند کدام رکوردها باید واکشی شده و کدام رکوردها باید نادیده انگاشته شوند.
سینتکس دستور WHERE در SQL
شکل سینتکس پایه دستور WHERE
را در کد زیر نمایش دادهایم.
1DML_Statement column1, column2,... columnN
2FROM table_name
3WHERE [condition];
در کد بالا عبارت DML_Statement میتواند هر عبارتی مانند SELECT
و UPDATE
و DELETE در SQL و غیره باشد. میتوانیم شرطی را با استفاده از عملگرهای منطقی یا مقایسهای مانند >
و <
و =
و LIKE
و NOT
و غیره تعریف کنیم.
چگونه بر کار با SQL Server مسلط شویم؟
دستور WHERE در SQL یکی از دستورات بسیار کلیدی است. چندین دستور دیگر مانند دستور WHERE وجود دارند که برای کار کردن با SQL تا حد زیادی مفید و موثر هستند. SQL زبان ساختار یافته کوئرینویسی است که برای کار با پایگاههای داده رابطه طراحی شده است. یکی از بهترین نوع از این پایگاههای داده SQL Server است. در فرادرس برای کار با SQL Server فیلمهای آموزشی پیشرفته و حرفهای تولید شدهاند که با مشاهده آنها و تمرین به راحتی بر کار با این پایگاه داده مسلط میشوید.
در ادامه چند مورد از این فیلمهای آموزشی را معرفی کردهایم. فیلمهای آموزشی فرادرس حاوی اطلاعاتی هستند که با حساسیت و دقت بالایی در صحت و تناسب با یکدیگر چیده شدهاند. در صورت تمایل به دیدن فیلمهای بیشتر میتوانید بر روی تصویر بالا کلیک کنید.
دستور WHERE همراه با عبارت SELECT
بهطور معمول، عبارت SELECT
برای واکشی دادهها از جدولهای پایگاه داده بهکار میرود. در صورت استفاده از دستور WHERE
همراه با عبارت SELECT
میتوانیم ردیفهای واکشی شده را بر اساس شرایط یا عبارات مشخصی فیلتر کنیم. کدی که در ادامه آمده مثالی برای استفاده از دستور WHERE
همراه با عبارت SELECT
است.
1SELECT column1, column2, ...
2FROM table_name
3WHERE condition;
نمونه کد
فرض کنیم که جدولی به نام CUSTOMERS
در پایگاه داده MySQL با استفاده از دستور CREATE TABLE
ایجاد کردهایم.
کدی پیادهسازی شده پایین این فرایند را نشان میدهد.
1CREATE TABLE CUSTOMERS (
2 ID INT NOT NULL,
3 NAME VARCHAR (20) NOT NULL,
4 AGE INT NOT NULL,
5 ADDRESS CHAR (25),
6 SALARY DECIMAL (18, 2),
7 PRIMARY KEY (ID)
8);
طبق کدهایی که در پایین نمایش داده شدهاند با استفاده از کوئری INSERT در SQL در این جدول ۷ رکورد فرضی را وارد کردیم.
1INSERT INTO CUSTOMERS VALUES
2(1, 'Ramesh', 32, 'Ahmedabad', 2000.00),
3(2, 'Khilan', 25, 'Delhi', 1500.00),
4(3, 'Kaushik', 23, 'Kota', 2000.00),
5(4, 'Chaitali', 25, 'Mumbai', 6500.00),
6(5, 'Hardik', 27, 'Bhopal', 8500.00),
7(6, 'Komal', 22, 'Hyderabad', 4500.00),
8(7, 'Muffy', 24, 'Indore', 10000.00);
در نهایت، جدولی که ساخته شده به صورت نمایش داده شده در پایین خواهد بود. در این جدول ID
نشاندهنده شماره شناسایی کارمند، NAME
نام، AGE
سن، ADDRESS
آدرس و SALARY
میزام حقوق کارمندان را نشان میدهد.
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
در کوئری آمده پایین، اطلاعات مربوط به شماره شناسایی ID
، نام NAME
و حقوق SALARY
را از جدول CUSTOMERS
با شرط حداقل درآمد SALARY
بالاتر از 2000
واکشی کردهایم.
1SELECT ID, NAME, SALARY FROM CUSTOMERS
2WHERE SALARY > 2000;
با اجرای کوئری بالا، دادههای استخراج شده به صورت جدول زیر در خروجی به کاربر نمایش داده میشوند.
ID | NAME | SALARY |
---|---|---|
4 | Chaitali | 6500.00 |
5 | Hardik | 8500.00 |
6 | Komal | 4500.00 |
7 | Muffy | 10000.00 |
دستور WHERE همراه با عبارت UPDATE
از عبارت UPDATE در SQL برای اصلاح رکوردهای موجود در جدول کمک گرفته میشود. با استفاده از دستور WHERE در SQL همراه با عبارت UPDATE
میتوانیم رکوردهای خاصی را بهروزرسانی کنیم. اگر از دستور WHERE
استفاده نکنیم، عبارت UPDATE
بر روی همه رکوردهای جدول اثر خواهد گذاشت.
در کد پایین، سینتکس پایه مربوط به ترکیب دستور WHERE
همراه با عبارت UPDATE
را نمایش دادهایم.
1UPDATE table_name
2SET column1 = value1, column2 = value2, ...
3WHERE condition;
نمونه کد
در کوئری نمایش داده شده پایین، در حال افزایش حقوق کارمندی به اندازه 10000
واحد هستیم که نامش Ramesh
است. میبینید که این افزایش حقوق را با استفاده از ترکیبی از عبارتهای WHERE
همراه با UPDATE
انجام دادهایم.
1UPDATE CUSTOMERS set SALARY = SALARY+10000
2where NAME = 'Ramesh';
پایگاه داده، در خروجی این کوئری، نتیجه نمایش داده شده پایین را برمیگرداند.
1Query OK, 1 rows affected (0.02 sec)
2Rows matched: 1 Changed: 1 Warnings: 0
ارزیابی کوئری
برای ارزیابی کردن اینکه آیا نتیجه کوئری در جدول منعکس شده یا نه، همینطور که در پایین نمایش داده شده میتوانیم از عبارت SELECT
برای نوشتن کوئری استفاده کنیم.
1SELECT * FROM CUSTOMERS WHERE NAME = 'Ramesh';
در نتیجه اجرای کوئری بالا، باید جدول زیر در خورجی نمایش داده شود.
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 12000.00 |
دستور WHERE همراه با عملگر IN
با استفاده از عملگر IN
میتوانیم فهرستی از مقادیر را مشخص کنیم یا زیر کوئری را در دستور WHERE
ایجاد کنیم. اگر از دستور WHERE
و عملگر IN
همراه با عبارت SELECT
استفاده کنیم، میتوانیم ردیفهای درون جدولی را که با هر یک از مقادیر درون لیست مشخص شده همخوانی دارند، واکشی کنیم.
خود عبارت SELECT
یکی از عبارتهای بسیار پرکاربرد و کلیدی در SQL است. تسلط به استفاده از این عبارت مهارت کوئرینویسی را به طرز چشمگیری افزایش میدهد. با مطالعه مطلب دستور SELECT در SQL – راهنمای استفاده به زبان ساده همراه با مثال از مجله فرادرس تا حد بسیار خوبی بر این دستور مسلط میشوید و تقریبا میتوانید همه نیازهای خود را درباره این دستور برآورده کنید.
کد زیر، حالت سینتکس پایه را برای این کوئری نمایش میدهد.
1WHERE column_name IN (value1, value2, ...);
در کد بالا عبارت column_name
نشاندهنده نام ستون در جدول است. مقادیر value1
و value2
و غیره فهرست مقادیری هستند که میخواهیم با ستون column_name
مقایسه کنیم.
نمونه کد
فرض کنیم که باید رکوردهای با مقادیر Khilan
و Hardik
و Muffy
را از ستون NAME
در جدول CUSTOMERS
نمایش دهیم. برای اجرای این خواسته میتوانیم از کوئری آمده در پایین استفاده کنیم.
1SELECT * from CUSTOMERS
2WHERE NAME IN ('Khilan', 'Hardik', 'Muffy');
خروجی حاصل از اجرای کوئری بالا بر روی جدول آزمایشی خودمان به صورت زیر نمایش داده خواهد شد.
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
دستور WHERE همراه با عملگر NOT IN
دستور WHERE
همراه با عملگر NOT IN
دقیقا برعکس دستور WHERE
همراه با عملگر IN
کار میکند.
- اگر از دستور WHERE
همراه با عملگر IN
استفاده کنیم، عبارت DML بر روی لیستی از مقادیر مشخص شده در ستون خاص اعمال میشوند که در عبارت بهطور صریح تعریف شدهاند.
- از طرف دیگر، اگر از دستور WHERE
همراه با عملگر NOT IN
استفاده کنیم. عبارت DML بر روی مقادیری اعمال میشود که در مقادیر لیست مشخص شده در ستون خاص نباشند.
بنابراین اگر از دستور WHERE
همراه با عملگر NOT IN
در عبارت SELECT
استفاده کنیم ردیفهایی واکشی میشوند که با مقادیر مشخص شده در فهرست همخوانی ندارند.
سینتکس مبنا برای استفاده از این عبارت ترکیبی را در کوئری زیر نمایش دادهایم.
1WHERE column_name NOT IN (value1, value2, ...);
نمونه کد
در مثال پایین، رکوردهای را از جدول CUSTOMERS
نمایش میدهیم که سنشان در ستون AGE
با مقادیر 23
، 25
و 22
برابر نباشد NOT
.
1SELECT * from CUSTOMERS WHERE AGE NOT IN (25, 23, 22);
خروجی حاصل از اجرای کوئری بالا بر روی جدول فرضی مطلب، به صورت زیر نمایش داده میشود.
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 12000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
دستور WHERE همراه با عملگر LIKE
استفاده از دستور WHERE
همراه با عملگر LIKE
به فیلتر کردن ردیفهایی کمک میکند که از الگوی خاصی پیروی میکنند. این الگوهای خاص با استفاده از کارکترهای خاصی از قبیل %
و _
و []
و غیره نمایش داده میشود. سینتکس ارائه شده در پایین حالت مبنایی این کوئری را نمایش میدهد.
1WHERE column_name LIKE pattern;
در این سینتکس کلمه column_name
نماینده ستونی است که میخواهیم الگوی مورد نظر را با دادههای این ستون مقایسه کنیم. عبارت pattern
هم نوع داده رشتهای است که میتواند شامل کاراکترهای خاص از قبیل %
و _
و []
و غیره باشد. در بخش بعدی برای این کوئری مثالی را کدنویسی کردهایم.
نمونه کد
کوئری که در پایین آمده است، همه رکوردهایی را نشان میدهد که در آنها مقادیر مربوط به ستون نام NAME
با حرف K
نمایش داده میشود و حداقل به اندازه چهار کاراکتر طول دارد.
1SELECT * FROM CUSTOMERS WHERE NAME LIKE 'K___%';
خروجی بدست آمده از اجرای کوئری بالا، به صورت زیر نمایش داده میشود.
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
فیلم های آموزشی مربوط به انواع پایگاه های داده
SQL زبان مخصوص کوئرینویسی برای کار با پایگاههای داده رابطهای است. پایگاههای داده غیر رابطهای زبان کوئرینویسی مخصوص به خود را دارند. خود پایگاههای داده رابطهای چندین نوع مختلف دارند که هر کدام توسط سازمانها و تیمهای برنامهنویسی مختلفی با توجه به نیازهای گوناگون طراحی شدهاند. دورههای مربوط به آموزش هر کدام از این پایگاههای داده با کیفیتهای متفاوت و شرایط خاصی توسط آموزشگاههای مختلفی ارائه میشوند. فرادرس به دلیل تهیه فیلمهای آموزشی با کیفیت و تنوع دورههای مربوط به پایگاه داده یکی از بزرگترین مرجعهای آموزشی دانشجویان و علاقهمندان به علم شده است. کیفیت بالا، نبود محدودیت زمانی، هزینه مقرون به صرفهتر به نسبت کلاسهای حضوری و امکان بازبینی نامحدود فیلمهای آموزشی از جمله عواملی هستند که بر محبوبیت فرادرس افزوده است.
در این بخش فیلمهای آموزشی مربوط به چند پایگاه داده مختلف را همراه تمرینات موجود در هر کدام معرفی کردهایم. در صورتی که گزینه مورد نظرتان در بین موارد زیر نبود، با کلیک بر روی تصویر بالا میتوانید به صفحه اصلی این مجموعه آموزش منتقل شده و فیلمهای بیشتری را بررسی کنید.
دستور WHERE همراه با عملگرهای AND و OR
برای ایجاد شرایط پیچیده در دستور WHERE در SQL حتی میتوان از ترکیبی از عملگرهای AND
و OR
نیز استفاده کرد. با استفاده از این شرایط پیچیده میتوانیم ردیفهایی با معیارهای مشخص شدهای را فیلتر کنیم. عملگر AND
تضمین میکند که فقط همان ردیفهایی فیلتر شوند که تمام شرایط تعیین شده را تامین میکنند. عملگر OR
نیز باعث میشود ردیفهایی فیلتر شوند که حداقل یکی از شرایط تعیین شده را شامل شوند. اگرچه که این عملگرها فقط زمانی استفاده میشوند که شرط مشخص شده برای فیلتر کردن همه ردیفهای مورد نیاز کافی نباشد. یا به عبارت دیگر در زمانهایی که تعداد بیشتر از یک شرط برای جمع آوری دادهها موجود هستند.
کوئری که در ادامه آمده، سینتکس مورد نیاز برای استفاده از عملگرهای AND
و OR
را در دستور WHERE
نمایش میدهد.
1WHERE (condition1 OR condition2) AND condition3;
نمونه کد
در کوئری نمایش داده شده پایین، میخواهیم همه ردیفهای جدول CUSTOMERS
را بر اساس شرایط خاصی واکشی کنیم. یعنی همه رکوردهایی را فراخوانی کنیم که با شرایط خاص تعریف شده منطبق هستند.
پرانتزها اولویت ارزیابی شرایط را کنترل میکنند. بنابراین عملگر OR
در ابتدا اعمال میشود و سپس عملگر AND
را بر روی شرایط و دادههای جدول اعمال میکنیم.
1SELECT * FROM CUSTOMERS
2WHERE (AGE = 25 OR salary < 4500)
3AND (name = 'Komal' OR name = 'Kaushik');
بر اثر اجرای کوئری بالا نتیجه زیر در خروجی تولید و نمایش داده میشود.
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
3 | Kaushik | 23 | Kota | 2000.00 |
جمع بندی
در این مطلب از مجله فرادرس، درباره دستور WHERE در SQL و کاربردهای این دستور بحث کردهایم. دستور WHERE
بهطور کلی برای فیلتر کردن دادهها استفاده میشود. روش استفاده از این دستور را همراه با سینتکس مبنایی آن نمایش دادیم. انواع روشهای استفاده بهتر از دستور WHERE در SQL همراه با سایر عبارتها از قبیل SELECT
و UPDATE
و IN
و LIKE
و غیره را توضیح دادیم و برای هر کدام سینتکس مرتبط را همراه با مثالی کدنویسی کردیم.
دستور WHERE یکی از دستورات کلیدی و بسیار مفید و پرکاربرد در SQL است. این دستور کیفیت کوئریها و سرعت نوشتن کوئریها را بالاتر میبرد. همچنین در صورت استفاده صحیح تضمین میکند که دقیقا دادههای مورد نظر را بدست بیاوریم، نه یک داده بیشتر و نه یک داده کمتر.
source