SQL cơ bản cho người làm sản xuất, chất lượng: 10 câu lệnh dùng hằng ngày
Nội dung bài viết 6 mục
Tóm tắt nhanh
- SQL (Structured Query Language) là ngôn ngữ truy vấn dữ liệu trong cơ sở dữ liệu quan hệ (SQL Server, MySQL, PostgreSQL…).
- Hầu hết ERP, MES, phần mềm kho đều lưu dữ liệu trong cơ sở dữ liệu SQL.
- Chỉ cần 5 mệnh đề SELECT – FROM – WHERE – GROUP BY – ORDER BY và JOIN là làm được đa số báo cáo.
- Chỉ dùng quyền đọc khi truy vấn hệ thống đang chạy.
Vì sao người nhà máy nên biết SQL?
Khi dữ liệu nằm trong ERP/MES, cách thường làm là xuất Excel rồi xử lý tay. Biết SQL, bạn lấy đúng dữ liệu cần, đã lọc và tổng hợp, và có thể đưa thẳng câu truy vấn vào Power Query hoặc Power BI để tự cập nhật.
Thứ tự viết và thứ tự thực thi
Viết: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
Máy thực thi: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
Hiểu thứ tự này giải thích vì sao không dùng được bí danh cột trong WHERE.
10 câu lệnh dùng hằng ngày
Giả sử có bảng KiemTra(Ngay, MaSP, DayChuyen, Ca, MaLoi, SoKiem, SoLoi) và SanPham(MaSP, TenSP, KhachHang).
-- 1. Lấy dữ liệu tháng 10
SELECT * FROM KiemTra
WHERE Ngay >= '2026-10-01' AND Ngay < '2026-11-01';
-- 2. Tỉ lệ lỗi theo dây chuyền
SELECT DayChuyen,
SUM(SoLoi) * 1.0 / NULLIF(SUM(SoKiem), 0) AS TiLeLoi
FROM KiemTra
GROUP BY DayChuyen
ORDER BY TiLeLoi DESC;
-- 3. Top 5 mã lỗi (Pareto)
SELECT TOP 5 MaLoi, SUM(SoLoi) AS TongLoi
FROM KiemTra GROUP BY MaLoi ORDER BY TongLoi DESC;
-- 4. Nối tên sản phẩm, khách hàng
SELECT k.Ngay, s.TenSP, s.KhachHang, k.SoLoi
FROM KiemTra k
JOIN SanPham s ON s.MaSP = k.MaSP;
-- 5. Chỉ lấy dây chuyền có tỉ lệ lỗi > 2%
SELECT DayChuyen FROM KiemTra
GROUP BY DayChuyen
HAVING SUM(SoLoi) * 1.0 / SUM(SoKiem) > 0.02;
-- 6. Phân loại ca ngày/đêm
SELECT *, CASE WHEN Ca IN ('1','2') THEN N'Ngày' ELSE N'Đêm' END AS NhomCa
FROM KiemTra;
-- 7. Tổng hợp theo tháng
SELECT YEAR(Ngay) AS Nam, MONTH(Ngay) AS Thang, SUM(SoLoi) AS TongLoi
FROM KiemTra GROUP BY YEAR(Ngay), MONTH(Ngay);
-- 8. Sản phẩm chưa từng được kiểm (LEFT JOIN)
SELECT s.MaSP FROM SanPham s
LEFT JOIN KiemTra k ON k.MaSP = s.MaSP
WHERE k.MaSP IS NULL;
-- 9. Dùng CTE cho truy vấn nhiều bước
WITH T AS (
SELECT DayChuyen, SUM(SoLoi) AS L, SUM(SoKiem) AS K
FROM KiemTra GROUP BY DayChuyen)
SELECT DayChuyen, L * 1.0 / K AS TiLe FROM T;
-- 10. Xếp hạng trong từng tháng (window function)
SELECT Thang, MaLoi, TongLoi,
RANK() OVER (PARTITION BY Thang ORDER BY TongLoi DESC) AS Hang
FROM (SELECT MONTH(Ngay) Thang, MaLoi, SUM(SoLoi) TongLoi
FROM KiemTra GROUP BY MONTH(Ngay), MaLoi) x;
Cú pháp TOP là của SQL Server; MySQL/PostgreSQL dùng LIMIT 5 ở cuối câu.
Các loại JOIN
| JOIN | Kết quả |
|---|---|
| INNER JOIN | Chỉ dòng khớp ở cả hai bảng |
| LEFT JOIN | Mọi dòng bảng trái, bảng phải không khớp thì NULL |
| FULL JOIN | Mọi dòng của cả hai bảng |
Lỗi hay gặp
- Chia hai số nguyên → kết quả bị làm tròn về 0; nhân với
1.0trước. - Lọc ngày bằng
BETWEEN '2026-10-01' AND '2026-10-31'khi cột có giờ → mất dữ liệu ngày cuối. - JOIN với bảng có khoá trùng → số bị nhân lên (xem Star Schema).
- Chạy truy vấn nặng trên hệ thống sản xuất giờ cao điểm.
Cần người làm giúp?
Industrial Knowledge kết nối dữ liệu ERP/MES/SQL vào dashboard Power BI, Excel tự cập nhật. Xem dịch vụ.