Hướng dẫn này giới thiệu cho bạn cơ bản của câu lệnh SELECT trong SQL Server, tập trung vào cách truy vấn trên một bảng.
Các bảng cơ sở dữ liệu là các đối tượng lưu trữ tất cả dữ liệu trong cơ sở dữ liệu. Trong một bảng, dữ liệu được sắp xếp theo dạng hàng và cột tương tự như bảng tính.
Trong một bảng, mỗi hàng đại diện cho một bản ghi duy nhất và mỗi cột đại diện cho một trường trong bản ghi. Ví dụ: bảng customers
chứa dữ liệu khách hàng như số nhận dạng khách hàng, tên, họ, điện thoại, email và thông tin địa chỉ như dưới đây:
SQL Server sử dụng các lược đồ để nhóm các bảng logic và các đối tượng cơ sở dữ liệu khác. Trong cơ sở dữ liệu mẫu của chúng tôi, chúng tôi có hai lược đồ: sales
và production
.
Lược đồ sales
nhóm tất cả các bảng liên quan đến bán hàng trong khi lược đồ production
nhóm tất cả các bảng liên quan đến sản xuất.
Để truy vấn dữ liệu từ một bảng, bạn sử dụng câu lệnh SELECT
. Dưới đây minh họa mẫu cơ bản nhất của câu lệnh SELECT
:
SELECT select_list
FROM schema_name.table_name;
Trong cú pháp này:
SELECT
.FROM
.Khi xử lý câu lệnh SELECT
, SQL Server xử lý mệnh đề FROM
trước và sau đó là mệnh đề SELECT
mặc dù mệnh đề SELECT
xuất hiện đầu tiên trong truy vấn.
Hãy sử dụng bảng customers
trong cơ sở dữ liệu mẫu để làm ví dụ cho câu lệnh SELECT.
Truy vấn sau đây trả về tên và họ của tất cả khách hàng:
SELECT
first_name,
last_name
FROM
sales.customers;
Đây là kết quả:
Kết quả của một truy vấn được gọi là một tập kết quả.
Câu lệnh sau trả về tên, họ và email của tất cả khách hàng:
SELECT
first_name,
last_name,
email
FROM
sales.customers;
Đây là kết quả:
Để lấy dữ liệu từ tất cả các cột của bảng, bạn có thể chỉ định tất cả các cột của bảng trong mệnh đề SELECT. Bạn cũng có thể sử dụng SELECT *
để làm điều tương tự:
SELECT *
FROM
sales.customers;
Đây là kết quả:
SELECT *
rất hữu ích để kiểm tra các cột và dữ liệu của một bảng mà bạn không quen thuộc. Nó cũng hữu ích cho các truy vấn đặc biệt.
Tuy nhiên, bạn không nên sử dụng SELECT *
trong mã thực tế vì những lý do chính sau:
SELECT *
thường lấy nhiều dữ liệu hơn ứng dụng của bạn cần để hoạt động. Nó khiến dữ liệu không cần thiết chuyển từ SQL Server sang ứng dụng khách, mất nhiều thời gian hơn để dữ liệu truyền qua mạng và làm chậm ứng dụng.SELECT *
sẽ truy xuất tất cả các cột bao gồm các cột mới được thêm vào mà không được sử dụng trong ứng dụng. Điều này có thể làm cho ứng dụng sụp đổ.Để lọc các bản ghi dựa trên một hoặc nhiều điều kiện, bạn sử dụng mệnh đề WHERE
như trong ví dụ sau:
SELECT
*
FROM
sales.customers
WHERE
state = 'CA';
Đây là kết quả:
Trong ví dụ này, truy vấn trả về các khách hàng có địa chỉ ở California.
Khi có mệnh đề WHERE
trong truy vấn, SQL Server xử lý các mệnh đề của truy vấn theo trình tự sau: FROM
, WHERE
, và SELECT
.
Để sắp xếp tập kết quả dựa trên một hoặc nhiều cột, bạn sử dụng mệnh đề ORDER BY
như trong ví dụ sau:
SELECT
*
FROM
sales.customers
WHERE
state = 'CA'
ORDER BY
first_name;
Đây là kết quả:
Trong ví dụ này, mệnh đề ORDER BY
sắp xếp khách hàng theo thứ tự tăng dần theo tên của họ.
Trong trường hợp này, SQL Server xử lý các mệnh đề của các truy vấn theo trình tự sau: FROM
, WHERE
, SELECT
, và ORDER BY
.
Để gom các hàng theo nhóm, bạn sử dụng mệnh đề GROUP BY
. Ví dụ, câu lệnh sau đây trả về số lượng khách hàng ở mỗi thành phố ở California.
SELECT
city,
COUNT (*)
FROM
sales.customers
WHERE
state = 'CA'
GROUP BY
city
ORDER BY
city;
Đây là kết quả:
Trong trường hợp này, SQL Server xử lý các mệnh đề theo trình tự sau: FROM
, WHERE
, GROUP BY
, SELECT
, và ORDER BY
.
Để lọc các nhóm dựa trên một hoặc nhiều điều kiện, bạn sử dụng mệnh đề HAVING
. Ví dụ sau đây trả về các thành phố ở California có hơn 10 khách hàng:
SELECT
city,
COUNT (*)
FROM
sales.customers
WHERE
state = 'CA'
GROUP BY
city
HAVING
COUNT (*) > 10
ORDER BY
city;
Đây là kết quả:
Lưu ý rằng mệnh đề WHERE
lọc các bản ghi trong khi mệnh đề HAVING
lọc nhóm.
Trong hướng dẫn này, bạn đã học cách sử dụng câu lệnh SELECT
để truy vấn dữ liệu từ một bảng duy nhất 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.
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.
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.
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.