Tóm Tắt
Lọc dữ liệu trong SQL Server
- Trung Nguyen
-
10/05/2020
-
14 min read
Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng câu lệnh SELECT DISTINCT
, mệnh đề WHERE
và các toán tử AND
, OR
, IN
, BETWEEN
, LIKE
trong SQL Server lọc dữ liệu trả về trong một truy vấn.
Lưu ý: Chúng tôi sẽ dụng cơ sở dữ liệu mẫu để làm ví dụ minh họa cho lọc dữ liệu trong SQL Server.
Câu lệ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ị.
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ả:
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ả:
Bây giờ, truy vấn trả về một giá trị riêng cho từng thành phố. Nói cách khác, nó đã xóa tất cả các thành phố trùng lặp khỏi tập kết quả.
Câu lệnh sau trả về tất cả các thành phố và tiểu bang của tất cả các khách hàng:
SELECT
city,
state
FROM
sales.customers
ORDER BY
city,
state;
Đây là kết quả:
Câu lệnh sau đây trả về thành phố và tiểu bang riêng biệt không trùng lặp của tất cả các khách hàng.
SELECT DISTINCT
city,
state
FROM
sales.customers
Đây là kết quả:
Trong ví dụ này, câu lệnh đã sử dụng kết hợp các giá trị trong cả hai cột city
và state
để đánh giá trùng lặp.
Bạn có thể xem chi tiết về câu lệnh SELECT DISTINCT
trong SQL Server ở bài viết sau:
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
.
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ả:
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ả:
Bạn có thể xem chi tiết về mệnh đề WHERE
trong SQL Server ở bài viết này:
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
, FALSE
và UNKNOWN
.
Bảng dưới đây cho thấy kết quả khi bạn kết hợp các giá trị TRUE
, FALSE
và UNKNOWN
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ụ 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ả:
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ả:
Bạn có thể xem chi tiết về toán tử AND
trong SQL Server ở bài viết sau:
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
, FALSE
và UNKNOWN
.
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
, FALSE
và UNKNOWN
:
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ụ 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ả:
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ả:
Bạn có thể xem chi tiết về toán tử OR
trong SQL Server tại đây:
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ử IN
là TRUE
.
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 IN
là TRUE
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
.
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ả:
Bạn có thể sử dụng toán tử IN
kết hợp subquery như được trình bày trong truy vấn sau:
SELECT
product_id,
product_name,
list_price
FROM
production.products
WHERE
product_id IN (
SELECT
product_id
FROM
production.stocks
WHERE
store_id = 1 AND quantity >= 30
)
ORDER BY
product_name;
Đây là kết quả:
Bạn có thể xem chi tiết về toán tử IN
trong SQL Server ở bài viết sau:
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_expression
vàend_expression
ở giữa các từ khóaBETWEEN
vàAND
. Các biểu thứcstart_expression
,end_expression
vàexpression
để 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 BETWEEN
là NULL
, thì kết quả là UNKNOWN
.
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ả:
Truy vấn sau đây tìm kiếm các đơn đặt hàng mà khách hàng đặt từ ngày 15/01/2017
đến ngày 17/01/2017
:
SELECT
order_id,
customer_id,
order_date,
order_status
FROM
sales.orders
WHERE
order_date BETWEEN '20170115' AND '20170117'
ORDER BY
order_date;
Đây là kết quả:
Bạn có thể xem chi tiết về toán tử BETWEEN
trong SQL Server ở bài viết này:
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
, UPDATE
và DELETE
để 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ụ 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ả:
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ả:
Bạn có thể xem chi tiết về toán tử LIKE
trong SQL Server ở bài viết sau:
Nếu
Comdy
hữu ích và giúp bạn tiết kiệm thời gian
Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.