Trong bài viết của series “Hướng dẫn thi chứng chỉ Google Data Analytics” chia sẻ kiến thức chương trình chứng chỉ Google Data Analytics lần này, chúng ta sẽ tìm hiểu về những tip nho nhỏ nhưng cực kỳ hữu ích để viết truy vấn SQL hiệu quả.
Tại sao cần tư duy truy vấn SQL mạch lạc?
Khi viết xuống những dòng code cũng chính là lúc chúng ta trình bày những tư duy của mình. Nội dung về SQL sẽ xuyên suốt nhiều chương và càng về sau sẽ càng đào sâu. Các truy vấn SQL cũng ngày càng dài và phức tạp hơn. Vì vậy nếu bạn có được tư duy viết truy vấn mạch lạc giúp đọc hiểu ý nghĩa câu truy vấn trong nội dung bài học và người học tự viết được các truy vấn chuẩn, rõ ràng
Đối với chứng chỉ Google Data Analytics, cách viết truy vấn SQL xuất hiện trong phần tài liệu tham khảo của chương trình và câu hỏi trắc nghiệm lý thuyết cuối module thuộc Course 3.
Vậy làm sao để những tư duy đấy trông “sáng sủa” và thật sự dễ hiểu với người đọc? Tiếp theo, chúng ta sẽ lần lượt đi qua các nội dung cần lưu ý để giúp bạn dần định hình được phong cách viết truy vấn SQL chuẩn chỉnh, chuyên nghiệp cũng như trình bày một cách logic, rõ ràng đến người xem.
Cách viết truy vấn SQL chuyên nghiệp và logic
Chữ in hoa và chữ thường
Với SQL, việc viết hoa hay viết thường không là vấn đề. Các cách viết: SELECT hay select hoặc seleCT đều không gây ra lỗi khi chạy câu lệnh. Nhưng nếu vận dụng việc viết hoa trở thành phong cách nhất quán, các truy vấn sẽ trông chuyên nghiệp hơn. Chúng ta nên:
- Viết in hoa cho phần bắt đầu câu lệnh (ví dụ: SELECT, FROM, WHERE) và các hàm (ví dụ: SUM())
- Viết chữ dạng snake_case cho tên cột (chi tiết ở phần sau của hướng dẫn)
- Viết chữ dạng CamelCase cho tên bảng (chi tiết ở phần sau của hướng dẫn)
Lưu ý: Phân biệt chữ hoa với chữ thường sẽ trở nên quan trọng khi ký tự được đặt trong dấu ngoặc kép.
Ví dụ nếu bạn tìm kiếm với điều kiện: country_code = ‘VN’, hầu hết các phương ngữ SQL như MySQL, PostgreSQL và SQL Server không phân biệt hoa thường và trả về tất cả bản ghi chứa ‘vn’, ‘VN’, ‘vN’, ‘Vn’ nhưng một số hệ quản trị cơ sở dữ liệu khác như BigQuery sẽ chỉ trả về các bản ghi chứa ‘VN’.
Dấu nháy kép hay nháy đơn: ” ” hay ‘ ‘
Có thể bạn sẽ phân vân khi lựa chọn dấu nháy kép hay nháy đơn để tham chiếu đến các chuỗi. Thực tế, khi viết ‘VN’ hay “VN”, SQL đều sẽ xem chúng như một chuỗi. Tuy nhiên, có hai tình huống sẽ xảy ra vấn đề với loại dấu nháy bạn sử dụng:
- Bạn muốn các chuỗi có thể được nhận dạng trong bất cứ phương ngữ SQL nào
- Chuỗi của bạn chứa dấu nháy đơn hoặc nháy kép
Quy tắc chung là hầu hết các phương ngữ SQL đều sử dụng dấu nháy đơn cho dữ liệu dạng chuỗi. Như ví dụ nêu trên, bạn có thể viết truy vấn SQL hiệu quả hơn bằng cách sử dụng ‘VN’ thay vì “VN”.
Đối với tình huống thứ hai, chúng ta sẽ xem xét bảng “DataAnalyticsCourse” sau:
Friend | Favorite_course |
A | SmartData’s Course |
B | Google Data Analytics |
C | Power BI Data Analyst Associate |
Lưu ý rằng SmartData’s Course có chứa dấu nháy đơn. Nếu chúng ta sử dụng dấu nháy đơn trong mệnh đề WHERE để lấy ra tên người bạn yêu thích khóa học này, đoạn code viết như sau:
SELECT Friend FROM DataAnalyticsCourse WHERE Favorite_course = 'SmartData's Course'
Câu truy vấn trên trả về lỗi bởi SQL xem xét văn bản dạng chuỗi là nội dung bắt đầu bằng một dấu nháy đơn ‘ và kết thúc bằng một dấu nháy đơn ‘ khác, dẫn đến SQL sẽ tìm kiếm cho chuỗi SmartData thay vì chuỗi SmartData’s Course. Vậy nên, chúng ta sẽ thay đổi điều kiện trong câu lệnh WHERE về: Favorite_channel = “SmartData’s Course” để có kết quả đúng.
Viết chú thích
Các chú thích chèn vào trong quá trình viết truy vấn SQL sẽ gợi nhắc cho chính người viết về mục đích của đoạn code và giải thích cho người xem logic trong đó. Cho ví dụ:
-- Đây là truy vấn lấy ra thông tin các sản phẩm bán ra theo ngày SELECT date, --date có dữ liệu dạng chuỗi YYYY-MM-DD product FROM Orders
Khi thêm chú thích bằng hai dấu gạch ngang –, SQL sẽ bỏ qua thông tin sau — trong dòng đó và tiếp tục xử lý truy vấn bắt đầu ở dòng tiếp theo. Chúng ta có thể sử dụng ký tự # thay cho — nhưng # không phải được chấp nhận trong tất cả phương ngữ SQL nên tốt nhất hãy nhất quán sử dụng –.
Trường hợp tạo chú thích cho nhiều dòng, thay vì đặt dấu — đầu mỗi dòng thì để tiện lợi hơn, chúng ta có thể sử dụng /* để bắt đầu và */ để đóng phần giải thích như dưới đây:
/* Ngày: 01/01/2023 Mục đích: Lấy ra thông tin các sản phẩm bán ra theo ngày */ SELECT date, --date có dữ liệu dạng chuỗi YYYY-MM-DD product FROM Orders
Lùi đầu dòng
Nguyên tắc chung là giữ độ dài của dòng truy vấn tối đa chỉ 100 ký tự để câu truy vấn dễ đọc hơn. Hãy xem xét truy vấn sau với dòng dài hơn 100 ký tự:
SELECT CASE WHEN genre = 'horror' THEN 'Will not watch' WHEN genre = 'documentary' THEN 'Will watch alone' ELSE 'Watch with others' END AS watch_category, COUNT(movie_title) AS number_of_movies FROM MovieTheater GROUP BY 1
Có thể thấy truy vấn trên khá khó để đọc hiểu và chỉnh sửa nếu có lỗi sai. Tiếp theo cũng là truy vấn trên sau khi đã thụt đầu dòng và đảm bảo độ dài dòng nhỏ hơn 100 ký tự:
SELECT CASE WHEN genre = 'horror' THEN 'Will not watch' WHEN genre = 'documentary' THEN 'Will watch alone' ELSE 'Watch with others' END AS watch_category, COUNT(movie_title) AS number_of_movies FROM MovieTheater GROUP BY 1
Cả hai truy vấn trên vẫn sẽ chạy mà không gặp vấn đề gì trong SQL. Tuy nhiên, việc thụt lề thích hợp sẽ giữ cho dòng ngắn và nhận được đánh giá cao từ người đọc.
Đặt tên cho cột và bảng
Tên cột dạng snake_case
Khi thực hiện truy vấn SQL, chúng ta sẽ gặp rất nhiều trường hợp cần tạo thêm cột mới (từ các tính toán hoặc từ việc nối các cột có sẵn), các cột mới này sẽ nhận những tên mặc định chung (ví dụ: f0, f1). Lúc này, chúng ta cần gán tên cho chúng để đảm bảo kết quả của truy vấn dễ hiểu. Xét ví dụ sau:
SELECT COUNT(orderid), SUM(revenue), COUNT(orderid) AS number_of_orders, SUM(revenue) AS total_revenue FROM Sales
Kết quả trả về như sau:
f0 | f1 | number_of_orders | total_revenue |
5 | 100000 | 5 | 100000 |
Trong ví dụ trên, chúng ta nhận ngay về kết quả với tên cột dễ hiểu tại 2 cột cuối. Tip ở đây là luôn ghi nhớ gán tên cho cột mới, đặc biệt là khi sử dụng các hàm.
Không giống như việc đặt tên cột trong soạn thảo văn bản thông thường, chúng ta tránh việc sử dụng khoảng trắng giữa các từ khi đặt tên trong SQL. Ví dụ trong tình huống trên, nếu đặt tên cột là ‘total revenue’, SQL sẽ sử dụng ‘total’ làm tên và không hiểu được ý nghĩa của ‘revenue’. Cách tốt nhất là sử dụng snake_case, tức là chúng ta sẽ sử dụng dấu gạch dưới thay vì khoảng trắng giữa các từ.
Tên bảng dạng CamelCase
Chúng ta có thể sử dụng các lựa chọn khác nhau về dạng chữ khi đặt tên bảng, bao gồm:
- Viết dạng CamelCase hoặc camelCase: viết liền các từ và viết hoa chữ cái đầu của mỗi từ (ví dụ: DataAnalyticsCourse) hoặc không viết hoa chữ cái đầu của từ đầu tiên (ví dụ: dataAnalyticsCourse)
- Viết hoa hoặc viết thường tất cả, như DATAANALYTICSCOURSE hoặc dataanalyticscourse
- Viết dạng snake_case, như data_analytics_course
Có thể thấy, viết hoa hoặc viết thường tất cả khiến tên bảng khó đọc và trông thiếu chuyên nghiệp. Viết dạng snake_case là lựa chọn khá ổn vì tên bảng dễ đọc nhưng sẽ khiến tên bảng bị dài và gây bất tiện nếu chúng ta phải tham chiếu đến bảng nhiều lần. Do vậy, tên bảng dạng CamelCase hoặc camelCase là lựa chọn thích hợp nhất.
Kết luận về viết truy vấn SQL
Qua những phân tích chi tiết và ví dụ minh họa trên, chúng ta cùng đúc kết lại những cách thực hành tốt nhất để viết truy vấn SQL hiệu quả:
- Viết chữ in hoa cho phần bắt đầu các câu lệnh và các hàm
- Sử dụng dấu nháy đơn để tham chiếu đến các chuỗi
- Dùng hai dấu gạch ngang — cho chú thích trên 1 dòng và cặp ký tự /**/ cho chú thích nhiều dòng
- Lùi đầu dòng để giữ câu lệnh ngắn và dễ hiểu
- Đặt tên cột dạng snake_case và tên bảng dạng CamelCase
Nếu bạn là newbie có thể tham khảo bài viết này để tìm hiểu lộ trình học DA trong 3 tháng kết hợp ôn luyện chứng chỉ Google Data Analytics Certificate của SmartData.
Nếu bạn thấy bài viết hay và hữu ích, bạn có thể tham gia các kênh sau của SmartData để nhận được nhiều hơn nữa: