Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Truy vấn MySQL với AND, OR kết hợp và dấu ngoặc đơn

Kết hợp AND, OR với dấu ngoặc đơn trong WHERE MySQL

Toán tử AND có độ ưu tiên cao hơn OR. Sử dụng dấu ngoặc đơn () để nhóm điều kiện OR trước khi kết hợp với AND, tránh logic sai.

1. Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName VARCHAR(40),
    StudentMathMarks INT,
    StudentMySQLMarks INT,
    status ENUM('ACTIVE','INACTIVE')
);
mysql> INSERT INTO DemoTable (StudentName, StudentMathMarks, StudentMySQLMarks, status) VALUES
    ('Chris', 45, 67, 'active'),
    ('Bob', 89, 78, 'inactive'),
    ('David', 56, 68, 'active'),
    ('Robert', 68, 75, 'active');

2. Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+-----------+-------------+------------------+-------------------+----------+
| StudentId | StudentName | StudentMathMarks | StudentMySQLMarks | status   |
+-----------+-------------+------------------+-------------------+----------+
| 1         | Chris       | 45               | 67                | ACTIVE   |
| 2         | Bob         | 89               | 78                | INACTIVE |
| 3         | David       | 56               | 68                | ACTIVE   |
| 4         | Robert      | 68               | 75                | ACTIVE   |
+-----------+-------------+------------------+-------------------+----------+

3. Truy vấn: ACTIVE VÀ (Math=68 HOẶC MySQL=67)

mysql> SELECT * FROM DemoTable
    WHERE status = 'active'
      AND (StudentMathMarks = 68 OR StudentMySQLMarks = 67);

4. Kết quả

+-----------+-------------+------------------+-------------------+--------+
| StudentId | StudentName | StudentMathMarks | StudentMySQLMarks | status |
+-----------+-------------+------------------+-------------------+--------+
| 1         | Chris       | 45               | 67                | ACTIVE |
| 4         | Robert      | 68               | 75                | ACTIVE |
+-----------+-------------+------------------+-------------------+--------+

Phân tích logic:

  • Chris: ACTIVE ✓, Math=45≠68, MySQL=67=67 ✓ → (FALSE OR TRUE) = TRUE → Chọn
  • Bob: INACTIVE ✗ → Loại (không cần kiểm tra điểm)
  • David: ACTIVE ✓, Math=56≠68, MySQL=68≠67 → (FALSE OR FALSE) = FALSE → Loại
  • Robert: ACTIVE ✓, Math=68=68 ✓ → (TRUE OR ...) = TRUE → Chọn

Quy tắc ưu tiên: AND > OR. Nếu thiếu ngoặc: status='active' AND Math=68 OR MySQL=67 sẽ hiểu là (status='active' AND Math=68) OR MySQL=67 → sai logic.

Best practice: Luôn dùng ngoặc đơn rõ ràng cho nhóm OR ngay cả khi không bắt buộc, để code dễ đọc và tránh bug.