Bài 1: Giới thiệu về Trình quản lý quảng cáo
1️⃣ Khai báo & sử dụng biến
📖 Ý nghĩa
-
Biến trong T-SQL giúp lưu giá trị tạm thời trong quá trình xử lý.
-
Giống biến trong các ngôn ngữ lập trình khác.
🎯 Khi nào dùng?
-
Khi cần lưu giá trị tính toán trung gian, kiểm tra điều kiện hoặc gán giá trị từ SELECT.
🛠 Ví dụ
DECLARE @TongHocPhi FLOAT
SET @TongHocPhi = 0
SELECT @TongHocPhi = SUM(HocPhi)
FROM DangKyKhoaHoc
WHERE idKhoaHoc = 1
PRINT 'Tổng học phí: ' + CAST(@TongHocPhi AS NVARCHAR(50))
➡ Áp dụng: Tính tổng học phí của một khóa học để báo cáo.
2️⃣ IF...ELSE & CASE WHEN
📖 Ý nghĩa
-
Giúp rẽ nhánh xử lý, kiểm tra điều kiện trong quá trình chạy SQL.
-
IF...ELSE: Điều kiện logic. -
CASE: Được dùng trong SELECT để phân loại.
🎯 Khi nào dùng?
-
Kiểm tra trạng thái, phân loại dữ liệu (ví dụ đang active / inactive).
-
Thay đổi luồng xử lý theo điều kiện.
🛠 Ví dụ
IF @isCongKhai = 1
PRINT 'Khóa học đang được công khai'
ELSE
PRINT 'Khóa học chưa được công khai'
SELECT
TenKhoaHoc,
CASE
WHEN isCongKhai = 1 THEN N'Công khai'
ELSE N'Riêng tư'
END AS TrangThai
FROM KhoaHoc
➡ Áp dụng: Hiển thị trạng thái công khai hay không cho danh sách khóa học.
3️⃣ WHILE loop
📖 Ý nghĩa
-
Cho phép lặp đi lặp lại một khối lệnh cho đến khi điều kiện không còn thỏa mãn.
🎯 Khi nào dùng?
-
Dùng khi không thực hiện được hoàn toàn với set-based query.
-
Ví dụ lặp qua danh sách ID theo từng batch để xử lý.
🛠 Ví dụ
DECLARE @i INT = 1
WHILE @i <= 5
BEGIN
PRINT 'ID: ' + CAST(@i AS NVARCHAR(10))
SET @i = @i + 1
END
➡ Áp dụng: Xử lý từng bước, ví dụ batch gửi email cho 100 user 1 lần.
4️⃣ Bảng tạm & biến bảng
📖 Ý nghĩa
-
Giúp lưu tạm dữ liệu dạng bảng trong quá trình xử lý.
-
#TempTable: tồn tại trong session (vượt qua thủ tục). -
@TableVariable: gọn, nhanh, tồn tại trong batch.
🎯 Khi nào dùng?
-
Khi cần lọc, tổng hợp dữ liệu tạm, hoặc lưu dữ liệu trung gian rồi xử lý tiếp.
🛠 Ví dụ
CREATE TABLE #VideoTemp (ID INT, TieuDe NVARCHAR(500))
INSERT INTO #VideoTemp
SELECT ID, TieuDe FROM Video WHERE idKhoaHoc = 1
SELECT * FROM #VideoTemp
DROP TABLE #VideoTemp
➡ Áp dụng: Chuẩn bị dữ liệu để insert qua nhiều bảng, hay tạo report.
5️⃣ Transaction (BEGIN TRAN, COMMIT, ROLLBACK)
📖 Ý nghĩa
-
Giúp nhóm nhiều thao tác thành một khối đồng bộ.
-
Nếu 1 thao tác lỗi, rollback hết, đảm bảo toàn vẹn dữ liệu (ACID).
🎯 Khi nào dùng?
-
Cập nhật nhiều bảng cùng lúc: Insert đăng ký, update tồn kho.
-
Giao dịch tiền, ghi log.
🛠 Ví dụ
BEGIN TRAN
BEGIN TRY
-- nhiều câu lệnh
COMMIT
END TRY
BEGIN CATCH
ROLLBACK
END CATCH
➡ Áp dụng: Đăng ký khóa học và ghi log thanh toán.
6️⃣ CURSOR
📖 Ý nghĩa
-
Cho phép duyệt từng dòng, giống vòng lặp từng record.
🎯 Khi nào dùng?
-
Khi bắt buộc phải xử lý từng dòng, ví dụ gửi email từng user.
🛠 Ví dụ
DECLARE cur CURSOR FOR
SELECT TenKhoaHoc FROM KhoaHoc
OPEN cur
FETCH NEXT FROM cur INTO @TenKhoaHoc
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @TenKhoaHoc
FETCH NEXT FROM cur INTO @TenKhoaHoc
END
CLOSE cur
DEALLOCATE cur
➡ Áp dụng: Gửi email cho từng học viên đăng ký.
7️⃣ MERGE & OUTPUT
📖 Ý nghĩa
-
MERGE: xử lý INSERT, UPDATE, DELETE trong một lệnh duy nhất, tránh viết nhiều bước. -
OUTPUT: trả lại dòng vừa bị INSERT/UPDATE/DELETE.
🎯 Khi nào dùng?
-
Upsert dữ liệu. Ví dụ cập nhật lượt xem: nếu có thì cộng, chưa có thì thêm.
-
Lấy ID mới insert.
🛠 Ví dụ
MERGE INTO LuotXemVideo AS target
USING (SELECT 1 AS idVideo, 10 AS LuotXemMoi) AS source
ON target.idVideo = source.idVideo
WHEN MATCHED THEN
UPDATE SET target.LuotXem += source.LuotXemMoi
WHEN NOT MATCHED THEN
INSERT (idVideo, LuotXem) VALUES (source.idVideo, source.LuotXemMoi);
➡ Áp dụng: Thống kê video được xem.
8️⃣ ROW_NUMBER(), RANK()
📖 Ý nghĩa
-
Cung cấp thứ tự dòng hoặc xếp hạng dựa trên giá trị.
🎯 Khi nào dùng?
-
Phân trang dữ liệu, top N video xem nhiều.
🛠 Ví dụ
SELECT
ROW_NUMBER() OVER (ORDER BY LuotXem DESC) AS STT,
ID, TieuDe
FROM Video
WHERE idKhoaHoc = 1
➡ Áp dụng: Hiển thị top 10 video xem nhiều nhất.
✅ Tổng kết
| Chủ đề | Ý nghĩa | Tình huống áp dụng |
|---|---|---|
| Biến | Lưu giá trị tạm | Tính tổng, kiểm tra |
| IF/CASE | Rẽ nhánh | Xác định trạng thái |
| WHILE | Lặp | Chia batch |
| Bảng tạm | Lưu bảng trung gian | Chuẩn bị dữ liệu |
| Transaction | Đồng bộ | Giao dịch tiền |
| CURSOR | Duyệt từng dòng | Gửi email |
| MERGE | Upsert | Thêm hoặc cập nhật thống kê |
| ROW_NUMBER | Xếp hạng | Top video |
Hãy tóm tắt lại các kiến thức bạn đã học được ở môn hệ quản trị cơ sở dữ liệu.
Nếu có ý kiến thêm, các bạn hãy gửi nội dung lên đây nhé