Mệnh đề WHERE trong MySQL
Trần Thị Vân
- 1172
- 13/08/2025
Chức năng của Mệnh đề WHERE trong MySQL
Mệnh đề WHERE trong MySQL dùng để đưa ra một điều kiện hoặc nhiều điều kiện kết hợp với nhau trong câu lệnh truy vấn select để lấy ra kết quả phù hợp.
Code Mệnh đề WHERE trong MySQL
select ten,id,gia,id_cha1 from tb_sanpham where id>3;
select id_cha1,id,ten,gia from tb_sanpham where id>0 and hienthi=1 and (id_cha1=1 or id_cha1=2);
<?php
$dbhost = 'localhost';
$dbuser = 'webmoi_userdata'; // Tên username
$dbpass = 'xgZwEfQWE'; // Mật khẩu
// Kết nối đến tên username
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Không kết nối được: ' . mysql_error());
}
// Chọn tên database
mysql_select_db('webmoi_tendata');
// Xét kiểu tiếng việt
mysql_query('SET NAMES "utf8"');
// Where id>3
$sql ="select ten,id,gia,id_cha1 from tb_sanpham where id>3";
$ketquamot = mysql_query($sql,$conn);
if(!$ketquamot){
die('Không thể lấy dữ liệu: ' . mysql_error());
}
echo "<b>where id>3</b><br>";
// Dùng vòng lặp để lấy ra từng hàng trong bảng
while($row = mysql_fetch_array($ketquamot, MYSQL_ASSOC)){
echo "ID: {$row['id']} <br> ".
"Tên sản phẩm: {$row['ten']} <br> ".
"Giá : {$row['gia']} <br> ".
"--------------------------------<br>";
}
echo "<b>where id>0 and hienthi=1 and (id_cha1=1 or id_cha1=2)</b><br>";
// Truy vấn bảng
$sql = "select id_cha1,id,ten,gia from tb_sanpham where id>0 and hienthi=1 and (id_cha1=1 or id_cha1=2)";
// Kết quả truy vấn trả về mảng
$ketqua = mysql_query($sql,$conn);
if(!$ketqua){
die('Không thể lấy dữ liệu: ' . mysql_error());
}
// Dùng vòng lặp để lấy ra từng hàng trong bảng
while($row = mysql_fetch_array($ketqua, MYSQL_ASSOC)){
echo "ID CHA Cấp 1: {$row['id_cha1']} <br> ".
"ID: {$row['id']} <br> ".
"Tên sản phẩm: {$row['ten']} <br> ".
"Giá : {$row['gia']} <br> ".
"--------------------------------<br>";
}
// Đóng kết nối database
mysql_close($conn);
?>
Kết quả:
where id>3
ID: 4
Tên sản phẩm: Dàn âm thanh nghe nhạc AV02
Giá : 30000000
--------------------------------
ID: 6
Tên sản phẩm: Micro Shure SM58-LC
Giá : 2700000
--------------------------------
ID: 7
Tên sản phẩm: Micro AKG D7 S
Giá : 3400000
--------------------------------
where id>0 and hienthi=1 and (id_cha1=1 or id_cha1=2)
ID CHA Cấp 1: 1
ID: 1
Tên sản phẩm: Dàn karaoke gia đình KTreasure FE12 thương hiệu Đức
Giá : 55000000
--------------------------------
ID CHA Cấp 1: 1
ID: 2
Tên sản phẩm: Dàn karaoke gia đình KTreasure TD12 mới nhất
Giá : 44550000
--------------------------------
ID CHA Cấp 1: 1
ID: 3
Tên sản phẩm: Dàn âm thanh nghe nhạc AV01
Giá : 25000000
--------------------------------
ID CHA Cấp 1: 1
ID: 4
Tên sản phẩm: Dàn âm thanh nghe nhạc AV02
Giá : 30000000
--------------------------------
ID CHA Cấp 1: 2
ID: 6
Tên sản phẩm: Micro Shure SM58-LC
Giá : 2700000
--------------------------------
ID CHA Cấp 1: 2
ID: 7
Tên sản phẩm: Micro AKG D7 S
Giá : 3400000
--------------------------------
Những lưu ý khi sử dụng mệnh đề WHERE trong MySQL
Sử dụng WHERE đúng cách không chỉ giúp truy vấn trả về chính xác dữ liệu cần tìm mà còn ảnh hưởng đến hiệu suất khi làm việc với bảng có nhiều bản ghi. Một số trường hợp tưởng như đơn giản nhưng có thể khiến kết quả sai hoặc truy vấn xử lý nhiều dữ liệu không cần thiết.
Tránh điều kiện WHERE làm chậm truy vấn
Khi bảng có ít dữ liệu, cách viết điều kiện WHERE thường không tạo ra khác biệt đáng kể. Tuy nhiên, với bảng lớn, điều kiện lọc thiếu hợp lý có thể khiến MySQL phải kiểm tra rất nhiều bản ghi trước khi trả về kết quả.
Nên lọc bằng những cột phù hợp và cân nhắc tạo index cho các cột thường xuyên xuất hiện trong điều kiện tìm kiếm. Đồng thời, tránh viết điều kiện khiến MySQL khó tận dụng index, đặc biệt khi áp dụng hàm trực tiếp lên cột cần lọc.
SELECT *
FROM users
WHERE email = 'user@example.com';
Trong ví dụ trên, nếu cột email được lập index phù hợp, MySQL có thể tìm bản ghi hiệu quả hơn thay vì phải kiểm tra toàn bộ bảng.
Cẩn thận với giá trị NULL trong điều kiện WHERE
NULL không phải là một giá trị thông thường nên không thể kiểm tra bằng cách dùng = NULL hoặc NULL. Đây là nguyên nhân phổ biến khiến truy vấn không trả về kết quả như mong đợi.
Khi cần tìm những bản ghi chưa có dữ liệu, hãy sử dụng IS NULL. Ngược lại, IS NOT NULL được dùng để lọc các bản ghi đã có giá trị.
SELECT *
FROM users
WHERE phone IS NULL;
Cách viết này giúp truy vấn xác định đúng các bản ghi có cột phone đang chứa giá trị NULL.
Ưu tiên điều kiện rõ ràng khi kết hợp AND và OR
Khi kết hợp AND và OR trong cùng một điều kiện, cần chú ý đến thứ tự ưu tiên của các toán tử. Nếu không nhóm điều kiện rõ ràng, truy vấn có thể trả về nhiều bản ghi hơn dự kiến.
Sử dụng dấu ngoặc để thể hiện chính xác nhóm điều kiện cần kiểm tra. Cách này vừa giúp kết quả dễ dự đoán vừa làm câu lệnh dễ đọc khi cần bảo trì.
SELECT *
FROM products
WHERE category = 'Laptop'
AND (price < 20000000 OR stock > 0);
Trong trường hợp này, dấu ngoặc xác định rõ hai điều kiện về price và stock được kết hợp với nhau trước khi áp dụng điều kiện về category. Đây là thói quen nên duy trì khi câu lệnh có nhiều điều kiện lọc.
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Mệnh đề WHERE trong MySQL.
Tải file database .sql về nếu muốn kiểm tra hoặc thực hành Tải về.
- 0 Bình luận
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *