Toán tử SOME trong MySQL
Bùi Tấn Lực
- 1286
- 25/09/2025
Chức năng của Toán tử SOME trong MySQL
Toán tử SOME trong MySQL dùng để lấy những hàng ở bảng này mà chỉ cần thỏa điều kiện đối với một vài hàng có điều kiện ở bảng khác.
Code Toán tử SOME trong MySQL
Lấy những sản phẩm ở bảng này có id lớn hơn id của một vài sản phẩm có điều kiện ở bảng kia:
select ten,id from tb_sanpham where id > SOME (select idsanpham from tb_donhang where soluong>1);
<?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 > SOME (select idsanpham from tb_donhang where soluong>1)";
// 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
--------------------------------
ID: 3
Tên: Dàn âm thanh nghe nhạc AV01
--------------------------------
ID: 4
Tên: Dàn âm thanh nghe nhạc AV02
--------------------------------
ID: 6
Tên: Micro Shure SM58-LC
--------------------------------
ID: 7
Tên: Micro AKG D7 S
--------------------------------
Cách sử dụng SOME hiệu quả trong MySQL
Toán tử SOME phát huy tác dụng khi cần so sánh một giá trị với nhiều kết quả được trả về từ truy vấn con. Để sử dụng chính xác, cần hiểu mối quan hệ giữa SOME, ANY và các cách viết truy vấn tương đương.
SOME và ANY có gì khác nhau?
Trong MySQL, SOME và ANY có cùng ý nghĩa khi sử dụng với truy vấn con. Cả hai đều kiểm tra điều kiện so sánh với ít nhất một giá trị mà truy vấn con trả về.
Ví dụ, điều kiện sau có thể hiểu là tìm những sản phẩm có giá lớn hơn ít nhất một mức giá trong nhóm sản phẩm được chọn:
SELECT *
FROM products
WHERE price > SOME (
SELECT price
FROM products
WHERE category_id = 2
);
Có thể viết lại bằng ANY mà không thay đổi ý nghĩa:
SELECT *
FROM products
WHERE price > ANY (
SELECT price
FROM products
WHERE category_id = 2
);
Vì vậy, khi gặp SOME hoặc ANY, có thể hiểu theo cùng một nguyên tắc. Việc lựa chọn cách viết chủ yếu phụ thuộc vào thói quen và mức độ dễ đọc của câu truy vấn.
Khi nào nên dùng SOME thay cho IN?
SOME phù hợp khi điều kiện cần kết hợp với các toán tử so sánh như >, , >= hoặc . Trong khi đó, IN thường được dùng để kiểm tra một giá trị có nằm trong tập kết quả hay không.
Chẳng hạn, nếu chỉ cần tìm sản phẩm thuộc một danh sách mã danh mục, IN sẽ trực quan hơn:
SELECT *
FROM products
WHERE category_id IN (
SELECT id
FROM categories
WHERE status = 1
);
Ngược lại, khi cần diễn đạt một quan hệ như “lớn hơn ít nhất một giá trị” hoặc “nhỏ hơn ít nhất một giá trị”, SOME giúp thể hiện rõ ý nghĩa của phép so sánh:
SELECT *
FROM products
WHERE price > SOME (
SELECT price
FROM products
WHERE category_id = 2
);
Do đó, không nên xem SOME là phiên bản thay thế cho IN trong mọi trường hợp. Hãy chọn toán tử dựa trên bản chất của điều kiện cần kiểm tra.
Những lưu ý khi kết hợp SOME với truy vấn con
Điều quan trọng nhất khi sử dụng SOME là truy vấn con phải trả về một tập giá trị phù hợp với phép so sánh bên ngoài. Nếu truy vấn con trả về dữ liệu không đúng kiểu hoặc không đúng cột cần so sánh, câu lệnh có thể cho kết quả không như mong muốn.
Ngoài ra, cần chú ý trường hợp truy vấn con không trả về dữ liệu. Khi đó, không nên suy luận kết quả chỉ dựa trên một giá trị đơn lẻ mà cần xem xét logic của toàn bộ điều kiện.
Khi câu truy vấn có nhiều lớp truy vấn con, nên đặt tên bảng và điều kiện rõ ràng để dễ kiểm tra. Nếu SOME khiến câu lệnh trở nên khó đọc, có thể cân nhắc cách viết khác phù hợp hơn với tình huống thực tế.
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Toán tử SOME 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 *