SQL Server: Các lệnh lọc dữ liệu trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng lệnh DISTINCT, WHERE, AND, OR, IN, BETWEENLIKE trong SQL Server để lọc dữ liệu trả về.

SELECT DISTINCT trong SQL Server

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

Đôi khi, bạn có thể chỉ muốn nhận các giá trị riêng biệt trong một cột được chỉ định của bảng. Để làm điều này, bạn sử dụng mệnh đề SELECT DISTINCT như sau:

SELECT DISTINCT
    column_name
FROM
    table_name;

Truy vấn chỉ trả về các giá trị riêng biệt trong cột được chỉ định. Nói cách khác, nó loại bỏ các giá trị trùng lặp trong cột khỏi tập kết quả.

Nếu bạn sử dụng nhiều cột như sau:

SELECT DISTINCT
    column_name1,
    column_name2 ,
    ...
FROM
    table_name;

Truy vấn sử dụng kết hợp các giá trị trong tất cả các cột được chỉ định trong mệnh đề SELECT để đánh giá tính duy nhất.

Nếu bạn áp dụng mệnh đề DISTINCT cho một cột NULL, mệnh đề DISTINCT sẽ chỉ giữ một giá trị NULL và loại bỏ những giá trị NULL khác. Nói cách khác, mệnh đề DISTINCT coi tất cả các giá trị NULL là cùng một giá trị.

Ví dụ về SELECT DISTINCT trong SQL Server

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

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

SELECT DISTINCT một cột

Câu lệnh sau trả về tất cả các thành phố của tất cả các khách hàng trong bảng customers:

SELECT
    city
FROM
    sales.customers
ORDER BY
    city;

Đây là kết quả:

SELECT DISTINCT một cột

Như bạn có thể thấy trong kết quả đầu ra, các thành phố bị trùng lặp.

Để có được các thành phố riêng biệt không bị trùng lặp, bạn thêm từ khóa DISTINCT như sau:

SELECT DISTINCT
    city
FROM
    sales.customers
ORDER BY
    city;

Đây là kết quả:

SELECT DISTINCT một cột

Xem thêm các ví dụ nâng cao về DISTINCT trong SQL Server ở bài viết sau:

SELECT DISTINCT trong SQL Server | Comdy
Cách sử dụng mệnh đề SELECT DISTINCT trong SQL Server để truy xuất các giá trị riêng biệt.

Mệnh đề WHERE trong SQL Server

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ề mệnh đề 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

Xem thêm các ví dụ nâng cao về mệnh đề WHERE trong SQL Server ở bài viết sau:

WHERE trong SQL Server | Comdy
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.

Toán tử AND trong SQL Server

Giới thiệu về toán tử AND trong SQL Server

Toán tử AND trong SQL Server là một toán tử logic cho phép bạn kết hợp hai biểu thức Boolean. Nó chỉ trả về TRUE khi cả hai biểu thức được đánh giá là TRUE.

Sau đây minh họa cú pháp của toán tử AND:

boolean_expression AND boolean_expression

boolean_expression là bất kỳ biểu thức Boolean hợp lệ nào được đánh giá là TRUE, FALSEUNKNOWN.

Bảng dưới đây cho thấy kết quả khi bạn kết hợp các giá trị TRUE, FALSEUNKNOWN bằng cách sử dụng toán tử AND:

TRUE FALSE UNKNOWN
TRUE TRUE FALSE UNKNOWN
FALSE FALSE FALSE FALSE
UNKNOWN UNKNOWN FALSE UNKNOWN

Khi bạn sử dụng nhiều toán tử logic trong một biểu thức, SQL Server luôn đánh giá các toán tử AND trước. Tuy nhiên, bạn có thể thay đổi thứ tự đánh giá bằng cách sử dụng dấu ngoặc đơn.

Ví dụ về toán tử AND 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 toán tử AND trong SQL Server.

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

Sử dụng một toán tử AND trong SQL Server

Ví dụ sau đây tìm kiếm các sản phẩm có id loại sản phẩm là 1 và giá niêm yết lớn hơn 400:

SELECT
    *
FROM
    production.products
WHERE
    category_id = 1 AND 
    list_price > 400
ORDER BY
    list_price DESC;

Đây là kết quả:

Sử dụng một toán tử AND trong SQL Server

Sử dụng nhiều toán tử AND trong SQL Server

Câu lệnh sau đây tìm kiếm các sản phẩm đáp ứng tất cả các điều kiện sau: id loại sản phẩm là 1, giá niêm yết lớn hơn 400 và id thương hiệu là 1:

SELECT
    *
FROM
    production.products
WHERE
    category_id = 1 AND 
    list_price > 400 AND 
    brand_id = 1
ORDER BY
    list_price DESC;

Đây là kết quả:

Sử dụng nhiều toán tử AND trong SQL Server

Xem thêm các ví dụ nâng cao về toán tử AND trong SQL Server ở bài viết sau:

AND trong SQL Server | Comdy
Cách sử dụng toán tử AND trong SQL Server để kết hợp nhiều biểu thức Boolean.

Toán tử OR trong SQL Server

Giới thiệu về toán tử OR trong SQL Server

Toán tử OR trong SQL Server là một toán tử logic cho phép bạn kết hợp hai biểu thức Boolean. Nó trả về TRUE khi một trong các điều kiện được đánh giá là TRUE.

Dưới đây minh họa cú pháp của toán tử OR trong SQL Server:

boolean_expression OR boolean_expression

Trong cú pháp này, boolean_expression bất kỳ biểu thức Boolean hợp lệ nào được đánh giá là TRUE, FALSEUNKNOWN.

Bảng dưới đây cho thấy kết quả của toán tử OR khi bạn kết hợp TRUE, FALSEUNKNOWN:

TRUE FALSE UNKNOWN
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE UNKNOWN
UNKNOWN TRUE UNKNOWN UNKNOWN

Khi bạn sử dụng nhiều toán tử logic trong một câu lệnh, SQL Server sẽ đánh giá các toán tử OR sau toán tử AND. Tuy nhiên, bạn có thể sử dụng dấu ngoặc đơn để thay đổi thứ tự đánh giá.

Ví dụ về toán tử OR 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 toán tử OR trong SQL Server.

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

Sử dụng một toán tử OR trong SQL Server

Ví dụ sau đây tìm kiếm các sản phẩm có giá niêm yết dưới 200 hoặc lớn hơn 6.000:

SELECT
    product_name,
    list_price
FROM
    production.products
WHERE
    list_price < 200
OR list_price > 6000
ORDER BY
    list_price;

Đây là kết quả:

Sử dụng một toán tử OR trong SQL Server

Sử dụng nhiều toán tử OR trong SQL Server

Câu lệnh sau đây tìm kiếm các sản phẩm có id thương hiệu là 1, 2 hoặc 4:

SELECT
    product_name,
    brand_id
FROM
    production.products
WHERE
    brand_id = 1 OR 
    brand_id = 2 OR 
    brand_id = 4
ORDER BY
    brand_id DESC;

Đây là kết quả:

Sử dụng nhiều toán tử OR trong SQL Server

Bạn có thể thay thế nhiều toán tử OR bởi toán tử IN như trong truy vấn sau:

SELECT
    product_name,
    brand_id
FROM
    production.products
WHERE
    brand_id IN (1, 2, 3)
ORDER BY
    brand_id DESC;

Xem thêm các ví dụ nâng cao về toán tử OR trong SQL Server ở bài viết sau:

OR trong SQL Server | Comdy
Cách sử dụng toán tử OR trong SQL Server để kết hợp hai biểu thức Boolean.

Toán tử IN trong SQL Server

Tổng quan về toán tử IN trong SQL Server

Các toán tử IN trong SQL Server là một toán tử logic cho phép bạn kiểm tra xem một giá trị cụ thể phù hợp với bất kỳ giá trị trong danh sách.

Sau đây minh họa cú pháp của toán tử IN trong SQL Server:

column | expression IN ( v1, v2, v3, ...)

Trong cú pháp này:

  • Đầu tiên, chỉ định cột hoặc biểu thức để kiểm tra.
  • Thứ hai, chỉ định một danh sách các giá trị để kiểm tra. Tất cả các giá trị phải có cùng kiểu dữ liệu với kiểu dữ liệu của cột hoặc biểu thức.

Nếu một giá trị trong cột hoặc biểu thức bằng với bất kỳ giá trị nào trong danh sách, kết quả của toán tử INTRUE.

Các toán tử IN là tương đương với nhiều toán tử OR, do đó hai biểu thức sau là tương đương:

column IN (v1, v2, v3)

column = v1 OR column = v2 OR column = v3

Để phủ định toán tử IN, bạn sử dụng toán tử NOT IN như sau:

column | expression NOT IN ( v1, v2, v3, ...)

Kết quả toán tử NOT INTRUE nếu cột hoặc biểu thức không bằng bất kỳ giá trị nào trong danh sách.

Ngoài danh sách các giá trị, bạn có thể sử dụng subquery (truy vấn con) để trả về danh sách các giá trị với toán tử IN như dưới đây:

column | expression IN (subquery)

Trong cú pháp này, truy vấn con là một câu lệnh SELECT trả về một danh sách các giá trị của một cột.

Lưu ý rằng nếu một danh sách chứa NULL, kết quả của toán tử IN hoặc NOT IN sẽ là UNKNOWN.

Ví dụ về toán tử IN 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 toán tử IN trong SQL Server.

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

Sử dụng toán tử IN với một danh sách giá trị trong SQL Server

Câu lệnh sau đây tìm kiếm các sản phẩm có giá niêm yết là một trong các giá trị sau: 89,99, 109,99 và 159,99:

SELECT
    product_name,
    list_price
FROM
    production.products
WHERE
    list_price IN (89.99, 109.99, 159.99)
ORDER BY
    list_price;

Đây là kết quả:

Sử dụng toán tử IN với một danh sách giá trị trong SQL Server

Truy vấn trên tương đương với truy vấn sau sử dụng toán tử OR để thay thế:

SELECT
    product_name,
    list_price
FROM
    production.products
WHERE
    list_price = 89.99 OR 
    list_price = 109.99 OR 
    list_price = 159.99
ORDER BY
    list_price;

Để tìm các sản phẩm có giá niêm yết không phải là một trong các giá trên, bạn sử dụng toán tử NOT IN như trong truy vấn sau:

SELECT
    product_name,
    list_price
FROM
    production.products
WHERE
    list_price NOT IN (89.99, 109.99, 159.99)
ORDER BY
    list_price;

Đây là kết quả:

Sử dụng toán tử NOT IN với một danh sách giá trị trong SQL Server

Xem thêm các ví dụ nâng cao về toán tử IN trong SQL Server ở bài viết sau:

IN trong SQL Server | Comdy
Cách sử dụng toán tử IN trong SQL Server để kiểm tra xem một giá trị có khớp với bất kỳ giá trị nào trong danh sách hay không.

Toán tử BETWEEN trong SQL Server

Tổng quan về toán tử BETWEEN trong SQL Server

Toán tử BETWEEN trong SQL Server là một toán tử logic cho phép bạn chỉ định một phạm vi để kiểm tra.

Sau đây minh họa cú pháp của toán tử BETWEEN:


column | expression BETWEEN start_expression AND end_expression

Trong cú pháp này:

  • Đầu tiên, chỉ định cột hoặc biểu thức để kiểm tra.
  • Thứ hai, đặt các biểu thức start_expressionend_expression ở giữa các từ khóa BETWEENAND. Các biểu thức start_expression, end_expressionexpression để kiểm tra phải có cùng kiểu dữ liệu.

Toán tử BETWEEN trả về TRUE nếu biểu thức để đánh giá lớn hơn hoặc bằng giá trị của start_expression và nhỏ hơn hoặc bằng với giá trị của end_expression.

Bạn có thể sử dụng lớn hơn hoặc bằng (>=) và nhỏ hơn hoặc bằng (<=) kết hợp toán tử logic AND để thay thế toán tử BETWEEN như sau:


column | expression <= end_expression AND column | expression >= start_expression

Điều kiện sử dụng toán tử BETWEEN dễ đọc hơn nhiều so với điều kiện sử dụng toán tử so sánh >=, <= và toán tử logic AND.

Để phủ nhận kết quả của toán tử BETWEEN, bạn sử dụng toán tử NOT BETWEEN như sau:


column | expression NOT BETWEEN start_expression AND end_expresion

Toán tử NOT BETWEEN trả về TRUE nếu giá trị trong cột hoặc biểu thức nhỏ hơn giá trị của start_expression và lớn hơn giá trị của end_expression. Nó tương đương với điều kiện sau:


column | expression < start_expression AND column | expression > end_expression

Lưu ý rằng nếu bất kỳ đầu vào cho toán tử BETWEEN hoặc NOT BETWEENNULL, thì kết quả là UNKNOWN.

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

Chúng ta sẽ xem một số ví dụ về việc sử dụng toán tử BETWEEN để hiểu cách thức hoạt động của nó.

Sử dụng toán tử BETWEEN với số 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 ví dụ này.

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

Truy vấn sau đây tìm kiếm các sản phẩm có giá niêm yết nằm trong khoảng từ 149,99 đến 199,99:

SELECT
    product_id,
    product_name,
    list_price
FROM
    production.products
WHERE
    list_price BETWEEN 149.99 AND 199.99
ORDER BY
    list_price;

Đây là kết quả:

Sử dụng toán tử BETWEEN với số trong SQL Server

Để có được các sản phẩm có giá niêm yết nằm ngoài khoảng 149,99 và 199,99, bạn sử dụng toán tử NOT BETWEEN như sau:

SELECT
    product_id,
    product_name,
    list_price
FROM
    production.products
WHERE
    list_price NOT BETWEEN 149.99 AND 199.99
ORDER BY
    list_price;

Đây là kết quả:

Sử dụng toán tử NOT BETWEEN với số trong SQL Server

Xem thêm các ví dụ nâng cao về toán tử BETWEEN trong SQL Server ở bài viết sau:

BETWEEN trong SQL Server | Comdy
Cách sử dụng toán tử BETWEEN trong SQL Server để chỉ định một phạm vi cần kiểm tra.

Toán tử LIKE trong SQL Server

Tổng quan về toán tử LIKE trong SQL Server

Toán tử LIKE trong SQL Server là một toán tử logic xác định xem một chuỗi ký tự có khớp với mẫu đã chỉ định hay không. Một mẫu có thể bao gồm các ký tự thông thường và ký tự đại diện.

Toán tử LIKE được sử dụng trong các mệnh đề WHERE của các câu lệnh SELECT, UPDATEDELETE để lọc các bảng ghi dựa trên biểu thức khởp mẫu.

Dưới đây minh họa cú pháp của toán tử LIKE trong SQL Server:


column | expression LIKE pattern [ESCAPE escape_character]

Pattern

Mẫu (pattern) là một chuỗi các ký tự để tìm kiếm trong cột hoặc biểu thức. Nó có thể bao gồm các ký tự đại diện hợp lệ sau:

  • Ký tự đại diện phần trăm (%): bất kỳ chuỗi nào có 0 hoặc nhiều ký tự.
  • Ký tự đại diện gạch dưới (_): bất kỳ ký tự đơn nào.
  • Ký tự đại diện [danh sách các ký tự]: bất kỳ ký tự đơn nào trong tập đã chỉ định.
  • [Ký tự-ký tự]: bất kỳ ký tự đơn nào trong phạm vi đã chỉ định.
  • [^]: Bất kỳ ký tự đơn nào không nằm trong danh sách hoặc phạm vi.

Các ký tự đại diện làm cho toán tử LIKE linh hoạt hơn các toán tử so sánh chuỗi bằng (=) và không bằng (!=).

ESCAPE

Ký tự thoát hướng dẫn toán tử LIKE xem các ký tự đại diện là các ký tự thông thường. Ký tự thoát không có giá trị mặc định và phải được ước lượng chỉ một ký tự.

Toán tử LIKE trả về TRUE nếu cột hoặc biểu thức khớp với mẫu được chỉ định.

Để phủ nhận kết quả của toán tử LIKE, bạn sử dụng toán tử NOT LIKE  như sau:


column | expression NOT LIKE pattern [ESCAPE escape_character]

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

Chúng tôi sẽ dụng bảng customers trong cơ sở dữ liệu mẫu để làm ví dụ cho toán tử LIKE trong SQL Server.

Bảng Customers trong cơ sở dữ liệu mẫu

Sử dụng toán tử LIKE với ký tự đại diện % trong SQL Server

Ví dụ sau đây tìm kiếm các khách hàng có họ bắt đầu bằng chữ cái Z:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE 'Z%'
ORDER BY
    first_name;

Đây là kết quả:

Sử dụng toán tử LIKE với ký tự đại diện % trong SQL Server

Ví dụ sau đây trả về các khách hàng có họ kết thúc bằng chuỗi er:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE '%er'
ORDER BY
    first_name;

Đây là kết quả:

Sử dụng toán tử LIKE với ký tự đại diện % trong SQL Server

Câu lệnh sau lấy ra các khách hàng có họ bắt đầu bằng chữ cái T và kết thúc bằng chữ cái s:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE 'T%s'
ORDER BY
    first_name;

Đây là kết quả:

Sử dụng toán tử LIKE với ký tự đại diện % trong SQL Server

Xem thêm các ví dụ nâng cao về toán tử LIKE trong SQL Server ở bài viết sau:

LIKE trong SQL Server | Comdy
Cách sử dụng toán tử LIKE trong SQL Server để kiểm tra xem chuỗi ký tự có khớp với mẫu đã chỉ định hay không.

Bí danh (alias) cho cột và bảng cũng thường xuyên được sử dụng kết hợp với các mệnh đề/toán tử lọc dữ liệu trong SQL Server. Bạn có thể tìm hiểu thêm về alias trong SQL Server ở bài viết sau:

Alias trong SQL Server | Comdy
Tìm hiểu cách sử dụng bí danh (alias) trong SQL Server bao gồm bí danh cột và bí danh bảng.

Trong hướng dẫn này, bạn đã học cách sử dụng lệnh DISTINCT, WHERE, AND, OR, IN, BETWEENLIKE trong SQL Server để lọc dữ liệu trả về.

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.