Tải bản đầy đủ (.doc) (28 trang)

Đề thi SQl có lời giải

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (174.87 KB, 28 trang )

Môn thi : Lập trình SQL-SERVER
Thời gian : 90 phút
(Sinh viên được sử dụng tài liệu)
Đề 1
Câu 1: (3 điểm) Cơ sở dữ liệu quản lý sinh viên có chứa 3 table. Viết lệnh tạo các table với
các ràng buộc khóa chính, khóa ngoại được nêu trong tân từ. Kiểu dữ liệu của các Fields là tự
chọn theo ngữ nghĩa.
SinhVien(MSSV, Lop, Ho, Ten, Ngaysinh, Nu)
Tân từ: Mỗi sinh viên có một mã số (MSSV) là số nguyên phân biệt, thuộc một lớp
(Lop), có họ (HO) và tên (Ten) sinh viên, ngày sinh (Ngaysinh), thuộc phái nữ
hay nam (Nu).
MonHoc(MSMon, TenMon)
Tân từ: Mỗi môn học có một mã số (MSMon) là một số nguyên phân biệt, có tên môn
học (TenMon).
DiemThi(MSSV, MSMon, LanThi, Diem)
Tân từ: Mỗi sinh viên (MSSV) có thể học nhiều môn (MSMon). Mỗi môn học có thể
thi nhiều lần (LanThi), mỗi lần thi được đánh số thứ tự từ 1 trở đi và ghi nhận
điểm thi (Diem) của các lần thi đó.
Câu 2: (1 điểm) Khai báo bổ sung các ràng buộc sau:
a) Lần thi (LanThi) trong table DiemThi có giá trị mặc định là 1
b) Điểm thi (Diem) trong table DiemThi được chấm theo thang điểm 10
Câu 3: (2 điểm) Tạo View:
a) Tạo view vwLanThiCuoi dùng liêt kê danh sách lần thi cuối cùng của các sinh
viên gồm: Mã số sinh viên, mã số môn học, lần thi cuối cùng của môn học (ví dụ
sinh viên A thi môn học C ba lần thì lần thi cuối cùng là 3).
b) Tạo view vwDiemThiCuoi dùng liêt kê danh sách sinh viên gồm: Mã số sinh viên,
mã số môn học, lần thi cuối cùng của môn học (ví dụ sinh viên A thi môn học M
ba lần thì lần thi cuối cùng là 3) và điểm của lần thi cuối cùng đó.
Câu 4: (2 điểm) Tạo trigger Insert cho table DiemThi dùng điền tự động số thứ tự lần thi khi
thêm điểm thi một môn học của một sinh viên. Ví dụ sinh viên A đã thi môn học M hai lần
thì lần thi mới thêm vào phải là 3.


Câu 5: (2 điểm) Viết thủ tục hoặc hàm liệt kê kết quả thi các môn của một sinh viên khi biết
mã số của sinh viên (MSSV) gồm các thông tin: mã số môn học, lần thi, điểm thi. Trong đó,
mã số sinh viên là giá trị input
/>Đề Thi SQL Có Lời Giải
Môn thi : Lập trình SQL-SERVER
Thời gian : 90 phút
(Sinh viên được sử dụng tài liệu)
Đề 2
Câu 1: (3 điểm) Cơ sở dữ liệu quản lý các trận đấu bóng đá tại một sân vận động có chứa 3
table. Viết lệnh tạo các table với các ràng buộc khóa chính, khóa ngoại được nêu trong tân từ.
Kiểu dữ liệu của các Fields là tự chọn theo ngữ nghĩa.
Doi(MSDoi, TenDoi, Phai)
Tân từ: Mỗi đội có 1 mã số (MSDoi) là một số nguyên phân biệt; có tên (TenDoi) và
thuộc phái nam hay nữ (Phai).
TranDau(MSTD, NgayTD, GioBD, GioKT)
Tân từ: Mỗi trận đấu có 1 mã số (MSTD) là một số nguyên phân biệt với những trận
đấu khác, diễn ra vào 1 ngày (NgayTD), bắt đầu ở một giờ (GioBD) và dự kiến
kết thúc tại một giờ (GioKT).
DoiThiDau(MSTD, MSDoi)
Tân từ: Lưu trữ danh sách các đội (MSDoi) tham gia thi đấu trong các trận đấu
(MSTD). Biết rằng, mỗi trận đấu là một cuộc gặp gỡ giữa 2 đội và cả 2 đội phải
thuộc cùng một phái.
Câu 2: (1 điểm) Viết lệnh khai báo bổ sung các ràng buộc sau:
a) Giờ bắt đầu thi đấu (GioTD) phải nhỏ hơn giờ kết thúc (GioKT) trận đấu.
b) Hai trận đấu trong table TranDau diễn ra trong cùng một ngày (NgayTD) thì
không bắt đầu ở cùng một giờ thi đấu (GioTD).
Câu 3: (2 điểm) Tạo View:
a) Tạo view vwDoiChuaThiDau dùng liêt kê danh sách các đội chưa có mã số đội
trong table DoiThiDau gồm: Mã số đội, tên đội, phái.
b) Tạo view vwSoTranDau dùng thống kê số trận đấu diễn ra trong từng ngày thi

đấu với các thông tin: Ngày thi đấu và số trận đấu trong ngày.
Câu 4: (2 điểm) Tạo insert trigger cho table DoiThiDau dùng kiểm tra ràng buộc mỗi trận
đấu chỉ là một cuộc gặp gỡ giữa 2 đội và cả 2 đội phải thuộc cùng một phái.
Câu 5: (2 điểm) Tạo thủ tục hoặc hàm hiển thị thông tin 2 đội tham gia trong một trận đấu
khi biết mã số trận đấu. Nếu mã trân đấu không có trong table DoiThiDau thì hiện thị thông
báo lỗi. Trong đó, mã số trận đấu (MSTD) là giá trị input
/>Môn thi : Lập trình SQL-SERVER
Thời gian : 90 phút
(Sinh viên được sử dụng tài liệu)
Đề 3
Câu 1: (3 điểm) Cơ sở dữ liệu quản lý hóa đơn bán hàng có chứa 3 table. Viết lệnh tạo các
table với các ràng buộc khóa chính, khóa ngoại được nêu trong tân từ. Kiểu dữ liệu của các
Fields là tự chọn theo ngữ nghĩa.
1- MatHang(MSMH, TenMH, DonGia, SoTon)
Tân từ: Mỗi mặt hàng có một mã số (MSMH) là một số nguyên phân biệt, có tên mặt
hàng (TenMH), đơn giá (DonGia) bán mới nhất của mặt hàng đó và số lượng
hàng tồn kho (SoTon).
2- HoaDon(MSHD, NgayLap)
Tân từ: Mỗi hóa đơn có một mã số phân biệt (MSHD), ngày lập hóa đơn (NgayLap)
3- CTHD(MSHD, MSMH, SoLuong, DonGiaHD)
Tân từ: Mỗi hóa đơn (MSHD) ghi một hoặc nhiều mặt hàng (MSMH) cùng với số
lượng (SoLuong) và đơn giá bán tại thời điểm ghi hóa đơn (DonGiaHD).
Câu 2: (1 điểm) Khai báo bổ sung các ràng buộc sau:
a) Số tồn (SoTon) trong table MatHang có giá trị mặc định (Default) bằng 0.
b) Tên mặt hàng trong table MatHang có giá trị phân biệt giữa các mặt hàng.
Câu 3: (2 điểm) Tạo View:
a) Tạo view “vwTienHD” dùng hiển thị tiền bán trên từng hóa đơn gồm các thông
tin: mã số hóa đơn, ngày lập, tiền hóa đơn bằng tổng tiền bán từng mặt hàng ghi
trên mỗi hóa đơn.
b) Tạo view “vwHangKhongBanDuoc” dùng liêt kê danh sách các mặt hàng không

bán được trong tháng hiện hành.
Câu 4: (2 điểm) Xây dựng Insert trigger cho CTHD thực hiện yêu cầu: khi thêm một chi
tiết hóa đơn phải cập nhật lại số lượng tồn (SoTon) của mặt hàng tương ứng.
Câu 5: (2 điểm) Viết thủ tục hoặc hàm nhận 2 giá trị input kiểu số nguyên là tháng và năm.
Hãy liệt kê doanh thu của từng mặt hàng gồm các thông tin: mã số mặt hàng, doanh thu mặt
hàng trong :
a) Một năm nếu tháng là Null và năm khác Null
b) Một tháng nếu tháng và năm khác Null
/>Môn thi : Lập trình SQL-SERVER
Thời gian : 90 phút
(Sinh viên được sử dụng tài liệu)
Đề 4
Câu 1: (3 điểm) Cơ sở dữ liệu quản lý việc mượn trả sách có chứa 3 table. Viết lệnh tạo các
table với các ràng buộc khóa chính, khóa ngoại được nêu trong tân từ. Kiểu dữ liệu của các
Fields là tự chọn theo ngữ nghĩa.
1- Sach(MaSach, TenSach, SoLuong, SoDaMuon)
Tân từ: Mỗi tựa sách có một mã số (MaSach) là một số nguyên phân biệt, có tên sách
(TenSach), số lượng (SoLuong), và số sách hiện đã cho mượn (SoDaMuon).
2- DocGia(MaDG, TenDG)
Tân từ: Mỗi đọc giả có một mã số đọc giả (MaDG) là một số nguyên phân biệt, có tên
đọc giả (TenDG).
3- PhieuMuon(MaDG, NgayMuon, MaSach, NgayTra)
Tân từ: Mỗi ngày mỗi đọc giả chỉ được mượn một quyển sách. Khi đọc giả mượn sách
cần ghi nhận mã đọc giả (MaDG), ngày mượn (NgayMuon), mã sách
(MaSach), ngày trả sách (NgayTra). Ngày trả sách là Null khi chưa trả sách.
Câu 2: (1 điểm) Khai báo bổ sung các ràng buộc sau:
a) Số lượng sách (SoLuong) trong table Sach không nhỏ hơn số sách đã mượn
(SoDaMuon)
b) Ngày mượn sách (NgayMuon) trong table PhieuMuon có giá trị mặc định là ngày
hiện hành

Câu 3: (2 điểm) Tạo View:
a) Tạo view “vwHetSach” dùng liêt kê các sách có số lượng sách (SoLuong) bằng
với số lượng sách đã cho mượn (SoDaMuon) gồm các thông tin: Mã sách, tên
sách.
b) Tạo view “vwChuaTraSach” dùng hiển thị danh sách các đọc giả chưa trả sách (có
ngày trả là rổng) gồm các thông tin: mã đọc giả, tên đọc giả, ngày mượn, tên sách
đã mượn.
Câu 4: (2 điểm) Tạo update trigger trên table PhieuMuon thực hiện yêu cầu sau: Khi sửa
ngày trả của một phiếu mượn từ giá trị Null sang một giá trị khác Null thì phải giảm số lượng
sách đã mượn của tựa sách tương ứng trên table Sach, ngược lại nếu sửa ngày trả từ một giá
trị khác Null sang giá trị Null thì phải tăng số lượng sách đã mượn của tựa sách tương ứng
trên table Sach.
Câu 5: (2 điểm) Tao thủ tục hoặc hàm trả về số sách còn có thể cho mượn (SoLuong –
SoDaMuon) của một mã sách nào đó. Trong đó, mã sách là giá trị input. Hiển thị thông báo
lỗi nếu mã sách không tồn tại trong table Sach.
/>
Môn thi : Lập trình SQL-SERVER
Thời gian : 90 phút
(Sinh viên được sử dụng tài liệu)
Đề 5
Câu 1: (3 điểm) Cơ sở dữ liệu quản lý lương hành chánh sự nghiệp có chứa 3 table. Viết
lệnh tạo các table với các ràng buộc khóa chính, khóa ngoại được nêu trong tân từ. Kiểu dữ
liệu của các Fields là tự chọn theo ngữ nghĩa.
1- NgachLuong(MSNgach, MoTa)
Tân từ: Hệ thống lương hành chánh gồm nhiều ngạch, mỗi ngạch lương có một mã số
(MSNgach) là một số nguyên phân biệt, mục mô tả (MoTa) dùng chỉ định nhân
viên thực hiện công việc nào, bằng cấp nào thì thuộc ngạch lương này.
2- DMNgachBac(MSNgach, Bac, HSLuong)
Tân từ: Mỗi ngạch lương (MSNgach) có nhiều bậc lương (Bac). Mỗi bậc lương là một
số nguyên có giá trị từ 1 trở đi phân biệt trong cùng một ngạch lương. Mỗi bậc

trong một ngạch lương có một hệ số lương (HSLuong).
3- NhanVien(MSNV, Ho, Ten, MSNgach, Bac, NgayNLCC)
Tân từ: Mỗi nhân viên có một mã số (MSNV) là một số nguyên phân biệt, có họ (Ho),
tên (Ten), thuộc ngạch lương (MSNgach), bậc lương (Bac) và ngày nâng lương
cuối cùng (NgayNLCC).
Câu 2: (1 điểm) Khai báo bổ sung các ràng buộc sau:
a) Trong table DMNgachBac, Hệ số lương (HSLuong) phải phân biệt trong cùng
một ngạch lương (MSNgach).
b) Bậc lương (Bac) trong table NhanVien có giá trị mặc định (Default) bằng 1.
Câu 3: (2 điểm) Tạo View:
a) Tạo view vwHSLuong dùng liêt kê hệ số lương của mỗi nhân viên gồm các thông
tin: mã số nhân viên, mã số ngạch, bậc, hệ số lương.
b) Tạo view vwNangLuong dùng liệt kê nhân viên có số tháng tính từ ngày nâng
lương cuối cùng (NgayNLCC) đến ngày hiện hành có giá trị không nhỏ hơn 24
tháng.
Câu 4: (2 điểm) Tạo update trigger cho table NhanVien để kiểm tra ràng buộc: Khi nâng bậc
lương (Bac) của một nhân viên thì bậc lương mới không lớn hơn bậc lương cao nhất trong
ngạch lương của nhân viên (ví dụ, ngạch lương mã số 15113 có số thứ tự bậc lương từ 1 đến
10 thì bậc lương mới của nhân viên có mã ngạch 15113 không đượt lớn hơn 10).
Câu 5: (2 điểm) Viết thủ tục hay hàm trả về danh sách nhân viên đã được nâng lương trong
một năm (nghĩa là có ngày nâng lương cuối cùng thuộc năm tìm kiếm). Trong đó, năm là một
giá trị Input kiểu số nguyên. Nếu năm là Null thì trả về danh sách nhân viên đã được nâng
lương trong năm hiện hành.
/>Môn thi : Lập trình SQL-SERVER
Thời gian : 90 phút
(Sinh viên được sử dụng tài liệu)
Đề 6
Câu 1: (3 điểm) Cơ sở dữ liệu địa lý Việt Nam có chứa 3 table. Viết lệnh tạo các table với
các ràng buộc khóa chính, khóa ngoại được nêu trong tân từ. Kiểu dữ liệu của các Fields là
tự chọn theo ngữ nghĩa.

1- Tinh(MSTinh, TenTinh, DienTich, DanSo, TinhBG)
Tân từ: Mỗi tỉnh có một mã tỉnh (MSTinh) là một số nguyên phân biệt, có tên tỉnh
(TenTinh), diện tích (DienTich), dân số (DanSo) và là tỉnh biên giới hay
không là tỉnh biên giới (TinhBG).
2- BienGioi(MSTinh, TenNuoc)
Tân từ : Lưu trữ danh sách các tỉnh (MSTinh) biên giới giáp ranh với một nước khác
(TenNuoc)
3- LangGieng(MsTinh, MSTinhLG)
Tân từ : Mỗi tỉnh (MSTinh) giáp ranh với 1 hay nhiều tỉnh láng giềng (MSTinhLG)
Câu 2: (1 điểm) Khai báo bổ sung các ràng buộc sau:
a) Trong table LangGieng, mã tỉnh phải khác mã tỉnh láng giềng.
b) Tên tỉnh trong table Tinh có giá trị phân biệt giữa các tỉnh.
Câu 3: (2 điểm) Tạo View:
a) Tạo view vwTinhLon dùng liêt kê danh sách các tỉnh có diện tích lớn hơn diện
tích các tỉnh láng giềng của tỉnh đó.
b) Tạo view vwSoNuocGiapRanh dùng thống kê số nước giáp ranh của các tỉnh biên
giới với các thông tin: mã tỉnh, tên tỉnh, số nước giáp ranh với tỉnh đó.
Câu 4: (2 điểm) Tạo Insert trigger cho table BienGioi để thực hiện yêu cầu sau: Khi thêm
mẫu tin trong table BienGioi thì cập nhật giá trị 1 cho thuộc tính TinhBG trong table Tinh
của tỉnh có mã số tỉnh (MSTinh) được thêm trong table BienGioi.
Câu 5: (2 điểm) Viết thủ tục hoặc hàm dùng liệt kê thông tin các tỉnh láng giềng của một
tỉnh khi biết mã tỉnh. Trong đó, mã tỉnh là giá trị input. Thông tin các tỉnh láng giềng cần
hiển thị gồm: số thứ tự, mã tỉnh, tên tỉnh láng giềng. Nếu mã tỉnh không tồn tại thì hiện
thông báo lỗi.
/>ĐỀ 7
Câu 1: (3 điểm) Cơ sở dữ liệu quản lý thi có chứa 3 table. Viết lệnh tạo các table với các
ràng buộc khóa chính, khóa ngoại được nêu trong tân từ. Kiểu dữ liệu của các Fields là tự
chọn theo ngữ nghĩa.
ThiSinh(MSTS, Ho, Ten, Ngaysinh, SBD, PhongThi)
Tân từ: Mỗi thí sinh có một mã số (MSTS) là số nguyên phân biệt, có họ (HO) và tên

(Ten) sinh viên, ngày sinh (Ngaysinh), số báo danh (SBD), thuộc một phòng thi (PhongThi).
MonThi(MSMon, TenMon)
Tân từ: Mỗi môn thi có một mã số (MSMon) là một số nguyên phân biệt, có tên môn thi
(TenMon).
DiemMonThi(MSTS, MSMon, DiemThi)
Tân từ: Ở mỗi môn thi (MSMon) thí sinh (MSTS) có một điểm thi (DiemThi).
Câu 2: (1 điểm) Khai báo bổ sung các ràng buộc sau:
a) Mỗi thí sinh trong table ThiSinh có một số báo danh (SBD) phân biệt.
b) Điểm thi (DiemThi) trong table DiemMonThi có giá trị từ 0 đến 10.
Câu 3: (2 điểm) Tạo View:
a) Tạo view vwBoThi dung liệt kê danh sách thí sinh bỏ thi. (không có trong table
DiemMonThi).
b) Tạo view vwKetQuaThi dùng liệt kê tổng điểm thi các môn của các thí sinh gồm : Số
báo danh, họ, tên. ngày sinh, phòng thi, tổng điểm thi. Sắp thứ tự ưu tiên theo phòng thi, sau
đó là số báo danh.
Câu 4: (2 điểm) Tạo update trigger cho table ThiSinh để kiểm tra ràng buộc : Khi chuyển
một thí sinh sang phòng thi khác (sửa PhongThi của thí sinh) thí số thí sinh của phòng thi
chuyển đến không được quá 25 thí sinh.
Câu 5: (2 điểm) Viết thủ tục hoặc hàm sử dụng để điền số báo danh tự động (SBD) từ 1
trở đi theo thứ tự tên và họ.
/>GIẢI ĐỀ 1
use master
go
if exists(select * from sys.databases where name='De1')
drop database De1
go
create database De1
go
use De1
go


Câu 1 : Tạo TABLE
create table SinhVien
( MSSV int identity(1,1) primary key,
Lop varchar(10),
Ho varchar(10),
Ten varchar(30),
NgaySinh datetime,
Nu bit
)

create table MonHoc
( MSMon int identity(1,1) primary key,
TenMon varchar(30)
)

create table DiemThi
( MSSV int,
MSMon int,
LanThi int,
Diem int,
primary key(MSSV,MSMon,LanThi),
foreign key(MSSV) references SinhVien(MSSV),
foreign key(MSMon) references MonHoc(MSMon),
)
Câu 2 : Bổ sung ràng buộc
go
Alter table DiemThi ADD
default 1 for LanThi,
check(Diem between 0 and 10)


insert into SinhVien values ('07ct112','Nguyen','Hoang Long','11/10/1989','True')
insert into SinhVien values ('07ct112','Le','Ngoc Nam','11/10/1989','True')
insert into SinhVien values ('07ct112','Le','Thanh Phuc','12/25/1989','True')

insert into MonHoc values ('SQL 2005')
insert into MonHoc values ('TTHCM')

/>insert into DiemThi values(1,1,1,10)

insert into DiemThi values(2,1,1,7)
insert into DiemThi values(2,1,2,9)

insert into DiemThi values(3,1,1,8)
insert into DiemThi values(3,2,1,2)
insert into DiemThi values(3,2,2,6)
insert into DiemThi values(3,2,3,10)

Câu 3.a) Tạo view vwLanThiCuoi
go
create view vwLanThiCuoi
as
select MSSV, MSMon, LanThi=max(LanThi)
from DiemThi
group by MSSV, MSMon

Câu 3.a) Tạo view vwDiemThiCuoi
go
create view vwDiemThiCuoi
as

with BangTam as(select MSSV, MSMon, LanThiMax=max(LanThi)from DiemThi
group by MSSV, MSMon)
select D.*
from BangTam B join DiemThi D on (B.MSSV=D.MSSV and B.MSMon=D.MSMon and
B.LanThiMAX =D.LanThi)

Câu 4 : Tạo trigger
GO
create trigger itrg_AutoLanThi on DiemThi
for INSERT
AS
declare @MSSV int
declare @MSMon int
select @MSSV = MSSV,@MSMon = MSMon from inserted
if NOT EXISTS (select * from DiemThi where MSSV=@MSSV and
MSMon=@MSMon)
begin
print'MSSV them vao khong ton tai'
rollback tran
return
end
update DiemThi set DiemThi.LanThi = DiemThi.LanThi + 1
from INSERTED I where I.MSSV=@MSSV and I.MSMon=@MSMon

Câu 5 : Tạo thủ tục
go
create proc ThongTinSV(@MSSV int=1)
/>as
Begin
select MSMon,LanThi,Diem

from DiemThi
where MSSV = @MSSV
End

go
exec ThongTinSV 3
go
insert into DiemThi(MSSV,MSMon,Diem) values(4,1,7)
/>GIẢI ĐỀ 2
use master
go
if exists(select * from sys.databases where name='De2')
drop database De2
go
create database De2
go
use De2
go

create table Doi
( MSDoi int primary key,
TenDoi varchar(40),
Phai bit
)

create table TranDau
( MSTD int primary key,
NgayTD datetime,
GioBD smalldatetime,
GioKT smalldatetime ,

)

create table DoiThiDau
( MSTD int references TRANDAU(MSTD),
MSDOI int,
primary key(MSTD,MSDoi),
foreign key(MSDOI) references Doi(MSDOI),
)
go
Alter table TranDau ADD
check(GioBD < GioKT),
unique(GioBD,NgayTD)

go
insert into Doi values (1,'Hoang Anh Gia Lai','True')
insert into Doi values (2,'Hoang Anh Gia Lai','False')
insert into Doi values (3,'Dong Tam Long An','True')
insert into Doi values (4,'SHB Da Nang','True')
insert into Doi values (5,'SHB Da Nang','False')
insert into Doi values (6,'Dong Nai','False')
insert into TranDau values (1,'10/10/1998','10/10/1998 2:00:00 PM','10/10/1998 4:00:00
PM')
insert into TranDau values (2,'10/10/1998','10/10/1998 5:00:00 PM','10/10/1998 7:00:00
PM')
/>insert into TranDau values (3,'10/11/1998','10/10/1998 7:00:00 PM','10/10/1998 9:00:00
PM')
insert into TranDau values (4,'10/12/1998','10/10/1998 6:15:00 AM','10/10/1998 8:15:00
AM')
insert into TranDau values (5,'10/12/1998','10/10/1998 3:30:00 PM','10/10/1998 5:30:00
PM')

insert into TranDau values (6,'10/12/1998','10/10/1998 7:00:00 PM','10/10/1998 9:00:00
PM')
insert into DoiThiDau values (1,1)
insert into DoiThiDau values (1,3)
insert into DoiThiDau values (2,1)
insert into DoiThiDau values (2,4)
insert into DoiThiDau values (3,2)
insert into DoiThiDau values (3,5)

go
create view vwDoiChuaThiDau
as
select * from Doi A
where A.MSDoi NOT IN (select B.MSDoi from DoiThiDau B)

go
create view vwSoTranDau
as
select NgayTD, SoTD=count(MSTD)
from TranDau
group by NgayTD

go
create proc ThongTinTD(@MSTD int)
as
if NOT exists (select * from DoiThiDau where MSTD = @MSTD)
Begin
print'Tran dau khong ton tai'
End
else

Begin
select MSTD,DoiThiDau.MSDoi,TenDoi,Phai
from DoiThiDau join Doi on DoiThiDau.MSDoi = Doi.MSDoi
where MSTD = @MSTD
End

go
exec ThongTinTD 2
/>GIẢI ĐỀ 3
USE master
GO
IF EXISTS (SELECT name FROM sys.databases WHERE name = 'De3')
BEGIN
DROP DATABASE De3
END
GO
CREATE DATABASE De3
GO
USE De3
GO

CREATE TABLE MATHANG
( MSMH int PRIMARY KEY ,
TENMH varchar(100),
DONGIA money DEFAULT 0 CHECK (DONGIA >=0),
SOTON int
)

CREATE TABLE HOADON
( MSHD int PRIMARY KEY,

NGAYLAPHD datetime DEFAULT GETDATE() NOT NULL,
)

CREATE TABLE CTHD
( MSHD int references HOADON,
MSMH int references MATHANG,
SOLUONG Smallint DEFAULT 0 CHECK ( SOLUONG > 0),
DONGIABAN MONEY DEFAULT 0 CHECK ( DONGIABAN > 0),
PRIMARY KEY (MSHD,MSMH),
FOREIGN KEY(MSHD) references HOADON(MSHD),
FOREIGN KEY(MSMH) references MATHANG(MSMH)
)
GO
ALTER TABLE MATHANG ADD
default 0 for SOTON,
unique(TENMH)

INSERT INTO MATHANG VALUES (1,'Ruou',230.5,201)
INSERT INTO MATHANG VALUES (2,'Gia vi',40,82)
INSERT INTO MATHANG VALUES (3,'Banh kem',10,0)
INSERT INTO MATHANG VALUES (4,'Bo',38,30)
INSERT INTO MATHANG VALUES (5,'Banh mi',8,435)
INSERT INTO MATHANG VALUES (6,'Nem',23.8,97)
INSERT INTO MATHANG VALUES (7,'Tao',5,33)
INSERT INTO MATHANG VALUES (8,'Ca hop',62.5,100)
INSERT INTO MATHANG VALUES (9,'Cam',11,50)
/>
INSERT INTO HOADON VALUES (10144,'3/30/2003')
INSERT INTO HOADON VALUES (10150,'4/9/2003')
INSERT INTO HOADON VALUES (10156,'4/20/2003')

INSERT INTO HOADON VALUES (10158,'4/22/2003')
INSERT INTO HOADON VALUES (10175,'5/19/2003')
INSERT INTO HOADON VALUES (10177,'5/21/2003')
INSERT INTO HOADON VALUES (10193,'6/10/2003')
INSERT INTO HOADON VALUES (10207,'6/29/2003')
INSERT INTO HOADON VALUES (10225,'7/21/2003')
INSERT INTO HOADON VALUES (10226,'7/22/2003')
INSERT INTO HOADON VALUES (10255,'8/27/2003')
INSERT INTO HOADON VALUES (10258,'8/30/2003')
INSERT INTO HOADON VALUES (10261,'9/5/2003')

INSERT INTO CTHD VALUES (10144,2,35,42)
INSERT INTO CTHD VALUES (10144,6,20,25)
INSERT INTO CTHD VALUES (10144,3,10,10.5)
INSERT INTO CTHD VALUES (10150,6,9,25)
INSERT INTO CTHD VALUES (10156,2,25,42)
INSERT INTO CTHD VALUES (10158,4,12,39.9)
INSERT INTO CTHD VALUES (10158,6,20,25)
INSERT INTO CTHD VALUES (10175,8,12,65.6)
INSERT INTO CTHD VALUES (10177,4,6,39.9)
INSERT INTO CTHD VALUES (10177,6,30,25)
INSERT INTO CTHD VALUES (10193,6,15,25)
INSERT INTO CTHD VALUES (10207,1,10,242)
INSERT INTO CTHD VALUES (10225,1,10,242)
INSERT INTO CTHD VALUES (10225,4,70,39.9)
INSERT INTO CTHD VALUES (10226,4,21,39.9)
INSERT INTO CTHD VALUES (10255,3,35,10.5)
INSERT INTO CTHD VALUES (10255,1,20,242)
INSERT INTO CTHD VALUES (10255,5,55,8.4)
INSERT INTO CTHD VALUES (10258,1,50,242)

INSERT INTO CTHD VALUES (10261,3,60,10.5)

GO
CREATE VIEW vwTienHD
AS
SELECT H.MSHD,NGAYLAPHD,TIENHD= SUM(SOLUONG*DONGIABAN)
FROM HOADON H JOIN CTHD C ON H.MSHD = C.MSHD
GROUP BY H.MSHD,NGAYLAPHD

GO
CREATE VIEW vwHangKhongBanDuoc
AS
SELECT M.* FROM MATHANG M
WHERE MSMH NOT IN( SELECT C.MSMH FROM CTHD C
/>WHERE C.MSHD IN(SELECT H.MSHD FROM
HOADON H))

GO
CREATE PROC DoanhThu(@Thang int = NULL,@Nam int = NULL)
AS
IF @Nam is NULL
BEGIN
print'Gia tri INPUT = NULL'
END
ELSE
IF @Thang is NULL
BEGIN
SELECT M.MSMH,DOANHTHU=
SUM(SOLUONG*DONGIABAN)
FROM (MATHANG M JOIN CTHD C ON M.MSMH = C.MSMH)

JOIN HOADON H ON H.MSHD = C.MSHD
WHERE YEAR(NGAYLAPHD) = @Nam
GROUP BY M.MSMH
END
ELSE
BEGIN
SELECT M.MSMH,DOANHTHU=
SUM(SOLUONG*DONGIABAN)
FROM (MATHANG M JOIN CTHD C ON M.MSMH = C.MSMH)
JOIN HOADON H ON H.MSHD = C.MSHD
WHERE MONTH(NGAYLAPHD) = @Thang and
YEAR(NGAYLAPHD) = @Nam
GROUP BY M.MSMH
END

GO
EXEC DoanhThu 6,2003
GO
EXEC DoanhThu @Nam=2003
/>GIẢI ĐỀ 4
USE master
GO
IF EXISTS (SELECT name FROM sys.databases WHERE name = 'De4')
BEGIN
DROP DATABASE De4
END
GO
CREATE DATABASE De4
GO
USE De4

GO

CREATE TABLE SACH
( MASACH INT PRIMARY KEY,
TENSACH VARCHAR(100),
SOLUONG INT,
SODAMUON INT
)

CREATE TABLE DOCGIA
( MADG INT PRIMARY KEY,
TENDG VARCHAR(100)
)

CREATE TABLE PHIEUMUON
( MADG INT,
NGAYMUON DATETIME,
MASACH INT,
NGAYTRA DATETIME,
PRIMARY KEY(MADG,NGAYMUON),
FOREIGN KEY(MADG) REFERENCES DOCGIA(MADG)
)
GO
ALTER TABLE SACH ADD
CHECK(SOLUONG >= SODAMUON)
GO
ALTER TABLE PHIEUMUON ADD
DEFAULT GETDATE() FOR NGAYMUON

GO

INSERT INTO SACH VALUES (1,'Cuon theo chieu gio',10,2)
INSERT INTO SACH VALUES (2,'Ong gia va bien ca',2,2)
INSERT INTO SACH VALUES (3,'Tat den',20,3)
INSERT INTO SACH VALUES (4,'Toan roi rac',1,1)
INSERT INTO SACH VALUES (5,'Lap trinh C#',4,4)
INSERT INTO SACH VALUES (6,'Lich su Dang',3,0)
INSERT INTO SACH VALUES (7,'Kinh van hoa',30,5)
/>INSERT INTO SACH VALUES (8,'Chien tranh va hoa binh',10,0)

GO
INSERT INTO DOCGIA VALUES (1,'Nguyen Hoang Long')
INSERT INTO DOCGIA VALUES (2,'Nguyen Minh Tam')
INSERT INTO DOCGIA VALUES (3,'Le Quoc Thinh')
INSERT INTO DOCGIA VALUES (4,'To Hoai Tan')
INSERT INTO DOCGIA VALUES (5,'Nguyen Trung Truc')
INSERT INTO DOCGIA VALUES (6,'La Phi Hung')

GO
INSERT INTO PHIEUMUON VALUES (1,'5/20/2000',2,'5/27/2000')
INSERT INTO PHIEUMUON VALUES (1,'5/30/2000',5,'6/20/2000')
INSERT INTO PHIEUMUON VALUES (1,'7/7/2000',7,'7/25/2000')
INSERT INTO PHIEUMUON VALUES (1,'7/1/2000',8,NULL)
INSERT INTO PHIEUMUON VALUES (2,'7/2/2000',7,NULL)
INSERT INTO PHIEUMUON VALUES (2,'7/3/2000',5,NULL)
INSERT INTO PHIEUMUON VALUES (3,'7/4/2000',5,'7/11/2000')
INSERT INTO PHIEUMUON VALUES (3,'7/5/2000',3,'7/12/2000')
INSERT INTO PHIEUMUON VALUES (3,'7/6/2000',7,'7/13/2000')
INSERT INTO PHIEUMUON VALUES (4,'7/7/2000',1,'7/14/2000')
INSERT INTO PHIEUMUON VALUES (4,'7/8/2000',7,NULL)
INSERT INTO PHIEUMUON VALUES (4,'7/9/2000',2,'7/16/2000')

INSERT INTO PHIEUMUON VALUES (4,'7/10/2000',3,'7/17/2000')
INSERT INTO PHIEUMUON VALUES (5,'7/11/2000',5,NULL)
INSERT INTO PHIEUMUON VALUES (5,'7/12/2000',4,NULL)
INSERT INTO PHIEUMUON VALUES (5,'7/13/2000',7,'7/20/2000')
INSERT INTO PHIEUMUON VALUES (6,'7/14/2000',3,'7/21/2000')

GO
CREATE VIEW vwHetSach
AS
SELECT MASACH,TENSACH FROM SACH
WHERE SOLUONG = SODAMUON

GO
CREATE VIEW vwChuaTraSach
AS
SELECT D.MADG,D.TENDG,NGAYMUON,TENSACH
FROM (DOCGIA D JOIN PHIEUMUON P ON D.MADG=P.MADG) JOIN SACH
S ON S.MASACH=P.MASACH
WHERE NGAYTRA IS NULL

GO
CREATE PROC SoSachChoMuon(@MASACH INT)
AS
BEGIN
IF NOT EXISTS (SELECT MASACH FROM SACH WHERE MASACH =
@MASACH)
/>PRINT'Ma sach khong ton tai'
ELSE
SELECT MASACH,SoSachConLai = SOLUONG - SODAMUON
FROM SACH

WHERE MASACH = @MASACH
END

GO
EXEC SoSachChoMuon 7
/>GIẢI ĐỀ 5
USE master
GO
IF EXISTS (SELECT name FROM sys.databases WHERE name = 'De5')
BEGIN
DROP DATABASE De5
END
GO
CREATE DATABASE De5
GO
USE De5
GO

CREATE TABLE NgachLuong
( MSNgach INT PRIMARY KEY,
MOTA VARCHAR(100)
)

CREATE TABLE DMNganhBac
( MSNgach INT,
BAC INT,
HSLuong FLOAT,
PRIMARY KEY(MSNgach,BAC),
FOREIGN KEY(MSNgach) REFERENCES NgachLuong(MSNgach)
)


CREATE TABLE NhanVien
( MSNV INT PRIMARY KEY,
HO VARCHAR(50),
TEN VARCHAR(50),
MSNgach INT,
BAC INT,
NGAYNLCC DATETIME
)

GO
ALTER TABLE DMNganhBac ADD
UNIQUE(MSNgach,HSLuong)
GO
ALTER TABLE NhanVien ADD
DEFAULT 1 FOR BAC

GO
CREATE VIEW vwHSLuong
AS
SELECT MSNV,N.MSNgach,N.BAC,HSLuong
FROM DMNganhBac D JOIN NhanVien N ON D.MSNgach = n.MSNgach
GROUP BY MSNV,N.MSNgach,N.BAC,HSLuong
/>
GO
CREATE VIEW vwNangLuong
AS
SELECT * FROM NhanVien
WHERE DATEDIFF(M,NGAYNLCC,GETDATE())>=24


GO
CREATE PROC DSNangLuong(@Nam int = NULL)
AS
IF @Nam IS NULL
SELECT * FROM NhanVien
WHERE YEAR(NGAYNLCC)=YEAR(GETDATE())
ELSE
SELECT * FROM NhanVien
WHERE YEAR(NGAYNLCC) = @Nam

GO
EXEC DSNangLuong 2000
/>GIẢI ĐỀ 6
USE MASTER
GO
IF EXISTS (SELECT name FROM sys.databases WHERE name = 'De6')
BEGIN
DROP DATABASE De6
END
GO
CREATE DATABASE De6
GO
USE De6
GO

CREATE TABLE TINH
( MSTinh varchar(5) primary key,
TenTinh varchar(100) NOT NULL,
DienTich decimal NOT NULL,
DanSo decimal NOT NULL,

TinhBG bit
)

CREATE TABLE BIENGIOI
( MSTinh varchar(5),
TenNuoc varchar(100),
primary key (MSTinh,TenNuoc),
foreign key(MSTinh) references TINH(MSTinh)
)

CREATE TABLE LANGGIENG
( MSTinh varchar(5),
MSTinhLG varchar(5),
primary key (MSTinh,MSTinhLG),
foreign key(MSTinh) references TINH(MSTinh)
)
GO
ALTER TABLE LANGGIENG ADD
check(MSTinh<>MSTinhLG)
GO
ALTER TABLE TINH ADD
unique(MSTinh)

GO
INSERT INTO TINH VALUES('AG','AN GIANG',3493,1812200,'True')
INSERT INTO TINH VALUES('BD','BINH DINH',4503,1420600,'False')
INSERT INTO TINH VALUES('BG','BINH DUONG',3859,590800,'False')
INSERT INTO TINH VALUES('BI','BINH THUAN',5345,786300,'False')
INSERT INTO TINH VALUES('BL','BAC LIEU',4697,571500,'False')
INSERT INTO TINH VALUES('BP','BINH PHUOC',6687,236500,'True')

/>INSERT INTO TINH VALUES('BT','BEN TRE',2225,1184100,'False')
INSERT INTO TINH VALUES('CB','CAO BANG',8445,564400,'True')
INSERT INTO TINH VALUES('CM','CA MAU',3211,866100,'False')
INSERT INTO TINH VALUES('CT','CAN THO',4126,1559300,'False')
INSERT INTO TINH VALUES('DL','DAC LAC',11800,661000,'True')
INSERT INTO TINH VALUES('DN','DONG NAI',7578,1741000,'False')
INSERT INTO TINH VALUES('DT','DONG THAP',3391,1335700,'True')
INSERT INTO TINH VALUES('GL','GIA LAI',25536,764200,'True')
INSERT INTO TINH VALUES('HB','HA BAC',4609,1929300,'False')
INSERT INTO TINH VALUES('HT','HA TINH',9845,1300500,'True')
INSERT INTO TINH VALUES('KG','KIEN GIANG',6358,1150500,'True')
INSERT INTO TINH VALUES('KH','KHANH HOA',3773,836700,'False')
INSERT INTO TINH VALUES('LA','LONG AN',4355,1105300,'True')
INSERT INTO TINH VALUES('LC','LAI CHAU',17068,387400,'True')
INSERT INTO TINH VALUES('LD','LAM DONG',9933,511300,'False')
INSERT INTO TINH VALUES('NA','NGHE AN',12502,2457600,'True')
INSERT INTO TINH VALUES('NT','NINH THUAN',6374,495600,'False')
INSERT INTO TINH VALUES('PY','PHU YEN',6804,549700,'False')
INSERT INTO TINH VALUES('QB','QUANG BINH',7340,501800,'True')
INSERT INTO TINH VALUES('QN','QUANG NGAI',7900,967500,'False')
INSERT INTO TINH VALUES('QT','QUANG TRI',8555,603350,'True')
INSERT INTO TINH VALUES('SG','TP.HO CHI MINH',2029,3667600,'False')
INSERT INTO TINH VALUES('ST','SOC TRANG',2523,960400,'False')
INSERT INTO TINH VALUES('TG','TIEN GIANG',2337,1399100,'False')
INSERT INTO TINH VALUES('TN','TAY NINH',4030,772500,'True')
INSERT INTO TINH VALUES('TT','THUA THIEN HUE',3123,1000500,'True')
INSERT INTO TINH VALUES('TV','TRA VINH',1732,836200,'False')
INSERT INTO TINH VALUES('VL','VINH LONG',2154,923600,'False')

INSERT INTO BIENGIOI VALUES('AG','CAMPUCHIA')

INSERT INTO BIENGIOI VALUES('BP','CAMPUCHIA')
INSERT INTO BIENGIOI VALUES('CB','TRUNGQUOC')
INSERT INTO BIENGIOI VALUES('DL','CAMPUCHIA')
INSERT INTO BIENGIOI VALUES('DT','CAMPUCHIA')
INSERT INTO BIENGIOI VALUES('GL','CAMPUCHIA')
INSERT INTO BIENGIOI VALUES('GL','LAO')
INSERT INTO BIENGIOI VALUES('HT','LAO')
INSERT INTO BIENGIOI VALUES('KG','CAMPUCHIA')
INSERT INTO BIENGIOI VALUES('LA','CAMPUCHIA')
INSERT INTO BIENGIOI VALUES('LC','LAO')
INSERT INTO BIENGIOI VALUES('LC','TRUNGQUOC')
INSERT INTO BIENGIOI VALUES('NA','LAO')
INSERT INTO BIENGIOI VALUES('QB','LAO')
INSERT INTO BIENGIOI VALUES('QT','LAO')
INSERT INTO BIENGIOI VALUES('TN','CAMPUCHIA')
INSERT INTO BIENGIOI VALUES('TT','LAO')

INSERT INTO LANGGIENG VALUES('AG','DT')
INSERT INTO LANGGIENG VALUES('AG','KG')
/>INSERT INTO LANGGIENG VALUES('AG','CT')
INSERT INTO LANGGIENG VALUES('BD','QN')
INSERT INTO LANGGIENG VALUES('BD','PY')
INSERT INTO LANGGIENG VALUES('BD','GL')
INSERT INTO LANGGIENG VALUES('BG','SG')
INSERT INTO LANGGIENG VALUES('BG','BP')
INSERT INTO LANGGIENG VALUES('BG','DN')
INSERT INTO LANGGIENG VALUES('BI','DN')
INSERT INTO LANGGIENG VALUES('BI','NT')
INSERT INTO LANGGIENG VALUES('BL','CM')
INSERT INTO LANGGIENG VALUES('BL','ST')

INSERT INTO LANGGIENG VALUES('BP','BG')
INSERT INTO LANGGIENG VALUES('BP','DL')
INSERT INTO LANGGIENG VALUES('BT','TG')
INSERT INTO LANGGIENG VALUES('BT','TV')
INSERT INTO LANGGIENG VALUES('CM','BL')
INSERT INTO LANGGIENG VALUES('CT','AG')
INSERT INTO LANGGIENG VALUES('CT','VL')
INSERT INTO LANGGIENG VALUES('CT','TV')
INSERT INTO LANGGIENG VALUES('CT','ST')
INSERT INTO LANGGIENG VALUES('DL','BP')
INSERT INTO LANGGIENG VALUES('DL','GL')
INSERT INTO LANGGIENG VALUES('DL','KH')
INSERT INTO LANGGIENG VALUES('DN','SG')
INSERT INTO LANGGIENG VALUES('DN','BG')
INSERT INTO LANGGIENG VALUES('DN','BI')
INSERT INTO LANGGIENG VALUES('DN','LD')
INSERT INTO LANGGIENG VALUES('DT','AG')
INSERT INTO LANGGIENG VALUES('DT','TG')
INSERT INTO LANGGIENG VALUES('DT','VL')
INSERT INTO LANGGIENG VALUES('DT','LA')
INSERT INTO LANGGIENG VALUES('GL','DL')
INSERT INTO LANGGIENG VALUES('HT','NA')
INSERT INTO LANGGIENG VALUES('HT','QB')
INSERT INTO LANGGIENG VALUES('KG','AG')
INSERT INTO LANGGIENG VALUES('KH','NT')
INSERT INTO LANGGIENG VALUES('KH','PY')
INSERT INTO LANGGIENG VALUES('KH','DL')
INSERT INTO LANGGIENG VALUES('LA','SG')
INSERT INTO LANGGIENG VALUES('LA','TG')
INSERT INTO LANGGIENG VALUES('LA','DT')

INSERT INTO LANGGIENG VALUES('LD','DN')
INSERT INTO LANGGIENG VALUES('LD','NT')
INSERT INTO LANGGIENG VALUES('NA','HT')
INSERT INTO LANGGIENG VALUES('NT','BI')
INSERT INTO LANGGIENG VALUES('NT','LD')
INSERT INTO LANGGIENG VALUES('NT','KH')
INSERT INTO LANGGIENG VALUES('PY','KH')
INSERT INTO LANGGIENG VALUES('PY','BD')
/>INSERT INTO LANGGIENG VALUES('QB','HT')
INSERT INTO LANGGIENG VALUES('QB','QT')
INSERT INTO LANGGIENG VALUES('QN','BD')
INSERT INTO LANGGIENG VALUES('QT','QB')
INSERT INTO LANGGIENG VALUES('QT','TT')
INSERT INTO LANGGIENG VALUES('SG','LA')
INSERT INTO LANGGIENG VALUES('SG','BG')
INSERT INTO LANGGIENG VALUES('SG','TN')
INSERT INTO LANGGIENG VALUES('SG','DN')
INSERT INTO LANGGIENG VALUES('ST','CT')
INSERT INTO LANGGIENG VALUES('ST','BL')
INSERT INTO LANGGIENG VALUES('TG','LA')
INSERT INTO LANGGIENG VALUES('TG','DT')
INSERT INTO LANGGIENG VALUES('TG','BT')
INSERT INTO LANGGIENG VALUES('TN','SG')
INSERT INTO LANGGIENG VALUES('TT','QT')
INSERT INTO LANGGIENG VALUES('TV','VL')
INSERT INTO LANGGIENG VALUES('VL','CT')
INSERT INTO LANGGIENG VALUES('VL','DT')
INSERT INTO LANGGIENG VALUES('VL','TV')

GO

CREATE VIEW vwTinhLon
AS
SELECT T1.TENTINH FROM TINH T1
WHERE T1.DIENTICH >= all( SELECT T2.DIENTICH FROM TINH T2,
LANGGIENG L2
WHERE T2.MSTINH =
L2.MSTINH)

GO
CREATE VIEW vwSoNuocGiapRanh
AS
SELECT T.MSTinh,TenTinh,SoNuocGiapRanh=Count(TenNuoc)
FROM TINH T join BIENGIOI B on T.MSTinh = B.MSTinh
GROUP BY T.MSTinh,TenTinh

GO
CREATE PROC ThongTinTLG(@MSTinh varchar(5) = NULL)
AS
BEGIN
IF @MSTinh IS NULL
PRINT'Ma tinh khong ton tai'
ELSE
BEGIN
WITH TinhLG
AS (SELECT T.MSTinh,T.TenTinh FROM TINH T
WHERE T.MSTinh IN (SELECT MSTinhLG FROM
LANGGIENG L WHERE L.MSTinh = @MSTinh))
/>SELECT STT=RANK() OVER(ORDER BY MSTinh),* FROM
TinhLG
END

END

GO
EXEC ThongTinTLG 'DN'
/>

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×