Mệnh đề WHERE trong MySQL

Trong chương trước chúng ta đã được giới thiệu cách sử dụng của lệnh SELECT trong SQL để lấy dữ liệu từ bảng MySQL. Chúng ta có thể sử dụng một mệnh đề điều kiện gọi là mệnh đề WHERE để lọc các kết quả thu được. Sử dụng mệnh đề WHERE, chúng ta có thể xác định một tiêu chuẩn lựa chọn để chọn các bản ghi cần thiết từ một bảng.

Cú pháp SQL chung của lệnh SELECT với mệnh đề WHERE để lấy dữ liệu từ bảng MySQL là:

SELECT truong1, truong2,...truongN FROM ten_bang
[WHERE dieuKien1 [AND [OR]] dieuKien2.....
  • 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 nhiều hơn một điều kiện bởi sử dụng các toán tử ANDOR.
  • Một mệnh đề WHERE có thể được sử dụng cùng với lệnh DELETE hoặc UPDATE trong SQL để xác định một điều kiện.

Mệnh đề WHERE làm việc giống như một điều kiện if trong bất kỳ ngôn ngữ lập trình nào. Mệnh đề này được sử dụng để so sánh giá trị đã cho với giá trị trường có sẵn trong bảng MySQL. Nếu giá trị đã cho bên ngoài là bằng với giá trị trường có sẵn trong bảng MySQL, thì nó sẽ trả về hàng đó.

Dưới đây là danh sách các toán tử có thể được sử dụng với mệnh đề WHERE:

Giả sử trường A giữ 10 và trường B giữ 20, thì:

Toán tửMiêu tảVí dụ
=Kiểm tra xem giá trị của hai toán hạng có cân bằng không, nếu có thì điều kiện trở thành true(A = B) là không true
!=Kiểm tra xem giá trị của hai toán hạng là cân bằng hay là không, nếu không cân bằng thì điều kiện trở thành true(A != B) là true
>Kiểm tra xem giá trị của toán hạng trái có lớn hơn giá trị của toán hạng phải không, nếu có thì điều kiện trở thành true(A > B) là không true
<Kiểm tra xem giá trị của toán hạng trái có nhỏ hơn giá trị của toán hạng phải không, nếu có thì điều kiện trở thành true(A < B) là true
>=Kiểm tra xem giá trị của toán hạng trái có lớn hơn hoặc bằng giá trị của toán hạng phải không, nếu có thì điều kiện trở thành true(A >= B) là không true
<=Kiểm tra xem giá trị của toán hạng trái có nhỏ hơn hoặc bằng giá trị của toán hạng phải không, nếu có thì điều kiện trở thành true(A <= B) là true

Mệnh đề WHERE là hữu ích khi bạn muốn lấy các hàng đã được lựa chọn từ một bảng, đặc biệt khi bạn sử dụng JOIN trong MySQL. Các JOIN sẽ được trình bày trong chương khác.

Sử dụng Primary Key là thói quen phổ biến để tìm kiếm các bản ghi để giúp việc tìm kiếm này nhanh hơn.

Nếu điều kiện đã cho không so khớp với bất kỳ bản ghi nào trong bảng, thì truy vấn sẽ không trả về bất kỳ hàng nào.

Ví dụ lấy dữ liệu với mệnh đề WHERE trong MySQL

Ví dụ sau sẽ trả về tất cả bản ghi từ bảng sinhvienk60 mà có tên là Thanh:

SELECT * FROM sinhvienk60 WHERE ten="Thanh";

Kết quả là:

+------+------------+------------+---------+
| mssv | ho         | ten        | diemthi |
+------+------------+------------+---------+
|  2   | Nguyen Van | Thanh      | 9.00    |
+------+------------+------------+---------+

Trừ khi thực hiện một so sánh LIKE trên một chuỗi, việc so sánh là không phân biệt kiểu chữ. Bạn có thể làm cho việc tìm kiếm là phân biệt kiểu chữ bởi sử dụng từ khóa BINARY như sau:

SELECT * FROM sinhvienk60 WHERE BINARY ten="thanh";

Với bảng đã tạo của chúng ta thì không có bản ghi nào có tên là thanh, do đó lệnh trên không cho kết quả nào.

Lấy dữ liệu với mệnh đề WHERE bởi sử dụng PHP Script

Bạn có thể sử dụng cùng lệnh SQL là SELECT với mệnh đề WHERE trong hàm PHP là mysql_query(). 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 toàn bộ 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ó hàng nào như vậy.

Ví dụ sau trả về tất cả bản ghi có tên là Thanh 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
        WHERE ten="Thanh"';


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

Sao chép code trên trong một trình soạn thảo chẳng hạn, lưu là where.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/where.php sẽ cho kết quả như sau:


Bình luận