Truy vấn SELECT trong MySQL

Lệnh SELECT trong SQL được sử dụng để lấy dữ liệu từ MySQL Database.

Cú pháp SQL cơ bản của lệnh SELECT để lấy dữ liệu từ bảng MySQL là:

SELECT truong1, truong2,...truongN FROM ten_bang
[menhDe WHERE]
[OFFSET M ][LIMIT N]
  • Bạn có thể lấy một hoặc nhiều trường trong một lệnh SELECT đơn.
  • Bạn có thể xác định một dấu sao (*) thay cho các trường. Trong trường hợp này, lệnh SELECT sẽ trả về tất cả các trường.
  • Bạn có thể xác định bất kỳ điều kiện nào bởi sử dụng mệnh đề WHERE.
  • Bạn có thể xác định một offset bởi sử dụng OFFSET để từ đó lệnh SELECT này sẽ bắt đầu trả về các bản ghi. Theo mặc định, offset là 0.
  • Bạn có thể giới hạn số kết quả trả về bởi sử dụng thuộc tính LIMIT.

Ví dụ để lấy dữ liệu trong một bảng trong MySQL

Sau đây là ví dụ để lấy tất cả bản ghi có trong bảng sinhvienk60 có trong cơ sở dữ liệu sinhvien trong MySQL:

SELECT * FROM sinhvienk60;

Kết quả như sau:

Truy vấn SELECT trong MySQL

Lấy dữ liệu bởi sử dụng PHP Script

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

Dưới đây là một ví dụ đơn giản để lấy các bản ghi từ bảng sinhvienk60.

Ví dụ

Bạn theo dõi ví dụ sau để lấy tất cả bản ghi từ bảng sinhvienk60.

<?php
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Khong the ket noi: ' . mysql_error());
}
$sql = 'SELECT mssv, ho, 
               ten, diemthi
        FROM sinhvienk60';


mysql_select_db('sinhvien');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Khong the lay du lieu: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
    echo "MSSV :{$row['mssv']}  <br> ".
         "Ho: {$row['ho']} <br> ".
         "Ten: {$row['ten']} <br> ".
         "Diem Thi : {$row['diemthi']} <br> ".
         "--------------------------------<br>";
} 
echo "Lay du lieu thanh cong\n";
mysql_close($conn);
?>

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

Sao chép code trên trong một trình soạn thảo chẳng hạn, lưu là insert.php, bạn cần xác định các tham số $dbuser và $dbpass thích hợp (tùy theo cách bạn đã thiết lập với MySQL), sau đó, mở trình duyệt, chạy locallhost/insert.php sẽ cho kết quả như sau:



Ghi chú: Bạn luôn luôn nhớ đặt các dấu ngoặc móc ({) khi bạn muốn chèn một giá trị mảng trực tiếp vào trong một chuỗi.

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

PHP cung cấp hàm khác là mysql_fetch_assoc() cũng trả về các hàng dưới dạng một mảng liên hợp.

Ví dụ

Ví dụ sau hiển thị tất cả bản ghi từ bảng tutorial_tbl bởi sử dụng hàm mysql_fetch_assoc() trong PHP.

<?php
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Khong the ket noi: ' . mysql_error());
}
$sql = 'SELECT mssv, ho, 
               ten, diemthi
        FROM sinhvienk60';


mysql_select_db('sinhvien');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Khong the lay du lieu: ' . mysql_error());
}
while($row = mysql_fetch_assoc($retval))
{
    echo "MSSV :{$row['mssv']}  <br> ".
         "Ho: {$row['ho']} <br> ".
         "Ten: {$row['ten']} <br> ".
         "Diem Thi : {$row['diemthi']} <br> ".
         "--------------------------------<br>";
} 
echo "Lay du lieu thanh cong\n";
mysql_close($conn);
?>

Bạn cũng có thể sử dụng hằng MYSQL_NUM như là tham số thứ hai cho hàm PHP là mysql_fetch_array(). Điều này làm cho hàm trả về một mảng với chỉ mục dạng số.

Ví dụ

Ví dụ sau hiển thị tất cả bản ghi từ bảng tutorial_tbl bởi sử dụng tham số MYSQL_NUM:

<?php
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Khong the ket noi: ' . mysql_error());
}
$sql = 'SELECT mssv, ho, 
               ten, diemthi
        FROM sinhvienk60';


mysql_select_db('sinhvien');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Khong the lay du lieu: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_NUM))
{
    echo "MSSV :{$row[0]}  <br> ".
         "Ho: {$row[1]} <br> ".
         "Ten: {$row[2]} <br> ".
         "Diem Thi : {$row[3]} <br> ".
         "--------------------------------<br>";
}
echo "Lay du lieu thanh cong\n";
mysql_close($conn);
?>

Các ví dụ trên sẽ cho cùng kết quả.

Giải phóng bộ nhớ trong MySQL

Giải phóng bộ nhớ ở phần cuối mỗi lệnh SELECT là một bài thực hành tốt. Điều này có thể được thực hiện bởi sử dụng hàm mysql_free_result() trong PHP. Dưới đây là ví dụ minh họa cách sử dụng của hàm này.

Bạn thử ví dụ sau:

<?php
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Khong the ket noi: ' . mysql_error());
}
$sql = 'SELECT mssv, ho, 
               ten, diemthi
        FROM sinhvienk60';


mysql_select_db('sinhvien');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Khong the lay du lieu: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_NUM))
{
    echo "MSSV :{$row[0]}  <br> ".
         "Ho: {$row[1]} <br> ".
         "Ten: {$row[2]} <br> ".
         "Diem Thi : {$row[3]} <br> ".
         "--------------------------------<br>";
}
mysql_free_result($retval);
echo "Lay du lieu thanh cong\n";
mysql_close($conn);
?>

Trong khi lấy dữ liệu, bạn có thể viết các lệnh SQL phức tạp tùy theo ý muốn của bạn. Và thủ tục sẽ giống như đã đề cập ở trên.

Bình luận