انتخاب ردیف هایی از جدول تنها به انتخاب ستون ها محدود نمی شود. می توان با افزودن دستورهایی انتخاب ها را محدود ساخت. منظور از محدود ساختن انتخاب، مشخص کردن مشخصه های بیشتری برای انتخاب و دسترسی به رکورد موردنظر به صورت دقیق تر می باشد (با نوشتن کدهای پیشرفته تر).

پیش از این تنها دستور SELECT را مورد بررسی قرار دادیم اما الان می خواهیم خصوصیات و دستورات دیگر را بررسی کنیم. باری دیگر به شکل استفاده از دستور SELECT دقت کنید:

 

WHERE

با توجه به قبل، هنگام استفاده تنها از SELECT شکلی شبیه به زبان گفتاری دارد به شکل “ ردیف هایی را از جدول انتخاب کن” اما با استفاده از دستور WHERE به همراه آن شکل آن به صورت “ردیف هایی را از جدول انتخاب کن درجایی که …و…” تغییر می کند.

پس همانطور که حدس می زنید شکل دستوری آن به شکل زیر خواهد بود:

SELECT columnName(s) FROM tableName otherPropertie(s)

 با توجه به شکل دستوری گفته شده، پس از دستور WHERE باید شرط انتخاب ستون ها را نوشت. باز هم برای محدود کردن بیشتر انتخاب ها (به دلیل امکان وجود چندین رکورد در یک انتخاب) از AND استفاده می کنیم تا چندین شرط را تعیین کنیم.

برای روشن تر شدن موضوع مثالی می زنیم.

دیتابیس test_db  شامل جدول persons همراه با چندین رکورد می باشد. به مثال زیر دقت کنید:

 

خروجی:

سفارشی کردن درخواست های انتخاب در MySQL - مثالی از استفاده از دستور where

خروجی

به قسمت مشخص شده در کد دقت کنید. دستور WHERE id = ‘2’ AND name=’Mohammad’  ردیف هایی از جدول را انتخاب می کند که مقدار ستون id آنها برابر با 2 باشد و مقدار ستون name برابر با Mohammad باشد (مقدار ستون id نمی تواند در دو ردیف تکراری باشد و برای ستون name برابر با Mohammad هم تنها یک رکورد وچود دارد. پس تنها یک ردیف بازگردانده می شود).

بهتر است تمام مقادیر غیرقابل تشخیص و از پیش تعریف نشده برای MySQL مانند مقدار “2” یا “Alireza” در داخل تک کوتیشن قرار گیرد (مقادیری مانند اعداد می توانند در داخل کوتیشن قرار نگیرند اما توصیه می شود که تمامی این مقادیر برای جلوگیری از اشتباه یا خطا در داخل کوتیشن قرار بگیرد).

ORDER BY

دستور ORDER BY باعث مرتب سازی رکوردهای بازگشتی می شود. مرتب سازی می تواند براساس یکی از ستون های جدول انجام شود. برای مثال براساس شناسه (id) یا تاریخ (date)، زیرا در بسیاری از مواقع نیاز است تا اطلاعات (رکوردها) برای نمایش مرتب شوند.

این دستور شامل یک مقدار پارامتر به عنوان نام ستونی که مرتب سازی براساس آن انجام می شود، می باشد.

می خواهیم مثال جدول persons را با این دستور آزمایش کنیم. اگر بدون مرتب سازی خروجی را چاپ کنیم خروجی به شکل زیر می باشد:

مثالی از استفاده از دستور order by در mysql

خروجی

حالا می خواهیم خروجی را برحسب نام (name) مرتب کنیم. پس برنامه ی ما به شکل زیر خواهد بود:

 

خروجی:

استفاده از دستور order by در mysql

خروجی

می بینید که اگر داده ها را برحسب نام (name) مرتب (sort) کنیم جای رکوردها کمی تغییر می کند.

استفاده از این دستور در برنامه ها و جدول هایی که دارای رکوردهای زیادی است، بسیار مفید است و باعث نظم می شود و حتی گاهی استفاده از این دستور الزامی می شود.

همچنین می توان درخواست ها را با یکدیگر ادغام کرد. مثلا از دو دستور WHERE و ORDER BY همزمان با یکدیگر استفاده کنیم. می توانیم از دستور زیر برای درخواست های پیشرفته تری استفاده کرد:

SELECT * FROM persons WHERE age > 20  ORDER BY name

این دستور تمام رکوردهایی که دارای مقدار بالای 20 برای ستون age می باشند را برحسب نام (name) مرتب می کند.

DESC

این دستور رکوردهای انتخابی از جدول را به صورت برعکس برمی گرداند. یکی از مثال های کاربردی این دستور هنگامی است که می خواهیم رکوردها را براساس تاریخ ایجادشان مرتب کنیم. در این هنگام می خواهیم آخرین رکوردهای ثبت شده را در ابتدا نمایش دهیم.

این دستور همراه با دستور ORDER BY استفاده می شود به شکلی که تنها کافی است عبارت DESC را پس از دستور ORDER BY قرار دهیم.

رکوردهای جدول persons را براساس سن مرتب کرده (از کم به زیاد) و سپس با استفاده از DESC ترتیب آن را برعکس کرده، در نتیجه سن افراد از بزرگ به کوچک نمایش داده خواهد شد. این برنامه به شکل زیر می باشد:

 

خروجی:

استفاده از دستور desc در mysql

خروجی

LIMIT

این دستور نیز برای مشخص کردن تعداد رکوردهای مشخصی می باشد مثلا اگر خروجی در هنگام عدم استفاده از این دستور 10 رکورد باشد، می توان تنها 5 ردیف آن را از ردیف سوم (یعنی رکوردهای 3 تا 8 که 5 ردیف می باشد) انتخاب کرد. دستور LIMIT شامل دو پارامتر می باشد که عدد اول رکورد شروع و عدد دوم حداکثر تعداد رکوردها را تعیین می کند. می توان تنها یک عدد را مشخص کرد که در این حالت رکورد شروع اولین رکورد موجود و تنها عدد (پارامتر) مشخص شده حداکثر تعداد رکوردها را تعیین می کند.

دو پارامتر این دستور در جاوی آن نوشته می شوند و با کاراکتر کاما , از یکدیگر جدا می شوند.

توجه: شروع رکوردها از صفر می باشد نه از 1.

در جدول persons چند رکورد دیگر نیز اضافه کردیم و در حال حاضر جدول ما شامل 5 رکورد می باشد. می خواهیم خواندن اطلاعات را بوسیله دستور LIMIT در دو حالت بررسی کنیم:

در حالت اول می خواهیم دو پارامتر را مشخص کنیم. خروجی ما از عدد 1 (دومین رکورد) شروع شده و تعداد 3 رکورد را می خوانیم (دومین تا پنجمین رکورد). کد این برنامه به شکل زیر است:

 

خروجی:

استفاده از دستور limit در mysql

خروجی

در حالت دوم تنها یک پارامتر را تعیین می کنیم و این مقدار برابر با 3 است. پس سه رکورد ابتدایی جدول انتخاب خواهند شد.

پس کد درخواست ما به شکل زیر می باشد:

 

خروجی:

استفاده از دستور limit در mysqk