DHDataHọc
Thực hànhBài 6/305 phút đọc+20 XP

Bài tập: lấy dữ liệu

Bạn sẽ học được

  • Chuyển một yêu cầu bằng tiếng Việt thành câu SQL theo từng bước.
  • Dùng SELECT, FROM, ORDER BY cùng nhau để hoàn thành bài luyện đầu tiên.
  • Đọc phản hồi của hệ thống chấm bài và biết sửa gì trước.
  • Phân biệt "kết quả đúng dữ liệu" với "kết quả đúng định dạng đề yêu cầu".
  • Tự kiểm tra bài làm bằng một bộ câu hỏi trước khi nộp.

Khái niệm cốt lõi

Bài luyện trên DataHọc chấm bằng cách so sánh bảng kết quả của bạn với bảng kết quả đúng: cùng số cột, cùng tên cột, cùng số dòng, cùng giá trị, và với một số bài là cùng thứ tự dòng. Vì vậy "chạy không lỗi" chưa đủ; kết quả phải khớp cả về nội dung lẫn hình thức.

Cách làm việc với mọi bài toán SQL, áp dụng được từ bài đầu tiên đến bài phỏng vấn:

  1. Xác định nguồn dữ liệu. Đề nhắc đến bảng nào? Ở đây là customers.
  2. Xác định cột cần trả về. Đề nói "tất cả các cột" — dấu hiệu dùng *. Nếu đề liệt kê cột, viết đúng danh sách đó, đúng thứ tự.
  3. Xác định bộ lọc. Có điều kiện nào không? "Mọi khách hàng" nghĩa là không có WHERE.
  4. Xác định thứ tự. "Sắp xếp theo id tăng dần" → ORDER BY id (mặc định ASC).
  5. Xác định giới hạn. Có chữ "năm", "ba", "top" không? Không có → không dùng LIMIT.

Năm câu hỏi này là checklist. Người mới thường nhảy thẳng vào viết SQL rồi sửa mò; người làm nghề đọc đề, gạch đầu dòng yêu cầu, rồi viết một lần.

Một điểm nữa: đề bài là hợp đồng, không phải gợi ý. Nếu đề nói sắp xếp theo id, đừng sắp xếp theo name dù kết quả nhìn "cũng ổn". Nếu đề nói tất cả các cột, đừng chỉ chọn ba cột bạn thấy cần. Hệ thống chấm không biết ý định của bạn; nó chỉ so bảng.

Trước khi nộp, hãy ước lượng số dòng rồi đối chiếu với kết quả. Bạn biết bảng customers có 12 dòng, nên kết quả đúng phải có 12 dòng. Nếu màn hình chỉ hiện 3 dòng, gần như chắc chắn bạn còn LIMIT từ lần thử trước; nếu hiện 40 dòng, có thể bạn đang truy vấn nhầm bảng hoặc kết quả bị nhân đôi do một phép ghép. Ước lượng trước — đối chiếu sau — là thói quen rẻ nhất để bắt lỗi, và sẽ càng giá trị khi bảng lên tới hàng triệu dòng.

Ví dụ chạy được

Đề bài Lấy toàn bộ khách hàng:

Bảng customers chứa thông tin khách hàng. Hãy viết truy vấn trả về tất cả các cột của mọi khách hàng, sắp xếp theo id tăng dần.

Áp checklist:

Câu hỏiTrả lờiThành phần SQL
Bảng nào?customersFROM customers
Cột nào?Tất cảSELECT *
Lọc gì?Khôngkhông có WHERE
Thứ tự?id tăng dầnORDER BY id
Giới hạn?Khôngkhông có LIMIT

Ghép lại:

code
SELECT *
FROM customers
ORDER BY id;

Kết quả có 12 dòng, bắt đầu bằng khách id = 1 (An Nguyễn) và kết thúc bằng id = 12 (Nga Lý). Nộp truy vấn này, bài luyện sẽ chấm đạt.

Ba lần thử thường gặp trước khi ra đáp án:

Lần 1 — quên sắp xếp:

code
SELECT * FROM customers;

Dữ liệu đúng nhưng thứ tự dòng không được đảm bảo. Trên bộ dữ liệu nhỏ, kết quả có thể tình cờ đúng thứ tự; trên bảng lớn hoặc sau khi có UPDATE, thứ tự thay đổi. Bài chấm sẽ báo sai thứ tự hoặc chỉ đạt một phần.

Lần 2 — thừa LIMIT:

code
SELECT * FROM customers ORDER BY id LIMIT 10;

Chỉ trả 10 trong 12 khách. Thiếu hai dòng, chấm sai. Lỗi này hay xảy ra vì bạn copy truy vấn thử nghiệm trước đó mà quên xoá LIMIT.

Lần 3 — đúng:

code
SELECT * FROM customers ORDER BY id;

Mẹo đọc phản hồi: nếu hệ thống báo "thiếu dòng", kiểm tra WHERE và LIMIT. Nếu báo "sai thứ tự", kiểm tra ORDER BY. Nếu báo "sai cột", kiểm tra danh sách sau SELECT. Đừng đổi cả truy vấn khi chỉ một phần sai.

Thực hành

  1. Nộp đáp án ở trên cho bài Lấy toàn bộ khách hàng (select-all-customers).
  2. Làm thêm một biến thể không chấm điểm: lấy toàn bộ sản phẩm sắp xếp theo giá giảm dần. Viết SELECT * FROM products ORDER BY price DESC; — bạn sẽ thấy sản phẩm đắt nhất đứng đầu.
  3. Tự đặt đề và tự trả lời: "Lấy name và stock của mọi sản phẩm, sắp xếp theo stock tăng dần." Viết ra giấy trước, rồi chạy thử để đối chiếu. Kỹ năng tự ra đề là cách nhanh nhất để kiểm tra mình đã hiểu bài.

Khi đã quen, hãy thử đọc kết quả và kể một câu chuyện: "Trong 12 khách, có 2 người chưa có email, thành phố tập trung ở Hà Nội và TP. Hồ Chí Minh". Đó chính là tư duy phân tích — sẽ được luyện ở chương 6.

Lỗi thường gặp

Triệu chứngNguyên nhânCách sửa
Chấm báo thiếu dòngCòn LIMIT hoặc thêm WHERE không có trong đềXoá LIMIT, kiểm tra điều kiện lọc
Chấm báo sai thứ tựThiếu ORDER BY hoặc dùng DESC nhầmThêm ORDER BY id (mặc định tăng dần)
Chấm báo sai cộtChọn thiếu cột hoặc đặt bí danh ngoài yêu cầuĐề nói "tất cả các cột" thì dùng *
Truy vấn chạy nhưng bảng kết quả trốngWHERE loại hết dòng, thường do so sánh chuỗi saiBỏ WHERE hoặc kiểm tra giá trị so sánh
Lỗi cú pháp ở dòng cuốiQuên ; hoặc dư dấu phẩyĐọc lại từ dòng báo lỗi; bỏ dấu phẩy cuối

Tóm tắt

  • Đọc đề theo năm câu hỏi: bảng, cột, lọc, thứ tự, giới hạn.
  • Đề bài là hợp đồng: đúng dữ liệu chưa đủ, phải đúng cả tên cột và thứ tự dòng khi đề yêu cầu.
  • Bài Lấy toàn bộ khách hàng dùng SELECT * FROM customers ORDER BY id;.
  • Đọc phản hồi chấm bài theo từng phần sai thay vì sửa cả truy vấn.
  • Tự đặt đề nhỏ và tự trả lời là cách kiểm tra hiểu bài nhanh nhất.

Bạn đã hoàn thành chương đầu tiên: biết SQL là gì, đọc được cấu trúc bảng, viết SELECT với danh sách cột và bí danh. Chương tiếp theo thêm WHERE — nơi bắt đầu lọc dữ liệu thật sự.

Dùng ← → để chuyển bài