Câu hỏi phỏng vấn SQL: từ JOIN, window function đến vòng live SQL

Nhiều ứng viên viết được truy vấn nhưng vẫn trượt vì không giải thích được lựa chọn của mình. Bài viết gom các câu hỏi phỏng vấn SQL theo nhóm nền tảng, nâng cao, hiệu năng và thiết kế, kèm điều người phỏng vấn muốn kiểm tra. Trọng tâm là vòng live SQL trên bảng đơn hàng – khách hàng, nơi cách nghĩ được chấm ngang câu lệnh.

câu hỏi phỏng vấn SQL

Tổng quan nhanh

– Nhóm nền tảng xoay quanh JOIN, WHERE với HAVING, GROUP BY và NULL.

– Nhóm nâng cao kiểm tra CTE, subquery và window function như ROW_NUMBER, RANK.

– Nhóm hiệu năng và thiết kế hỏi về index, execution plan, chuẩn hóa, transaction.

– Vòng live SQL thường có bài tìm bản ghi trùng và bài lấy top N mỗi nhóm.

Bốn nhóm này được nhấn khác nhau tùy vị trí ứng tuyển.

Phần dưới đi lần lượt từng nhóm, kèm ghi chú theo vị trí.

1. Nhóm câu hỏi nền tảng: JOIN, WHERE – HAVING và NULL

Chuyên viên phân tích dữ liệu (Data Analyst), Lập trình viên back-end (Back-end Developer) hay Quản trị cơ sở dữ liệu (Database Administrator) thường gặp nhóm câu này đầu tiên. Người hỏi muốn nghe giải thích bằng ví dụ thay vì định nghĩa. Nếu cần ôn khái niệm gốc, bài SQL là gì? Những điều cần biết về cơ sở dữ liệu tóm tắt nền tảng cần nắm.

JOIN và hiện tượng phình dòng

INNER JOIN chỉ giữ dòng khớp ở cả hai bảng, LEFT JOIN giữ toàn bộ bảng trái và điền NULL khi bảng phải không khớp. Điểm cộng là tự nhắc rủi ro JOIN quan hệ một – nhiều làm doanh thu bị cộng lặp.

WHERE, HAVING và thứ tự thực thi logic

WHERE lọc từng dòng trước khi gom nhóm, HAVING lọc nhóm sau GROUP BY. Hãy nêu thứ tự thực thi logic: FROM và JOIN, WHERE, GROUP BY, HAVING, SELECT, ORDER BY, cuối cùng là LIMIT.

NULL, COUNT và UNION

NULL nghĩa là không có giá trị, nên phải kiểm tra bằng IS NULL thay vì dấu bằng. Các câu đi kèm hay gặp gồm:

– COUNT(*) đếm mọi dòng, còn COUNT(cột) bỏ qua dòng có NULL ở cột đó.

– UNION loại dòng trùng nên tốn thêm xử lý, còn UNION ALL giữ nguyên mọi dòng.

– PRIMARY KEY không nhận NULL, còn UNIQUE tùy hệ quản trị vẫn có thể chấp nhận NULL (SQL Server chỉ nhận một giá trị NULL, còn PostgreSQL, MySQL và Oracle cho phép nhiều dòng).

Kèm ví dụ nhỏ sẽ thuyết phục hơn đọc thuộc.

2. Câu hỏi truy vấn nâng cao: CTE, subquery và window function

Từ vòng hai, với câu “CTE khác subquery thế nào”, ý trả lời là kết quả thường tương đương, nhưng CTE (mệnh đề WITH) đặt tên cho từng bước nên dễ đọc, dễ sửa và hỗ trợ truy vấn đệ quy. Subquery hợp khi điều kiện ngắn, dùng một lần.

ROW_NUMBER, RANK và DENSE_RANK khác nhau ở cách xử lý giá trị bằng nhau. Với dãy 30, 25, 25, 20, ROW_NUMBER trả 1, 2, 3, 4; RANK trả 1, 2, 2, 4; DENSE_RANK trả 1, 2, 2, 3. Câu kinh điển “tìm nhân viên có mức lương lớn thứ hai” vì thế giải được bằng DENSE_RANK bằng 2. LAG hay dùng để so doanh thu với tháng trước.

Nên ôn đúng cú pháp hệ quản trị trong tin tuyển dụng: lấy N dòng đầu dùng LIMIT trong MySQL và PostgreSQL, TOP trong SQL Server, còn Oracle từ bản 12c dùng FETCH FIRST n ROWS ONLY.

3. Vòng live SQL trên bảng đơn hàng – khách hàng

Phần thực hành trong bộ câu hỏi phỏng vấn SQL thường cho hai bảng khách hàng và đơn hàng để viết truy vấn trực tiếp. Nhìn các tin trong mục việc làm CNTT – phần mềm trên CareerLink, SQL nằm trong yêu cầu của nhiều vị trí dữ liệu lẫn lập trình. Người chấm theo dõi trình tự suy nghĩ của bạn.

Bài tìm bản ghi trùng lặp

Đề thường là “tìm khách hàng bị nhập trùng email”. Hãy nói thành tiếng: gom nhóm theo email, đếm số dòng, giữ nhóm lớn hơn 1 bằng HAVING. Muốn giữ bản mới nhất thì dùng ROW_NUMBER phân vùng theo email, sắp ngày tạo giảm dần.

Bài lấy top N mỗi nhóm

Với đề “lấy 3 đơn giá trị lớn nhất mỗi khách”, hãy trình bày lọc gì trước, gom gì sau: bỏ đơn hủy, đánh số trong từng khách bằng ROW_NUMBER, rồi giữ số thứ tự không quá 3 ở truy vấn ngoài.

Câu lệnh đúng cho thấy bạn biết viết SQL; câu hỏi “con số này có hợp lý không” cho thấy bạn hiểu dữ liệu.

Lưu ý kiểm tra sanity của kết quả

– Bạn nên so số dòng trước và sau JOIN để phát hiện dữ liệu bị phình.

– Bạn cần kiểm tra cột có NULL trước khi dùng AVG hoặc phép chia tỷ lệ.

– Bạn hãy đối chiếu tay vài khách hàng cụ thể với kết quả tổng hợp.

Ba thao tác này giúp bạn trả lời được câu hỏi ngược.

Với Data Analyst, câu hỏi ngược kiểu “doanh thu trung bình mỗi khách tăng gấp đôi, bạn có tin không” khá phổ biến. Phản xạ kiểm tra lại JOIN và NULL trước khi kết luận là điểm cộng lớn.

4. Câu hỏi hiệu năng và thiết kế cơ sở dữ liệu

Nhóm này nặng với Back-end và DBA, thường mở đầu bằng “index là gì, khi nào không nên tạo”. Ý trả lời: index giống mục lục, tìm nhanh hơn nhưng làm ghi chậm và tốn dung lượng, nên chỉ tạo trên cột hay lọc, nối, sắp xếp. Với truy vấn chậm, hãy đo trước, sửa sau: đọc execution plan bằng EXPLAIN (MySQL, PostgreSQL) hoặc SQL Server Management Studio, tìm chỗ quét toàn bảng, rồi mới bỏ SELECT * hoặc thêm index.

Câu thiết kế hay gặp gồm khóa chính, khóa ngoại và chuẩn hóa 1NF đến 3NF. Với transaction, hãy giải thích ACID (Atomicity, Consistency, Isolation, Durability) bằng ví dụ chuyển tiền giữa hai tài khoản. Câu nâng cao là isolation level: mặc định của PostgreSQL và SQL Server là READ COMMITTED, còn InnoDB của MySQL là REPEATABLE READ.

câu hỏi phỏng vấn SQL

5. Bảng câu hỏi phỏng vấn SQL theo vị trí

Cùng một câu hỏi, mỗi vị trí nhấn một góc khác nhau. Bảng dưới giúp bạn chọn trọng tâm ôn. Hãy đọc theo hàng.

Câu hỏi Nhà tuyển dụng kiểm tra gì Data Analyst Back-end Developer DBA
LEFT JOIN khác INNER JOIN? Hiểu dữ liệu thiếu và phình dòng Kiểm tra tổng sau JOIN Chọn JOIN khi map dữ liệu cho API Ảnh hưởng kế hoạch thực thi
Lấy top N mỗi nhóm? Dùng window function ROW_NUMBER trên báo cáo Phân trang theo nhóm Index hỗ trợ sắp xếp
Transaction và ACID? Hiểu toàn vẹn dữ liệu Biết dữ liệu chưa commit Mở, đóng transaction đúng chỗ Isolation level, deadlock

Lời khuyên khi luyện tập

– Bạn hãy tự tạo hai bảng khách hàng và đơn hàng mẫu trên PostgreSQL.

– Bạn nên nói thành tiếng từng bước trước khi gõ câu lệnh hoàn chỉnh.

– Bạn hãy ghi lại lỗi từng gặp như phình dòng hay chia cho NULL.

Ba thói quen này giúp bạn bình tĩnh hơn ở vòng live.

Bài tập tự dựng thường hữu ích hơn đáp án có sẵn.

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

1. Phỏng vấn SQL có cho tra cứu không? Tùy công ty; nhiều nơi cho tra cú pháp nhưng chấm suy luận.

2. Fresher cần biết window function không? Với Data Analyst, ROW_NUMBER và RANK khá thường gặp.

3. Nên ôn hệ quản trị nào trước? Ôn theo tin tuyển dụng; không ghi thì chọn PostgreSQL hoặc MySQL.

Vượt vòng kỹ thuật không chỉ nhờ thuộc cú pháp mà nhờ giải thích được lựa chọn của mình. Khi luyện câu hỏi phỏng vấn SQL, hãy đi từ JOIN, HAVING, NULL đến CTE, window function, index và transaction, rồi tự giải bài trùng lặp và top N mỗi nhóm bằng cách nói thành tiếng. Trước khi chốt đáp án, hãy kiểm tra con số có hợp lý không, vì đó là kỹ năng tạo khác biệt.

Bài viết mang tính tham khảo; hình thức phỏng vấn tùy doanh nghiệp, cú pháp nên đối chiếu tài liệu chính thức của hệ quản trị.

Minh An

Về Tác Giả

CareerLink

Sao chép thành công