Đối với người mới bắt đầu học MySQL, những kiến thức, kỹ năng về cú pháp, lệnh, cơ sở dữ liệu, tối ưu hóa truy vấn chắc chắn là những mối đau đầu. Vậy làm thế nào để vượt qua những khó khăn này?
MySQL và những “mệt mỏi” cho newbie
MySQL không còn xa lạ với người học và làm trong lĩnh vực CNTT, quen thuộc vì phải sử dụng nhiều, và cũng là khó quên vì ai cũng nhớ thời phải “nhọc nhằn” làm quen với hệ quản trị cơ sở dữ liệu này. Sau đây là những khó khăn:
- Cú pháp và lệnh: MySQL có cú pháp và các lệnh riêng biệt, đòi hỏi người học phải làm quen và nhớ các lệnh cơ bản như CREATE, INSERT, SELECT, UPDATE, DELETE.
- Thiết lập môi trường: Việc cài đặt và thiết lập môi trường MySQL có thể phức tạp, đặc biệt là khi bạn cần cấu hình trên các hệ điều hành khác nhau
- Hiểu về cơ sở dữ liệu quan hệ: Để sử dụng MySQL hiệu quả, bạn cần hiểu rõ về các khái niệm cơ bản của cơ sở dữ liệu quan hệ như bảng, cột, khóa chính, khóa ngoại, và các mối quan hệ giữa các bảng
- Tối ưu hóa truy vấn: Viết các câu truy vấn hiệu quả và tối ưu hóa chúng để chạy nhanh hơn là một kỹ năng khó và cần nhiều thực hành
Chinh phục MySQL cùng giảng viên nhà Ong
Để hiểu và vượt qua những khó khăn trên, hãy cùng tham khảo bí quyết của giảng viên nhà FPT Polytechnic nhé!
Những câu không cần dùng truy vấn con
- B1: Tìm hêt các bảng cần có trong câu hỏi và điều kiện để truy vấn
- B2: Dùng select * from ( join ) để kết nối tất cả các bảng đã tìm được theo qui tắc BangCha.khoachinh = BangCon.khoangoai mà chưa cần quan tâm đến điều kiện truy vấn
- B3: Chạy câu truy vấn ở B2 => được 1 bảng với các cột là tất cả các cột của các bảng và các hàng thỏa mãn điều kiện kêt nối các bảng
- B4: Từ bảng kết quả của B3 lựa chon các hàng nào thỏa mãn điều kiện đầu bài => viết thêm điều kiện truy vấn vào câu truy vấn ở B2
- B5: Chạy câu truy vấn ở B5 => được 1 bảng với các cột là tất cả các cột của các bảng và các hàng đã thỏa mãn điều kiện truy vấn
- B6: Quan sát kết quả của B5 để ta chọn cột thỏa mãn yêu cầu đầu bài ( nếu cột nào bị trùng thì thêm tên bảng ) => được câu truy vấn đầy đủ
Ví dụ minh họa:
Đề bài: Hiển thị thông tin (mã hóa đơn, ngày lập hóa đơn, tổng tiền hóa đơn, số lượng mua, mã sản phẩm, tên sản phẩm, giá sản phẩm, tên khách hàng), điều kiện khách hàng tên Khoa
Hướng dẫn giải:
- B1: từ mã hóa đơn, ngày lập hóa đơn, tổng tiền => Cần bảng HoaDon
Từ mã san phẩm, số lượng mua => Cần bảng HoaDonChiTiet
Từ tên sản phẩm, giá sản phẩm => Cần bảng SanPham
Từ tên khách hàng => Cần bảng khách hàng
Ta thực hiện nối 4 bảng trên mà chưa cần quan tâm đến điều kiện truy vấn “Khách hàng tên Khoa”

Điều kiện đầu bài chỉ lấy các khách hàng tên “Khoa” => viết thêm câu truy vấn ở trên

Cuối cùng ta chọn cột để hiển thị: thay * trong select bằng danh sách các cột

Những câu dùng truy vấn con
Ví dụ: Giảm giá 80% cho 2 sản phẩm bán ít nhất trong năm 2019
Hướng dẫn:
Trước tiên ta phải tìm các sản phẩm có số lượng mua ít nhất và ít nhì trong năm 2019 sau đó giảm giá 10% cho các sản phẩm này
Update sanpham set giaSP = giaSP* 0.8 where masp in ( danh sách các masp có số lượng mua ít nhất, ít nhì trong năm 2016)
Update sanpham set giaSP = giaSP* 0.8 where masp in ( danh sách các masp có số lượng mua in (số lương mua ít nhất, ít nhì trong năm 2016))
Update sanpham set giaSP = giaSP* 0.8 where masp in ( TVC (TVC ))
Như vậy ta phải tìm 2 câu truy vấn con
- Tìm số lượng mua ít nhất, ít nhì trong năm 2016
- Lập bảng danh sách các masp có số lượng mua ít nhất , ít nhì trong năm 2016
Để tìm số lượng mua ít nhất, ít nhì trong năm 2016 ta giảng như sau
- Số lượng mua => cần bảng HoaDonChiTiet
- Năm 2016 => cần bảng hóa đơn
- Nối 2 bảng lại với nhau theo qui tắc cha – con

Chỉ chọn các hàng có năm 2019

Nhóm các nhóm theo cột Masp sau đó tính tổng số lượng mua

Sắp xếp theo thứ tự tăng dần

Nhận xét: nếu đến bước này nếu ta lấy limit 2 thì ta chỉ lấy được 2 sp có lượng mua ít nhất mà thực chất 2 giá trị ta cần lấy là 1 và 3 => để lấy được 2 giá trị này ta phải dùng distinct kết hợp với limit 2

Sau khi tìm được số lượng mua ít nhât, ít nhì trong 2019 ta đi lập bảng các masp có số lượng mua ít nhât, ít nhì trong năm 2019 ⬄ (TVC (TVC))

Bỏ bớt cột sum(soluongmua)

Sau khi có danh sách các mã sản phẩm cần giảm giá 10% trong 2019 ta lắp vào câu Update

Trên đây là phương pháp để giảng dạy các câu truy vấn trong MySQL tôi muốn chia sẻ với các đồng nghiệp không ngoài mục đích nhằm nâng cao chất lượng đào tạo của FPOLYTECHNIC HCM
Giảng viên Bùi Tuấn Vũ
Bộ môn Ứng dụng phần mềm
FPT Polytechnic TP HCM

