4 tips viết câu lệnh SQL như chuyên gia!

Ngày đăng: 22/01/2024

Ngày nay, dữ liệu là tài sản của bất kể tổ chức, doanh nghiệp nào. Nhưng để làm sao làm việc hiệu quả với dữ liệu cũng trở thành một trong những kĩ năng quan trọng. Ngoài việc thực hiện các thao tác cơ sở dữ liệu chính xác, một truy vấn cũng cần phải có hiệu suất, dễ đọc và dễ sửa chữa.  

Comments trong SQL

Chú thích (comments) trong SQL là văn bản thuần túy có thể được thêm vào truy vấn và chúng không được công cụ truy vấn phân tích cú pháp và thực thi. Hầu hết, chúng ta sử dụng chú thích để thêm một số mô tả hoặc vô hiệu hóa một số khối mã của truy vấn. Tuy nhiên, việc thêm các giải thích ngắn gọn và dễ hiểu vào các truy vấn SQL là một trong những cách thực hành tốt nhất vì theo thời gian, mục đích của truy vấn và việc ứng dụng nào sử dụng nó có thể bị lãng quên. Trong trường hợp này, quá trình duy trì và tái cấu trúc truy vấn sẽ hơi khó khăn. 

Chú thích một dòng

Chú thích SQL một dòng sử dụng hai dấu gạch ngang (–) trong SQL Server. Sau khi bạn thêm hai dấu gạch ngang, SQL Server sẽ bỏ qua văn bản được viết sau các dấu gạch ngang này trong một dòng. Bạn cũng có thể thấy màu khác dành cho chú thích, ở đây là màu xanh lá trong Azure Data Studio sau khi chú thích về một đoạn mã.

-- Choose the AdventureWorks2022 database.

USE AdventureWorks2022;

GO

-- Choose all columns and all rows from the Address table.

SELECT *

FROM Person.Address

ORDER BY PostalCode ASC; -- We do not have to specify ASC because

-- that is the default.

GO

Azure Data Studio có phím tắt để thêm dấu gạch ngang kép để nhận xét một ký tự dòng đơn.

Windows: ctrl + /
Mac: cmd + /

Block hoặc comments SQL nhiều dòng

Nếu chúng ta nhận xét bằng dấu gạch ngang kép (–), SQL Server sẽ coi đó là một dòng. Nếu chúng ta cần chú thích nhiều dòng, chẳng lẽ chúng ta cần đặt dấu gạch ngang kép trên mỗi dòng?

Đó không phải là giải pháp khả thi nếu chúng ta muốn bình luận nhiều dòng mã. Do đó, SQL Server sử dụng các nhận xét nhiều dòng bắt đầu bằng /* và kết thúc bằng */. SQL Server sẽ bỏ qua các văn bản, mã được viết bên trong chúng.

Phím tắt:

Windows: alt + shift + a
Mac: option + shift + a
SELECT TOP 10

         ProductKey,

         /* WeightUnitMeasureCode,

         Style,

         LargePhoto, */

         EnglishProductName,

         Color

FROM Dbo.DimProduct

Bạn cũng có thể sử dụng những nhận xét nhiều dòng này để hiển thị thông tin hữu ích về tập lệnh. Ví dụ: tập lệnh bên dưới thêm thông tin đối tượng, ngày tập lệnh, tác giả, mô tả trên tập lệnh thủ tục được lưu trữ.

A screenshot of a computerDescription automatically generated

Nếu sau này bất kỳ nhà phát triển nào viết kịch bản thủ tục được lưu trữ, anh ta có thể xem thông tin ngắn gọn về ai và nội dung nào đã được sửa đổi.

Câu lệnh USE trong SQL

Câu lệnh USE được sử dụng để chọn cơ sở dữ liệu và thực hiện các thao tác SQL vào cơ sở dữ liệu đó.

Cơ sở dữ liệu vẫn ở trạng thái mặc định cho đến khi kết thúc phiên hoặc thực thi câu lệnh USE khác với một số cơ sở dữ liệu khác.

USE AdventureWorksDW2019;

GO

Format truy vấn trong SQL

Format truy vấn là một trong những điểm quan trọng để cải thiện khả năng đọc của truy vấn. Truy vấn được định dạng tốt luôn cải thiện đáng kể khả năng đọc mã. Để làm cho truy vấn của chúng ta dễ đọc hơn, chúng ta có thể tận dụng các công cụ định dạng truy vấn trực tuyến hoặc phần bổ trợ (tiện ích mở rộng).

Ví dụ: chúng ta có thể thấy sự lộn xộn và phức tạp của truy vấn sau:

with t1 as
(
      select t2.* , t3.OrganizationName as ParentOrganizationName
      from DimOrganization as t2
      left join DimOrganization as t3
      on t2.ParentOrganizationKey = t3.OrganizationKey
)
select t4.OrganizationKey, OrganizationName, ParentOrganizationKey, Amount
from FactFinance as t4
left join DimScenario as t5
on t4.ScenarioKey = t5.ScenarioKey
left join t1 as t6
on t4.OrganizationKey = t6.OrganizationKey
WHERE ScenarioName = 'Actual'

Bây giờ, chúng ta sẽ format code này và bạn sẽ có thể thấy sự thay đổi đáng kinh ngạc trong truy vấn hoặc bạn có thể chọn trình định dạng phù hợp với nhu cầu của mình.

WITH t1 AS
      (
      SELECT t2.*
      , t3.OrganizationName AS ParentOrganizationName
      FROM DimOrganization AS t2
            LEFT JOIN DimOrganization AS t3
            ON t2.ParentOrganizationKey = t3.OrganizationKey
      )
SELECT t4.OrganizationKey
      , OrganizationName
      , ParentOrganizationKey
      , Amount
FROM FactFinance AS t4
      LEFT JOIN DimScenario AS t5
      ON t4.ScenarioKey = t5.ScenarioKey
      LEFT JOIN t1 AS t6
      ON t4.OrganizationKey = t6.OrganizationKey
      WHERE ScenarioName = 'Actual'

Để thay đổi mà không cần gõ lại, ta thực hiện thao tác sau:

  • Đánh dấu đoạn văn bản mà ta cần thay đổi
  • Mở bảng lệnh (Command Pallete): dùng tổ hợp với Windows: ctrl + shift + p. Với Mac: cmd + shift + p và nhập “Upper” nếu muốn viết hoa hoặc “Lower” nếu muốn viết thường
  • Nhấn Enter để chuyển đổi

Đặt tên hoặc sử dụng alias cho cột và bảng

Chúng ta có thể sử dụng bí danh (alias) để đổi tên cho cột và bảng để dễ đọc hơn. Ví dụ: trong ví dụ sau, truy vấn không sử dụng các alias bảng và cột và vì lý do này, sẽ tạo cảm giác lộn xộn và khó đọc.

WITH OrgChart AS 
      (
      SELECT DimOrg.OrganizationName
      , DimParentOrg.OrganizationName AS ParentOrganizationName
      FROM DimOrganization AS DimOrg
            LEFT JOIN DimOrganization AS DimParentOrg
            ON DimOrg.ParentOrganizationKey = DimParentOrg.OrganizationKey
      )
SELECT FactFinanceActual.OrganizationKey
      , OrgChart.OrganizationName
      , OrgChart.ParentOrganizationKey
      , FactFinanceActual.Amount
FROM FactFinance AS FactFinanceActual
      LEFT JOIN DimScenario AS Scenario 
      ON FactFinanceActual.ScenarioKey = Scenario.ScenarioKey
      LEFT JOIN OrgChart
      ON FactFinanceActual.OrganizationKey = OrgChart.OrganizationKey
      WHERE ScenarioName = 'Actual'

Tạm kết

Trong bài viết này, chúng ta đã tìm hiểu một số phương pháp hay nhất giúp cải thiện chất lượng của truy vấn SQL. Các truy vấn được định dạng tốt, dễ đọc hơn và hiệu quả hơn sẽ luôn giúp ích cho chúng ta hoặc người khác cần xem xét hoặc sửa đổi các truy vấn. 

Chia sẻ bài viết này

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

This site uses Akismet to reduce spam. Learn how your comment data is processed.