MySQL - Chọn truy vấn

SQL SELECTlệnh được sử dụng để tìm nạp dữ liệu từ cơ sở dữ liệu MySQL. Bạn có thể sử dụng lệnh này tại dấu nhắc mysql> cũng như trong bất kỳ tập lệnh nào như PHP.

Cú pháp

Đây là cú pháp SQL chung của lệnh SELECT để tìm nạp dữ liệu từ bảng MySQL -

SELECT field1, field2,...fieldN 
FROM table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • Bạn có thể sử dụng một hoặc nhiều bảng được phân tách bằng dấu phẩy để bao gồm các điều kiện khác nhau bằng cách sử dụng mệnh đề WHERE, nhưng mệnh đề WHERE là một phần tùy chọn của lệnh SELECT.

  • Bạn có thể tìm nạp một hoặc nhiều trường trong một lệnh SELECT.

  • Bạn có thể chỉ định dấu sao (*) thay cho các trường. Trong trường hợp này, SELECT sẽ trả về tất cả các trường.

  • Bạn có thể chỉ định bất kỳ điều kiện nào bằng mệnh đề WHERE.

  • Bạn có thể chỉ định độ lệch bằng cách sử dụng OFFSETtừ đó SELECT sẽ bắt đầu trả về các bản ghi. Theo mặc định, độ lệch bắt đầu bằng 0.

  • Bạn có thể giới hạn số lần trả lại bằng cách sử dụng LIMIT thuộc tính.

Tìm nạp dữ liệu từ Command Prompt

Điều này sẽ sử dụng lệnh SQL SELECT để tìm nạp dữ liệu từ bảng MySQL tutorials_tbl.

Thí dụ

Ví dụ sau sẽ trả về tất cả các bản ghi từ tutorials_tbl bàn -

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>

Tìm nạp dữ liệu bằng PHP Script

Bạn có thể sử dụng cùng một lệnh SQL SELECT vào một hàm PHP mysql_query(). Hàm này được sử dụng để thực thi lệnh SQL và sau đó là một hàm PHP khácmysql_fetch_array()có thể được sử dụng để tìm nạp tất cả dữ liệu đã chọn. Hàm này trả về hàng dưới dạng mảng kết hợp, mảng số hoặc cả hai. Hàm này trả về FALSE nếu không còn hàng nào nữa.

Chương trình sau đây là một ví dụ đơn giản sẽ chỉ ra cách tìm nạp / hiển thị các bản ghi từ tutorials_tbl bàn.

Thí dụ

Khối mã sau sẽ hiển thị tất cả các bản ghi từ bảng tutorial_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);
?>

Nội dung của các hàng được gán cho biến $ row và các giá trị trong hàng đó sau đó được in ra.

NOTE - Luôn nhớ đặt dấu ngoặc nhọn khi bạn muốn chèn trực tiếp giá trị mảng vào chuỗi.

Trong ví dụ trên, hằng MYSQL_ASSOC được sử dụng làm đối số thứ hai cho hàm PHP mysql_fetch_array(), để nó trả về hàng dưới dạng một mảng kết hợp. Với một mảng kết hợp, bạn có thể truy cập trường bằng cách sử dụng tên của chúng thay vì sử dụng chỉ mục.

PHP cung cấp một hàm khác được gọi là mysql_fetch_assoc(), cũng trả về hàng dưới dạng một mảng kết hợp.

Thí dụ

Ví dụ sau để hiển thị tất cả các bản ghi từ bảng tutorial_tbl bằng cách sử dụng hàm 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);
?>

Bạn cũng có thể sử dụng hằng số MYSQL_NUMlàm đối số thứ hai cho hàm mysql_fetch_array () trong PHP. Điều này sẽ khiến hàm trả về một mảng có chỉ mục số.

Thí dụ

Hãy thử ví dụ sau để hiển thị tất cả các bản ghi từ bảng tutorial_tbl bằng cách sử dụng đối số 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);
?>

Tất cả ba ví dụ trên sẽ tạo ra cùng một kết quả.

Giải phóng bộ nhớ

Một phương pháp hay là giải phóng bộ nhớ con trỏ ở cuối mỗi câu lệnh SELECT. Điều này có thể được thực hiện bằng cách sử dụng hàm PHPmysql_free_result(). Chương trình sau đây là ví dụ để cho thấy nó nên được sử dụng như thế nào.

Thí dụ

Hãy thử ví dụ sau:

<?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);
?>

Trong khi tìm nạp dữ liệu, bạn có thể viết một đoạn mã phức tạp tùy thích, nhưng quy trình sẽ vẫn giống như đã đề cập ở trên.