Toán tử ANY trong MySQL

Toán tử ANY trong MySQL
Toán tử ANY trong MySQL

Chức năng của Toán tử ANY trong MySQL

Toán tử ANY trong MySQL dùng để lấy danh sách thuộc khóa chính ở bảng này thuộc bất kỳ một điều kiện nào đưa ra ở bảng khác có liên quan khóa.

Code Toán tử ANY trong MySQL

Ở ví dụ này mình lấy những sản phẩm mà bất kỳ đơn hàng nào có bán được sản phẩm đó với số lượng >2:

select ten,id from tb_sanpham where id = ANY (select idsanpham from tb_donhang where soluong>2);
<?php
   $dbhost = 'localhost';
   $dbuser = 'webmoi_userdata'; // Tên username
   $dbpass = 'IhNRcn9n'; // 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());
   }
   // Truy vấn bảng
   $sql = "select ten,id from tb_sanpham where id = ANY (select idsanpham from tb_donhang where soluong>2)";
   // Chọn tên database
   mysql_select_db('webmoi_tendata');
   // Xét kiểu tiếng việt 
   mysql_query('SET NAMES "utf8"');
   // 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: {$row['id']} <br> ".
		 "Tên: {$row['ten']} <br> ".
         "--------------------------------<br>";
   }		 
   // Đóng kết nối database
   mysql_close($conn);
?>

Kết quả:

ID: 2
Tên: Dàn karaoke gia đình KTreasure TD12 mới nhất
--------------------------------

Ứng dụng Toán tử ANY trong các truy vấn MySQL thực tế

Toán tử ANY phát huy tác dụng khi cần đối chiếu một giá trị với nhiều kết quả được trả về từ truy vấn con. Thay vì phải tách từng giá trị để kiểm tra, có thể dùng ANY để xác định liệu giá trị đang xét có thỏa điều kiện với ít nhất một kết quả hay không.

Kết hợp ANY với điều kiện lọc dữ liệu

ANY thường được kết hợp với các toán tử so sánh như >, , >=, hoặc = trong điều kiện lọc. Cách viết này phù hợp khi tiêu chí lọc phụ thuộc vào một tập dữ liệu được lấy từ bảng khác.

Ví dụ, cần tìm những sản phẩm có giá cao hơn ít nhất một sản phẩm thuộc nhóm có mã 3:

SELECT *
FROM san_pham
WHERE gia > ANY (
    SELECT gia
    FROM san_pham
    WHERE ma_nhom = 3
);

Trong trường hợp này, một sản phẩm được chọn nếu giá của nó lớn hơn ít nhất một giá trị do truy vấn con trả về. Vì vậy, ANY đặc biệt hữu ích khi điều kiện cần so sánh với nhiều giá trị nhưng chỉ cần một giá trị trong tập kết quả đáp ứng yêu cầu.

Sử dụng ANY khi so sánh với truy vấn con

Điểm quan trọng của ANY là nó thường đi cùng truy vấn con. Truy vấn con tạo ra tập giá trị, sau đó MySQL lần lượt dùng tập này để đánh giá điều kiện của truy vấn bên ngoài.

Chẳng hạn, có thể tìm nhân viên có mức lương cao hơn ít nhất một nhân viên thuộc phòng ban cụ thể:

SELECT *
FROM nhan_vien
WHERE luong > ANY (
    SELECT luong
    FROM nhan_vien
    WHERE ma_phong_ban = 2
);

Không nên hiểu ANY là yêu cầu giá trị phải lớn hơn toàn bộ kết quả. Điều kiện chỉ cần đúng với ít nhất một giá trị trong tập kết quả của truy vấn con.

Chọn cách dùng ANY phù hợp trong từng trường hợp

Khi xây dựng truy vấn, nên dùng ANY khi bài toán thực sự cần kiểm tra điều kiện với ít nhất một giá trị trong tập kết quả. Nếu yêu cầu là phải thỏa điều kiện với toàn bộ giá trị, ANY sẽ không phù hợp và cần cân nhắc cách biểu đạt khác.

Trước khi sử dụng, cũng nên kiểm tra truy vấn con có thể trả về những giá trị nào. Việc hiểu rõ tập dữ liệu này giúp tránh kết quả rộng hơn dự kiến, đặc biệt khi truy vấn được áp dụng trên bảng có nhiều bản ghi.

Trong các truy vấn lớn, nên viết điều kiện rõ ràng và kiểm tra hiệu năng khi cần thiết. Một câu lệnh dùng ANY đúng về logic nhưng có truy vấn con phức tạp vẫn có thể cần được tối ưu để xử lý dữ liệu hiệu quả.

Lời kết

Cảm ơn các bạn đã tham khảo bài viết Toán tử ANY 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
CEO Bùi Tấn Lực | Founder Web Mới
Bùi Tấn Lực
Tìm hiểu về CEO Bùi Tấn Lực, Founder Web Mới với nhiều năm kinh nghiệm trong lĩnh vực phát triển website, SEO và chia sẻ kiến thức công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Toán tử ANY trong MySQL
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 *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !