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

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
  1. Vì sao người nhà máy nên biết SQL?
  2. Thứ tự viết và thứ tự thực thi
  3. 10 câu lệnh dùng hằng ngày
  4. Các loại JOIN
  5. Lỗi hay gặp
  6. Cần người làm giúp?

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.

Thứ tự thực thi các mệnh đề SQL

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

JOINKết quả
INNER JOINChỉ dòng khớp ở cả hai bảng
LEFT JOINMọi dòng bảng trái, bảng phải không khớp thì NULL
FULL JOINMọ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.0 trướ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ụ.

Bản tin Industrial Knowledge

Mỗi tuần một công cụ, đọc trong 5 phút

Đăng ký nhận bản tin và checklist 8D miễn phí (PDF). Không spam, hủy bất cứ lúc nào.