Xuất ra tất cả sinh vật thuộc lớp Thú LThu SELECT CT.MaSinhVat, CT.Ten, CT.TenKhoaHoc, CT.MoiTruongSong, LSV.TenLop FROM ChiTietSinhVat CT JOIN LopSinhVat LSV ON CT.MaLop = LSV.MaLop WHE
Trang 1PHÂN TÍCH THIẾT KẾ CSDL
-USE TuLieuDVTV
GO
-SELECT FROM GioiSinhVat
SELECT FROM NganhSinhVat
SELECT FROM LopSinhVat
SELECT FROM DanhSachDo
SELECT FROM VungSong
SELECT FROM ChiTietSinhVat
-Lệnh: SELECT (JOIN, GROUP BY, SUB
QUERY, ) -1 Xuất ra tất cả sinh vật thuộc lớp Thú (LThu)
SELECT CT.MaSinhVat, CT.Ten, CT.TenKhoaHoc, CT.MoiTruongSong, LSV.TenLop
FROM ChiTietSinhVat CT
JOIN LopSinhVat LSV ON CT.MaLop = LSV.MaLop
WHERE LSV.MaLop = 'LThu'
2 Hiển thị những loại sinh vật đang trong tình trạng Nguy cấp (EN)
SELECT CT.MaSinhVat, CT.Ten, CT.TenKhoaHoc, CT.SoLuong, DSD.DoDeDoa
FROM ChiTietSinhVat CT
JOIN DanhSachDo DSD ON CT.MaMucDo = DSD.MaMucDo
WHERE DSD.MaMucDo = 'EN'
3 Hiển thị tất cả những động vật thuộc ngành Động vật có xương sống (DVCXS)
SELECT CT.MaSinhVat, CT.Ten, LSV.TenLop, NSV.TenNganh
FROM ChiTietSinhVat CT
JOIN LopSinhVat LSV ON CT.MaLop = LSV.MaLop
JOIN NganhSinhVat NSV ON LSV.MaNganh = NSV.MaNganh
WHERE NSV.MaNganh = 'DVCXS'
4 Hiển thị những sinh vật thuộc khu vực Nam Mĩ
SELECT CT.MaSinhVat, CT.Ten, CT.TenKhoaHoc, VS.QuocGia, VS.KhuVuc
FROM ChiTietSinhVat CT
JOIN VungSong VS ON CT.MaVung = VS.MaVung
WHERE VS.KhuVuc = N'Nam Mĩ'
5 Hiển thị những sinh vật thuộc lớp Thực vật hai lá mầm (2LMam)
SELECT CT.MaSinhVat, CT.Ten, CT.TenKhoaHoc, LSV.TenLop
FROM ChiTietSinhVat CT
JOIN LopSinhVat LSV ON CT.MaLop = LSV.MaLop
WHERE LSV.MaLop = '2LMam'
Xuất ra tất cả thông tin của sinh vật
SELECT CTSV.MaSinhVat, CTSV.Ten, CTSV.TenKhoaHoc, CTSV.MoiTruongSong, LSV.TenLop, NSV.TenNganh, GSV.TenGioi,VS.QuocGia, VS.KhuVuc, DSD.DoDeDoa
FROM ChiTietSinhVat CTSV
JOIN VungSong VS ON CTSV.MaVung = VS.MaVung
JOIN DanhSachDo DSD ON CTSV.MaMucDo = DSD.MaMucDo
JOIN LopSinhVat LSV ON CTSV.MaLop = LSV.MaLop
JOIN NganhSinhVat NSV ON LSV.MaNganh = NSV.MaNganh
JOIN GioiSinhVat GSV ON NSV.MaGioi = GSV.MaGioi
GO
Trang 2
-BÀI TẬP NORTHWIND NORTHWIND
1 -Câu 1: Liệt kê những khách hàng ở thành phố London
SELECT FROM Customers
WHERE City= 'London'
Câu 2: Liệt kê tất cả các sản phẩm theo thứ tự tăng dần của đơn giá (UnitPrice), nếu đơn giá trùng nhau thì sắp theo thứ tự giảm dần của số lượng sản phẩm tồn trong kho (UnitsInStock)
SELECT distinct FROM Products
Order by UnitPrice ASC, UnitsInStock DESC
Câu 3: Hãy cho biết sản phẩm có giá (UnitPrice) lớn nhất và sản phẩm có giá nhỏ nhất, sản phẩm có số lượng trong kho (UnitsInStock) nhiều nhất và số lượng trong kho
ít nhất
C2:
SELECT TOP 1 WITH TIES ProductID, ProductName, UnitPrice AS [Giá MAX]
FROM Products
ORDER BY [Giá MAX] DESC
SELECT TOP 1 WITH TIES ProductID, ProductName, UnitPrice AS [Giá MIN]
FROM Products
ORDER BY [Giá MIN] ASC
SELECT TOP 1 WITH TIES ProductID, ProductName, UnitsInStock AS [Số lượng MAX]
FROM Products
ORDER BY [Số lượng MAX] DESC
SELECT TOP 1 WITH TIES ProductID, ProductName, UnitsInStock AS [Số lượng MIN]
FROM Products
ORDER BY [Số lượng MIN] ASC
C3: (Chính xác nhất)
DECLARE @MAXPrice money, @MINPrice money, @MAXStock int, @MINStock int
SELECT @MAXPrice = MAX(UnitPrice) FROM Products
SELECT @MINPrice = MIN(UnitPrice) FROM Products
SELECT @MAXStock = MAX(UnitsInStock) FROM Products
SELECT @MINStock = MIN(UnitsInStock) FROM Products
SELECT FROM Products WHERE UnitPrice = @MAXPrice
SELECT FROM Products WHERE UnitPrice = @MINPrice
SELECT FROM Products WHERE UnitsInStock = @MAXStock
SELECT FROM Products WHERE UnitsInStock = @MINStock
Câu 4: Cho biết tổng số lương sản phẩm trong kho là bao nhiêu
SELECT SUM(UnitsInStock) AS [Tổng số lượng trong kho]
FROM Products
Câu 5: Trung bình mỗi sản phẩm có giá là bao nhiêu
SELECT CategoryID, AVG(UnitPrice) AS [Giá Trung Bình]
FROM Products
GROUP BY CategoryID
Câu 6: Liệt kê 5 sản phẩm có giá cao nhất
SELECT TOP 5 * FROM Products
ORDER BY UnitPrice DESC
Câu 7: Cho biết mỗi nhà cung cấp (Suppliers) đã cung cấp bao nhiêu sản phẩm (2 cột: SupplierID, 'so san pham')
SELECT SupplierID, COUNT(ProductID) AS [Số Sản Phẩm]
FROM Products GROUP BY SupplierID
Câu 8: Hiển thị những sản phẩm có đơn vị tính (QuantiyPerUnit) là boxes (Hint: tìm kiếm tương đối theo QuantityPerUnit)
SELECT FROM Products
WHERE QuantityPerUnit LIKE('%boxes%')
Trang 3Câu 9: Hiện thị những sản phẩm có đơn vị tính (QuantiyPerUnit) là boxes (Hint: tìm kiếm tương đối theo QuantityPerUnit)
SELECT FROM Products
WHERE UnitPrice Between 15 and 30
Câu 10: Hiển thị những sản phẩm có mã nhà cung cấp (supplierid) là: 1, 7, 8,
17,18,19, 22
C1:
SELECT FROM Products
WHERE SupplierID = 1 or SupplierID = 7 or SupplierID = 8 or SupplierID = 17 or
SupplierID = 18 or SupplierID = 19 or SupplierID = 22
C2:
SELECT FROM Products
WHERE SupplierID IN(1 7, 8, 17, 18, 19, 22)
Câu 11: Hiển thị những khách hàng có mã số (CustomerID) có ký tự bắt đầu bằng L SELECT FROM Customers
WHERE CustomerID LIKE('L%')
Câu 12: Hiển thị những KH có mã số (CustomerID) có ký tự bắt đầu bằng S
SELECT FROM Customers
WHERE CustomerID LIKE('S%')
Câu 13: Liệt kê những KH có Address có ký tự bắt đầu bằng con số
SELECT FROM Customers
WHERE LEFT([Address], 1) between 0 and 9
> sẽ có lỗi, do một vài address la NULL WHERE LEFT([Address], 1) between '0' and '9'
Câu 14: Liệt kê những KH có Address có ký tự bắt đầu bằng chữ cái
SELECT FROM Customers
WHERE LEFT([Address], 1) between 'a' and 'z'
NORTHWIND
2 -Câu 3:
SELECT distinct City
FROM Customers
Câu 4:
SELECT UnitPrice, UnitsInStock
FROM Products
ORDER By UnitPrice DESC, UnitsInStock DESC
Câu 5:
SELECT FROM Orders
WHERE Freight < 50
Câu 6:
SELECT FROM Employees
WHERE City = 'London'
Câu 7:
SELECT FROM Employees
WHERE LEFT(FirstName, 1) = 'A'
Câu 8:
SELECT FROM Employees
WHERE YEAR(BirthDate) between 1950 and 1960
Câu 9: (Chưa được)
SELECT FROM Shippers
Trang 4Câu 11:
SELECT FROM Employees
WHERE City = 'Tacoma' or City = 'Seattle'
Câu 12:
SELECT FROM Employees
WHERE TitleOfCourtesy = 'Mr.' or TitleOfCourtesy = 'Ms.'
Câu 13:
SELECT FROM Suppliers
WHERE Fax is not null and SupplierID between 5 and 20
Câu 14:
SELECT FROM Suppliers
WHERE Country IN 'GERMANY', 'AUSTRALIA', 'DENMARK')
AND Region IS NULL IS NOT NULL Câu 15:
SELECT FROM Suppliers
WHERE (SupplierID between 5 and 20) and Country != 'Germany'
Câu 16:
SELECT FROM Suppliers
WHERE SupplierID not between 10 and 20
Câu 17:
SELECT FROM Products
WHERE UnitPrice < 20 and UnitsInStock > 30
Câu 18
SELECT FROM Products
WHERE CategoryID = 1 and ProductName != 'Chang'
Câu 19:
SELECT CategoryName, P.*
FROM Categories JOIN Products P ON Categories.CategoryID = P.CategoryID
WHERE CategoryName = 'SEAFOOD'
Câu 20:
SELECT ProductID, ProductName, QuantityPerUnit, UnitsInStock, CategoryName, P.*
FROM Categories JOIN Products P ON Categories.CategoryID = P.CategoryID
WHERE CategoryName = 'Confections' and
(QuantityPerUnit LIKE('%boxes%') or QuantityPerUnit LIKE('%bags%')) Câu 21:
SELECT FROM Products
WHERE ProductName LIKE('%Chef%')
Câu 22: Tìm sản phẩm có tên bắt đầu là ‘Queso’ và kết thúc là chuỗi 'Pastora' trong table Products
SELECT FROM Products
WHERE ProductName LIKE('Queso%Pastora')
Câu 23:
SELECT R.RegionID, R.RegionDescription, COUNT( TerritoryDescription) AS
TerriotoryPerRegion
FROM Region R JOIN Territories T ON T.RegionID = R.RegionID
GROUP BY R.RegionID, R.RegionDescription
Câu 24:
SELECT CustomerID, COUNT(Fax) FROM Customers
WHERE Fax IS NULL
GROUP BY CustomerID
Câu 25:
SELECT
FROM Customers
WHERE LEN(CompanyName) < 10
Trang 5Cầu 26:
SELECT FROM [Order Details]
ORDER BY UnitPrice ASC, Quantity DESC
Câu 27:
SELECT ProductID, MAX(UnitPrice) AS MAX_UnitPrice, MAX(Quantity) AS MAX_Quantity FROM [Order Details]
GROUP BY ProductID
Câu 28:
SELECT AVG(UnitPrice) AS [Giá trị trung bình]
FROM [Order Details]
Câu 30:
SELECT TOP 1 WITH TIES CategoryID, MIN(UnitsInStock) AS [MIN UnitsInStock]
FROM Products
GROUP BY CategoryID
ORDER BY [MIN UnitsInStock] ASC
Câu 31:
SELECT P.CategoryID, AVG(UnitPrice) AS [AVG UnitPrice]
FROM Products P JOIN Categories C ON P.CategoryID = C.CategoryID
GROUP BY P.CategoryID
HAVING AVG(UnitPrice) between 20 and 30
Câu 32:
SELECT CategoryName, AVG(UnitPrice) AS [AVG UnitPrice]
FROM Products P JOIN Categories C ON P.CategoryID = C.CategoryID
WHERE CategoryName = 'Seafood'
GROUP BY CategoryName
HAVING CategoryName = 'Seafood'
Câu 33: Trong bảng Orders hãy cho biết tổng giá trị cột Freight của những
EmployeeID nào có ít hơn 50 OrderID
SELECT EmployeeID, SUM(Freight) AS [SUM Freight]
FROM Orders
GROUP BY EmployeeID
HAVING COUNT(OrderID) < 50
ORDER BY EmployeeID ASC
Câu 34: Hãy cho biết những mã EmployeeID nào có hơn 50 OrderID
SELECT EmployeeID, COUNT(OrderID) AS [Quantity Orders]
FROM Orders
GROUP BY EmployeeID
HAVING COUNT(OrderID) > 50
Câu 35: Tính tổng cột UnitsInStock trong table Products của những CategoryName bắt đầu với ký tự 'C'
SELECT CategoryName, SUM(UnitsInStock) AS [MAX UnitsInStock]
FROM Products P JOIN Categories C ON P.CategoryID = C.CategoryID
GROUP BY CategoryName
HAVING LEFT(CategoryName, 1) = 'C'
HAVING CategoryName LIKE('C%')
Câu 36: Tổng giá trị cột UnitInStock và trung bình cột UnitPrice của những
suppliers ID có ProductID < 10 (loại mặt hàng có ít hơn 10 sản phẩm)
SELECT CategoryID,
SUM(UnitsInStock) AS 'SUM UnitsInStock', AVG(UnitPrice) AS [AVG_UnitPrice]
FROM Products
WHERE ProductID < 10
GROUP BY CategoryID
HAVING SUM(UnitsInStock) > 20 and AVG(UnitPrice) > 20
Trang 6Câu 37: Trong table Employees, hãy cho biết thành phố nào có nhiều nhân viên nhất
và số lượng là bao nhiêu
SELECT TOP 1 WITH TIES City, COUNT(EmployeeID) AS [MaxEmployeeInCity]
FROM Employees
GROUP BY City
ORDER BY MaxEmployeeInCity DESC
Câu 38: Trong table Employees, hãy cho biết các thành phố có ít nhân viên nhất và
số lượng nhân viên là bao nhiêu
SELECT TOP 1 WITH TIES City, COUNT(EmployeeID) AS [MinEmployeeInCity]
FROM Employees
GROUP BY City
ORDER BY MinEmployeeInCity ASC
Câu 39: Dùng table Customers và hiển thị các cột: CustomerID, CompanyName, Phone với điều kiện chỉ hiển thị 8 ký tự cuối của số phone, đối với cột Fax thì record Cnào
có giá trị NULL thì thay thế bằng từ 'UnAvailable', những record có chứa mã vùng trong cặp dấu ngoặc () thì phân thành 'Type1', còn lại là 'Type2'
SELECT CustomerID, CompanyName, Phone,
CASE Fax: khi đặt field ở đây, ta không thể dùng hàm được
WHEN Fax IS NULL THEN 'UnAvailable'
WHEN Fax LIKE('%(%)%') THEN 'Type1'
ELSE 'Type2'
END AS [Loại FAX]
FROM Customers
Câu 40: Hãy đánh giá UnitPrice của sản phẩm trong table Products theo 3 mức
/*
_ Dưới 50 là: ‘Cheap Price’
_ Từ 50 đến 200 là ‘Medium Price’
_ Trên 200 là ‘Expensive price’
_ Nếu không có giá thì là ‘Have no price yet’
*/
SELECT ProductID, ProductName, UnitPrice,
CASE
WHEN UnitPrice < 50 THEN 'CHEAP PRICE'
WHEN UnitPrice < 200 THEN 'MEDIUM PRICE'
WHEN UnitPrice >= 200 THEN 'EXPENSIVE PRICE'
ELSE 'HAVE NO PRICE YET'
END AS [Đơn Giá]
FROM Products
Trang 7TRIỂN KHAI HỆ QUẢN TRỊ CSDL
Lệnh: VIEW, STORE PROCEDURE (PROC), FUNCTIONS,
TRIGGERS -I - VIEW:
Câu 1: Tạo View tên vChiTietSinhVat, xuất ra danh sách các loài Động vật – Thực vật CREATE VIEW vChiTietSinhVat
AS
SELECT FROM ChiTietSinhVat
GO
SELECT FROM vChiTietSinhVat
GO
Câu 2:Tạo View tên vChiTietSinhVat_DV, xuất danh sach sinh vật thuộc giới 'Động Vật'
Create view VChiTietSinhVat_DV
AS
Select CTSV.MaSinhVat,CTSV.Ten,CTSV.TenKhoaHoc,
LSV.TenLop, NSV.TenNganh,GSV.TenGioi from ChiTietSinhVat CTSV
JOIN LopSinhVat LSV ON CTSV.MaLop = LSV.MaLop JOIN NganhSinhVat NSV ON LSV.MaNganh = NSV.MaNganh JOIN GioiSinhVat GSV ON GSV.MaGioi = NSV.MaGioi where GSV.TenGioi = N'Động vật'
GO
SELECT FROM vChiTietSinhVat_DV
GO
Câu 3: Update thông tin của loài sinh vật bất kì thông qua vChiTietSinhVat
UPDATE vChiTietSinhVat SET MaVung = '4'
WHERE MaSinhVat = 'DV0010'
GO
SELECT FROM vChiTietSinhVat
GO
Câu 4:Tạo View tên vChiTietSinhVat_MTSong_SL, xuất danh sách sinh vật có MTSong chứa chuỗi "Rừng rậm" và SoLuong >= 500
CREATE View vChiTietSinhVat_MTSong_SL
AS
Select Ten,TenKhoaHoc,MoiTruongSong,SoLuong from ChiTietSinhVat
Where MoiTruongSong like N'%Rừng rậm%' and SoLuong >= 500
GO
SELECT FROM vChiTietSinhVat_MTSong_SL
GO
Câu 5: Tạo View tên vChiTietSinhVat_KV, xuất danh sách sinh vật có KhuVuc chứa chuỗi "Đông" (vd: Đông Nam Á, Đông Âu,…)
CREATE VIEW vChiTietSinhVat_KV
AS
SELECT CTSV.MaSinhVat, CTSV.Ten, CTSV.MaVung, VS.KhuVuc
FROM ChiTietSinhVat CTSV JOIN VungSong VS ON CTSV.MaVung = VS.MaVung
WHERE VS.KhuVuc LIKE(N'%Đông%')
GO
SELECT FROM vChiTietSinhVat_KV
GO
Trang 8II - STORE PROCEDURE:
Câu 1: Tạo SP tên spSinhVat_SL_NSV, xuất ra danh sách sinh vật thuộc ngành "Động vật có xương sống" với số lượng <= 500
CREATE PROC spSinhVat_SL_NSV
@MaNganh varchar(10),
@SoLuong int
AS
BEGIN
SELECT CTSV.Ten, CTSV.TenKhoaHoc, CTSV.SoLuong, LSV.TenLop, NSV.TenNganh
FROM ChiTietSinhVat CTSV
JOIN LopSinhVat LSV ON CTSV.MaLop = LSV.MaLop JOIN NganhSinhVat NSV ON LSV.MaNganh = NSV.MaNganh WHERE CTSV.SoLuong <= @SoLuong and NSV.MaNganh = @MaNganh
END
GO
EXEC spSinhVat_SL_NSV 'DVCXS', 500
GO
Câu 2: Tạo SP tên spSinhVat_MucDo, xuất ra MaSinhVat, Ten, DoDeDoa (bảng
DanhSachDo) các loài sinh vật đang trong tình trạng "Nguy cấp" và "Sắp bị đe doạ" CREATE PROC spSinhVat_MucDo
AS
BEGIN
SELECT CTSV.MaSinhVat, CTSV.Ten, DSD.DoDeDoa
FROM ChiTietSinhVat CTSV
JOIN DanhSachDo DSD ON CTSV.MaMucDo = DSD.MaMucDo WHERE CTSV.MaMucDo = 'EN' or CTSV.MaMucDo = 'NT'
END
GO
EXEC spSinhVat_MucDo
GO
Câu 3: Tạo SP tên spSinhVat_Ten, xuất ra danh sách sinh vật có Ten bắt đầu bằng 1
kí tự bất kì (@Ten: tham số truyền từ bên ngoài)
CREATE PROC spSinhVat_Ten
@Ten varchar(10)
AS
BEGIN
SELECT FROM ChiTietSinhVat
WHERE Ten LIKE(@Ten + '%')
END
GO
EXEC spSinhVat_Ten 'K'
GO
Câu 4: Tạo SP tên spSinhVat_SL, xuất ra danh sách sinh vật với số lượng nhập từ bên ngoài (@SoLuong)
CREATE PROC spSinhVat_SL
@SoLuong int
AS
BEGIN
SELECT FROM ChiTietSinhVat
WHERE SoLuong < @SoLuong
END
GO
EXEC spSinhVat_SL '500'
GO
Trang 9Câu 5: * Tạo SP tên spSinhVat_SL_NSV, xuất ra tổng số lượng sinh vật của tất cả ngành sinh vật (dùng SubQuery)
CREATE PROC spSinhVat_SL_NSV
AS
SELECT N.TenNganh, SUM([Số Lượng Lớp]) AS [Số Lượng SV trong Ngành]
FROM LopSinhVat L
JOIN NganhSinhVat N ON L.MaNganh = N.MaNganh
JOIN (
SELECT L.TenLop, COUNT(CT.MaSinhVat) AS [Số Lượng Lớp]
FROM ChiTietSinhVat CT JOIN LopSinhVat L ON CT.MaLop = L.MaLop GROUP BY L.TenLop
) AS SUB ON L.TenLop = SUB.TenLop
GROUP BY N.TenNganh
GO
EXEC spSinhVat_SL_NSV
GO
Câu 6: Tạo SP tên spSinhVat_Update thực hiện cập nhật Ten, TenKhoaHoc, MaLop, MaVung, MTSong, KichThuoc, SoLuong, MaMucDo của sinh vật có MaSinhVat bất kí (tham số
từ bên ngoài)
CREATE PROC spSinhVat_Update
@MaSinhVat varchar(10), @Ten nvarchar(50), @TenKhoaHoc varchar(50),
@MaLop varchar(50), @MaVung int, @MoiTruongSong nvarchar(50),
@KichThuocTB nvarchar(50), @SoLuong int, @MaMucDo varchar(10)
AS
BEGIN
UPDATE ChiTietSinhVat
SET Ten=@Ten, TenKhoaHoc=@TenKhoaHoc, MaLop=@MaLop,
MaVung=@MaVung, MoiTruongSong=@MoiTruongSong, KichThuocTB=@KichThuocTB, SoLuong=@SoLuong, MaMucDo=@MaMucDo
WHERE MaSinhVat=@MaSinhVat
END
GO
EXEC spSinhVat_Update 'DV0001', N'Con Khỉ', 'Monkey', 'LThu', 2, N'Trong Rừng', N'Khá
là nhỏ', 20000, 'LC'
GO
Câu 7: Tạo SP tên spSinhVat_Insert thực hiện thêm vào một sinh vật (tham số từ bên ngoài)
CREATE PROC spSinhVat_Insert
@MaSinhVat varchar(10), @Ten nvarchar(50), @TenKhoaHoc varchar(50),
@MaLop varchar(50), @MaVung int,@MoiTruongSong nvarchar(50),
@KichThuocTB nvarchar(50), @SoLuong int, @MaMucDo varchar(10)
AS
BEGIN
INSERT INTO ChiTietSinhVat
VALUES (@MaSinhVat, @Ten, @TenKhoaHoc, @MaLop, @MaVung,
@MoiTruongSong, @KichThuocTB, @SoLuong, @MaMucDo) END
GO
EXEC spSinhVat_Insert 'DV0014', N'Con Mèo', 'TomCat', 'LThu', 2, N'Trong Nhà', N'Vô
số kể', NULL, 'LC'
GO
Trang 10III - FUNCTIONS:
Câu 1: Viết hàm trả về danh sách sinh vật, có SoLuong NULL được thay bằng chuỗi "N/ A"
CREATE FUNCTION fcSinhVat_SL
(@string varchar(10))
RETURNS varchar(10)
AS
BEGIN
IF (@string IS NULL)
SET @string = 'N/A'
RETURN @string
END
GO
SELECT MaSinhVat, Ten, TenKhoaHoc, MoiTruongSong,
dbo.fcSinhVat_SL(SoLuong) AS [SoLuong], MaMucDo FROM ChiTietSinhVat
GO
Câu 2: Viết hàm trả về bảng dữ liệu gồm các sinh vật sống ở "Đông Nam Á"
CREATE FUNCTION fcSinhVat_VS
(@KhuVuc nvarchar(50))
RETURNS TABLE
AS
RETURN
(
SELECT CT.MaSinhVat, CT.Ten, CT.TenKhoaHoc, VS.*
FROM ChiTietSinhVat CT JOIN VungSong VS ON CT.MaVung = VS.MaVung
WHERE KhuVuc = @KhuVuc
)
GO
SELECT FROM fcSinhVat_VS(N'Đông Nam Á')
GO
Câu 3: Viết hàm xuất ra phẩn tên đầu tiên của sinh vật (vd: Khỉ mặt đỏ -> Khỉ) C1: Xuất Table
CREATE FUNCTION fcSinhVat_Ten01()
RETURNS TABLE
AS
RETURN
(
SELECT MaSinhVat, Ten, LEFT(Ten, CHARINDEX(' ', Ten) - ) AS
[TenThuongGoi],
TenKhoaHoc, MaVung, SoLuong, MaMucDo FROM ChiTietSinhVat
)
GO
SELECT FROM fcSinhVat_Ten01()
GO
C2: Xuất giá trị
CREATE FUNCTION fcSinhVat_Ten02
(@Ten nvarchar(50))
RETURNS nvarchar(50)
AS
BEGIN
DECLARE @TenThuongGoi nvarchar(50)
SELECT @TenThuongGoi = LEFT(@Ten, CHARINDEX(' ', @Ten) - )
RETURN @TenThuongGoi
END
GO
SELECT MaSinhVat, Ten, dbo.fcSinhVat_Ten02(Ten) AS TenThuongGoi,
TenKhoaHoc, MaVung, SoLuong, MaMucDo FROM ChiTietSinhVat
GO