📝 Ngày 6: Sử dụng các toán tử logic (AND, OR, NOT) trong SQL Server
🎯 Mục tiêu buổi học:
- Hiểu cách sử dụng các toán tử logic trong điều kiện
WHERE
. - Kết hợp nhiều điều kiện với
AND
,OR
,NOT
. - Tránh những lỗi phổ biến khi dùng toán tử logic.
1️⃣ Giới thiệu toán tử logic
Khi viết truy vấn SQL, chúng ta thường cần lọc dữ liệu theo nhiều điều kiện. SQL Server cung cấp 3 toán tử logic quan trọng:
Toán tử | Ý nghĩa | Ví dụ |
---|---|---|
AND | Chỉ chọn các dòng thỏa mãn tất cả điều kiện | Chọn nhân viên có lương > 5000 và chức vụ là "Manager" |
OR | Chọn các dòng thỏa mãn ít nhất một điều kiện | Chọn nhân viên có lương > 5000 hoặc có chức vụ là "Manager" |
NOT | Lọc bỏ những dòng thỏa mãn điều kiện | Chọn tất cả nhân viên ngoại trừ những người có chức vụ là "Intern" |
2️⃣ Ví dụ minh họa
🔹 Sử dụng AND
Giả sử bạn có bảng Employees
với các cột EmployeeID
, FirstName
, Salary
, JobTitle
.
Bạn muốn tìm những nhân viên có lương trên 5000 và giữ chức vụ Manager:
SELECT * FROM Employees
WHERE Salary > 5000 AND JobTitle = 'Manager';
📌 Giải thích: Câu lệnh trên chỉ trả về các nhân viên có cả hai điều kiện đúng.
🔹 Sử dụng OR
Bây giờ, bạn muốn tìm những nhân viên có lương trên 5000 hoặc giữ chức vụ Manager:
SELECT * FROM Employees
WHERE Salary > 5000 OR JobTitle = 'Manager';
📌 Giải thích: Chỉ cần một trong hai điều kiện đúng là bản ghi sẽ được chọn.
🔹 Sử dụng NOT
Giả sử bạn muốn tìm tất cả nhân viên ngoại trừ những người có chức vụ "Intern":
SELECT * FROM Employees
WHERE NOT JobTitle = 'Intern';
📌 Giải thích: SQL Server sẽ lọc tất cả các bản ghi ngoại trừ những người có JobTitle là "Intern".
🔹 Kết hợp AND, OR, NOT Bạn có thể kết hợp nhiều toán tử logic trong cùng một câu truy vấn. Ví dụ: Tìm những nhân viên có lương trên 5000 hoặc là Manager, nhưng không phải là Intern:
SELECT * FROM Employees
WHERE (Salary > 5000 OR JobTitle = 'Manager') AND NOT JobTitle = 'Intern';
📌 Lưu ý: Dùng dấu ngoặc tròn ()` để kiểm soát thứ tự ưu tiên của điều kiện.
3️⃣ Những lỗi thường gặp khi sử dụng toán tử logic
Quên dấu ngoặc làm thay đổi thứ tự ưu tiên
SELECT * FROM Employees
WHERE Salary > 5000 OR JobTitle = 'Manager' AND NOT JobTitle = 'Intern';
📌 Sai: SQL sẽ ưu tiên thực hiện AND trước OR, có thể gây sai kết quả.
✅ Sửa đúng: Dùng dấu ngoặc để đảm bảo điều kiện chạy đúng.
4️⃣ Bài tập thực hành
Tìm nhân viên có lương trên 7000 và làm ở bộ phận "IT".
Tìm nhân viên có chức vụ là "Sales" hoặc có lương trên 6000.
Tìm tất cả nhân viên ngoại trừ những người có chức vụ "HR".
💡 Gợi ý đáp án:
-- Bài 1
SELECT * FROM Employees
WHERE Salary > 7000 AND Department = 'IT';
-- Bài 2
SELECT * FROM Employees
WHERE JobTitle = 'Sales' OR Salary > 6000;
-- Bài 3
SELECT * FROM Employees
WHERE NOT JobTitle = 'HR';
🚀 Chúc bạn học tốt! Ngày mai, chúng ta sẽ học cách sắp xếp dữ liệu với ORDER BY. Hẹn gặp lại ở Ngày 7 nhé! 🎯