Hướng dẫn học SQL Basic thực hành từ đầu: cài MySQL, MySQL Workbench, import database mẫu và luyện 20 bài SELECT, GROUP BY, HAVING, Subquery, JOIN.
Đây là tài liệu SQL Basic thực hành dành cho người mới bắt đầu, giúp bạn từng bước cài đặt môi trường, tạo cơ sở dữ liệu mẫu và trực tiếp thực hành các câu lệnh SQL cơ bản.
Thay vì chỉ học lý thuyết, bạn sẽ sử dụng một database mẫu để thực hiện 20 bài tập SQL Basic, từ các câu lệnh SELECT đơn giản đến GROUP BY, HAVING, Subquery và JOIN nhiều bảng.
Sau khi hoàn thành bài thực hành, bạn sẽ làm quen với các nội dung:
✓ SELECT và lựa chọn cột dữ liệu
✓ WHERE và lọc dữ liệu
✓ DISTINCT
✓ ORDER BY
✓ LIMIT
✓ COUNT, SUM, AVG
✓ GROUP BY và HAVING
✓ Các hàm SQL cơ bản
✓ Subquery
✓ INNER JOIN
✓ LEFT JOIN
✓ RIGHT JOIN
✓ JOIN nhiều bảng
✓ Thực hành truy vấn trên các bài toán Trường học, Bán hàng và Nhân sự
Toàn bộ bài thực hành sử dụng MySQL 8.0+.
Để thực hành, bạn cần cài đặt:
✓ MySQL Community Server – hệ quản trị cơ sở dữ liệu.
✓ MySQL Workbench – công cụ giao diện giúp viết và thực thi các câu lệnh SQL.
Bạn có thể tải MySQL tại trang chính thức:
MySQL Community Server:
https://dev.mysql.com/downloads/mysql/
MySQL Workbench:
https://dev.mysql.com/downloads/workbench/
Đối với sinh viên sử dụng Windows, có thể sử dụng MySQL Installer để cài đặt:
https://dev.mysql.com/downloads/installer/
Truy cập:
https://dev.mysql.com/downloads/installer/
Tải MySQL Installer và chạy file cài đặt.
Trong quá trình cài đặt, cần đảm bảo máy tính có:
✓ MySQL Server
✓ MySQL Workbench
Thực hiện các bước cấu hình theo hướng dẫn của MySQL Installer.
Khi hệ thống yêu cầu thiết lập tài khoản quản trị, sử dụng:
User: root
Sau đó tạo mật khẩu cho tài khoản root.
Lưu ý: Hãy ghi nhớ mật khẩu này vì bạn sẽ sử dụng nó để kết nối MySQL Workbench với MySQL Server.
Sau khi quá trình cài đặt hoàn tất, mở:
MySQL Workbench
Mở MySQL Workbench.
Chọn kết nối MySQL Local Instance và nhập mật khẩu root đã tạo khi cài đặt.
Tạo một SQL Tab mới.
Chạy câu lệnh:
SELECT VERSION();
Nếu MySQL trả về thông tin phiên bản, môi trường đã được cài đặt thành công.
Tiếp tục thử câu lệnh:
SELECT 'Hello SQL' AS message;
Nếu Result Grid hiển thị:
Hello SQL
thì bạn đã sẵn sàng bắt đầu thực hành.
Toàn bộ 20 bài tập sử dụng database:
sql_basic
Database đã được chuẩn bị sẵn bảng, khóa ngoại và dữ liệu mẫu phục vụ cho bài thực hành.
👉 Tải Database mẫu và đáp án 20 bài tập SQL Basic
Sau khi tải về, bạn sẽ có file:
sql_basic_sample.sql
Database gồm 3 nhóm dữ liệu chính.
Gồm các bảng:
students
classes
teachers
Dữ liệu được sử dụng để thực hành SELECT và JOIN giữa sinh viên, lớp học và giáo viên.
Gồm các bảng:
customers
orders
products
order_details
Dữ liệu được sử dụng để thực hành truy vấn khách hàng, đơn hàng, sản phẩm, doanh thu và JOIN nhiều bảng.
Gồm các bảng:
employees
departments
Dữ liệu được sử dụng để thực hành các hàm SQL, Subquery, GROUP BY và HAVING.
Sau khi tải file sql_basic_sample.sql, thực hiện các bước sau.
Khởi động MySQL Workbench và kết nối vào MySQL Server.
Chọn:
File → Open SQL Script
Chọn file:
sql_basic_sample.sql
Sau khi file được mở trong MySQL Workbench, chọn Execute để chạy toàn bộ script.
Phần đầu của file có các câu lệnh:
DROP DATABASE IF EXISTS sql_basic;
CREATE DATABASE sql_basic
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE sql_basic;
Các câu lệnh này sẽ tự động:
✓ Xóa database sql_basic cũ nếu đã tồn tại.
✓ Tạo lại database sql_basic.
✓ Chọn sql_basic làm database hiện tại.
✓ Tạo các bảng.
✓ Tạo khóa chính và khóa ngoại.
✓ Thêm dữ liệu mẫu.
Lưu ý: Mỗi lần chạy lại toàn bộ file, database sql_basic cũ sẽ bị xóa và tạo lại từ đầu.
Vì vậy, không lưu dữ liệu quan trọng của bạn trong database này.
Chạy:
SHOW DATABASES;
Kiểm tra trong kết quả có database:
sql_basic
Sau đó chạy:
USE sql_basic;
SHOW TABLES;
Bạn sẽ thấy các bảng dữ liệu đã được tạo.
Tiếp tục kiểm tra:
SELECT * FROM students;
Nếu Result Grid xuất hiện danh sách sinh viên thì database đã được import thành công.
Với mỗi bài tập, không nên xem đáp án ngay.
Hãy thực hiện theo quy trình:
Đọc yêu cầu → Xác định bảng → Xác định dữ liệu cần lấy → Viết câu SQL → Execute → Kiểm tra kết quả → Đối chiếu đáp án
Ví dụ:
Yêu cầu: Liệt kê toàn bộ sinh viên.
Trước khi viết SQL, hãy tự xác định:
Dữ liệu nằm trong bảng nào?
Cần lấy những cột nào?
Có cần điều kiện lọc không?
Có cần sắp xếp không?
Sau đó mới viết câu SQL và chạy thử.
Hiển thị toàn bộ dữ liệu trong bảng:
students
Kiến thức cần sử dụng: SELECT.
Hiển thị các thông tin:
id
name
class_id
Đổi tên cột:
class_id
thành:
Ma_lop
Kiến thức cần sử dụng: SELECT và AS.
Hiển thị:
id
name
age
Sắp xếp danh sách sinh viên theo tuổi tăng dần.
Kiến thức cần sử dụng: ORDER BY.
Hiển thị danh sách các lớp mà sinh viên đang học.
Yêu cầu:
✓ Không hiển thị class_id trùng nhau.
✓ Không lấy giá trị NULL.
Kiến thức cần sử dụng: DISTINCT, WHERE và IS NOT NULL.
Hiển thị 5 sinh viên đầu tiên.
Danh sách được sắp xếp theo:
id
Kiến thức cần sử dụng: ORDER BY và LIMIT.
Sử dụng bảng:
orders
Đếm tổng số đơn hàng hiện có trong database.
Kiến thức cần sử dụng: COUNT.
Hiển thị:
Mã khách hàng
Tên khách hàng
Tổng số tiền đã mua
Sắp xếp danh sách theo tổng doanh thu giảm dần.
Kiến thức cần sử dụng: JOIN, SUM, GROUP BY và ORDER BY.
Tìm những khách hàng ở:
Ha Noi
TP.HCM
Kiến thức cần sử dụng: WHERE và IN.
Tính giá trị đơn hàng trung bình của từng khách hàng.
Chỉ hiển thị những khách hàng có giá trị đơn hàng trung bình:
Lớn hơn 5.000.000
Sắp xếp kết quả giảm dần theo giá trị đơn hàng trung bình.
Kiến thức cần sử dụng: AVG, GROUP BY, HAVING và ORDER BY.
Đếm số đơn hàng của từng tháng trong năm:
2024
Kết quả cần được sắp xếp theo thứ tự tháng.
Kiến thức cần sử dụng: COUNT, MONTH, YEAR và GROUP BY.
Tìm nhân viên có mức lương cao nhất trong công ty.
Gợi ý: Có thể sử dụng một truy vấn để tìm mức lương lớn nhất trước.
Kiến thức cần sử dụng: Subquery và MAX.
Tính mức lương trung bình của toàn bộ nhân viên.
Sau đó tìm những nhân viên có lương cao hơn mức lương trung bình của công ty.
Sắp xếp danh sách theo lương giảm dần.
Kiến thức cần sử dụng: Subquery, AVG và ORDER BY.
Hiển thị:
Tên nhân viên viết HOA
Lương được làm tròn đến hàng nghìn
Kiến thức cần sử dụng: UPPER và ROUND.
Dựa vào:
hire_date
hãy tính số năm làm việc của từng nhân viên tính đến thời điểm hiện tại.
Kiến thức cần sử dụng: TIMESTAMPDIFF và CURDATE.
Liệt kê những phòng ban có ít nhất:
5 nhân viên
Kiến thức cần sử dụng: LEFT JOIN, COUNT, GROUP BY và HAVING.
Hiển thị:
Mã sinh viên
Tên sinh viên
Tên lớp
Dữ liệu nằm trong hai bảng:
students
classes
Sử dụng:
INNER JOIN
Hiển thị toàn bộ lớp học cùng giáo viên phụ trách.
Yêu cầu:
Các lớp chưa có giáo viên vẫn phải xuất hiện trong kết quả.
Sử dụng:
LEFT JOIN
Hiển thị toàn bộ giáo viên cùng lớp học được phân công.
Yêu cầu:
Giáo viên chưa được phân công lớp vẫn phải xuất hiện.
Thực hành:
RIGHT JOIN
Hiển thị:
Tên sinh viên
Tên lớp
Tên giáo viên
Thông tin nằm trong ba bảng:
students
classes
teachers
Hãy xác định quan hệ giữa ba bảng trước khi viết câu SQL.
Sử dụng các bảng:
customers
orders
products
order_details
để thực hiện các yêu cầu sau.
Hiển thị:
Mã đơn hàng
Tên khách hàng
Ngày đặt hàng
Tổng tiền
Với mỗi sản phẩm, tính tổng số lượng đã bán.
Hiển thị:
Mã sản phẩm
Tên sản phẩm
Tổng số lượng đã bán
Sắp xếp theo tổng số lượng bán giảm dần.
Tính tổng số tiền mua hàng của từng khách hàng.
Sau đó tìm khách hàng có tổng chi tiêu cao nhất.
Sau khi hoàn thành 20 bài trên, hãy thử tự viết thêm các câu truy vấn sau.
✓ Tìm sinh viên lớn tuổi nhất.
✓ Đếm số sinh viên của từng lớp.
✓ Tính tuổi trung bình của sinh viên trong từng lớp.
✓ Tìm những sinh viên chưa được xếp lớp.
✓ Tính lương trung bình của từng phòng ban.
✓ Tìm nhân viên có mức lương cao thứ hai.
✓ Tìm nhân viên chưa thuộc phòng ban nào.
✓ Tìm sản phẩm bán được nhiều nhất.
✓ Tìm khách hàng chưa có đơn hàng.
✓ Tìm 3 khách hàng có tổng chi tiêu cao nhất.
Hãy chạy lại toàn bộ file:
sql_basic_sample.sql
Chạy:
USE sql_basic;
Sau đó thực hiện lại câu truy vấn.
Chạy:
SHOW TABLES;
Nếu sử dụng MySQL Workbench, bạn cũng có thể Refresh phần Schemas.
Chạy:
SELECT DATABASE();
Kết quả cần là:
sql_basic
Nếu không phải, chạy:
USE sql_basic;
Kiểm tra lần lượt:
USE sql_basic;
SHOW TABLES;
SELECT * FROM students;
Nếu bảng students có dữ liệu thì database đã được import thành công.
Khuyến nghị: Hãy tự làm bài trước khi xem đáp án.
Một bài SQL có thể có nhiều cách viết đúng khác nhau. Đáp án được cung cấp chỉ là một phương án tham khảo trên MySQL 8.0.
👉 Xem và tải đáp án 20 bài tập SQL Basic tại đây
SQL là một kỹ năng nên học thông qua thực hành trực tiếp trên dữ liệu.
Thay vì chỉ ghi nhớ cú pháp, hãy cố gắng hiểu mỗi câu truy vấn đang giải quyết vấn đề gì:
Cần lấy dữ liệu gì? → Dữ liệu nằm ở bảng nào? → Điều kiện lọc là gì? → Có cần nhóm dữ liệu không? → Có cần JOIN với bảng khác không?
Sau 20 bài thực hành, bạn đã làm quen với lộ trình:
SELECT → WHERE → ORDER BY → DISTINCT → LIMIT → COUNT/SUM/AVG → GROUP BY → HAVING → Subquery → JOIN
Hãy tiếp tục thay đổi yêu cầu của từng bài, tự viết thêm truy vấn và kiểm tra kết quả. Đây là cách hiệu quả để hình thành kỹ năng SQL thay vì chỉ học thuộc câu lệnh.