SELECT trong SQL Server

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âu lệnh SELECT cơ bản trong SQL Server

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:

Bảng customers trong SQL Server

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 đồ: salesproduction.

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:

  • Đầu tiên, chỉ định danh sách các cột được phân tách bằng dấu phẩy mà bạn muốn truy vấn dữ liệu trong mệnh đề SELECT.
  • Thứ hai, chỉ định bảng nguồn và tên lược đồ của nó trong mệnh đề 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.

Trình tự xử lý các mệnh đề của truy vấn trong SQL Server

Ví dụ câu lệnh SELECT trong SQL Server

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.

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

Lấy một số cột của bảng trong SQL Server

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ả:

SELECT một số cột của bảng trong SQL Server

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ả:

SELECT một số cột của bảng trong SQL Server

Lấy tất cả các cột từ một bảng trong SQL Server

Để 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 tất cả các cột từ một bảng trong SQL Server

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:

  1. Đầu tiên,  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.
  2. Thứ hai, nếu bảng được thêm một hoặc nhiều cột mới, thì 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 và sắp xếp tập kết quả trong SQL Server

Để 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ả:

SELECT với mệnh đề WHERE trong SQL Server

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.

Trình tự xử lý các mệnh đề của truy vấn trong SQL Server

Để 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ả:

Sắp xếp tập kết quả bằng ORDER BY trong SQL Server

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.

Trình tự xử lý các mệnh đề của truy vấn trong SQL Server

Nhóm trong SQL Server

Để 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ả:

Group by trong SQL Server

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.

Trình tự xử lý các mệnh đề của truy vấn trong SQL Server

Lọc nhóm trong SQL Server

Để 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ọc nhóm trong SQL Server

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.

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.