Untitled
unknown
plain_text
14 days ago
4.0 kB
7
Indexable
-- Liệt kê tất cả người dùng và thông tin tài khoản của họ SELECT U.USER_ID, U.FIRST_NAME, U.LAST_NAME, U.EMAIL, A.USERNAME, A.ROLE, A.STATUS FROM USERS U JOIN ACCOUNTS A ON U.USER_ID = A.USER_ID; -- Tìm tất cả các khóa học do một người dùng cụ thể tạo ( tìm theo email) SELECT C.COURSE_NAME, C.PRICE, C.CURRENCY, C.STATUS, C.CREATED_TIME FROM COURSES C JOIN USERS U ON C.USER_ID = U.USER_ID WHERE U.EMAIL = 'example@email.com'; -- Đếm số lượng bài giảng theo từng loại (VIDEO, DOCUMENT, QUIZ) SELECT TYPE_LECTURE, COUNT(*) AS Total FROM LECTURES GROUP BY TYPE_LECTURE; -- Tìm tất cả các hoạt động của một người dùng cụ thể (tìm theo họ tên) SELECT A.ACTION, A.TIMESTAMP, A.DETAIL FROM ACTIVITYLOG A JOIN USERS U ON A.USER_ID = U.USER_ID WHERE U.FIRST_NAME = N'Nguyen' AND U.LAST_NAME = N'Van A'; --Thống kê số lượng khóa học theo trạng thái SELECT STATUS, COUNT(*) AS TOTAL FROM COURSES GROUP BY STATUS; -- Tìm người dùng chưa từng tạo khóa học nào SELECT U.USER_ID, U.FIRST_NAME, U.LAST_NAME, U.EMAIL FROM USERS U LEFT JOIN COURSES C ON U.USER_ID = C.USER_ID WHERE C.COURSE_ID IS NULL; -- Tìm top 5 khóa học có nhiều bài giảng nhất SELECT TOP 5 C.COURSE_NAME, COUNT(L.LECTURE_ID) AS TOTAL_LECTURES FROM COURSES C JOIN LECTURES L ON C.COURSE_ID = L.COURSE_ID GROUP BY C.COURSE_NAME ORDER BY TOTAL_LECTURES DESC; -- Hàm trả về số lượng khóa học mà người dùng đã tạo (theo USER_ID) CREATE FUNCTION fn_CountCoursesByUser ( @UserID UNIQUEIDENTIFIER ) RETURNS INT AS BEGIN DECLARE @CourseCount INT; SELECT @CourseCount = COUNT(*) FROM COURSES WHERE USER_ID = @UserID; RETURN @CourseCount; END; -- Ghi lại hành động của người dùng vào bảng ACTIVITYLOG CREATE PROCEDURE sp_LogUserAction @UserID UNIQUEIDENTIFIER, @Action NVARCHAR(100), @Detail NVARCHAR(MAX) AS BEGIN IF NOT EXISTS (SELECT 1 FROM USERS WHERE USER_ID = @UserID) BEGIN RAISERROR('Không tìm thấy người dùng.', 16, 1); RETURN; END INSERT INTO ACTIVITYLOG (USER_ID, ACTION, DETAIL) VALUES (@UserID, @Action, @Detail); PRINT 'Ghi log thành công.'; END; -- Tìm kiếm khóa học theo từ khóa trong tên hoặc mô tả CREATE PROCEDURE sp_SearchCoursesByKeyword @Keyword NVARCHAR(100) AS BEGIN SELECT COURSE_ID, COURSE_NAME, DESCRIPTION, STATUS, PRICE, CREATED_TIME FROM COURSES WHERE COURSE_NAME LIKE '%' + @Keyword + '%' OR DESCRIPTION LIKE '%' + @Keyword + '%'; END; --Ngăn không cho xóa bài giảng nếu khóa học đang ở trạng thái PUBLISHED CREATE TRIGGER trg_PreventLectureDeleteIfPublished ON LECTURES INSTEAD OF DELETE AS BEGIN IF EXISTS ( SELECT 1 FROM deleted d JOIN COURSES c ON d.COURSE_ID = c.COURSE_ID WHERE c.STATUS = 'PUBLISHED' ) BEGIN RAISERROR('Không thể xóa bài giảng thuộc khóa học đã được PUBLISHED.', 16, 1); RETURN; END DELETE FROM LECTURES WHERE LECTURE_ID IN (SELECT LECTURE_ID FROM deleted); END; --Không cho phép hai bài giảng cùng tên trong một khóa học CREATE TRIGGER trg_PreventDuplicateLectureTitleInCourse ON LECTURES AFTER INSERT, UPDATE AS BEGIN IF EXISTS ( SELECT LECTURE_TITLE, COURSE_ID FROM LECTURES GROUP BY LECTURE_TITLE, COURSE_ID HAVING COUNT(*) > 1 ) BEGIN RAISERROR('Không thể có hai bài giảng cùng tên trong cùng một khóa học.', 16, 1); ROLLBACK TRANSACTION; END END;
Editor is loading...
Leave a Comment