By GokiSoft.com| 14:59 21/03/2022|
SQL Server/MySQL

[Source Code] Bài tập - Quản lý nhân khẩu - Lập trình SQL Server - MySQL - C2110I

Bài tập - Quản lý nhân khẩu - Lập trình SQL Server - MySQL




-- TAO DATABASE
create database BT1821
go

-- Kich Hoat Database
use BT1821
go

-- Tao tables
create table QuanHuyen (
	MaQH int identity(1,1) not null,
	TenQH nvarchar(100)
)
go

create table DuongPho (
	DuongID int not null,
	MaQH int not null,
	TenDuong nvarchar(MAX) not null,
	NgayDuyetTen datetime
)
go

create table NhaTrenPho (
	NhaID int not null,
	DuongID int not null,
	ChuHo nvarchar(50),
	DienTich money
)
go

-- Index
create clustered index CI_NhaTrenPho_NhaID on NhaTrenPho (NhaID)
go

create nonclustered index UI_QuanHuyen_TenQH on QuanHuyen (TenQH)
go

alter table NhaTrenPho
add SoNhanKhau int
go

-- Constraint
---- Primary Key
alter table QuanHuyen
add constraint PK_QuanHuyen primary key (MaQH)
go

alter table DuongPho
add constraint PK_DuongPho primary key (DuongID)
go

alter table NhaTrenPho
add constraint PK_NhaTrenPho primary key (NhaID)
go

---- Foreign Key
alter table NhaTrenPho
add constraint FK_NhaTrenPho_DuongPho foreign key (DuongID) references DuongPho (DuongID)
go

alter table DuongPho
add constraint FK_DuongPho_QuanHuyen foreign key (MaQH) references QuanHuyen (MaQH)
go

alter table DuongPho
add constraint CK_DuongPho_NgayDuyetTen check (NgayDuyetTen between '1945-09-02' and getdate())
go

-- Insert Data
insert into QuanHuyen (TenQH)
values
('Ba Dinh'),
('Hoang Mai')
go

select * from QuanHuyen
go

insert into DuongPho (DuongID, MaQH, TenDuong, NgayDuyetTen)
values
(1, 1, 'Doi Can', '1946-10-19'),
(2, 1, 'Van Phuc', '1998-12-30'),
(3, 2, 'Giai Toa', '1975-09-21')
go

select * from DuongPho
go

insert into NhaTrenPho (NhaID, DuongID, ChuHo, DienTich, SoNhanKhau)
values
(1, 1, 'Ha Khanh Toan', 100, 4),
(2, 1, 'Le Hong Hai', 20, 12),
(3, 2, 'Tran Khanh', 40, 1)
go

-- Query Update
update DuongPho set TenDuong = 'Giai Phong' where TenDuong = 'Giai Toa'
go

-- Du lieu dau ra: TenQH (QuanHuyen), TenDuong (DuongPho), NgayDuyetTen (DuongPho), ChuHo (NhaTrenPho), DienTich (NhaTrenPho), SoNhanKhau (NhaTrenPho)
create view vw_all_Nha_Tren_Pho
as
select QuanHuyen.TenQH, DuongPho.TenDuong, DuongPho.NgayDuyetTen, NhaTrenPho.ChuHo, NhaTrenPho.DienTich, NhaTrenPho.SoNhanKhau
from QuanHuyen, DuongPho, NhaTrenPho
where QuanHuyen.MaQH = DuongPho.MaQH
	and NhaTrenPho.DuongID = DuongPho.DuongID
go

select * from vw_all_Nha_Tren_Pho
go

-- View
---- Du lieu hien thi: TenDuong (DuongPho), DienTichTrungBinh (Ket qua tinh NhaTrenPho), So Nha Khau Trung Binh (Ket qua tinh NhaTrenPho)
create view vw_AVG_Nha_Tren_Pho
as
select DuongPho.TenDuong, avg(NhaTrenPho.DienTich) 'DienTichTrungBinh', avg(NhaTrenPho.SoNhanKhau) 'SoNhanKhauTrungBinh'
from DuongPho, NhaTrenPho
where DuongPho.DuongID = NhaTrenPho.DuongID
group by DuongPho.TenDuong
go

select * from vw_AVG_Nha_Tren_Pho
order by SoNhanKhauTrungBinh asc
go

-- Proc
create proc sp_NgayDuyetTen_DuongPho
	@NgayDuyet datetime
as
begin
	select QuanHuyen.TenQH, DuongPho.TenDuong, DuongPho.NgayDuyetTen
	from QuanHuyen, DuongPho
	where QuanHuyen.MaQH = DuongPho.MaQH
		and DuongPho.NgayDuyetTen = @NgayDuyet
end

---- Test
exec sp_NgayDuyetTen_DuongPho '1998-12-30'
go

declare @NgayDuyet datetime
set @NgayDuyet = Convert(datetime, '30/12/1998', 103) -- '1998-12-30' -> @NgayDuyet
exec sp_NgayDuyetTen_DuongPho @NgayDuyet
go

-- Trigger
create trigger for_update_nha_tren_pho on NhaTrenPho
for update
as
begin
	if (select count(*) from inserted where SoNhanKhau <= 0) > 0
	begin
		print N'You don"t update SoNhaKhau <= 0'
		rollback transaction
	end
end

drop trigger for_update_nha_tren_pho

select * from NhaTrenPho

update NhaTrenPho set SoNhanKhau = -2 where NhaID = 3
go

-- Trigger: instead of delete
create trigger InsteadOf_Delete_DuongPho on DuongPho
instead of delete
as
begin
	-- Xoa foreign key: NhaTrenPho
	delete from NhaTrenPho where DuongID in (select DuongID from deleted)

	-- Xoa primary key: DuongPho
	delete from DuongPho where DuongID in (select DuongID from deleted)
end

select * from DuongPho
select * from NhaTrenPho

delete from DuongPho where DuongID = 1
go




Tags:



Phản hồi từ học viên

5

(Dựa trên đánh giá ngày hôm nay)

Đăng nhập để làm bài kiểm tra

Chưa có kết quả nào trước đó