Chuyển đến nội dung chính

Toán tử OR trong SQL: Hướng dẫn kèm ví dụ

Toán tử OR trong SQL cho phép bạn lọc dữ liệu bằng cách kết hợp nhiều điều kiện, trả về các hàng khi ít nhất một điều kiện đúng. Tìm hiểu cách dùng OR với các câu lệnh INSERT, UPDATE và DELETE để sửa đổi bản ghi trong bảng.
· 8 phút đọc

Khám phá cùng AI

Toán tử logic OR trong SQL được dùng trong truy vấn để lọc dữ liệu dựa trên nhiều điều kiện. Toán tử OR thường được dùng trong mệnh đề WHERE để trả về các kết quả thỏa mãn những điều kiện đã cho. Tính năng này khiến OR trở thành công cụ quan trọng để truy xuất dữ liệu linh hoạt.

Trong hướng dẫn này, tôi sẽ trình bày bằng các ví dụ thực tế những trường hợp sử dụng khác nhau của toán tử OR trong truy vấn SQL. Nếu bạn đang hướng tới vị trí nhà phân tích dữ liệu hoặc mới bắt đầu với SQL, tôi khuyến nghị khóa học Introduction to SQL của DataCamp để học các kiến thức cơ bản. SQL Basics Cheat Sheet cũng sẽ giúp bạn tra cứu nhanh các toán tử và hàm phổ biến để truy vấn bảng, lọc và tổng hợp dữ liệu.

Toán tử OR trong SQL là gì?

Toán tử OR trong SQL thường được dùng với mệnh đề WHERE để lọc dữ liệu. Khi dùng trong truy vấn, OR sẽ lọc để bao gồm những hàng mà ít nhất một trong các điều kiện chỉ định là đúng.

Truy vấn sau sẽ trả về tất cả bản ghi trong bảng employees thuộc phòng Nhân sự (HR) hoặc có mức lương trên 60.000$. Nếu một hàng thỏa mãn một trong hai điều kiện hoặc cả hai, nó sẽ được đưa vào kết quả truy vấn.

-- Select rows where the department is either 'HR' OR salary greater than 60,000
SELECT *
FROM employees
WHERE department = 'HR'
OR salary > 60000;

Ví dụ đầu ra bảng được lọc bằng toán tử OR trong SQL

Ví dụ đầu ra bảng được lọc bằng toán tử OR trong SQL. Ảnh: Tác giả.

Khám phá khóa học Intermediate SQL của DataCamp để tìm hiểu thêm về toán tử OR và các toán tử khác dùng cho lọc dữ liệu có điều kiện.

Cú pháp của toán tử OR trong SQL

Toán tử OR dễ sử dụng và tích hợp trong truy vấn SQL. Dưới đây là cú pháp cơ bản khi dùng trong câu lệnh SELECT.

SELECT column1, column2, ...
FROM table_name
WHERE condition1
OR condition2
OR condition3;

Lưu ý bạn có thể dùng nhiều hơn một điều kiện OR trong mệnh đề WHERE.

Cách dùng cơ bản trong câu lệnh SELECT

Toán tử OR được dùng trong câu lệnh SELECT để trả về các bản ghi đáp ứng bất kỳ điều kiện nào được cung cấp. Điều này giúp OR hữu ích khi truy xuất bản ghi mà không cần viết nhiều truy vấn phức tạp.

Trong ví dụ dưới đây, OR lọc tất cả bản ghi nhân viên ở "New York" hoặc "Los Angeles".

-- Select employeees from New York or Los Angeles city
SELECT first_name, last_name, city
FROM employees
WHERE city = 'New York'
OR city = 'Los Angeles';

Kết hợp OR với AND trong SQL

Toán tử OR có thể kết hợp với AND để tạo các điều kiện phức tạp hơn trong truy vấn SQL. Khi dùng cả OR và AND, chúng ta dùng dấu ngoặc để kiểm soát thứ tự thực hiện.

Xem xét truy vấn sau: Chúng ta muốn chọn tất cả nhân viên thuộc phòng IT và sống ở "New York" (như một điều kiện), hoặc có thu nhập trên 70.000$. Dấu ngoặc nhóm điều kiện AND để đánh giá như một khối duy nhất trước khi áp dụng OR.

-- Select columns
SELECT first_name, last_name, department, city, salary
FROM employees
 -- Grouping IT department in New York
WHERE (department = 'IT' AND city = 'New York')
-- Employees with salary over 70,000
OR salary > 70000;

Ví dụ đầu ra bảng khi lọc bằng cách kết hợp OR với AND.

Ví dụ đầu ra bảng khi lọc bằng cách kết hợp OR với AND. Ảnh: Tác giả.

Truy vấn trên đánh giá và trả về bản ghi của:

  • Nhân viên làm việc tại phòng IT và sống ở New York.

  • Hoặc bất kỳ nhân viên nào có thu nhập trên 70.000$, không phụ thuộc phòng ban hay thành phố.

Khi kết hợp OR với AND, bạn cần nhóm điều kiện đúng bằng dấu ngoặc. Sai sót này có thể dẫn đến lỗi logic và trả về kết quả không mong muốn.

Nếu không dùng dấu ngoặc, điều kiện AND sẽ được đánh giá trước điều kiện OR. Do đó, dùng dấu ngoặc đúng cách sẽ nhóm điều kiện một cách rõ ràng và đảm bảo thứ tự đánh giá như dự định.

Ví dụ về toán tử OR trong SQL

Toán tử OR có thể được dùng trong nhiều truy vấn SQL để truy xuất bản ghi hoặc thao tác dữ liệu trong cơ sở dữ liệu. Dưới đây là các ví dụ về những trường hợp sử dụng OR.

Lọc dữ liệu với nhiều điều kiện

Toán tử OR chủ yếu được dùng để lọc bản ghi dựa trên hai hoặc nhiều điều kiện. Cách này quan trọng khi cần mở rộng tiêu chí tìm kiếm trong cơ sở dữ liệu. Ví dụ sau sẽ lọc và trả về bản ghi hiển thị các nhân viên ở New York City hoặc có thu nhập trên 80.000$.

-- Select columns
SELECT first_name, last_name, department, city, salary
FROM employees
 -- Employees in New York City
WHERE city = 'New York'
-- Employees with salary over 80,000
OR salary > 80000;

Dùng toán tử OR trong câu lệnh INSERT

Bạn có thể dùng OR với câu lệnh INSERT để chèn bản ghi mới vào bảng nếu thỏa mãn điều kiện chỉ định. Trong ví dụ dưới đây, truy vấn sẽ chèn một bản ghi mới vào bảng employees nếu nhân viên thuộc phòng HR hoặc có thu nhập trên 60.000$. Truy vấn dưới đây phù hợp với cơ sở dữ liệu SQL Server, MySQL và PostgreSQL.

-- Insert a new record into the 'employees' table
INSERT INTO employees (employee_id, first_name, last_name, department, salary, city)
SELECT 49, 'Anna', 'Johnson', 'HR', 62000, 'New York'
 -- First condition: department is 'HR'
WHERE 'HR' = 'HR' 
 -- Second condition: salary is greater than $60,000
   OR 62000 > 60000;

Trong cơ sở dữ liệu Oracle, câu lệnh INSERT khác biệt và yêu cầu mệnh đề FROM sử dụng bảng dual, một bảng đặc biệt chỉ có một hàng, một cột được cung cấp sẵn. Hãy tham gia khóa Introduction to SQL Server nếu bạn sẽ làm việc cụ thể với SQL Server.  

-- Insert a new record into the 'employees' table
INSERT INTO employees (employee_id, first_name, last_name, department, salary, city)
SELECT 49, 'Anna', 'Johnson', 'HR', 62000, 'New York'
FROM dual
WHERE 'HR' = 'HR'  -- First condition: department is 'HR'
   OR 62000 > 60000;  -- Second condition: salary is greater than $60,000

Dùng toán tử OR trong câu lệnh UPDATE

Câu lệnh UPDATE được dùng trong SQL để sửa đổi các bản ghi hiện có trong bảng. Bạn có thể dùng OR trong câu lệnh UPDATE để sửa đổi những bản ghi theo nhiều điều kiện, chỉ cập nhật những bản ghi thỏa mãn điều kiện.

Trong ví dụ dưới đây, chúng ta dùng OR để cập nhật lương của nhân viên nếu họ thuộc phòng Tài chính (Finance) hoặc sống ở Chicago.

-- Update the salary for the employee
UPDATE employees
-- Increase salary by 10%
SET salary = salary * 1.1  
-- First condition: department is 'Finance'
WHERE department = 'Finance' 
 -- Second condition: employees in Chicago City
OR city = 'Chicago';

Dùng toán tử OR trong câu lệnh DELETE

Tương tự, câu lệnh DELETE trong SQL được dùng để xóa các bản ghi hiện có khỏi bảng. Bạn có thể dùng OR với DELETE để xóa bản ghi khỏi bảng theo các điều kiện cụ thể.

Truy vấn dưới đây sẽ xóa các bản ghi khỏi bảng employees nơi nhân viên đến từ Chicago hoặc có thu nhập 60.000$.

-- Delete records from the 'employees' table
DELETE FROM employees
-- First condition: employees from Chicago
WHERE city = 'Chicago'
-- Second condition: employees earning 60000
OR salary = 60000;

Các lưu ý về hiệu năng khi dùng truy vấn SQL có OR

Khi làm việc với tập dữ liệu lớn, bạn có thể gặp vấn đề hiệu năng với OR. Điều này có thể làm chậm thao tác khi lọc bản ghi từ các tập dữ liệu lớn. Dưới đây là những vấn đề hiệu năng thường gặp và cách giảm thiểu.

Quét toàn bộ bảng

Khi dùng OR trên tập dữ liệu lớn, truy vấn có thể thực hiện quét toàn bộ bảng, đặc biệt khi không có lập chỉ mục (index) phù hợp. Điều này có thể làm chậm thời gian thực thi vì truy vấn phải đánh giá từng hàng. Để tránh vấn đề này, bạn nên đánh chỉ mục các cột cần thiết để bộ máy cơ sở dữ liệu có thể định vị cột dễ dàng và quét nhanh hơn.

Đánh giá điều kiện phức tạp

Khi dùng OR để đánh giá nhiều điều kiện trong một bảng, truy vấn có thể chậm đáng kể, đặc biệt khi không được đánh chỉ mục đúng cách. Khi dùng các điều kiện OR phức tạp, tái cấu trúc truy vấn thành các phần nhỏ hơn, như dùng truy vấn con (subquery), có thể giúp cải thiện hiệu năng.

Điều kiện dư thừa

Việc đưa vào những điều kiện OR không cần thiết có thể làm chậm hiệu năng do truy vấn phải đánh giá tất cả điều kiện. Chỉ dùng các điều kiện OR cần thiết và có khả năng đúng sẽ giúp đơn giản hóa và cải thiện hiệu năng truy vấn.

Các phương án thay thế OR

Khi gặp vấn đề hiệu năng với OR, bạn có thể cân nhắc các phương án sau để lọc dữ liệu dựa trên nhiều điều kiện.

Dùng toán tử UNION

Toán tử UNION chủ yếu dùng để kết hợp kết quả từ hai hoặc nhiều câu lệnh SELECT khi cần các chỉ mục khác nhau. Trong truy vấn dưới đây, UNION kết hợp các thao tác để lọc và trả về bản ghi các employees thuộc department IT ở city New York. Đọc hướng dẫn UNION vs UNION ALL in SQL nếu bạn chưa quen với UNION. 

-- Use UNION instead of OR for better performance
SELECT first_name, last_name, department, city
FROM employees
-- First condition
WHERE department = 'IT'  
UNION
SELECT first_name, last_name, department, city
FROM employees
-- Second condition
WHERE city = 'New York'; 

Dùng câu lệnh CASE

Câu lệnh CASE là một lựa chọn thay thế quan trọng cho OR nếu bạn muốn đưa điều kiện logic vào truy vấn. CASE có thể cải thiện hiệu năng tùy theo cách thực thi tối ưu. Truy vấn dưới đây dùng CASE để phân loại phòng ban dựa trên nhiều điều kiện.

-- Select first name, last name, and a derived category based on conditions
SELECT first_name, last_name,  
-- Use CASE to determine the category based on department or city
CASE  
-- If department is 'IT', categorize as 'Tech' If city is 'New York', categorize as 'NYC'
  WHEN department = 'IT' THEN 'Tech'  
  WHEN city = 'New York' THEN 'NYC'  -- 
  ELSE 'Other'
END AS category
FROM employees; 

Xem thêm lộ trình kỹ năng SQL Fundamentals để tìm hiểu về toán tử UNION và câu lệnh CASE cho thao tác dữ liệu.

Kết luận

Toán tử OR là một toán tử SQL linh hoạt để xây dựng các truy vấn linh động và phức tạp. OR cho phép bạn lọc bản ghi trong bảng dựa trên nhiều điều kiện. Như đã thấy, khi dùng với các câu lệnh khác như INSERT, UPDATE và DELETE, OR cũng cho phép sửa đổi các bản ghi trong bảng. Với vai trò nhà phân tích dữ liệu, việc hiểu các vấn đề hiệu năng của OR và các phương án thay thế như UNION và CASE WHEN là rất quan trọng. 

Tôi khuyến khích bạn thực hành dùng OR để lọc bản ghi với các tập dữ liệu khác nhau nhằm trở nên thuần thục hơn với chức năng này. Để nâng cao kỹ năng SQL, hãy cân nhắc lộ trình nghề nghiệp Associate Data Analyst in SQL để trở thành một nhà phân tích thành thạo. Khóa học Reporting in SQL cũng sẽ giúp bạn học cách phân tích và trình bày dữ liệu bằng bảng điều khiển. Cuối cùng, tôi khuyến nghị lấy SQL Associate Certification của DataCamp để chứng minh kỹ năng và mức độ thành thạo SQL cho phân tích dữ liệu.

Allan Ouko

Tác giả

Allan Ouko

Biên tập viên kỹ thuật về Khoa học dữ liệu với kinh nghiệm thực tế trong phân tích dữ liệu, trí tuệ doanh nghiệp và khoa học dữ liệu. Tôi viết nội dung thực tiễn, tập trung vào ngành về SQL, Python, Power BI, Databricks và kỹ thuật dữ liệu, dựa trên công việc phân tích trong thế giới thực. Bài viết của tôi kết nối chiều sâu kỹ thuật với tác động kinh doanh, giúp các chuyên gia chuyển đổi dữ liệu thành những quyết định vững chắc.

Các câu hỏi thường gặp về SQL

Sự khác nhau giữa toán tử OR và AND trong SQL là gì?

Toán tử OR trả về kết quả nếu bất kỳ điều kiện nào được chỉ định là đúng, trong khi AND chỉ trả về kết quả khi tất cả điều kiện đều đúng.

Có thể dùng toán tử OR cùng với AND trong một truy vấn không?

Bạn có thể dùng toán tử OR và AND để lọc bản ghi dựa trên nhiều điều kiện. Tuy nhiên, bạn nên dùng dấu ngoặc để nhóm điều kiện và xác định thứ tự thực thi truy vấn.

Có hạn chế về số lượng điều kiện khi lọc bằng toán tử OR trong SQL không?

Không có giới hạn số lượng điều kiện để lọc bằng OR, mặc dù quá nhiều điều kiện có thể ảnh hưởng đến hiệu năng truy vấn.

Có thể dùng toán tử OR để sửa đổi dữ liệu trong bảng không?

Bạn có thể dùng toán tử OR với các câu lệnh INSERT, UPDATE và DELETE để sửa đổi các bản ghi được chỉ định trong bảng.

Những phương án thay thế toán tử OR trong SQL là gì?

Toán tử UNION và câu lệnh CASE WHEN là các phương án thay thế cho OR để lọc bản ghi dựa trên nhiều điều kiện.

Chủ đề

Liên quan