Bài tập tuần 5-6 Cơ sở dữ liệu | Cơ sở dữ liệu | Trường Đại học Công nghiệp TP.HCM

Bài tập tuần 5-6 Cơ sở dữ liệu môn Cơ sở dữ liệu của Trường Đại học Công nghiệp Thành phố Hồ Chí Minh. Hi vọng tài liệu này sẽ giúp các bạn học tốt, ôn tập hiệu quả, đạt kết quả cao trong các bài thi, bài kiểm tra sắp tới. Mời các bạn cùng tham khảo chi tiết bài viết dưới đây nhé.

Môn:
Thông tin:
5 trang 3 tuần trước

Bình luận

Vui lòng đăng nhập hoặc đăng ký để gửi bình luận.

Bài tập tuần 5-6 Cơ sở dữ liệu | Cơ sở dữ liệu | Trường Đại học Công nghiệp TP.HCM

Bài tập tuần 5-6 Cơ sở dữ liệu môn Cơ sở dữ liệu của Trường Đại học Công nghiệp Thành phố Hồ Chí Minh. Hi vọng tài liệu này sẽ giúp các bạn học tốt, ôn tập hiệu quả, đạt kết quả cao trong các bài thi, bài kiểm tra sắp tới. Mời các bạn cùng tham khảo chi tiết bài viết dưới đây nhé.

27 14 lượt tải Tải xuống
lOMoARcPSD|45470709
B I T P TU N 5-6
I) Batch
1) Vi t m t batch khai báo bi n @tongsoHD ch a t ng s hóa đ n c a s nế ế ơ
ph m ProductID=’31’, n u @tongsoHD>50 thì in ra chu i “S n ph m ế
31 c trŒn 50 đ n hàng”, ng c l i tin ra chu i “S n ph m 31 c t đ n đ tơ ượ ơ
h ng”
2) Vi t m t đo n Batch v i tham s @makh @n, ch a s hóa đ n @nế ơ
c a khách hàng @makh, tham s @nam ch a năm l p hóa đ n (ví d ơ
@nam=1996), n u @n>0 thì in ra chu i:”Khách hàng @n hóa đ nế ơ
trong năm 1996”, ng c l i n u @n=0 thì in ra chu i “Khách hàng khôngượ ế
có hóa đ n nào trong năm 1996” ơ
3) Vi t m t batch tính s ti n gi m cho nh ng hóa đ n (OrderID) t ngế ơ
ti n>500, thông tin g m OrderID, TongTien=sum(UnitPrice*Quantity),
Ti n gi m, v i Ti n gi m đ c tính nh sau: ượ ư
Nh ng hóa đ n có TongTien <500 th kh ng gi m, ơ
TongTien t 500 đ n <5000 thì gi m 5% c a TongTien ế
TongTien t 5000 đ n <10000 thì gi m 10% c a TongTien ế
TongTien t 10000 tr lên thì gi m 15% c a TongTien
(G i ý: Dùng c u trúc Case… when …then …)
4) Vi t m t Batch v i 3 tham s : @MaNCC, @MaSP, @SoLuongCC, ch a giáế
tr c a các field SupplierID, ProductID,Quantity, v i giá tr truy n cho
các bi n @MaNCC, @MaSP (vd: @MaNCC =5, @MaSP =11, thì ch ngế ươ
trình sẽ gán giá tr t ng ng c a field Quantity cho bi n ươ ế
@SoLuongCC, n u @SoLuongCC tr v giÆ tr l null th in ra chu i “Nhaế
cung cap 5 khong cung cap san pham 11”, ng c l i (vd: @SoLuongCCượ
Mục tiêu:
Hiểu và biết cách lập trình trong SQL
Viết các
batch
Tạo và thực thi các loại function và stored procedure
Function gồm 3
loại
:
o
Scalar function
o
Table valued Function
o
Multi Statement table valued Function
Stored Procedure
o
Tham số input và
output
lOMoARcPSD|45470709
=12) th in chu i “Nha cung cap 5 cung cap san pham 11 v i s l ng ượ
12”
5) Vi t m t batch th c hi n tăng đ n giá (UnitPrice) trung bình c a đ nế ơ ơ
hàng (Orders) theo đi u ki n sau: Khi trung bình c a đ n giá trong đ n ơ ơ
hàng < 50 thì c p nh t tăng đ n giá c a đ n hàng lên 10%, n u sau khi ơ ơ ế
c p nh t m đ n giá l n nh t c a đ n hàng >300 th d ng. ơ ơ
II) Function: (Nh ki m tra t ng hàm sau khi làm xong, b ng cách g i hàm
truy n tham s )
Scalar Function:
1) Vi t hàm tên ế CountOfProducts (d ng scalar function) v i tham s
@MaNhom, giá tr truy n vào l y t field CategoryID, hàm tr v s s n
ph m t ng ng v i mã nhóm hàng. `p d ng h m đã vi t v o c u truy v n ươ ế
li t danh sÆch cÆc nh m h ng cøng v i s s n ph m thu c m i nh
m, th ng tin g m: CategoryID, CategoryName, CountOfProduct.
2) Vi t h m n l ế InstockProd (d ng scalar function) v i tham s v o l
@ProductID v @SupplierID. H m tr v s l ng t n kho (UnitInStock) ượ
c a s n ph m @ProductID do nhà cung c p @SupplierID cung c p.
3) Vi t hàm tên ế SalesOfEmp (d ng scalar function) tr v t ng doanh thu
bÆn h ng (SUM(UnitPrice*Quantity)) c a m t nh n viŒn trong m t
thÆng tøy v trong m t năm tøy , v i tham s v o @EmployeeID,
@MonthOrder, @YearOrder
Table Valued Functions
1) Vi t hàm ế SumofOrder v i hai tham s @thang @nam, tr v danh
sách các hóa đ n (OrderID) l p trong tháng năm đ c truy n vào tơ ượ
2 tham s @thang và @nam, t ng ti n >5000, thông tin g m OrderID,
OrderDate, SubTotal, trong đó SubTotal =sum(Quantity*UnitPrice).
2) Vi t hàm tên ế SumOfProduct v i tham s đ u vào @MaNCC
(SupplierID), hàm dùng đ tính t ng s l ng ( ượ SumOfQuantity) v chi tế
kh u cao nh t ( MaxOfDiscount) c a các s n ph m do nhà cung c p
@MaNCC cung c p, thông tin g m ProductID, SumOfQuantity,
MaxOfDiscount
3) Vi t hàm tên ế Discount_Func tính s ti n gi m trên các hóa đ n ơ
(OrderID), th ng tin g m OrderID, Quantity, Discount, trong đó, Discount
đ c t nh nh sau: ượ ư
N u Quantity< 10 th Discount=0, ế
lOMoARcPSD|45470709
N u 10<= Quantity <30 th Discount = 5% [ế UnitPrice*Quantity]
N u 30<= Quantity <50 th Discount = 10%[ế UnitPrice*Quantity] N uế
Quantity >=50 th Discount = 15% [UnitPrice*Quantity]
G i ý: S d ng Case When …Then …
Select Discount= Case when Quantity <10 then 0 when Quantity
>=10 and Quantity <30 then 5%* (UnitPrice*Quantity) when Quantity
>=30 and Quantity <50 then 10% *(UnitPrice*Quantity) else 15%
*(UnitPrice*Quantity)
End
From [Order Details]
7) Vi t hàm ế TotalOfEmp v i tham s @MonthOrder, @YearOrder đ tính
t ng doanh thu c a các nhân viên trong tháng và năm đ c truy n vào 2 ượ
tham s , thông tin g m EmployeeID, Total, v i
Total=Sum(UnitPrice*Quantity).
Multi statement Table Valued Functions
8) Vi t l i các câu 5,6,7 b ng multi-statement table valued function ế
9) Vi t h m tŒn TonKho tr v k t qu l b ng t n kho c a s n ph m, v iế ế
tham s vào là @MaSP, thông tin g m ProductID, ProductName,
UnitsInStock. .
N u giá tr c a tham s truy n vào @MaSP khác Null thì k tế ế
qu là b ng t n kho c a s n ph m đó.
N u giá tr truy n vào Null thì k t qu b ng t n kho c a t tế ế
c s n ph m
III) Stored Procedure: (Nh ki m tra t ng th t c sau khi làm xong, b ng cách
g i th t c và truy n tham s )
1) Vi t m t th t c tính t ng s hàng t n kho (UnitsInStock) c a t ng nhế
cung c p trong m t qu c gia nào đó, thông tin g m: SupplierID, SumOf
UnitsInStock
2) Vi t th t c tham s a, b d ng input đ gi i ph ng trình b c nh tế ươ
ax+b=0.
3) Vi t m t th t c dùng đ th c hi n các công vi c sau: t o m t b ngế
t m tŒn l #MyTable, chèn hai m u tin tùy ý vào b ng này, dùng câu l nh
SELECT FROM.. đ li t cÆc m u tin c trong b ng #MyTable. C u
trœc c a #MyTable nh sau CustID nchar(5), CustName nvarchar(40), ư
AvgDiff float.
lOMoARcPSD|45470709
4) T o th t c đ t tên là TongThu có tham s vào lànhân viên, tham s
đ u ra t ng tr giÆ cÆc h a đ n nh n viŒn đó bÆn đ c. S d ng ơ ượ
l nh RETURN đ tr v tr ng thái thành công hay th t b i c a th t c.
5) T o th t c hi n th tên s ti n mua c a khÆch hàng mua nhi u
hàng nh t theo năm đã cho.
6) Vi t th t c Sp_InsertProduct tham s d ng input dùng đ chèn m tế
m u tin vào b ng Products. Yêu c u: ch thŒm vào các tr ng giá tr ườ
not null và các field là khóa ngo i.
7) Vi t th t c XoaHD, dùng đ xóa 1 hóa đ n trong b ng Orders khi bi tế ơ ế
OrderID. L u ý tr c khi xóa m u tin trong b ng Orders thì ph i xóa cácư ướ
m u tin c a hoá đ n đó trong b ng [Order Details]. N u kh ng xoÆ ơ ế
đ c cÆc d ng trong b ng Orders th cũng kh ng đ c phØp x a dòngượ ượ
trong b ng [Order Details] ng v i hóa đ n đó. ơ
8) Vi t th t c Sp_Update_Product có tham s v o l ProductID, dùng đ tăngế
UnitsInStock lên 10% n u s n ph m này t n t i, ng c l i hi n thôngế ượ
báo không có s n ph m này.
Ghi chœ:
Cœ phÆp h m if
Ví d :
IF DATENAME(weekday, GETDATE()) IN (N’Saturday’,
N’Sunday’)
SELECT
’Weekend’
;
ELSE
SELECT
’Weekday’;
lOMoARcPSD|45470709
Cú pháp CASE … WHEN
SELECT Các_c t, CASE Tên_c t
WHEN Giá_tr 1 then Hi n_th 1
WHEN Giá_tr 2 then Hi n_th 2...
ELSE Hi n_th
END AS B _danh
FROM Các_b ng_liên_k t [WHERE Đi u_ki n]; ế
Cœ phÆp h m WHILE
-- Syntax for SQL Server and Azure SQL Database
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
Ví d :
USE AdventureWorks2012;
GO
WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300
BEGIN
UPDATE Production.Product
SET ListPrice = ListPrice * 2
SELECT MAX(ListPrice) FROM Production.Product
IF (SELECT MAX(ListPrice) FROM Production.Product) > $500
BREAK
ELSE
CONTINUE
END
PRINT ’Too much for the market to bear’;
| 1/5

Preview text:

B I TẬP TUẦN 5-6

Mục tiêu:

Hiểu và biết cách lập trình trong SQL

Viết các

batch

Tạo và thực thi các loại function và stored procedure

Function gồm 3

loại

:

o

Scalar function

o

Table valued Function

o

Multi Statement table valued Function

Stored Procedure

o

Tham số input và

output

I) Batch

  1. Viết một batch khai báo biến @tongsoHD chứa tổng số hóa đơn của sản phẩm có ProductID=’31’, nếu @tongsoHD>50 thì in ra chuỗi “Sản phẩm 31 c trŒn 50 đơn hàng”, ngược lại tin ra chuỗi “Sản phẩm 31 c t đơn đặt h ng”
  2. Viết một đoạn Batch với tham số @makh và @n, chứa số hóa đơn @n của khách hàng @makh, tham số @nam chứa năm lập hóa đơn (ví dụ @nam=1996), nếu @n>0 thì in ra chuỗi:”Khách hàng có @n hóa đơn trong năm 1996”, ngược lại nếu @n=0 thì in ra chuỗi “Khách hàng không có hóa đơn nào trong năm 1996”
  3. Viết một batch tính số tiền giảm cho những hóa đơn (OrderID) có tổng tiền>500, thông tin gồm OrderID, TongTien=sum(UnitPrice*Quantity), Tiền giảm, với Tiền giảm được tính như sau:

 Những hóa đơn có TongTien <500 th kh ng giảm,

 TongTien từ 500 đến <5000 thì giảm 5% của TongTien

 TongTien từ 5000 đến <10000 thì giảm 10% của TongTien  TongTien từ 10000 trở lên thì giảm 15% của TongTien

(Gợi ý: Dùng cấu trúc Case… when …then …)

  1. Viết một Batch với 3 tham số: @MaNCC, @MaSP, @SoLuongCC, chứa giá trị của các field SupplierID, ProductID,Quantity, với giá trị truyền cho các biến @MaNCC, @MaSP (vd: @MaNCC =5, @MaSP =11, thì chương trình sẽ gán giá trị tương ứng của field Quantity cho biến @SoLuongCC, nếu @SoLuongCC trả về giÆ trị l null th in ra chuỗi “Nha cung cap 5 khong cung cap san pham 11”, ngược lại (vd: @SoLuongCC =12) th in chuỗi “Nha cung cap 5 cung cap san pham 11 với số lượng là 12”
  2. Viết một batch thực hiện tăng đơn giá (UnitPrice) trung bình của đơn hàng (Orders) theo điều kiện sau: Khi trung bình của đơn giá trong đơn hàng < 50 thì cập nhật tăng đơn giá của đơn hàng lên 10%, nếu sau khi cập nhật m đơn giá lớn nhất của đơn hàng >300 th dừng.

II) Function: (Nhớ kiểm tra từng hàm sau khi làm xong, bằng cách gọi hàm và truyền tham số)

  • Scalar Function:
    1. Viết hàm tên CountOfProducts (dạng scalar function) với tham số @MaNhom, giá trị truyền vào lấy từ field CategoryID, hàm trả về số sản phẩm tương ứng với mã nhóm hàng. `p dụng h m đã viết v o c u truy vấn liệt kŒ danh sÆch cÆc nh m h ng cøng với số sản phẩm thuộc mỗi nh m, th ng tin gồm: CategoryID, CategoryName, CountOfProduct.
    2. Viết h m tŒn l InstockProd (dạng scalar function) với tham số v o l @ProductID v @SupplierID. H m trả về số lượng tồn kho (UnitInStock) của sản phẩm @ProductID do nhà cung cấp @SupplierID cung cấp.
    3. Viết hàm tên SalesOfEmp (dạng scalar function) trả về tổng doanh thu bÆn h ng (SUM(UnitPrice*Quantity)) của một nh n viŒn trong một thÆng tøy v trong một năm tøy , với tham số v o @EmployeeID,

@MonthOrder, @YearOrder

  • Table Valued Functions
    1. Viết hàm SumofOrder với hai tham số @thang và @nam, trả về danh sách các hóa đơn (OrderID) lập trong tháng và năm được truyền vào từ 2 tham số @thang và @nam, có tổng tiền >5000, thông tin gồm OrderID, OrderDate, SubTotal, trong đó SubTotal =sum(Quantity*UnitPrice).
    2. Viết hàm tên SumOfProduct với tham số đầu vào là @MaNCC (SupplierID), hàm dùng để tính tổng số lượng (SumOfQuantity) v chiết khấu cao nhất (MaxOfDiscount) của các sản phẩm do nhà cung cấp @MaNCC cung cấp, thông tin gồm ProductID, SumOfQuantity, MaxOfDiscount
    3. Viết hàm tên Discount_Func tính số tiền giảm trên các hóa đơn (OrderID), th ng tin gồm OrderID, Quantity, Discount, trong đó, Discount được t nh như sau:

Nếu Quantity< 10 th Discount=0,

Nếu 10<= Quantity <30 th Discount = 5% [UnitPrice*Quantity]

Nếu 30<= Quantity <50 th Discount = 10%[UnitPrice*Quantity] Nếu Quantity >=50 th Discount = 15% [UnitPrice*Quantity]

Gợi ý: Sử dụng Case When …Then …

Select Discount= Case when Quantity <10 then 0 when Quantity >=10 and Quantity <30 then 5%* (UnitPrice*Quantity) when Quantity >=30 and Quantity <50 then 10% *(UnitPrice*Quantity) else 15% *(UnitPrice*Quantity)

End

From [Order Details]

7) Viết hàm TotalOfEmp với tham số @MonthOrder, @YearOrder để tính tổng doanh thu của các nhân viên trong tháng và năm được truyền vào 2 tham số, thông tin gồm EmployeeID, Total, với

Total=Sum(UnitPrice*Quantity).

Multi statement Table Valued Functions

  1. Viết lại các câu 5,6,7 bằng multi-statement table valued function
  2. Viết h m tŒn TonKho trả về kết quả l bảng tồn kho của sản phẩm, với tham số vào là @MaSP, thông tin gồm ProductID, ProductName,

UnitsInStock. .

    • Nếu giá trị của tham số truyền vào là @MaSP khác Null thì kết quả là bảng tồn kho của sản phẩm đó.
    • Nếu giá trị truyền vào là Null thì kết quả là bảng tồn kho của tất cả sản phẩm

III) Stored Procedure: (Nhớ kiểm tra từng thủ tục sau khi làm xong, bằng cách gọi thủ tục và truyền tham số)

  1. Viết một thủ tục tính tổng số hàng tồn kho (UnitsInStock) của từng nh cung cấp trong một quốc gia nào đó, thông tin gồm: SupplierID, SumOf UnitsInStock
  2. Viết thủ tục có tham số a, b dạng input để giải phương trình bậc nhất ax+b=0.
  3. Viết một thủ tục dùng để thực hiện các công việc sau: tạo một bảng tạm tŒn l #MyTable, chèn hai mẫu tin tùy ý vào bảng này, dùng câu lệnh SELECT … FROM.. để liệt kŒ cÆc mẫu tin c trong bảng #MyTable. Cấu trœc của #MyTable như sau CustID nchar(5), CustName nvarchar(40), AvgDiff float.
  4. Tạo thủ tục đặt tên là TongThu có tham số vào là mã nhân viên, tham số đầu ra là tổng trị giÆ cÆc h a đơn nh n viŒn đó bÆn được. Sử dụng lệnh RETURN để trả về trạng thái thành công hay thất bại của thủ tục.
  5. Tạo thủ tục hiển thị tên và số tiền mua của khÆch hàng mua nhiều hàng nhất theo năm đã cho.
  6. Viết thủ tục Sp_InsertProduct có tham số dạng input dùng để chèn một mẫu tin vào bảng Products. Yêu cầu: chỉ thŒm vào các trường có giá trị not null và các field là khóa ngoại.
  7. Viết thủ tục XoaHD, dùng để xóa 1 hóa đơn trong bảng Orders khi biết OrderID. Lưu ý trước khi xóa mẫu tin trong bảng Orders thì phải xóa các mẫu tin của hoá đơn đó trong bảng [Order Details]. Nếu kh ng xoÆ được cÆc d ng trong bảng Orders th cũng kh ng được phØp x a dòng trong bảng [Order Details] ứng với hóa đơn đó.
  8. Viết thủ tục Sp_Update_Product có tham số v o l ProductID, dùng để tăng UnitsInStock lên 10% nếu sản phẩm này tồn tại, ngược lại hiện thông báo không có sản phẩm này.

Ghi chœ:

Cœ phÆp h m if

Ví dụ:

IF DATENAME(weekday, GETDATE()) IN (N’Saturday’, N’Sunday’)

SELECT ’Weekend’

;

ELS

E

SELECT ’Weekday’;

Cú pháp CASE … WHEN

SELECT Các_cột, CASE Tên_cột WHEN Giá_trị1 then Hiển_thị1 WHEN Giá_trị2 then Hiển_thị2...

ELSE Hiển_thị END AS B _danh

FROM Các_bảng_liên_kết [WHERE Điều_kiện];

Cœ phÆp h m WHILE

-- Syntax for SQL Server and Azure SQL Database

WHILE Boolean_expression

{ sql_statement | statement_block | BREAK | CONTINUE } Ví dụ:

USE AdventureWorks2012;

GO

WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300

BEGIN

UPDATE Production.Product

SET ListPrice = ListPrice * 2

SELECT MAX(ListPrice) FROM Production.Product

IF (SELECT MAX(ListPrice) FROM Production.Product) > $500

BREAK

ELSE

CONTINUE

END

PRINT ’Too much for the market to bear’;