You are on page 1of 5

/* Cho biết danh sách các trận đấu (NGAYTD, TENSAN, TENCLB1, TENCLB2, KETQUA)

của câu lạc bộ (CLB) đang xếp hạng cao nhất tính đến hết vòng 3 năm 2009. */

select td.NGAYTD, svd.TENSAN, clb1.TENCLB as tenclb1, clb2.TENCLB as tenclb2,


td.KETQUA
from TRANDAU td, CAULACBO clb1 , CAULACBO clb2, SANVD svd
where td.MACLB1 = clb1.MACLB and td.MACLB2 = clb2.MACLB and td.MASAN = svd.MASAN
and ( select BANGXH.MACLB
from BANGXH
where BANGXH.VONG =3 and BANGXH.NAM = 2009 and HANG =1) in (td.MACLB1,
td.MACLB2)
-----------------------------------------------------------------------------------
-------
/*6. Cho biết tên câu lạc bộ, tên tỉnh mà CLB đang đóng có số bàn thắng nhiều nhất
tính đến
hết vòng 3 năm 2009. */

SELECT CLB.TENCLB, T.TENTINH


FROM CAULACBO CLB, TINH T
WHERE CLB.MATINH = T.MATINH
AND clb.MACLB = (SELECT TOP 1 MACLB
FROM BANGXH
WHERE BANGXH.NAM = 2009 AND BANGXH.VONG = 3
ORDER BY (CONVERT(INT, SUBSTRING(HIEUSO,1,1))) DESC )
-----------------------------------------------------------------------------------
-------
/*2. Cho biết tên câu lạc bộ, tên tỉnh mà CLB đang đóng có hiệu số bàn thắng bại
cao
nhất năm 2009. */
SELECT CLB.TENCLB, T.TENTINH
FROM CAULACBO CLB, TINH T
WHERE CLB.MATINH = T.MATINH
AND CLB.MACLB = ( SELECT TOP 1 MACLB
FROM BANGXH
WHERE VONG >= ALL(SELECT VONG FROM BANGXH) AND NAM =
2009
ORDER BY (CONVERT(INT,LEFT(HIEUSO,1)) -
CONVERT(INT,RIGHT(HIEUSO,1))) DESC )
-----------------------------------------------------------------------------------
----------------------------------
/*4. Cho biết mã câu lạc bộ, tên câu lạc bộ đã tham gia thi đấu với tất cả các câu
lạc bộ còn lại
(kể cả sân nhà và sân khách) trong mùa giải năm 2009 */
SELECT DISTINCT CLB.MACLB, CLB.TENCLB
FROM CAULACBO CLB
WHERE (SELECT COUNT(NAM) FROM TRANDAU TD
WHERE NAM = 2009 AND (TD.MACLB1 = CLB.MACLB OR TD.MACLB2 = CLB.MACLB) )
= (SELECT COUNT(MACLB)-1 FROM CAULACBO )
-----------------------------------------------------------------------------------
----------------

Bài tập về Rule Bài tập về Rule Bài tập về Rule Bài tập về Rule Bài tập về
Rule

/*4. Kiểm tra kết quả trận đấu có dạng số_bàn_thắng- số_bàn_thua.*/
ALTER TABLE TRANDAU
ADD CHECK (KETQUA LIKE '%-%')

Toán tử LIKE được sử dụng trong một mệnh đề WHERE để tìm kiếm một mẫu cụ thể trong
một cột.

Có hai ký tự đại diện thường được sử dụng cùng với toán tử LIKE:

==> Dấu phần trăm (%) đại diện cho không, một hoặc nhiều ký tự
==> Dấu gạch dưới (_) đại diện cho một ký tự đơn
-----------------------------------------------------------------------------------
----------------

Bài tập về View Bài tập về View Bài tập về View Bài tập về View Bài tập về
View

/*10. Cho biết kết quả các trận đấu trên sân nhà (MACLB, NAM, VONG,SOBANTHANG,
SOBANTHUA) */

CREATE VIEW VIEW10 AS


(SELECT CLB.MACLB, TD.NAM, TD.VONG, LEFT(KETQUA,1) AS SOBANTHANG,
RIGHT(KETQUA,1) AS SOBANTHUA
FROM TRANDAU TD, CAULACBO CLB
WHERE TD.MASAN = CLB.MASAN
AND TD.MACLB1 = CLB.MACLB)
UNION
(SELECT CLB.MACLB, TD.NAM, TD.VONG, RIGHT(KETQUA,1) AS SOBANTHANG,
LEFT(KETQUA,1) AS SOBANTHUA
FROM TRANDAU TD, CAULACBO CLB
WHERE TD.MASAN = CLB.MASAN
AND TD.MACLB2 = CLB.MACLB)

/*11. Cho biết kết quả các trận đấu trên sân khách (MACLB, NAM,
VONG,SOBANTHANG,SOBANTHUA)*/

CREATE VIEW VIEW11 AS


(SELECT CLB.MACLB, TD.NAM, TD.VONG, LEFT(KETQUA,1) AS SOBANTHANG,
RIGHT(KETQUA,1) AS SOBANTHUA
FROM TRANDAU TD, CAULACBO CLB
WHERE TD.MASAN = CLB.MASAN
AND TD.MACLB1 != CLB.MACLB)
UNION
(SELECT CLB.MACLB, TD.NAM, TD.VONG, RIGHT(KETQUA,1) AS SOBANTHANG,
LEFT(KETQUA,1) AS SOBANTHUA
FROM TRANDAU TD, CAULACBO CLB
WHERE TD.MASAN = CLB.MASAN
AND TD.MACLB2 != CLB.MACLB)
-----------------------------------------------------------------------------------
--------------------------

Bài tập về stored procedure Bài tập về stored procedure Bài tập về stored
procedure

/* 8.Nhập vào số nguyên @n. In ra tổng và số lượng các số chẵn từ 1 đến @n */

CREATE PROC PROC8


@N INT
AS
BEGIN
DECLARE @I INT = 1
DECLARE @SUM INT = 0
DECLARE @COUNT INT = 0
WHILE @I <= @N
BEGIN
IF @I%2 = 0
BEGIN
SET @SUM = @SUM + @I
SET @COUNT = @COUNT + 1
END
SET @I = @I + 1
END
PRINT N'TRONG CAC SO TU 1 DEN '+ CAST(@N AS VARCHAR(5))
+' CO ' + CAST(@COUNT AS VARCHAR(5)) + ' SO CHAN VA TONG CUA CHUNG LA: '+
CAST(@SUM AS VARCHAR(5))
END

EXEC PROC8 10
----------------------------------------------------------------------------
/*9.Viết store procedure tương ứng với các câu ở phần View. Sau đó cho thực
hiện để kiểm tra kết quả. */

CREATE PROC PROC_VIEW1


@TENQG NVARCHAR(100),
@TENCLB NVARCHAR (100)
AS
BEGIN
SELECT ct.MACT, ct.HOTEN, ct.NGAYSINH, ct.DIACHI, ct.VITRI
FROM CAULACBO as clb, CAUTHU as ct, QUOCGIA as qg
WHERE ct.MAQG= qg.MAQG
AND qg.TENQG=@TENQG
AND ct.MACLB= clb.MACLB
AND clb.TENCLB=@TENCLB;
END;

EXEC PROC_VIEW1 N'Bra-xin',N'SHB Đà Nẵng';


-----------------------------------------------------------------------------------
---------------------------

/*10. Ứng với mỗi bảng trong CSDL Quản lý bóng đá, bạn hãy viết 4 Stored
Procedure ứng với 4 công việc Insert/Update/Delete/Select. Trong đó
Stored Procedure Update và Delete lấy khóa chính làm tham số. */

----------BANG TINH----------------
CREATE PROC INSERT_TINH
@MATINH VARCHAR(5),
@TENTINH NVARCHAR(100),
@RESULT NVARCHAR(100) output
AS
BEGIN
DECLARE @COUNTS INT = 0
DECLARE @error INT
DECLARE @id INT
SELECT @COUNTS = COUNT(*) FROM TINH A WHERE A.MATINH=@MATINH
IF @COUNTS >= 1
SET @RESULT = N'Tồn tại mã tỉnh '+ @MATINH
ELSE
BEGIN
INSERT INTO TINH VALUES (@MATINH,@TENTINH)
SELECT @error = @@ERROR, @id = SCOPE_IDENTITY();
IF @error = 0
SET @RESULT = N'Đã tạo dữ liệu cho mã tỉnh là: '+ @MATINH
ELSE
SET @RESULT = N'Đã xảy ra lỗi tạo dữ liệu với mã lỗi: '+@id
END
END

DECLARE @RESULT2 NVARCHAR(100);


EXEC INSERT_TINH 'HPH',N'HẢI PHÒNG',@RESULT2 OUTPUT;
SELECT @RESULT2 AS MESSAGES_RESULT;

-------------------------------------

CREATE PROC UPDATE_TINH


@KEY VARCHAR(5),
@TENTINH NVARCHAR(100),
@RESULT NVARCHAR(100) output
AS
BEGIN
DECLARE @COUNTS INT = 0;
DECLARE @error INT;
DECLARE @id INT

SELECT @COUNTS = COUNT(*) FROM TINH A WHERE A.MATINH = @KEY;


IF @COUNTS = 0
SET @RESULT = N'Không tìm thấy mã tỉnh: '+ @KEY;
ELSE
BEGIN
UPDATE TINH SET TENTINH=@TENTINH WHERE MATINH = @KEY;
SELECT @error = @@ERROR, @id = SCOPE_IDENTITY();
IF @error = 0
SET @RESULT = N'Đã cập nhật thông tin với mã tỉnh: '+@KEY;
ELSE
SET @RESULT = N'Đã xảy ra lỗi cập nhật';
END;
END;

DECLARE @RESULT2 NVARCHAR(100);


EXEC UPDATE_TINH 'HPH',N'Hải Phòng',@RESULT2 OUTPUT;
SELECT @RESULT2 AS MESSAGES_RESULT;

-----------------------------------------

CREATE PROC DELETE_TINH


@KEY VARCHAR(5),
@RESULT NVARCHAR(100) output
AS
BEGIN
DECLARE @COUNTS INT = 0;
DECLARE @error INT;
SELECT @COUNTS = COUNT(*) FROM TINH A WHERE A.MATINH = @KEY;
IF @COUNTS = 0
SET @RESULT = N'Không tìm thấy mã tỉnh: '+@KEY;
ELSE
BEGIN
DELETE FROM TINH WHERE MATINH = @KEY;
SELECT @error = @@ERROR;
IF @error = 0
SET @RESULT = N'Đã xóa mã tỉnh: '+@KEY;
ELSE
PRINT 'Đã xảy ra lỗi khi xóa mã tỉnh: '+@KEY;
END
END;
DECLARE @RESULT2 NVARCHAR(100);
EXEC DELETE_TINH 'BD',@RESULT2 OUTPUT;
SELECT @RESULT2 AS MESSAGES_RESULT;

--------------------------------------------------

CREATE PROC SELECT_TINH


@KEY VARCHAR(5),
@RESULT NVARCHAR(100) output
AS
BEGIN
DECLARE @COUNTS INT = 0;
DECLARE @error INT;
SELECT @COUNTS = COUNT(*) FROM TINH A WHERE A.MATINH = @KEY;
IF @COUNTS = 0
SET @RESULT = N'Không tìm thấy mã tỉnh: '+@KEY;
ELSE
BEGIN
SELECT * FROM TINH A WHERE A.MATINH=@KEY;
SET @RESULT =N'Tìm thấy '+CAST(@COUNTS AS NVARCHAR(100))+' bản
ghi';
END
END;
DECLARE @RESULT2 NVARCHAR(100);
EXEC SELECT_TINH 'BD',@RESULT2 OUTPUT;
SELECT @RESULT2 AS MESSAGES_RESULT;

-----------------------------------------------------------------------------------
-----------------------

You might also like