| Ngày 6: Sử dụng các toán tử logic (AND, OR, NOT) tr…

Được viết bởi Đặng Trí Thanh vào ngày 27/06/2026 lúc 23:55 | 26 lượt xem

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  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 O​R​ 

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é! 🎯

Ngay%206%20 %20SQL%20Server

Mở rộng — Bảng tổng hợp ba toán tử logic AND, OR, NOT

Ba toán tử logic là công cụ nền tảng để lọc dữ liệu trong mọi truy vấn SQL. Hiểu rõ bảng chân trị giúp bạn viết điều kiện WHERE chính xác ngay từ đầu.

Toán tử Ý nghĩa Kết quả khi đúng
AND Tất cả điều kiện phải đúng Chọn bản ghi
OR Ít nhất một điều kiện đúng Chọn bản ghi
NOT Phủ định điều kiện Loại bỏ bản ghi khớp

Bảng chân trị AND

Điều kiện 1 Điều kiện 2 Kết quả
Đúng Đúng Đúng
Đúng Sai Sai
Sai Đúng Sai
Sai Sai Sai

Bảng chân trị OR

Điều kiện 1 Điều kiện 2 Kết quả
Đúng Đúng Đúng
Đúng Sai Đúng
Sai Đúng Đúng
Sai Sai Sai

Mẹo ghi nhớ: AND khắt khe (cả hai đều đúng), OR dễ tính (một đúng là đủ), NOT đảo ngược.

Mở rộng — Ví dụ kết hợp nhiều điều kiện trong SQL

Trong thực tế, bạn hiếm khi dùng một điều kiện đơn lẻ. Việc kết hợp AND, OR, NOT đúng thứ tự quyết định độ chính xác của truy vấn.

-- [VÍ DỤ KẾT HỢP - SQL]
-- Tìm nhân viên lương cao HOẶC là Manager, nhưng không phải Intern
SELECT FirstName, Salary, JobTitle
FROM Employees
WHERE (Salary > 5000 OR JobTitle = 'Manager')
  AND NOT JobTitle = 'Intern';

Thứ tự ưu tiên toán tử

SQL Server ưu tiên: NOT trước, rồi AND, cuối cùng là OR. Khi không chắc, hãy dùng dấu ngoặc để rõ ràng — tránh lỗi logic khó phát hiện.

Mở rộng — Sử dụng NOT với IN và LIKE

Toán tử NOT thường kết hợp với IN, LIKE, BETWEEN để loại bỏ một nhóm dữ liệu cụ thể.

-- [NOT IN / NOT LIKE - SQL]
-- Nhân viên KHÔNG thuộc phòng HR hoặc IT
SELECT FirstName, Department
FROM Employees
WHERE Department NOT IN ('HR', 'IT');

-- Nhân viên có email KHÔNG phải công ty
SELECT FirstName, Email
FROM Employees
WHERE Email NOT LIKE '%@company.com';

Bảng các cách dùng NOT phổ biến

Cú pháp Ý nghĩa
NOT (điều kiện) Phủ định điều kiện
NOT IN (danh sách) Không thuộc danh sách
NOT LIKE ‘mẫu’ Không khớp mẫu
NOT BETWEEN a AND b Ngoài khoảng a–b
IS NOT NULL Có giá trị

Mở rộng — Lỗi phổ biến khi dùng toán tử logic

Lỗi 1: Quên ngoặc khi kết hợp AND/OR

Do ưu tiên AND trước OR, truy vấn có thể cho kết quả sai nếu không dùng ngoặc. Luôn đặt ngoặc cho nhóm điều kiện OR.

-- [SAI VS ĐÚNG - SQL]
-- SAI: hiểu thành Salary>5000 AND (Job='M' OR Dep='IT')
SELECT * FROM Employees
WHERE Salary > 5000 OR JobTitle = 'Manager' AND Department = 'IT';

-- ĐÚNG: nhóm điều kiện OR trong ngoặc
SELECT * FROM Employees
WHERE (Salary > 5000 OR JobTitle = 'Manager')
  AND Department = 'IT';

Lỗi 2: NOT IN với NULL

Nếu danh sách chứa NULL, NOT IN không trả về kết quả như mong đợi. Dùng NOT EXISTS hoặc lọc NULL trước.

Lỗi 3: So sánh NULL sai

NULL không bằng bất kỳ giá trị nào. Phải dùng IS NULL / IS NOT NULL, không dùng dấu = hoặc !=.

Mở rộng — Ứng dụng toán tử logic trong phân tích dữ liệu giao dịch

Kiến thức SQL không chỉ dùng cho công việc văn phòng mà còn hữu ích khi phân tích dữ liệu giao dịch: lọc giao dịch thắng/thua, tìm điều kiện thị trường.

-- [PHÂN TÍCH GIAO DỊCH - SQL]
-- Giao dịch thắng lớn HOẶC giữ lâu, nhưng không phải đòn bẩy cao
SELECT trade_id, symbol, profit, leverage
FROM trades
WHERE (profit > 500 OR holding_minutes > 120)
  AND NOT leverage > 50;

Bảng ví dụ ứng dụng thực tế

Bài toán Toán tử
Lọc giao dịch thắng trên 100$ và volume lớn AND
Tìm giao dịch BTC hoặc ETH OR / IN
Loại bỏ giao dịch test NOT LIKE ‘%test%’

Kết hợp SQL + Python để phân tích sâu

# [SQL + PYTHON - PYTHON]
import sqlite3

conn = sqlite3.connect("trades.db")
cur = conn.cursor()

# dùng chuỗi nối một dòng để tránh lỗi xuống dòng
query = ("SELECT symbol, COUNT(*) as total, SUM(profit) as net "
         "FROM trades "
         "WHERE (profit > 0 AND volume >= 0.1) "
         "OR (strategy = 'grid' AND NOT leverage > 20) "
         "GROUP BY symbol")

cur.execute(query)
for row in cur.fetchall():
    print(row)

Ghi chú: dùng câu lệnh SQL một dòng hoặc concatenated để tránh lỗi — trong thực tế bạn có thể viết đa dòng với thư viện phù hợp.

Mở rộng — Câu hỏi thường gặp về toán tử logic SQL

AND và OR dùng thế nào cho đúng?

Dùng AND khi mọi điều kiện bắt buộc, dùng OR khi chỉ cần một điều kiện. Luôn đặt ngoặc cho nhóm OR khi kết hợp.

Tại sao NOT IN không trả về kết quả với NULL?

Vì so sánh với NULL cho kết quả UNKNOWN, không phải TRUE. Lọc NULL trước hoặc dùng NOT EXISTS.

Có thể dùng nhiều AND/OR trong một câu không?

Có, nhưng hãy nhóm bằng ngoặc để rõ ràng và tránh sai logic do thứ tự ưu tiên.

Bảng tóm tắt thứ tự ưu tiên

Thứ tự Toán tử
1 So sánh (=, >, <, LIKE, IN)
2 NOT
3 AND
4 OR

Kết luận

AND, OR, NOT là nền tảng của mọi truy vấn SQL lọc dữ liệu. Nắm vững bảng chân trị, thứ tự ưu tiên và các cạm bẫy NULL sẽ giúp bạn viết truy vấn chính xác và hiệu quả trong công việc thực tế.

Mở rộng — Bài tập thực hành toán tử logic

Bài 1: Lọc dữ liệu với AND

Viết truy vấn lấy nhân viên lương trên 5000 VÀ thuộc phòng Sales.

-- [GIẢI BÀI 1 - SQL]
SELECT FirstName, Salary, Department
FROM Employees
WHERE Salary > 5000 AND Department = 'Sales';

Bài 2: Lọc dữ liệu với OR

Lấy nhân viên thuộc phòng IT HOẶC Marketing.

-- [GIẢI BÀI 2 - SQL]
SELECT FirstName, Department
FROM Employees
WHERE Department = 'IT' OR Department = 'Marketing';

Bài 3: Kết hợp NOT

Lấy nhân viên không thuộc phòng HR, lương trên 4000.

-- [GIẢI BÀI 3 - SQL]
SELECT FirstName, Salary
FROM Employees
WHERE Salary > 4000 AND NOT Department = 'HR';

Bài 4: Thử thách tổng hợp

Lấy nhân viên (lương trên 6000 HOẶC là Manager) VÀ không phải Intern.

-- [GIẢI BÀI 4 - SQL]
SELECT FirstName, Salary, JobTitle
FROM Employees
WHERE (Salary > 6000 OR JobTitle = 'Manager')
  AND NOT JobTitle = 'Intern';

Hoàn thành cả 4 bài, bạn đã vững kiến thức toán tử logic để áp dụng vào mọi truy vấn SQL thực tế.

Mở rộng — Tổng kết Ngày 6 và ứng dụng vào thực tế

Ngày 6 bạn đã học ba toán tử logic nền tảng. Hãy tổng kết lại những gì đã nắm và cách áp dụng vào công việc thực tế (Data Analyst, Backend, Trading).

Bảng tóm tắt kiến thức

Toán tử Cách dùng Ví dụ
AND Mọi điều kiện đúng Salary > 5000 AND Dep = ‘Sales’
OR Một điều kiện đúng Dep = ‘IT’ OR Dep = ‘Marketing’
NOT Phủ định NOT JobTitle = ‘Intern’

Ứng dụng trong công việc

  • Data Analyst: Lọc dữ liệu kinh doanh theo nhiều điều kiện.
  • Backend: Truy vấn cơ sở dữ liệu cho API.
  • Trading: Phân tích lịch sử giao dịch, tìm mẫu.

Bài tập về nhà

  1. Viết 5 truy vấn dùng AND, OR, NOT trên bảng dữ liệu tự tạo.
  2. Thử kết hợp 3 toán tử trong một câu và kiểm tra kết quả.
  3. Ôn lại thứ tự ưu tiên và cách dùng ngoặc.

Nắm vững toán tử logic là nền tảng để bạn viết các truy vấn SQL phức tạp và chính xác hơn trong các ngày tiếp theo.

Mở rộng — Bảng tổng hợp các toán tử logic và ứng dụng

Bảng dưới đây tổng hợp toàn bộ toán tử logic đã học cùng ví dụ thực tế, giúp bạn tra cứu nhanh khi làm việc.

Toán tử Mô tả Ví dụ
AND Cả hai điều kiện đúng age > 18 AND city = ‘HN’
OR Một điều kiện đúng city = ‘HN’ OR city = ‘HCM’
NOT Phủ định NOT status = ‘blocked’
NOT IN Không thuộc danh sách NOT IN (‘A’, ‘B’)
NOT LIKE Không khớp mẫu NOT LIKE ‘%temp%’
IS NOT NULL Có giá trị email IS NOT NULL

Ứng dụng vào các ngày tiếp theo

Toán tử logic là nền tảng cho các bài học về JOIN, GROUP BY, subquery. Nắm chắc hôm nay sẽ giúp bạn học nhanh các phần nâng cao sau.

Kết luận Ngày 6

AND, OR, NOT là ba toán tử logic cốt lõi trong SQL. Kết hợp đúng thứ tự ưu tiên và ngoặc, bạn có thể lọc bất kỳ tập dữ liệu nào một cách chính xác. Hãy thực hành thật nhiều để thành thạo.

Mở rộng — Ôn tập nhanh trắc nghiệm

Kiểm tra nhanh kiến thức Ngày 6 bằng các câu hỏi trắc nghiệm dưới đây.

Câu 1: Điều kiện nào đúng khi dùng AND?

A. Một điều kiện đúng · B. Cả hai điều kiện đúng · C. Không điều kiện nào · D. Phủ định

Đáp án: B. AND yêu cầu cả hai điều kiện đúng.

Câu 2: OR trả về TRUE khi nào?

A. Cả hai sai · B. Ít nhất một đúng · C. Không bao giờ · D. Chỉ khi cả hai đúng

Đáp án: B. OR trả về TRUE khi ít nhất một điều kiện đúng.

Câu 3: Thứ tự ưu tiên đúng là gì?

A. OR → AND → NOT · B. NOT → AND → OR · C. AND → OR → NOT · D. NOT → OR → AND

Đáp án: B. NOT trước, AND, rồi OR.

Câu 4: NOT IN trả về gì khi danh sách có NULL?

A. Kết quả đúng · B. Không có kết quả · C. Lỗi · D. Tất cả bản ghi

Đáp án: B. NULL gây UNKNOWN nên NOT IN không trả về kết quả mong đợi.

Kết luận

Ôn tập trắc nghiệm giúp bạn củng cố kiến thức toán tử logic. Nắm chắc phần này là nền tảng quan trọng cho các bài SQL nâng cao tiếp theo.

Trader hiện đại và sử dụng toán tử

Trader chuyên nghiệp ngày nay không chỉ đọc biểu đồ mà còn dùng sử dụng toán tử để tự động hóa phân tích, kiểm tra chiến lược và quản lý rủi ro. Python giúp biến ý tưởng thành công cụ một cách nhanh chóng.

Bài viết trình bày chi tiết về sử dụng toán tử, từ thiết lập môi trường đến ví dụ áp dụng thực tế trong quy trình giao dịch hằng ngày.

Thiết lập môi trường nhanh

# Cài đặt các thư viện cần thiết
pip install pandas numpy matplotlib requests
# kiểm tra phiên bản
import pandas as pd
print(pd.__version__)

Sau khi cài đặt, bạn có thể bắt đầu nạp dữ liệu giá, tính chỉ báo và vẽ biểu đồ. Quy trình lặp nhanh giúp bạn thử nghiệm nhiều ý tưởng trong thời gian ngắn.

Các bài toán thường gặp của trader

Bài toán Mô tả Thư viện
Tải giá Lấy OHLCV từ sàn requests, ccxt
Tính chỉ báo SMA, RSI, MACD pandas, ta-lib
Backtest Mô phỏng chiến lược backtrader, vectorbt
Cảnh báo Thông báo tín hiệu telegram, twilio
Quản lý vốn Tính khối lượng numpy

Ví dụ: tính RSI và phát hiện tín hiệu

def rsi(close, period=14):
    delta = close.diff()
    gain = delta.clip(lower=0).rolling(period).mean()
    loss = (-delta.clip(upper=0)).rolling(period).mean()
    rs = gain / loss
    return 100 - (100 / (1 + rs))
df['rsi'] = rsi(df['close'])
print(df[['close', 'rsi']].tail())

RSI trên 70 cho thấy vùng quá mua, dưới 30 là quá bán. Đây là tín hiệu tham khảo, cần kết hợp thêm xu hướng và khối lượng trước khi vào lệnh.

Sai lầm phổ biến và cách tránh

Sai lầm Vì sao nguy hiểm Cách tránh
Dùng dữ liệu demo thay live Không đúng thực tế Kiểm tra dữ liệu thật
Bỏ qua phí & trượt giá Lợi nhuận ảo Mô phỏng chi phí thực
Overfitting tham số Chiến lược không ổn định Giữ tham số ít, hợp lý
Không kiểm soát rủi ro Cháy tài khoản Đặt stop loss mọi lệnh

Câu hỏi thường gặp về sử dụng toán tử

Tôi mới bắt đầu, học sử dụng toán tử từ đâu?

Bắt đầu từ việc nạp dữ liệu và tính chỉ báo cơ bản. Làm được hai việc này, bạn đã có nền tảng để xây dựng công cụ của riêng mình.

Có cần giỏi toán không?

Chỉ cần kiến thức thống kê cơ bản. Các thư viện đã đóng gói sẵn hầu hết phép tính, bạn chỉ cần hiểu ý nghĩa để dùng đúng.

Dùng bot tự động có an toàn không?

An toàn khi bạn hiểu rõ logic, quản lý rủi ro tốt và giám sát thường xuyên. Chạy demo trước khi dùng tiền thật.

Kết luận

Sử Dụng Toán Tử giúp trader tiết kiệm thời gian, tăng độ chính xác và giảm căng thẳng. Hãy xây dựng từng bước, kiểm chứng kỹ lưỡng và luôn ưu tiên quản lý rủi ro.

Phân tích chuyên sâu về sử dụng toán tử

Để hiểu đầy đủ về sử dụng toán tử, chúng ta cần phân tích từ nhiều góc độ: bản chất, cách vận hành, điều kiện áp dụng và kết quả kỳ vọng. Mỗi góc độ giúp bạn có một bức tranh hoàn chỉnh hơn trước khi đưa ra quyết định.

Về bản chất, sử dụng toán tử không phải là một phép màu mà là kết quả của quá trình nghiên cứu, thử nghiệm và tối ưu liên tục. Người thành công thường bắt đầu từ những bước nhỏ, đo lường kết quả và điều chỉnh dần.

Điều kiện áp dụng cũng rất quan trọng. Một phương pháp hiệu quả với người này chưa chắc phù hợp với người khác, vì vậy bạn cần đối chiếu với hoàn cảnh cụ thể của mình: vốn, thời gian, kiến thức và khả năng chịu rủi ro.

Góc độ Câu hỏi cần trả lời Ý nghĩa thực tế
Bản chất Nó hoạt động dựa trên nguyên lý gì? Hiểu cốt lõi để không áp dụng sai
Vận hành Quy trình thực hiện ra sao? Biết rõ từng bước để kiểm soát
Điều kiện Khi nào nên / không nên dùng? Tránh lạm dụng gây rủi ro
Kết quả Kỳ vọng hợp lý là gì? Đặt mục tiêu thực tế, đo lường được
Rủi ro Điều gì có thể sai? Có kế hoạch dự phòng

Cách tư duy đúng khi nghiên cứu sử dụng toán tử

Hãy luôn đặt câu hỏi: dữ liệu này từ đâu, giả định nào đang được dùng, và nếu giả định sai thì kết quả thay đổi ra sao. Tư duy phản biện giúp bạn tránh những kết luận vội vàng và những quyết định thiếu cơ sở.

Đặng Trí Thanh

Đặng Trí Thanh

Giám đốc Công nghệ · DNT Digital · Giảng viên HNDL
852 Bài viết
15.4k Người theo dõi
120k+ Lượt đọc

Đặng Trí Thanh — Founder & CTO · Hướng Nghiệp Dữ Liệu - DNT Digital. Chuyên đào tạo và triển khai thực chiến Python, MT5 và hệ thống bot auto trading / IB cho học viên và doanh nghiệp.