By GokiSoft.com| 19:44 19/01/2022|
SQL Server/MySQL

[Video] Quản lý sản phẩm - Lập trình SQL Server - C2108L

Quản lý sản phẩm - Lập trình SQL Server



-- Tao database BT1809
create database BT1809
go

-- Kich hoat database
use BT1809
go

-- Tao tables
create table tblUser (
	UserID int not null,
	UserName nvarchar(50)
)
go

create table tblProduct (
	ProductID int not null,
	ProductName nvarchar(50),
	Quanlity int,
	Price money,
	Description ntext
)
go

create table tblOrder (
	OrderID int not null,
	UserID int not null,
	OrderDate datetime
)
go

create table tblOrderDetail (
	OrderID int not null,
	ProductID int not null,
	Quanlity int,
	Price money
)
go

-- clustered index
create clustered index CI_tblUser_UserID on tblUser (UserID)
go

drop index CI_tblUser_UserID on tblUser
go

alter table tblUser
add BirthDate datetime
go

-- constraint
alter table tblOrder
add constraint DF_tblOrder_OrderDate default getdate() for OrderDate
go

-- primary key
alter table tblUser
add constraint PK_tblUser primary key (UserID)
go

alter table tblOrder
add constraint PK_tblOrder primary key (OrderID)
go

alter table tblProduct
add constraint PK_tblProduct primary key (ProductID)
go

alter table tblOrderDetail
add constraint PK_tblOrderDetail primary key (OrderID, ProductID)
go

-- foreign key
alter table tblOrder
add constraint FK_tblOrder_tblUser foreign key (UserID) references tblUser (UserID)
go

alter table tblOrderDetail
add constraint FK_tblOrderDetail_tblOrder foreign key (OrderID) references tblOrder (OrderID)
go

alter table tblOrderDetail
add constraint FK_tblOrderDetail_tblProduct foreign key (ProductID) references tblProduct (ProductID)
go

-- Check
alter table tblOrder
add constraint CK_tblOrder_OrderDate check (OrderDate between '2000-01-01' and getdate())
go

-- Unique
alter table tblUser
add constraint UN_tblUser_UserName unique(UserName)
go

-- Inserting Data
insert into tblUser (UserID, UserName, BirthDate)
values
(1, 'A', '1996-08-28'),
(2, 'B', '1998-06-18'),
(3, 'C', '1997-05-25'),
(4, 'D', '1984-04-27'),
(5, 'E', '1955-08-15'),
(6, 'F', '1955-07-28')
go

insert into tblOrder (OrderID, UserID, OrderDate)
values
(1, 2, '2002-12-01'),
(2, 3, '2000-03-02'),
(3, 2, '2004-08-03'),
(4, 1, '2001-05-12'),
(5, 4, '2002-10-04'),
(6, 6, '2002-03-08'),
(7, 5, '2002-05-02')
go

insert into tblProduct (ProductID, ProductName, Quanlity, Price, Description)
values
(1, 'PA', 2, 10, 'AA'),
(2, 'PB', 10, 20, 'AB'),
(3, 'PC', 13, 300, 'AC'),
(4, 'PD', 7, 80, 'AD'),
(5, 'PE', 12, 120, 'AE')
go

insert into tblOrderDetail(OrderID, ProductID, Quanlity, Price)
values
(1, 1, 10, 10),
(1, 2, 4, 20),
(2, 3, 5, 50),
(3, 3, 6, 80),
(4, 2, 21, 120),
(5, 2, 122, 300)
go

-- Query operation
select * from tblProduct

update tblProduct set Price = 0.9 * Price where ProductID = 3
go

select tblUser.UserID, tblUser.UserName, tblOrder.OrderID, tblOrder.OrderDate, tblOrderDetail.Quanlity, tblOrderDetail.Price, tblProduct.ProductName
from tblUser, tblOrder, tblOrderDetail, tblProduct
where tblUser.UserID = tblOrder.UserID
	and tblOrder.OrderID = tblOrderDetail.OrderID
	and tblOrderDetail.ProductID = tblProduct.ProductID
go

-- View
select tblProduct.ProductID, tblProduct.ProductName, tblOrderDetail.Price, sum(tblOrderDetail.Quanlity) TotalQuanlity
from tblProduct, tblOrderDetail
where tblProduct.ProductID = tblOrderDetail.ProductID
group by tblProduct.ProductID, tblProduct.ProductName, tblOrderDetail.Price
order by TotalQuanlity desc
go

select tblProduct.ProductID, tblProduct.ProductName, sum(tblOrderDetail.Quanlity) TotalQuanlity
from tblProduct, tblOrderDetail
where tblProduct.ProductID = tblOrderDetail.ProductID
group by tblProduct.ProductID, tblProduct.ProductName
order by TotalQuanlity desc
go

create view view_Top2Product
as
select top(2) tblProduct.ProductID, tblProduct.ProductName, sum(tblOrderDetail.Quanlity) TotalQuanlity
from tblProduct, tblOrderDetail
where tblProduct.ProductID = tblOrderDetail.ProductID
group by tblProduct.ProductID, tblProduct.ProductName
order by TotalQuanlity desc
go

select * from view_Top2Product

-- Produre
create proc sp_TimSanPham
	@GiaMua money,
	@count int output
as
begin
	select tblProduct.ProductID, tblProduct.ProductName, tblProduct.Quanlity, tblProduct.Price, tblProduct.Description
	from tblProduct
	where tblProduct.Price <= @GiaMua

	select @count = count(*) from tblProduct
	where tblProduct.Price <= @GiaMua
end

declare @count int
exec sp_TimSanPham 50, @count = @count output
print N'Tim thay ' + convert(nvarchar, @count) + ' san pham'

-- Trigger
create trigger TG_tblProduct_Update on tblProduct
for update
as
begin
	if (select count(*) from inserted where Price < 10) > 0
	begin
		print N'You don"t price less than 10'
		rollback transaction
	end
end

update tblProduct set Price = 9

update tblProduct set Price = 2 where ProductID = 2

-- Trigger
create trigger TG_tblUser_Update on tblUser
for update
as
begin
	if update(UserName)
	begin
		print N'You don"t update this column UserName'
		rollback transaction
	end
end

select * from tblUser

update tblUser set BirthDate = '1999-01-02' where UserID = 1

update tblUser set UserName = 'AA' where UserID = 1





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 đó