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é