Toán tử ALL trong MySQL
Bùi Tấn Lực
- 955
- 23/09/2025
Chức năng của Toán tử ALL trong MySQL
Toán tử ALL trong MySQL dùng để so sánh id của bảng này xem có bằng, lớn hơn, nhỏ hơn với tất cả các id đã thỏa điều kiện ở bảng khác hay không.
Code Toán tử ALL trong MySQL
Toán tử = ALL trong MySQL
Nếu có id ở bảng này bằng với tất cả id thỏa điều kiện ở bảng khác thì trả về id đó:
select ten,id from tb_sanpham where id = ALL (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 = ALL (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
--------------------------------
Toán tử > ALL trong MySQL
Nếu có id ở bảng này lớn hơn tất cả id thỏa điều kiện ở bảng khác thì trả về những id đó:
select ten,id from tb_sanpham where id > ALL (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 > ALL (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: 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
--------------------------------
Toán tử
Nếu có id ở bảng này nhỏ hơn tất cả id thỏa điều kiện ở bảng khác thì trả về những id đó:
select ten,id from tb_sanpham where id < ALL (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 < ALL (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: 1
Tên: Dàn karaoke gia đình KTreasure FE12 thương hiệu Đức
--------------------------------
Những lỗi thường gặp khi sử dụng toán tử ALL trong MySQL
Toán tử ALL thường được dùng cùng truy vấn con để kiểm tra một giá trị có thỏa điều kiện với toàn bộ kết quả được trả về hay không. Do đó, phần dễ sai không nằm ở cú pháp mà ở cách hiểu điều kiện so sánh.
Nhầm cách kết hợp ALL với các toán tử so sánh
ALL không hoạt động độc lập mà phải đi cùng một toán tử so sánh như >, , >= hoặc . Toán tử đứng trước ALL quyết định cách MySQL đánh giá giá trị với từng phần tử trong tập kết quả.
Chẳng hạn, điều kiện > ALL chỉ đúng khi giá trị bên trái lớn hơn mọi giá trị mà truy vấn con trả về. Vì vậy, không nên hiểu ALL đơn giản là phép kiểm tra với một giá trị bất kỳ.
SELECT *
FROM products
WHERE price > ALL (
SELECT price
FROM products
WHERE category_id = 2
);
Trong ví dụ này, sản phẩm chỉ được chọn khi giá của nó lớn hơn toàn bộ mức giá thuộc nhóm có category_id = 2.
Chưa hiểu đúng kết quả khi truy vấn trả về nhiều giá trị
Một lỗi phổ biến là chỉ quan tâm đến một giá trị trong kết quả của truy vấn con. Với ALL, MySQL phải xét điều kiện đối với toàn bộ tập kết quả. Chỉ cần một giá trị không thỏa điều kiện thì biểu thức không đạt yêu cầu.
Ví dụ, nếu truy vấn con trả về các giá trị 10, 20, 30, điều kiện 50 > ALL là đúng vì 50 lớn hơn cả ba giá trị. Ngược lại, 25 > ALL là sai vì 25 không lớn hơn 30.
Cách hiểu này đặc biệt quan trọng khi truy vấn con có thể trả về nhiều dòng và số lượng kết quả thay đổi theo dữ liệu thực tế.
Lưu ý khi sử dụng ALL với truy vấn con
Trước khi sử dụng ALL, cần kiểm tra truy vấn con có thực sự trả về tập dữ liệu phù hợp để so sánh hay không. Cột được so sánh cũng nên có kiểu dữ liệu tương thích với giá trị ở phía bên ngoài.
Ngoài ra, cần chú ý trường hợp truy vấn con không trả về dòng nào hoặc có giá trị NULL, vì kết quả logic có thể khác với suy nghĩ ban đầu. Khi truy vấn phức tạp, nên kiểm tra riêng kết quả của truy vấn con trước rồi mới ghép vào điều kiện ALL.
SELECT price
FROM products
WHERE category_id = 2;
Cách kiểm tra này giúp xác định rõ tập giá trị mà ALL sẽ sử dụng để so sánh, từ đó hạn chế lỗi logic và giúp câu lệnh SQL dễ kiểm tra hơn.
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Toán tử ALL 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 *