کوئری SELECT در MySQL — راهنمای جامع
دستور Select در SQL برای دریافت دادهها از پایگاه داده MySQL استفاده میشود. شما میتوانید از این دستور در اعلان <mysql یا در اسکریپتهای مختلفی از قبیل PHP استفاده کنید.
در ادامه ساختار SELECT در MySQL جهت دریافت دادهها از جدول MySQL ارائه شده است:
SELECT field1, field2,...fieldN FROM table_name1, table_name2... [WHERE Clause] [OFFSET M][LIMIT N]
این دستور خصوصیاتی دارد که در ادامه به اجمال بررسی کردهایم:
- شما میتوانید از یک یا چند جدول که با کاما از هم جدا شدهاند، استفاده کنید تا به کمک بند WHERE شرایط مختلفی را برای دریافت دادهها تعیین کنید؛ اما این بند بخشی اختیاری از دستور SELECT محسوب میشود.
- شما میتوانید یک یا چند فیلد از دادهها را با استفاده از دستور SELECT از پایگاه داده دریافت کنید.
- شما میتوانید از ستاره (*) به جای فیلدها استفاده کنید. در این حالت دستور SELECT همه فیلدها را بازخواهند گرداند.
- شما میتوانید هر شرطی را با استفاده از بند WHERE تعیین کنید.
- شما میتوانید یک افست از طریق عبارت OFFSET برای محلی که دستور SELECT قرار است دادهها را باز گرداند تعیین کنید. به طور پیشفرض مقدار افست صفر است.
- شما میتوانید تعداد موارد بازگشتی را با استفاده از خصوصیت LIMIT محدود کنید.
دریافت دادهها از اعلان فرمان
در این روش از دستور SELECT برای دریافت دادهها از جدول MySQL به نام tutorials_tbl در اعلان فرمان استفاده میشود.
در مثال زیر همه رکوردهای جدولی به نام tutorials_tbl بازگشت داده میشوند:
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT * from tutorials_tbl +-------------+----------------+-----------------+-----------------+ | tutorial_id | tutorial_title | tutorial_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 1 | Learn PHP | John Poul | 2007-05-21 | | 2 | Learn MySQL | Abdul S | 2007-05-21 | | 3 | JAVA Tutorial | Sanjay | 2007-05-21 | +-------------+----------------+-----------------+-----------------+ 3 rows in set (0.01 sec) mysql>
دریافت دادهها از اسکریپت PHP
شما میتوانید از همین دستور SELECT در یک تابع PHP به نام ()mysql_query استفاده کنید. این تابع برای اجرای دستورهای SQL استفاده میشود. همچنین از تابع ()mysql_fetch_array میتوان برای دریافت همه دادههای انتخاب شده استفاده کرد. این تابع ردیفهای جدول را به صوت آرایههای مرتبط، آرایه عددی یا هر دوی آنها بازمیگرداند. این تابع در صورتی که ردیف دیگری وجود نداشته باشد، مقدار false باز میگرداند.
مثال
کد زیر همه رکوردهای جدول tutorials_tbl را نشان میدهد.
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ". "Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>
محتوای ردیفها به متغیر row$ انتساب مییابد و مقادیر موجود در آن ردیف نمایش داده میشوند.
همواره به خاطر داشته باشید که وقتی میخواهید مقدار یک آرایه را مستقیماً در یک رشته درج کنید از پرانتز استفاده کنید.
در مثال فوق ثابت MYSQL_ASSOC به عنوان آرگومان دوم برای تابع PHP به نام ()mysql_fetch_array استفاده میشود و بدین ترتیب ردیفها به صوت یک آرایه مرتبط بازگشت داده میشوند. در یک آرایه انجمنی (associative) میتوانید فیلدها را به جای استفاده از اندیس با استفاده از نامشان مورد دسترسی قرار دهید.
PHP تابع دیگری به نام ()mysql_fetch_assoc ارائه کرده است که ردیف را به عنوان آرایه انجمنی باز میگرداند.
مثال
در مثال زیر همه رکوردهای جدول tutorial_tbl با استفاده از تابع ()mysql_fetch_assoc نمایش مییابند:
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_assoc($retval)) { echo "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ". "Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>
همچنین میتوانید از ثابت MYSQL_NUM به عنوان آرگومان دوم در تابع PHP به نام ()mysql_fetch_array استفاده کنید. این امر موجب میشود که تابع آرایهای را با اندیس عددی باز گرداند.
مثال
در نمونه کد زیر همه رکوردهای جدول tutorials_tbl با استفاده از آرگومان MYSQL_NUM نمایش مییابند.
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_NUM)) { echo "Tutorial ID :{$row[0]} <br> ". "Title: {$row[1]} <br> ". "Author: {$row[2]} <br> ". "Submission Date : {$row[3]} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>
همه مثالهای فوق نتیجه یکسانی تولید میکنند.
آزادسازی حافظه
آزادسازی کرسر (cursor) در انتهای دستور SELECT یک رویه برنامهنویسی مناسب محسوب میشود. این کار از طریق استفاده از تابع PHP به نام ()mysql_free_result ممکن است. برنامه زیر نمونهای از شیوه استفاده از این دستور را نشان میدهد.
مثال
مثال زیر را بررسی کنید:
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_NUM)) { echo "Tutorial ID :{$row[0]} <br> ". "Title: {$row[1]} <br> ". "Author: {$row[2]} <br> ". "Submission Date : {$row[3]} <br> ". "--------------------------------<br>"; } mysql_free_result($retval); echo "Fetched data successfully\n"; mysql_close($conn); ?>
هنگام دریافت دادهها کد شما ممکن است تا هر مقدار که لازم است پیچیده باشد؛ اما این رویه به طور کلی همانند کد فوق است.
اگر این نوشته مورد توجه شما قرار گرفته است، پیشنهاد میکنیم موارد زیر را نیز بررسی کنید:
- اتصال به پایگاه داده MySQL با استفاده از زبان جاوا — آموزش گام به گام
- مفاهیم مقدماتی MySQL — راهنمای جامع
- پایگاه داده و سیستم های مدیریت اطلاعات
- کلاستر چند گره ای MySQL روی اوبونتو ۱۸.۰۴ — به زبان ساده
- مجموعه آموزشهای برنامهنویسی
- چگونه دیتابیس MySQL را بر روی ویندوز نصب کنیم؟
==