1. Trang chủ
  2. » Mẫu Slide

ngày 13120 thông báo học bù tuần này các em sẽ học 2 buổi sáng thứ 5 16120 tiết 45 và chiều thứ 6 17120 tiết 67 tại phòng b204 các em đi học đầy đủ nhé c00gioithieumonhoc c01tongqua

34 24 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 35,32 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

4) Viết 1 trigger ràng buộc liên thuộc tính là ngày bán của một HOADON thì luôn luôn lớn hơn hay bằng ngày lập hóa đơn. 5) Viết 1 trigger cho lệnh insert, delete trên bảng [order Details[r]

Trang 1

Thông tin bao gồm CategoryName, Description,

ProductName, QuantityPerUnit, UnitPrice, UnitsInStock

CREATE VIEW LOAISP_SP

AS

SELECT CATEGORYNAME, DESCRIPTION, PRODUCTNAME,

QUANTITYPERUNIT, UNITPRICE, UNITSINSTOCK

FROM Categories C JOIN PRODUCTS P

ON C.CATEGORYID =P.CATEGORYID

XEM THÔNG TIN CUA VIEW

SELECT * FROM LOAISP_SP

XEM THÔNG TIN TRO GIUP VE VIWE

SP_HELPTEXT LOAISP_SP

2) Tạo view List_Product_view chứa danh sách các

sản phẩm dạng hộp (box) có đơn giá > 16,

thông tin gồm ProductID, ProductName, UnitPrice,

QuantityPerUnit, COUNT of OrderID

3) Tạo view vw_CustomerTotals hiển thị

tổng tiền bán được từ mỗi khách hàng theo

Trang 2

DE MA HOA CAU LENH

ON O.ORDERID = OD.ORDERID

GROUP BY CUSTOMERID, YEAR(ORDERDATE),

MONTH(ORDERDATE)

SP_HELPTEXT HD_KH

4) Tạo view trả về tổng số lượng sản phẩm

bán được của mỗi nhân viên (Employee)

theo từng năm

Thông tin gồm EmployeeID, OrderYear, sumOfOrderQuantity

5) Tạo view ListCustomer_view chứa danh sách

các khách hàng có trên 5 hóa đơn đặt hàng từ

năm 1997 đến 1998, thông tin gồm mã khách

(CustomerID) , họ tên (CompanyName),

Số hóa đơn (CountOfOrders)

6) Tạo view ListProduct_view chứa danh sách những sản phẩm nhóm Beverages và Seafood có tổng số lượng bán trong mỗi năm trên 30 sản phẩm, thông tin gồm

CategoryName, ProductName, Year, SumOfOrderQuantity

7) Tạo view vw_OrderSummary với từ khóa

WITH ENCRYPTION gồm OrderYear (năm của ngày lập hóa đơn), OrderMonth (tháng của ngày lập hóa đơn), OrderTotal (tổng tiền, =UnitPrice*Quantity) Sau đó xem thông tin và trợ giúp về mã lệnh của view này

8) Tạo view vwProducts với từ khóa

WITH SCHEMABINDING gồm

ProductID, ProductName, Discount

Xem thông tin của View

Xóa cột Discount Có xóa được không? Vì sao?

9) Tạo view vw_Customer với từ khóa

WITH CHECK OPTION chỉ chứa các khách hàng

Trang 3

ở thành phố London và Madrid, thông tin gồm:

CustomerID, CompanyName, City

CREATE VIEW C9

AS

SELECT CustomerID, CompanyName, City

FROM CUSTOMERS

WHERE CITY ='LONDON'

WITH CHECK OPTION

SELECT * FROM C9

SP_HELPTEXT C9

SELECT * FROM CUSTOMERS

a Chèn thêm một khách hàng mới không ở

thành phố London và Madrid thông qua view vừa tạo

Có chèn được không? Giải thích

INSERT C9(CUSTOMERID, COMPANYNAME, CITY)

VALUES (3333,'YYUUJK','LONDON')

SELECT * FROM C9

SELECT * FROM CUSTOMERS

b Chèn thêm một khách hàng mới ở thành phố London và một khách hàng mới ở thành phố Madrid Dùng câu lệnh select trên bảng Customers để xem kết quả

DROP TABLE DONVI

DROP TABLE NHANVIEN

CREATE TABLE donvi

( madv INT PRIMARY KEY,

tendv NVARCHAR(30) NOT NULL,

dienthoai NVARCHAR(10) NULL

)

CREATE TABLE nhanvien

( manv NVARCHAR(10) PRIMARY KEY,

hoten NVARCHAR(30) NOT NULL,

ngaysinh DATETIME NULL,

diachi NVARCHAR(50) NULL,

madv INT FOREIGN KEY

REFERENCES donvi(madv)

ON DELETE CASCADE

ON UPDATE CASCADE

)

Ví dụ: Xét định nghĩa hai bảng DONVI và NHANVIEN như sau:

Insert into DonVi (Madv, Tendv, DienThoai) values (1,'P.Kinh doanh','822321')

Trang 4

Insert into DonVi (Madv, Tendv, DienThoai) values (2,'Tiep thi','822012')

Insert into nhanvien(manv,hoten,ngaysinh,diachi,madv) Values('NV01','Tran Van A','3/2/1975','77 Tran Phu',1)

Insert into nhanvien(manv,hoten,ngaysinh,diachi,madv) Values('NV02','Mai Thi Bich','13/2/1977','17 Nguyen Hue',2)

Insert into nhanvien(manv,hoten,ngaysinh,diachi,madv) Values('NV03','Le Van Ha','3/2/1973','12 Tran Phu',2)

SELECT * FROM DONVI

SELECT * FROM NHANVIEN

INSERT INTO nv11 VALUES('NV04','Le Thi D',1)

SELECT * FROM NHANVIEN

CREATE VIEW nv21

AS

SELECT manv,hoten,YEAR(ngaysinh) AS namsinh,

madv FROM nhanvien

GO

SELECT * FROM NV21

INSERT INTO nv21(manv,hoten,madv)

VALUES('NV05','Le Van E',1)

SELECT * FROM NHANVIEN

INSERT INTO nv21

VALUES('NV06','Le Van F',1999,1)

Create Table KH_BAC

(Makh int, TenKh Nchar(30),

Khuvuc Nvarchar(30) NOT NULL

CHECK (Khuvuc='Bac bo'),

PRIMARY KEY (Makh, Khuvuc)

)

Create Table KH_TRUNG

(Makh int, TenKh Nchar(30),

Khuvuc Nvarchar(30) NOT NULL

CHECK (Khuvuc='Trung bo'),

PRIMARY KEY (Makh, Khuvuc))

Trang 5

Create Table KH_NAM

(Makh int, TenKh Nchar(30),

Khuvuc Nvarchar(30) NOT NULL CHECK (Khuvuc='Nam bo'),

PRIMARY KEY (Makh, Khuvuc)

SELECT * FROM KH_NAM

SELECT * FROM KH_TRUNG

SELECT * FROM KHACHHANG

INSERT Khachhang VALUES (1, 'CDCN4','Nam Bo')

INSERT Khachhang VALUES (1, 'CDCN4','BAC Bo')

SELECT * FROM KH_Nam

select * from dbo.[1v]

VIEW

1) Tạo view vw_Products_Info hiển thị danh sách

các sản phẩm từ bảng Products và bảng Categories

Thông tin bao gồm CategoryName, Description, ProductName,

QuantityPerUnit, UnitPrice, UnitsInStock

CREATE VIEW vw_Products_Info

AS

SELECT CategoryName, Description, ProductName,

QuantityPerUnit, UnitPrice, UnitsInStock

FROM dbo.Categories C JOIN PRODUCTS P

ON C.CATEGORYID =P.CATEGORYID

SELECT * FROM dbo.vw_Products_Info

2) Tạo view List_Product_view chứa danh sách các sản phẩm dạng hộp (box) có đơngiá > 16, thông tin gồm ProductID, ProductName, UnitPrice, QuantityPerUnit, COUNT

of OrderID

3) Tạo view vw_CustomerTotals hiển thị tổng tiền

bán được từ mỗi khách hàng theo tháng và theo năm

Thông tin gồm CustomerID, YEAR(OrderDate) AS OrderYear,

MONTH(OrderDate) AS OrderMonth,

Trang 6

DROP VIEW vw_CustomerTotals

CREATE VIEW vw_CustomerTotals

SELECT * FROM vw_CustomerTotals

XEM CODE CUA VIEW

(CompanyName), Số hóa đơn (CountOfOrders)

6) Tạo view ListProduct_view chứa danh sách những sản phẩm nhóm Beverages và Seafood có tổng số lượng bán trong mỗi năm trên 30 sản phẩm, thông tin gồm

CategoryName, ProductName, Year, SumOfOrderQuantity

7) Tạo view vw_OrderSummary với từ khóa

WITH ENCRYPTION gồm OrderYear

(năm của ngày lập hóa đơn), OrderMonth

(tháng của ngày lập hóa đơn), OrderTotal

(tổng tiền, =UnitPrice*Quantity)

Sau đó xem thông tin và trợ giúp về mã lệnh của

view này

Trang 7

CREATE VIEW VW_ORDERSUMARY

TU KHOA WITH SCHE

DROP VIEW VWPRODUCTS

CREATE VIEW vwProducts

ALTER TABLE dbo.Products

DROP COLUMN UnitPrice

ProductID, ProductName, Discount

Xem thông tin của View

Xóa cột Discount Có xóa được không? Vì sao?

DROP VIEW vwProducts

CREATE VIEW vwProducts

Trang 8

WITH SCHEMABINDING

AS

SELECT P.ProductID, ProductName, Discount

FROM DBO.PRODUCTS P JOIN DBO.[ORDER DETAILS] OD

ON P.PRODUCTID =OD.PRODUCTID

SELECT * FROM vwProducts

ALTER TABLE DBO.[ORDER DETAILS]

DROP COLUMN DISCOUNT

CREATE VIEW CustomerSLD AS

SELECT * FROM Customers WHERE city='LonDon'

Select * from CustomerSLD

SELECT * FROM CUSTOMERS WHERE CUSTOMERID ='3333'

GO

UPDATE CustomersLD SET city='Anh Quoc'

WHERE CustomerID='3333'

DROP VIEW CUSTOMERSLD

ALTER VIEW CustomerSLD AS

SELECT * FROM Customers WHERE city='LonDon'

WITH CHECK OPTION

Select * from CustomerSLD

SELECT * FROM CUSTOMERS WHERE CUSTOMERID ='3333'

GO

UPDATE CustomersLD SET city='Anh Quoc'

WHERE CustomerID='SEVES'

SELECT * FROM CustomersLD

select * from Customers where CustomerID='AROUT'

9) Tạo view vw_Customer với từ khóa WITH CHECK OPTION chỉ chứa các khách hàng ở thành phố London và Madrid, thông tin gồm: CustomerID, CompanyName, City

a Chèn thêm một khách hàng mới không ở thành phố London và Madrid thông qua viewvừa tạo Có chèn được không? Giải thích

b Chèn thêm một khách hàng mới ở thành phố London và một khách hàng mới ở thành phố Madrid Dùng câu lệnh select trên bảng Customers để xem kết quả

CREATE TABLE donvi1

( madv INT PRIMARY KEY,

tendv NVARCHAR(30) NOT NULL,

dienthoai NVARCHAR(10) NULL

Trang 9

)

CREATE TABLE nhanvien1

( manv NVARCHAR(10) PRIMARY KEY,

hoten NVARCHAR(30) NOT NULL,

ngaysinh DATETIME NULL,

diachi NVARCHAR(50) NULL,

madv INT FOREIGN KEY

SELECT * FROM DONVI1

SELECT * FROM NHANVIEN1

CREATE VIEW nv1A

AS

SELECT manv,hoten,madv FROM nhanvien1

GO

INSERT INTO nv1A VALUES('NV04','Le Thi D',1)

SELECT * FROM NV1A

SELECT * FROM NHANVIEN1

CREATE VIEW nv2A

Trang 10

+convert(char(4),@b)+'='+convert(char(10),@a-@b)Print convert(char(4),@a)+'*'

+convert(char(4),@b)+'='+convert(char(10),@a*@b)

If @b<>0

print convert(char(4),@a)+'/'

+convert(char(4),@b)+'='+convert(char(10),@a/@b)Else

Print 'Khong chia duoc' Thuc thi

EXEC Tong

xem tro giup thu tuc

sp_helptext tong

sua thu tuc

alter PROC Tong

+convert(char(4),@b)+'='+convert(char(10),@a-@b)Print convert(char(4),@a)+'*'

+convert(char(4),@b)+'='+convert(char(10),@a*@b)

If @b<>0

print convert(char(4),@a)+'/'

+convert(char(4),@b)+'='+convert(char(10),@a/@b)Else

Print 'Khong chia duoc' Thuc thi

EXEC Tong

xem tro giup thu tuc

sp_helptext tong

Trang 11

Viet thu tuc giai pt bac 1

+convert(char(4),@b)+'='+convert(char(10),@a-@b)Print convert(char(4),@a)+'*'

+convert(char(4),@b)+'='+convert(char(10),@a*@b)

If @b<>0

print convert(char(4),@a)+'/'

+convert(char(4),@b)+'='+convert(char(10),@a/@b)Else

Print 'Khong chia duoc' Thuc thi cach 1

EXEC Tong1 7,9

thuc thi cach 2

declare @a float, @b float

set @a=45

set @b=78

exec Tong1 @a,@b

xem tro giup thu tuc

sp_helptext tong

Trang 12

sua thu tuc

alter PROC Tong

+convert(char(4),@b)+'='+convert(char(10),@a-@b)Print convert(char(4),@a)+'*'

+convert(char(4),@b)+'='+convert(char(10),@a*@b)

If @b<>0

print convert(char(4),@a)+'/'

+convert(char(4),@b)+'='+convert(char(10),@a/@b)Else

Print 'Khong chia duoc' Thuc thi

Trang 13

exec ptb1a @a,@b

viet thu tục hiển thị

danh sách khách hàng ở thành phô LonDon

alter proc dskhlondon

@tp nvarchar(15)

as

select * from Customers where city =@tp

exec dskhlondon 'ha noi'

tham so dang output

CREATE PROC Tinhtoan

@a int, @b int , @tong int output, @hieu int output, @tich int output, @thuong real output

as

Begin

Set @tong =@a +@bSet @hieu = @a -@bSet @tich = @a *@b

if @b<>0 begin

Set @thuong = @a/@bPrint 'Thuong ='+convert(varchar(10),@thuong)end

else

Print 'Khong chia duoc'

Set @b = @b *100 End

alter PROC Tinhtoan

@a int, @b int , @tong int output

exec Tinhtoan @a,@b,@tong output

print 'tong ='+convert(char(6),@tong)

Trang 14

print 'Tong = ' +convert(char(10),dbo.tong2so())

print 'Tong = ' +convert(char(10),dbo.tong2so())

select dbo.tong2so() as Tong

Viết 1 hàm tinh tien dien, biet sokw tieu thu

Hàm trả về số tiền phải trả= sokw*dongia

Don gia được tính như sau: nếu skw<100, dg =1000,

skw từ 100 đến 150 thì dongia =1200 cho số vượt,

skw>150 thì dongia =1500 cho số vượt

alter function TienDien()

if (@sokw<150)

set @tt=100*1000+(@sokw-100)*1200else

set @tt=100*1000+50*1200+(@sokw-150)*1500return @tt

end

Thưc thi

print 'Tong tien phai tra ='+convert(char(10),dbo.Tiendien())

select dbo.TienDien() as Tientra

sp_helptext tiendien

Trang 15

Ví dụ 2 : Hàm trả về tổng tiền của khách hàng có mã là TOMSP

drop function Tongtien

Create function Tongtien()

Returns money

AS

Begin

Declare @tong money

Select @tong = sum(unitprice*Quantity) from orders o, [Order Details] d

where o.orderid = d.orderid and customerid = 'TOMSP'

Return @tong

End

print 'Tong = ' +convert(char(10),dbo.tongtien())

select dbo.tongtien() as [Tong Tien Cua Khach Hang TOMPS]

Bài tập áp dụng : Hàm trả về thứ bằng tiếng việt

drop function thu

Create function thu(@ngay datetime)

Return @t

end

thuc thi

set dateformat dmy

declare @ngay date

set @ngay ='16/1/1997'

print 'Hom nay la thu ='+dbo.thu(@ngay)

select employeeid, lastname,firstname,birthdate,

dbo.thu(birthdate)

from employees

Trang 16

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,

declare @tong money

select @tong =sum(unitprice *quantity)

from [order details] od join orders o

print 'tong tien='+convert(char(10),dbo.tongdt(@manv,@thang,@nam))

ham tra ve bang du lieu

select top 1 with ties orderid, tongtien =SUM(unitprice*quantity)

from dbo.[Order Details]

group by orderid

order by tongtien desc

select orderid, tongtien =SUM(unitprice*quantity)

from dbo.[Order Details]

Trang 17

group by orderid

having SUM(unitprice*quantity)

>=all( select SUM(unitprice*quantity)

from [Order Details] group by OrderID)

Hàm

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.tenham:CountOfProducts

tham so:mã loại CategoryID

tri tra ve: so sp tuong ung

ALTER FUNCTION CountOfProducts(@MALOAI INT)RETURNS INT

AS

BEGIN

DECLARE @SOSP INT

SELECT @SOSP=COUNT (CATEGORYID)

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

SELECT CategoryID, CategoryName,

CountOfProduct=DBO.CountOfProducts(CategoryID)

FROM dbo.Categories

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

Trang 18

@SupplierID cung cấp.

TENHAM:InstockProd

THAMSO:@ProductID và @SupplierID

TRẢ VỀ:số lượng tồn kho (UnitInStock)

của sản phẩm @ProductID do nhà cung cấp

DECLARE @SLTON INT

SELECT @SLTON =UnitsInStock

FROM PRODUCTSWHERE PRODUCTID =@MASP AND SUPPLIERID =@MANCCRETURN @SLTON

SELECT DBO.InstockProd(@MASP,@MANCC)AS STTON

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

ALTER FUNCTION SALESOFEMP(@MANV INT, @THANG INT,@NAM INT) RETURNS MONEY

Trang 19

DECLARE @MANV INT, @T INT, @N INT

4) 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)

5) 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

CREATE FUNCTION SUMOFPRODUCT(@MANCC INT)

SELECT * FROM SUMOFPRODUCT(@MANCC)

6) 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:

Trang 20

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]

CREATE FUNCTION DISCOUNT_FUNC()

RETURNS TABLE

AS

RETURN SELECT OrderID, Quantity, Discount=CASE

WHEN QUANTITY<10 THEN 0WHEN QUANTITY BETWEEN 10 AND 50 THEN 0.05*(UNITPRICE*QUANTITY)

WHEN QUANTITY BETWEEN 50 AND 100 THEN 0.1*(UNITPRICE*QUANTITY)

ELSE 0.15*(UNITPRICE*QUANTITY)END

FROM [ORDER DETAILS]

THUC THI

SELECT * FROM DISCOUNT_FUNC()

HAM TRA VE TABLE DANG MULTITABLE

Multi statement Table Valued Functions

8) Viết lại các câu 5,6,7 bằng multi-statement table valued function

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)

TEN HAM: TOTALOFEMP

RETURN SELECT EmployeeID, Total=Sum(UnitPrice*Quantity)

FROM dbo.[Order Details] OD JOIN ORDERS O ON OD.ORDERID =O.ORDERIDWHERE MONTH(ORDERDATE)=@THANG AND YEAR (ORDERDATE)=@NAMGROUP BY EmployeeID

THUC THI

DECLARE @T INT, @N INT

SET @T=7

SET @N=1996

SELECT * FROM BAI7(@T,@N)

SELECT * FROM BAI7(6,1997)

CACH 2: DUNG MULTI TABLE

Ngày đăng: 25/01/2021, 15:41

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w