WHERE trong SQL Server

Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng mệnh đề WHERE trong SQL Server để lọc các bản ghi sẽ được trả về bởi một truy vấn.

Giới thiệu về mệnh đề WHERE trong SQL Server

Khi bạn sử dụng câu lệnh SELECT để truy vấn dữ liệu trong một bảng, bạn sẽ nhận được tất cả các bản ghi của bảng đó, điều này là không cần thiết vì ứng dụng chỉ có thể xử lý một số lượng các bản ghi nhất định tại thời điểm đó.

Để lấy các bản ghi từ bảng thỏa mãn một hoặc nhiều điều kiện, bạn sử dụng mệnh đề WHERE như sau:

SELECT
    select_list
FROM
    table_name
WHERE
    search_condition;

Trong mệnh đề WHERE, bạn chỉ định một điều kiện tìm kiếm để lọc các bản ghi được trả về bởi mệnh đề FROM. Mệnh đề WHERE chỉ trả về các bản ghi thỏa mãn điều kiện tìm kiếm (điều kiện tìm kiếm được đánh giá là TRUE).

Điều kiện tìm kiếm là một biểu thức logic hoặc kết hợp nhiều biểu thức logic. Trong SQL, một biểu thức logic thường được gọi là một vị ngữ (predicate).

Lưu ý rằng SQL Server sử dụng logic ba giá trị khi đánh giá một biểu thức logic là TRUE, FALSE hoặc UNKNOWN. Mệnh đề WHERE sẽ không trả lại bất kỳ bản ghi nào có điều kiện tìm kiếm được đánh giá là FALSE hoặc UNKNOWN.

Ví dụ về WHERE trong SQL Server

Chúng tôi sẽ sử dụng bảng products từ cơ sở dữ liệu mẫu để làm ví dụ minh họa cho mệnh đề WHERE trong SQL Server.

Bảng Products trong cơ sở dữ liệu mẫu trong SQL Server

Tìm các bản ghi đáp ứng một điều kiện đơn giản

Câu lệnh sau lấy tất cả các sản phẩm có id loại sản phẩm là 1:

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    category_id = 1
ORDER BY
    list_price DESC;

Đây là kết quả:

Tìm bản ghi bằng một biểu thức đơn giản

Tìm các bản ghi đáp ứng hai điều kiện

Ví dụ sau đây trả về các sản phẩm đáp ứng hai điều kiện: mã loại sản phẩm là 1 và năm kiểu mẫu là 2018. Nó sử dụng toán tử logic AND để kết hợp hai điều kiện.

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    category_id = 1 AND model_year = 2018
ORDER BY
    list_price DESC;

Đây là kết quả:

Tìm các bản ghi đáp ứng hai điều kiện

Tìm các bản ghi bằng cách sử dụng toán tử so sánh

Câu lệnh sau đây tìm kiếm các sản phẩm có giá niêm yết lớn hơn 300 và năm kiểu mẫu là 2018.

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    list_price > 300 AND model_year = 2018
ORDER BY
    list_price DESC;

Đây là kết quả:

Tìm các bản ghi bằng cách sử dụng toán tử so sánh

Tìm các bản ghi đáp ứng bất kỳ điều kiện nào trong hai điều kiện

Truy vấn sau đây tìm kiếm các sản phẩm có giá niêm yết lớn hơn 3.000 hoặc năm kiểu mẫu là 2018. Bất kỳ sản phẩm nào đáp ứng một trong các điều kiện này đều được bao gồm trong tập kết quả.

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    list_price > 3000 OR model_year = 2018
ORDER BY
    list_price DESC;

Đây là kết quả:

Tìm các bản ghi đáp ứng bất kỳ điều kiện nào trong hai điều kiện

Lưu ý rằng toán tử OR đã được sử dụng để kết hợp các biểu thức điều kiện.

Tìm các bản ghi có giá trị nằm trong khoảng giá trị

Câu lệnh sau đây tìm kiếm các sản phẩm có giá niêm yết nằm trong khoảng từ 1.899 đến 1.999,99 sử dụng toán tử BETWEEN:

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    list_price BETWEEN 1899.00 AND 1999.99
ORDER BY
    list_price DESC;

Đây là kết quả:

Tìm các bản ghi có giá trị nằm trong khoảng giá trị

Tìm các bản ghị có giá trị trong danh sách các giá trị

Ví dụ sau sử dụng toán tử IN để tìm các sản phẩm có giá niêm yết là 299,99 hoặc 466,99 hoặc 489,99.

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    list_price IN (299.99, 369.99, 489.99)
ORDER BY
    list_price DESC;

Đây là kết quả:

Tìm các bản ghị có giá trị trong danh sách các giá trị

Tìm các bản ghi có giá trị chứa một chuỗi

Ví dụ sau sử dụng toán tử LIKE để tìm các sản phẩm có tên chứa chuỗi Cruiser:

SELECT
    product_id,
    product_name,
    category_id,
    model_year,
    list_price
FROM
    production.products
WHERE
    product_name LIKE '%Cruiser%'
ORDER BY
    list_price;

Đây là kết quả:

Tìm các bản ghi có giá trị chứa một chuỗi

Trong hướng dẫn này, bạn đã học cách sử dụng mệnh đề WHERE trong SQL Server để lọc các bản ghi dựa trên một hoặc nhiều điều kiện.

SQL Server
Bài Viết Liên Quan:
INTERSECT trong SQL Server
Trung Nguyen 22/11/2020
INTERSECT trong SQL Server

Tìm hiểu cách sử dụng toán tử INTERSECT trong SQL Server để trả về phần giao nhau của các tập kết quả của hai truy vấn.

EXCEPT trong SQL Server
Trung Nguyen 22/11/2020
EXCEPT trong SQL Server

Tìm hiểu cách sử dụng EXCEPT trong SQL Server để loại trừ tập kết quả của một truy vấn ra khỏi tập kết quả của một truy vấn khác.

SQL Server: Hướng dẫn subquery trong SQL Server từ A-Z
Trung Nguyen 22/11/2020
SQL Server: Hướng dẫn subquery trong SQL Server từ A-Z

Tìm hiểu về subquery, toán tử EXISTS, ANY, ALL trong SQL Server và cách sử dụng truy vấn con để truy vấn dữ liệu.

UNION trong SQL Server
Trung Nguyen 22/11/2020
UNION trong SQL Server

Tìm hiểu cách sử dụng UNION trong SQL Server để kết hợp kết quả của hai hoặc nhiều truy vấn thành một tập kết quả duy nhất.