Wavi Books · Data Engineering & Phân tích dữ liệu

Học SQL cho người mới: lộ trình từ SELECT đến phân tích dữ liệu

Nguyễn Minh Trí · Biên tập chuyên môn Wavi Books

Học SQL cho người mới: lộ trình từ SELECT đến phân tích dữ liệu – bài hướng dẫn tiếng Việt dành cho developer và người học IT tại Việt Nam

Lộ trình học SQL cho người mới bắt đầu từ SELECT, JOIN, GROUP BY đến window function và bài tập phân tích dữ liệu thực tế.

## Học SQL cho người mới: lộ trình từ SELECT đến phân tích dữ liệu

## Điều cần hiểu trước khi nhìn vào công cụ

Lộ trình học SQL cho người mới bắt đầu từ SELECT, JOIN, GROUP BY đến window function và bài tập phân tích dữ liệu thực tế. Một pipeline chỉ có ý nghĩa khi dữ liệu cuối đủ mới, đủ đúng và giải thích được nguồn gốc.

Một dashboard rất đẹp vẫn có thể kể sai câu chuyện nếu dữ liệu đến trễ, bị nhân đôi sau phép join hoặc thay đổi định nghĩa mà không ai ghi lại. Vì vậy, phần khó của nghề dữ liệu không chỉ là xử lý thật nhiều dòng, mà là làm cho con số có nguồn gốc và có thể kiểm tra.

Câu SQL đầu tiên chạy ra đúng kết quả thường đem lại cảm giác rất đã. Nhưng bước tiến lớn hơn là khi bạn không chỉ lấy được dữ liệu, mà còn biết kết quả ấy có đáng tin hay không.

SQL là ngôn ngữ truy vấn dữ liệu quan hệ và là kỹ năng cốt lõi của Data Analyst, Data Engineer lẫn Backend Developer. Người mới nên học cách đặt câu hỏi với dữ liệu trước khi ghi nhớ cú pháp.

Một lộ trình tốt đi từ lọc và sắp xếp, sang tổng hợp, kết nối bảng, subquery, CTE rồi window function. Mỗi chủ đề cần bài tập có kết quả kiểm chứng được.

## Những khái niệm cốt lõi cần nắm

## Học SQL là học cách đặt câu hỏi cho dữ liệu

SELECT, WHERE và GROUP BY chỉ là ngữ pháp. Tư duy SQL nằm ở việc hiểu mỗi dòng đại diện cho điều gì, quan hệ giữa các bảng ra sao và phép join có làm thay đổi độ chi tiết của dữ liệu hay không.

## Chuyện gì xảy ra khi đem vào dự án thật?

Một truy vấn doanh thu có thể tăng gấp đôi chỉ vì bảng đơn hàng được join với nhiều dòng sản phẩm. SQL vẫn chạy, không có thông báo lỗi, nhưng câu trả lời đã sai từ mô hình dữ liệu.

## Nếu bắt đầu hôm nay, tôi sẽ làm thế này

Sau mỗi phép join, hãy đếm lại số dòng và kiểm tra khóa. Học chậm ở phần nền tảng sẽ giúp bạn tiến nhanh hơn rất nhiều khi gặp window function, CTE hoặc bài toán phân tích thật.

- SELECT và WHERE chọn dữ liệu cần thiết.

- JOIN kết nối các thực thể.

- GROUP BY tổng hợp theo chiều phân tích.

- Window function tính toán mà không làm mất chi tiết.

## Lộ trình thực hành từng bước

- Bước 1: Luyện trên schema nhỏ như bán hàng và khách hàng.

- Bước 2: Giải cùng một câu hỏi bằng nhiều cách.

- Bước 3: Đọc execution plan và học tối ưu sau khi đã viết đúng.

## Những sai lầm thường gặp

- Dùng SELECT * trong truy vấn sản xuất.

- JOIN khi chưa hiểu khóa và quan hệ.

- Không xử lý NULL rõ ràng.

## Góc nhìn dành cho người học và developer Việt Nam

Ứng viên dữ liệu tại Hà Nội và TP.HCM nên có dự án SQL mô tả câu hỏi kinh doanh, cách kiểm tra số liệu và kết luận, không chỉ đăng danh sách câu lệnh.

## Nên học tiếp như thế nào?

## Tư duy theo tập hợp thay vì xử lý từng dòng

SQL mô tả kết quả cần lấy, còn optimizer quyết định kế hoạch thực thi. Người mới thường nghĩ như vòng lặp: lấy từng đơn hàng rồi tìm khách hàng. Tư duy theo tập hợp yêu cầu xác định grain của dữ liệu, quan hệ giữa bảng và phép biến đổi toàn bộ tập.

Trước mỗi truy vấn, hãy viết một câu: “Mỗi hàng kết quả đại diện cho điều gì?”. Nếu không trả lời được, bạn rất dễ đếm trùng sau JOIN hoặc dùng GROUP BY sai cấp độ.

## Thứ tự logic của một truy vấn SELECT

SQL được viết theo SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY nhưng tư duy logic gần với FROM/JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT. Vì alias ở SELECT thường chưa tồn tại tại WHERE. Hiểu thứ tự giúp debug thay vì thử cú pháp ngẫu nhiên.

## JOIN và bài toán đếm trùng

Nếu bảng customers có một hàng mỗi khách và orders có nhiều hàng mỗi khách, JOIN làm lặp thông tin khách theo số đơn. Điều này đúng về quan hệ nhưng có thể làm sai COUNT. Hãy kiểm tra khóa, cardinality một-một/một-nhiều/nhiều-nhiều và số hàng trước/sau JOIN.

```sql WITH monthly_revenue AS ( SELECT DATE_TRUNC('month', created_at) AS month, customer_id, SUM(total_amount) AS revenue FROM orders WHERE status = 'completed' GROUP BY 1, 2 ) SELECT month, SUM(revenue) AS total_revenue, COUNT(DISTINCT customer_id) AS active_customers, SUM(revenue) / NULLIF(COUNT(DISTINCT customer_id), 0) AS revenue_per_customer FROM monthly_revenue GROUP BY month ORDER BY month; ```

CTE đầu tiên cố định grain ở tháng-khách hàng; truy vấn ngoài tổng hợp lên tháng. Cách chia tầng làm rõ ý nghĩa từng metric và giảm lỗi khi thêm cột.

## Window function: giữ chi tiết nhưng vẫn tính theo nhóm

GROUP BY gộp nhiều hàng thành một, còn window function giữ từng hàng và tính trong cửa sổ. Đây là công cụ cho xếp hạng, running total, so sánh kỳ trước và chọn bản ghi mới nhất.

```sql SELECT customer_id, created_at, total_amount, SUM(total_amount) OVER ( PARTITION BY customer_id ORDER BY created_at ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS lifetime_value FROM orders; ```

## NULL và logic ba giá trị

NULL không bằng 0 hay chuỗi rỗng; so sánh `= NULL` không trả true. Dùng IS NULL, IS NOT NULL và COALESCE có chủ đích. Khi tính tỷ lệ, NULL đôi khi đúng hơn 0 vì thể hiện không đủ dữ liệu. Việc thay toàn bộ NULL bằng 0 có thể làm sai trung bình và báo cáo.

## Tối ưu sau khi truy vấn đã đúng

Bắt đầu bằng EXPLAIN/EXPLAIN ANALYZE. Kiểm tra full scan, join strategy, số hàng ước tính và thực tế. Index hữu ích khi cột lọc/chuyển nối có tính chọn lọc, nhưng index cũng tốn dung lượng và làm chậm ghi. Không tạo index cho mọi cột.

Các nguyên tắc thực dụng gồm chỉ chọn cột cần, lọc sớm, tránh hàm trên cột index khi có thể, giới hạn dữ liệu thời gian và pre-aggregate ở grain hợp lý. Với warehouse dạng cột, partitioning và clustering có thể quan trọng hơn index truyền thống.

## Bộ bài tập từ cơ bản đến phỏng vấn

- Tính doanh thu theo tháng và tỷ lệ tăng trưởng so với tháng trước.

- Tìm khách mua lần đầu, lần gần nhất và số ngày quay lại.

- Xây cohort retention theo tháng đăng ký.

- Phát hiện đơn trùng và giải thích tiêu chí giữ bản ghi.

- Viết funnel xem sản phẩm → thêm giỏ → đặt hàng.

- So sánh hai cách truy vấn bằng execution plan.

## Cách trình bày dự án SQL

Repository nên có schema, dữ liệu mẫu, câu hỏi nghiệp vụ, truy vấn, test kiểm tra và phần giải thích kết quả. Nhà tuyển dụng quan tâm khả năng làm dữ liệu đáng tin hơn là số lượng câu lệnh bạn thuộc.

## Góc nhìn dành cho developer Việt Nam

Trong các đội data tại Việt Nam, người hiểu cả kỹ thuật lẫn ý nghĩa nghiệp vụ thường tạo ra khác biệt lớn. Đừng chỉ hỏi pipeline có chạy không; hãy hỏi dữ liệu có đủ, có mới, có đúng đơn vị và có phục vụ được quyết định đang cần hay không.

## Đọc tiếp trên Wavi Books

Nếu bạn muốn học chủ đề này theo một lộ trình có cấu trúc, có thể xem The AI & Data Handbook bản tiếng Việt tại [Wavi Books](/sach/the-ai-data-handbook-alex-gutman-2026). Sách liên quan được đặt sau phần kiến thức để bạn có thể đánh giá nội dung trước khi chọn mua.

Nguồn tham khảo và tài liệu đối chiếu

  1. pandas documentation
  2. Apache Kafka documentation
  3. dbt Developer Hub

Sách liên quan

Câu hỏi thường gặp

Học SQL cho người mới: lộ trình từ SELECT đến phân tích dữ liệu có phù hợp với người mới không?

Có, nếu bắt đầu từ khái niệm nền tảng và một bài tập nhỏ. Người mới nên ưu tiên hiểu luồng dữ liệu, mục tiêu và cách kiểm tra kết quả trước khi học công cụ nâng cao.

Mất bao lâu để áp dụng học sql cho người mới: lộ trình từ select đến phân tích dữ liệu vào dự án?

Thời gian phụ thuộc nền tảng và phạm vi. Một bản thử nghiệm nhỏ có thể hoàn thành trong vài ngày, nhưng để vận hành ổn định cần thêm kiểm thử, bảo mật, theo dõi và tài liệu.

Nên học lý thuyết hay làm dự án trước?

Nên học vừa đủ lý thuyết để hiểu quyết định, sau đó làm dự án và quay lại đào sâu phần gây lỗi. Cách học lặp này hiệu quả hơn việc chỉ đọc hoặc chỉ sao chép mã.