1 5 2 từ ngày 15/2/2009-15/3/20091 5 3 từ ngày 15/3/2008-15/3/2009 Ta sẽ chạy câu truy vấn tổng quát, và chạy VD: danh sách mặt hàngbán ra trong tháng 3 SELECT dbo ChiTietHDBan MaHH, dbo
Trang 1ĐẠI HỌC QUỐC GIA TP HCM
KHOA KINH TẾ NGÀNH HỆ THỐNG THÔNG TIN QUẢN LÝ
Đồ án môn học: Nhập môn cơ sở dữ liệu
Quản Lý Mua Bán Laptop
Giảng Viên:
Sinh Viên:
Trang 2Nhu cầu:
Một công ty mua bán Laptop tương đối lớn cần xây dựng một hệ quản trị CSDL
và cần một chương trình dùng cho tất cả các cấp nhân viên, quản lý:
-Nhu cầu cần cho đồ án môn học: Quản lý Xuất nhập kho, khách hàng, chi tiết
doanh thu, lợi nhuận và nhân viên bán hàng
-Xây dựng 1 phần chương trình như các yêu cầu đề án môn học đã trình bày:
+Do tính chất đồ án nên không thao tác trên mạng+Mô hình thiết kế chương trình là Demo trên 1 máy
phương án:
-Chuẩn hóa CSDL để mô hình đạt chuẩn BCNF Đặt quy định ràng buộc để mô hình vẫn đạt chuẩn mà không cần
Trang 3đổi cấu trúc CSDL (tất
nhiên là mô hình ảo vì
có kèm theo quy định) Tiến hành thực hiện đồ án
Trang 41 Khảo sát hiện trạng:
1 1 Cơ cấu tổ chức:
Ban Giám Đốc
Các bộ phận
Bán Hàng Kho Nhân sự Tài Chính Các Bộ Phận khác
Cơ cấu tổ chức trong phần trình bày của đồ án:
-
-Ban giám đốc (người được hỗ trợ ra quyết định)Xuất nhập kho hàng, Thu ngân, Tài chính, Nhân sự (chỉ tính nhân
[5] Chuyển hàng nếu khách hàng yêu cầu
1 2 2 Qui trình nhập hàng:
[1] Gửi yêu cầu hàng cần nhập
Trang 5[2] Nhận hàng và nhập kho (giá định danh, mua bao nhiêu thì giábấy nhiêu ->giá nhập)
1 2 3 Quản lý nhân viên bán hàng:
[1] Mục đích nhân sự: Quản lý các thông tin nhân sự[2] Hoa hồng cho nhân viên bán hàng
1 2 4 Quản lý thu chi tài chính
[1] Thu tiền bán hàng[2] Chi tiền nhập hàng[3] Trả lương, hoa hồng[4] Quản lý hóa đơn[5] Các khoản chi phí khác
1 2 5 Quản lý khách hàng
[1] Chi tiết khách hàng[2] Hỗ trợ khách hàng[3] Các yêu cầu tức thời khác
1 2 6 Quản lý nhà cung cấp
[1] Chi tiết nhà cung cấp[2] Nhu cầu liên hệ nhập hàng[3] Các yêu cầu tức thời khác
Trang 6-Riêng phần nhân sự cho nội dung đặt ra là xây dưng giao diện ngườidùng nên sẽ dễ dàng tiếp cận với nhân viên
1 4 Các yêu cầu
1 4 1 Các yêu cầu tác nghiệp: Yêu cầu này có từ nhiều yếu tố như
website, đi mua hàng đóng vai khách hàng, quan sát và tìm hiểu, hỏi nhân viên công ty tại
các công ty như Hoàn Long, Phong Vũ, Viễn Thông A để sau đó là rút ra các yếu cầu
cho 1 công ty ảo đặt ra!
[1] Thông tin hàng hóa: Laptop cần 1 số thuộc tính sau
- Tên Laptop/ Ký hiệu
- Chip, Main, Ram, CD/DVD, Screen, Pin, HDD,…
-Loại hàng, hãng sản xuất, thông tin bảo hành, thông tin nhà
cung cấp, xuất xứ, giá hàng hóa,…
[2] Thông tin khách hàng:
- Thông tin giao dịch
- Thông tin cá nhân
[3] Thông tin nhà cung cấp:
- Thông tin giao dịch
- Thông tin cá nhân
[4] Chi tiết giao dịch
- Hóa đơn và chi tiết hóa đơn nhập cũng như xuất cần co các
thông tin như, số lượng hàng hóa giao dịch, giá hàng giao dịch,…
[5] Thông tin kho hàng
-Số lượng tồn và giá tồn các mặt hàng
[6] Thông tin hỗ trợ ra quyết định
-Doanh thu, lợi nhuận-Các mặt hàng bán nhiều nhất, ít nhất,…
Trang 72 Xây dựng CSDL lưu trữ:
2 1 Giải quyết yêu cầu lưu trữ:
Sử dụng SQL server 2005: với các bảng như sau:
Chi tiết các bảng:
[1] Chi tiết hóa đơn bán hàng:
[2] Chi tiết hóa đơn mua hàng:
Trang 8[3] Hàng hóa
[4] Hóa đơn bán hàng
[5] Hóa đơn mua hàng
Trang 9[6] Quản lý khách hàng
[7] Loại hàng
[8] Nhà cung cấp
[9] Nhan viEn
Trang 10[10] Trung tâm bảo hành
Tổng kết các bảng:
LoaiHang (MaLH, TenLH, MaNCC, MaTTBH)
HangHoa (MaHH, TenHang, MaLH, Chip, Main, HDD, RAM, VGA, CDRW, SLTon,
Gia, GiaBan)
KhachHang (MaKH, TenKH, DiaChi, DienThoai)
NhaCungCap (MaNCC, TenNCC, DiaChi, DienThoai)
TTBH (MaTTBH, DiaChi, DienThoai)
HoaDonBan (MaHD, MaKH, TongGiaTri, NgayLap)
ChiTiEtHDBan (MaHD, MaHH, SLBan, GiaBan, MaNV)
HoaDonMua (MaHD, MaNCC, TongGiaTri, NgayLap)
ChiTiEtHDMua (MaHD, MaHH, SLMua, GiaMua)
NhanViEnBH (MaNV, TenNV, DiaChi, DienThoai)
Sơ đồ thực thể và mối kết hợp:
Trang 12 t1,t2 HangHoa, t1 t2 t1 MaHH t2 MaHH
t1,t2 KhachHang, t1 t2 t1 MaKH t2 MaKH
2 2 2 Ràng buộc Khóa ngoại
(1) NhaCungCap – LoaiHang
t LoaiHang, !t’ NhaCungCap, t’ NhaCungCap = t LoaiHang
Trang 13 t ChiTietHDBan, !t’ NhanVien, t’ NhanVien = t ChiTietHDBan
Trang 14 t HoaDonBan, !t’ KhachHang, t’ KhachHang = t HoaDonBan
2 2 3 Ràng buộc khác: Các ràng buộc này có thể được xử lý bằng
TriggEr hoặc C#, trong đồ án này sẽ hướng xử lý bằng C# ADO NET với sqlCommand ExEcutENonQuEry( )
(1) HangHoa – ChiTiEtHDMua - ChiTiEtHDBan
t HangHoa, t1 ChiTietHDBan, t2 ChiTietHDMua,
t SLTon =Sum( t2 SLMua) –Sum( t1 SLBan) ^ t MaHH=t1 MaHH=t2 MaHH
Cú pháp Update sau đây sẽ dùng gán cho một sự kiện nào đó khi thiết lập trên Demo C#:
Lưu ý đây không phải là Trigger chỉ là một Command TExt
Trang 15UPDATE HangHoaSET SLTon = IsNull
((SELECT sum(SLMua)FROM ChiTietHDMuaWHERE ChiTietHDMua MaHH = HangHoa MaHH) -(SELECT sum(SLBan)
FROM ChiTietHDBanWHERE ChiTietHDBan MaHH = HangHoa MaHH),(SELECTsum(SLMua)
FROM ChiTietHDMuaWHERE ChiTietHDMua MaHH = HangHoa MaHH))Dùng chung cho cả 2 sự kiện ở 2 bảng
(2) ChiTiEtHD (Mua/Ban) – HoaDon (Mua/Ban)
t HoaDon, t’ ChiTietHD, t TongGiaTri=Sum(t’ SL*t’ Gia)
Cú pháp Update sau đây sẽ dùng gán cho một sự kiện nào đó khi thiết lập trên Demo C#:
UPDATE HoaDonMuaSET TongGiaTri =
(SELECT SUM(SLMua * GiaMua)FROM ChiTietHDMua
WHERE (MaHD = HoaDonMua MaHD))
UPDATE HoaDonBanSET TongGiaTri =(SELECT SUM(SLBan * GiaBan)
FROMWHERE
Trang 16ChiTietHDBan(MaHD = HoaDonBan MaHD))
2 3 Phụ thuộc hàm
(1) NhaCungCap = {MaNCC, TenNCC, DiaChi, DienThoai}
F={
MaNCC TenNCCMaNCC DiaChiMaNCC DienThoai}
(2) TTBaoHanh = {MaTTBH, DiaChi, DienThoai}
F={
MaTTBH DiaChiMaTTBH DienThoai}
(3) LoaiHang = {MaLoai, MaNCC, MaTTBH}
F={
MaLoai MaNCCMaLoai MaTTBH}
(4) HangHoa = {MaHH, TenHang, MaLH, Chip, Screen, Ram, HDD, VGA,
CDRW, SLTon, Gia, GiaBan}
F={
MaHH TenHangMaHH MaLHMaHH ChipMaHH Screen
Trang 17MaHD, MaHH SLMua,
MaHD, MaHH GiaMua
}
(6) ChiTietHDBan{MaHD, MaHH, SLBan, GiaBan, MaNV}F={
MaHD, MaHH SLBan
MaHD, MaHH GiaBan
MaHD, MaHH MaNV
Trang 18MaHD TongGiaTriMaHD NgayLap}
(9) HoaDonBan{MaHD, MaNCC, TongGiaTri, NgayLap}
F={
MaHD MaKHMaHD TongGiaTriMaHD NgayLap}
(10) KhachHang{MaKH, TenKH, DiaChi, DienThoai}
F={
MaKH TenNVMaKH TenKHMaKH DiaChiMaKH DienThoai}
2 4 Chuẩn hóa CSDL
2 4 1 Xét bảng NhanVien (MaNV, TenNV, DiaChi, DienThoai}
- Một NV có thể có nhiều số điện thoại hoặc nhiều nhiều địa chỉ liên
hệ, như vậy mô hình không thể đạt chuẩn BCNF Lúc đó ta phải tách bảng
NhanVien
thành 3 bảng NhanVien{MaNV, TenNV}, NV-DC{MaNV, DiaChi} NV-DT{MaNV,DienThoai} lúc này thì quan hệ NhanVien đã được chuẩn hóa với chuẩn Boyce-Codd
Nhưng chúng ta sẽ đạt kèm 1 số quy định như:
+ Các nhân viên chỉ được sử dụng 1 số điện thoại và 1 địa chỉ liên
hệ trong quá trình làm việc, tuy nhiên quy định này cũng có vẻ khắc khe
2 4 2 Tương tự với bảng KhachHang{MaKH, TenKH, DiaChi, DienThoai}
Trang 19Chúng ta vẫn nói trên phương diện như với bảng NhanVien, thì mô hình vẫn chưa thể
đạt chuẩn BCNF Và ta vẫn phải tiến hành thao tác như bảng NhanVien Bằng cáchtách
bảng: KhachHang{MaKH, TenKH}, KH-DC{MaKH,DiaChi}, KH-DT{MaKH,DT}
+Tuy nhiên bằng một số quy định như trên ta cũng có thể bỏ qua
việc chuẩn hóa này mà mô hình vẫn có thể đạt chuẩn BCNF
2 4 3 Với cấu trúc tương tự như KhachHang ta phải chuẩn hóa tiếp bảng
NhaCungCap như sau NhaCungCap{MaNCC, TenNCC}, NCC-DC{MaNCC,DiaChi},NCC-DT{MaNCC,DT}
2 4 4 Và không chỉ dừng lại ở những bảng trên, ở tất cả các bảng, các phụ
thuộc hàm của một tập hợp hàm với phản ánh như sau: X A trong đó X là khóa (siêu
khóa) nhưng giá trị A lại không phải là duy nhất đối với khóa này thì mô hình sẽ không
đạt chuẩn và tại phải làm thao tác chuẩn hóa CSDL BCNF
Kết luận: Nếu như không có các điều kiện ràng buộc thì mô hình CSDL củachúng ta sẽ làm việc chưa logic về tính thực tế Tuy nhiên mô hình của chúng ta
sẽ rất
tốt và có thể nói là đạt chuẩn 4 hay BCNF với các điều kiện ràng buộc như sau:
- Nhân viên, khách hàng, nhà cung cấp, … chỉ dùng duy nhất 1 số điện thoại
liên lạc và 1 địa chỉ liên hệ
- Vấn đề thứ 2 là chúng ta vẫn sử dụng CSDL như ban đầu, với những điều
kiện ràng buộc như trên và nó đạt chuẩn BCNF
2 5 Truy vấn SQL
2 5 1 Các yêu cầu từ nghiệp vụ bán hàng:
Trang 20(1 1) Liệt kê danh mục hàng và các thông tin về hàng (giống như
khách hàng xem bảng báo giá)
SELECT *FROM HangHoa
Trang 21(1 2) Xem thông tin hàng hóa có mã là x hoặc tên hàng là y
Trang 22(1 3) Mã và tên các laptop có cấu hình:
Chip=x
Hoặc Sreen=y
Hoặc Ram=z
Ta giải trường hợp Chip=x=2Ghz
SELECT MaHH, TenHang, MaLH, ChipFROM HangHoa
WHERE (Chip LIKE '%' + @X + '%')
Trang 23(1 4) Trường hợp khách hàng có yêu cầu kiểm tra kỹ thuật máy ta
cần kiểm tra xem có phải đó là hàng đã được công ty bán ra hay
HDB MaKH, KH TenKH, CTB MaHH, CTB SLBan,CTB NgayLap
ChiTietHDBan as CTB INNER JOIN HoaDonBan as HDB ON
CTB MaHD = HDB MaHD INNER JOIN
KhachHang as KH ON HDB MaKH = KH MaKH
(1 5) Giải quyết các vấn đề sau:
1 5 1 Danh sách hàng bán ra trong ngày x
1 5 2 Danh sách hàng bán ra trong tháng x
1 5 3 Danh sách hàng bán ra trong năm x
Ta sẽ giải quyết cả 3 câu trên bằng 1 truy vấn duy nhất: Danh sáchhàng bán ra từ ngày x đến ngày y VD:
1 5 1 từ ngày 15/3/2009 -15/3/2009
Trang 241 5 2 từ ngày 15/2/2009-15/3/2009
1 5 3 từ ngày 15/3/2008-15/3/2009
Ta sẽ chạy câu truy vấn tổng quát, và chạy VD: danh sách mặt hàngbán ra trong tháng 3
SELECT dbo ChiTietHDBan MaHH, dbo HangHoa TenHang,
dbo ChiTietHDBan SLBan, dbo HoaDonBan NgayLap
FROM dbo ChiTietHDBan INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHHINNER JOIN
dbo HoaDonBan ON dbo ChiTietHDBan MaHD = dbo HoaDonBan MaHDWHERE (dbo HoaDonBan NgayLap BETWEEN @X AND @Y)
(1 6) Lập danh sách tất cả mặt hàng của loại hàng x
Vd: x là COMPAQ – HP
SELECT
FROM
WHERE
dbo HangHoa TenHang, dbo LoaiHang TenLH
dbo HangHoa INNER JOIN
dbo LoaiHang ON dbo HangHoa MaLH = dbo LoaiHang MaLoai(dbo LoaiHang TenLH = @X)
Trang 25(1 7) Danh sách các hàng hóa mua trong hóa đơn có mã là x VD:x=7
SELECT dbo ChiTietHDBan MaHD, dbo ChiTietHDBan MaHH,
dbo ChiTietHDBan GiaBan, dbo ChiTietHDBan SLBan
FROM dbo ChiTietHDBan INNER JOIN
dbo HoaDonBan ON dbo ChiTietHDBan MaHD = dbo HoaDonBan MaHDWHERE (dbo ChiTietHDBan MaHD = @X)
(1 7) Tổng doanh thu trong 1 thời từ nào đó từ thời gian xyPhần này ta có thể giải quyết được các bài toán sau, doanh thu trong ngày, trong tháng,
trong quý, trong năm, và trong một thời kỳ VD: Ta tính doanh thu trong tháng 3
SELECT SUM(TongGiaTri) AS DoanhThu
FROM dbo HoaDonBan
WHERE (NgayLap BETWEEN @X AND @Y)
(Doanh thu tính bằng USD, đừng thắc mắc tại sao nó bé thế! Vì dữ liệu đầu vào chưa
nhiều)
Trang 26(1 8) Tương tự ta giải quyết bài toán Lợi nhuận như Doanh thu trên
Ta giải Lợi nhuận trong tháng 3 (nhưng trong CSDL vì dữ liệu quá ít nên chắc chỉ
đc có
10 ngày)
SELECT SUM(dbo ChiTietHDBan SLBan * (dbo ChiTietHDBan GiaBan
-dbo HangHoa Gia)) AS LoiNhuan
FROM dbo ChiTietHDBan INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHHINNER JOIN
dbo HoaDonBan ON dbo ChiTietHDBan MaHD = dbo HoaDonBan MaHDWHERE (dbo HoaDonBan NgayLap BETWEEN @X AND @Y)
(1 9) Thống kê mặt hàng bán ra từ trong thời kỳ từ thời gian x cho
đến thời gian y, VD: trong tháng 3
SELECT
FROM
dbo ChiTietHDBan MaHH, dbo HangHoa TenHang
dbo ChiTietHDBan INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHHINNER JOIN
dbo HoaDonBan ON dbo ChiTietHDBan MaHD = dbo HoaDonBan MaHDWHERE (dbo HoaDonBan NgayLap BETWEEN @X AND @Y)
Trang 27(1 10 1)Các mặt hàng bán nhiều nhất trong thời kỳ từ thời gian x đến
thời gian y Vd: trong tháng 3
SELECT
FROM
dbo ChiTietHDBan MaHH, dbo ChiTietHDBan SLBan
dbo ChiTietHDBan INNER JOIN
dbo HoaDonBan ON dbo ChiTietHDBan MaHD = dbo HoaDonBan MaHDWHERE (dbo HoaDonBan NgayLap BETWEEN @X AND @Y) AND
(dbo ChiTietHDBan SLBan >= ALL
(SELECT SLBanFROM dbo ChiTietHDBan))
(1 10 2)Các mặt hàng bán ít nhất trong thời kỳ từ thời gian x đến thời
gian y Vd: trong tháng 3
SELECT
FROM
dbo ChiTietHDBan MaHH, dbo ChiTietHDBan SLBan
dbo ChiTietHDBan INNER JOIN
dbo HoaDonBan ON dbo ChiTietHDBan MaHD = dbo HoaDonBan MaHDWHERE (dbo HoaDonBan NgayLap BETWEEN @X AND @Y) AND
(dbo ChiTietHDBan SLBan <= ALL
(SELECT SLBanFROM dbo ChiTietHDBan))
Trang 28(1 10 3) Tình hình tiêu thụ hàng trong các tháng trong năm x Cái này
hơi giống với WalMart của Thầy nên e không làm, mà muốn làm cũng không đc vì hệ
thống ảo (CSDL vừa tạo) này chỉ có thể hoạt động trong tháng 3/2009 ^^
Tuy nhiên ta có thể giải quyết bài toán này với 4 mức ý nghĩa: Thống
SELECT MaHH, TEnHang,
ISNULL ((SELECT SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *
dbo ChiTietHDBan SLBan) AS Expr1
FROM dbo HoaDonBan INNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD = dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND
dbo ChiTietHDBan MaHH = dbo HangHoa MaHH WHERE (YEAR(dbo HoaDonBan NgayLap) = 2009) AND (dbo ChiTietHDBan MaHH = HangHoa_1 MaHH) AND (MONTH(dbo HoaDonBan NgayLap)
= 1)), 0) AS Thang1,
ISNULL ((SELECT SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *
dbo ChiTietHDBan SLBan) AS Expr1
FROM dbo HoaDonBan INNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD = dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND
dbo ChiTietHDBan MaHH = dbo HangHoa MaHH WHERE (YEAR(dbo HoaDonBan NgayLap) = 2009) AND (dbo ChiTietHDBan MaHH = HangHoa_1 MaHH) AND (MONTH(dbo HoaDonBan NgayLap)
Trang 29= 2)), 0) AS Thang2,
ISNULL ((SELECT SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *
dbo ChiTietHDBan SLBan) AS Expr1
FROM dbo HoaDonBan INNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD = dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND
dbo ChiTietHDBan MaHH = dbo HangHoa MaHH WHERE (YEAR(dbo HoaDonBan NgayLap) = 2009) AND (dbo ChiTietHDBan MaHH = HangHoa_1 MaHH) AND (MONTH(dbo HoaDonBan NgayLap)
= 3)), 0) AS Thang3,
ISNULL ((SELECT SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *
dbo ChiTietHDBan SLBan) AS Expr1
FROM dbo HoaDonBan INNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD = dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND
dbo ChiTietHDBan MaHH = dbo HangHoa MaHH WHERE (YEAR(dbo HoaDonBan NgayLap) = 2009) AND (dbo ChiTietHDBan MaHH = HangHoa_1 MaHH) AND (MONTH(dbo HoaDonBan NgayLap)
= 4)), 0) AS Thang4,
ISNULL ((SELECT SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *
dbo ChiTietHDBan SLBan) AS Expr1
FROM dbo HoaDonBan INNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD = dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND
dbo ChiTietHDBan MaHH = dbo HangHoa MaHH WHERE (YEAR(dbo HoaDonBan NgayLap) = 2009) AND (dbo ChiTietHDBan MaHH = HangHoa_1 MaHH) AND (MONTH(dbo HoaDonBan NgayLap)
= 5)), 0) AS Thang5,
ISNULL ((SELECT SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *
dbo ChiTietHDBan SLBan) AS Expr1
FROM dbo HoaDonBan INNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD = dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND
dbo ChiTietHDBan MaHH = dbo HangHoa MaHH
Trang 30WHERE (YEAR(dbo HoaDonBan NgayLap) = 2009) AND (dbo ChiTietHDBan MaHH = HangHoa_1 MaHH) AND (MONTH(dbo HoaDonBan NgayLap)
= 6)), 0) AS Thang6,
ISNULL ((SELECT SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *
dbo ChiTietHDBan SLBan) AS Expr1
FROM dbo HoaDonBan INNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD = dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND
dbo ChiTietHDBan MaHH = dbo HangHoa MaHH WHERE (YEAR(dbo HoaDonBan NgayLap) = 2009) AND (dbo ChiTietHDBan MaHH = HangHoa_1 MaHH) AND (MONTH(dbo HoaDonBan NgayLap)
= 7)), 0) AS Thang7,
ISNULL ((SELECT SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *
dbo ChiTietHDBan SLBan) AS Expr1
FROM dbo HoaDonBan INNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD = dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND
dbo ChiTietHDBan MaHH = dbo HangHoa MaHH WHERE (YEAR(dbo HoaDonBan NgayLap) = 2009) AND (dbo ChiTietHDBan MaHH = HangHoa_1 MaHH) AND (MONTH(dbo HoaDonBan NgayLap)
= 8)), 0) AS Thang8,
ISNULL ((SELECT SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *
dbo ChiTietHDBan SLBan) AS Expr1
FROM dbo HoaDonBan INNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD = dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND
dbo ChiTietHDBan MaHH = dbo HangHoa MaHH WHERE (YEAR(dbo HoaDonBan NgayLap) = 2009) AND (dbo ChiTietHDBan MaHH = HangHoa_1 MaHH) AND (MONTH(dbo HoaDonBan NgayLap)
= 9)), 0) AS Thang9,
ISNULL ((SELECT SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *
dbo ChiTietHDBan SLBan) AS Expr1
FROM dbo HoaDonBan INNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD = dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND
Trang 31dbo ChiTietHDBan MaHH = dbo HangHoa MaHH WHERE (YEAR(dbo HoaDonBan NgayLap) = 2009) AND (dbo ChiTietHDBan MaHH = HangHoa_1 MaHH) AND (MONTH(dbo HoaDonBan NgayLap)
= 10)), 0) AS Thang10,
ISNULL ((SELECT SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *
dbo ChiTietHDBan SLBan) AS Expr1
FROM dbo HoaDonBan INNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD = dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND
dbo ChiTietHDBan MaHH = dbo HangHoa MaHH WHERE (YEAR(dbo HoaDonBan NgayLap) = 2009) AND (dbo ChiTietHDBan MaHH = HangHoa_1 MaHH) AND (MONTH(dbo HoaDonBan NgayLap)
= 11)), 0) AS Thang11,
ISNULL ((SELECT SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *
dbo ChiTietHDBan SLBan) AS Expr1
FROM dbo HoaDonBan INNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD = dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND dbo ChiTietHDBan MaHH = dbo HangHoa MaHH AND
dbo ChiTietHDBan MaHH = dbo HangHoa MaHH WHERE (YEAR(dbo HoaDonBan NgayLap) = 2009) AND (dbo ChiTietHDBan MaHH = HangHoa_1 MaHH) AND (MONTH(dbo HoaDonBan NgayLap)
= 12)), 0) AS Thang12
FROM dbo HangHoa AS HangHoa_1
(1 11) Tổng giá trị mà các nhân viên bán hàng đã bán được
SELECT dbo ChiTietHDBan MaNV, dbo NhanVien TenNV,
SUM(dbo ChiTietHDBan SLBan * dbo ChiTietHDBan GiaBan) AS TGT
FROM dbo ChiTietHDBan INNER JOIN
dbo NhanVien ON dbo ChiTietHDBan MaNV = dbo NhanVien MaNVGROUP BY dbo ChiTietHDBan MaNV, dbo NhanVien TenNV
Trang 322 5 1 Các yêu cầu từ nghiệp vụ nhập hàng:
(2 1 1) Xem danh mục hàng đã từng nhập
SELECT
FROM
ChiTietHDMua MaHH, HangHoa TenHang
ChiTietHDMua INNER JOIN
HangHoa ON ChiTietHDMua MaHH = dbo HangHoa MaHH
(2 1 2) Thông tin Hàng nhập về trong một khoảng thời gian, từngày x ngày y Có thể dùng để xem trong tháng, năm, …
VD: 1/3/2009 20/03/2009
Trang 33SELECT ChiTietHDMua MaHH, HangHoa TenHang, ChiTietHDMua GiaMua,
ChiTietHDMua SLMua, HoaDonMua NgayLap
FROM ChiTietHDMua INNER JOIN
HangHoa ON ChiTietHDMua MaHH = HangHoa MaHH INNER JOINHoaDonMua ON ChiTietHDMua MaHD = HoaDonMua MaHD
WHERE (HoaDonMua NgayLap BETWEEN @X AND @Y)
(2 2) Thống kê các mục hàng giảm dần theo số lượng nhập
SELECT TOP (100) PERCENT dbo ChiTietHDMua MaHH, dbo HangHoa TenHang,dbo ChiTietHDMua SLMua, dbo HoaDonMua TongGiaTri,
dbo HoaDonMua NgayLapFROM dbo ChiTietHDMua INNER JOIN
dbo HangHoa ON dbo ChiTietHDMua MaHH = dbo HangHoa MaHHINNER JOIN
dbo HoaDonMua ON dbo ChiTietHDMua MaHD = dbo HoaDonMua MaHD
ORDER BY dbo ChiTietHDMua SLMua
Trang 34(2 3) Tổng số tiền mà doanh nghiệp đã đầu tư mua hàng trong
một thời gian từ ngày x ngày y VD: trong tháng 3/2009
NgayLap between @X and @Y
(2 4) Lập danh sách các mặt hàng tồn kho lâu hơn một khoảng
thời gian nào đó VD: Tồn kho lâu hơn 1 tháng
SELECT
FROM
dbo HangHoa MaHH, dbo HangHoa TenHang, dbo HangHoa SLTon
dbo HangHoa INNER JOIN
dbo ChiTietHDMua ON dbo HangHoa MaHH = dbo ChiTietHDMua MaHHINNER JOIN
dbo HoaDonMua ON dbo ChiTietHDMua MaHD = dbo HoaDonMua MaHD
WHERE (dbo HangHoa SLTon > 1) AND (dbo HoaDonMua NgayLap < { fn NOW() }
- 30)
Trang 352 5 3 Các yêu cầu từ nghiệp vụ quản lý hóa đơn, khách hàng và nhà cung
cấp:
(3 1) Thông tin Khách hàng và hàng hóa có mã hóa đơn là 4
SELECT dbo KhachHang MaKH, dbo ChiTietHDBan MaHH,
dbo ChiTietHDBan SLBan AS SoLuong,
dbo ChiTietHDBan GiaBan * dbo ChiTietHDBan SLBan AS TGT,dbo HoaDonBan NgayLap
FROM dbo KhachHang INNER JOIN
dbo HoaDonBan ON dbo KhachHang MaKH = dbo HoaDonBan MaKHINNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD =dbo ChiTietHDBan MaHD
WHERE (dbo HoaDonBan MaHD = 4)
Trang 36(3 2) Doanh thu và lợi nhuận các khách hàng mang đến cho công ty
SELECT dbo KhachHang MaKH, dbo KhachHang TenKH,
SUM(dbo ChiTietHDBan GiaBan * dbo ChiTietHDBan SLBan) AS DoanhThu,
SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) *dbo ChiTietHDBan SLBan) AS LoiNhuan
FROM dbo KhachHang INNER JOIN
dbo HoaDonBan ON dbo KhachHang MaKH = dbo HoaDonBan MaKHINNER JOIN
dbo ChiTietHDBan ON dbo HoaDonBan MaHD =dbo ChiTietHDBan MaHD INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHHGROUP BY dbo KhachHang MaKH, dbo KhachHang TenKH
(3 3) Thống kê giao dịch với các nhà cung cấp
SELECT dbo HoaDonMua MaNCC, dbo NhaCungCap TenNCC,
SUM(dbo ChiTietHDMua SLMua * dbo ChiTietHDMua GiaMua) AS GiaoDich
FROM dbo ChiTietHDMua INNER JOIN
dbo HoaDonMua ON dbo ChiTietHDMua MaHD = dbo HoaDonMua MaHD
INNER JOIN
Trang 37dbo NhaCungCap ON dbo HoaDonMua MaNCC =dbo NhaCungCap MaNCC
GROUP BY dbo HoaDonMua MaNCC, dbo NhaCungCap TenNCC
(3 4) Lập danh sách tất cả các trung tâm bảo hành
Trang 382 5 4 Các nhận định và các yêu cầu đặt ra trong tương lai (vì lý do thời gian
hoạt động của công ty chưa lâu):
(4 1 1) Thống kê doanh thu và lợi nhuận từ các mặt hàng, chọn top5
mặt hàng đã đem lại lợi nhuận nhiều nhất cho công ty
SELECT TOP (5) dbo ChiTietHDBan MaHH, dbo HangHoa TenHang,
SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) * dbo ChiTietHDBan SLBan)
AS LoiNhuanFROM dbo ChiTietHDBan INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHHINNER JOIN
dbo HoaDonBan ON dbo ChiTietHDBan MaHD = dbo HoaDonBan MaHDGROUP BY dbo ChiTietHDBan MaHH, dbo HangHoa TenHang
ORDER BY LoiNhuan DESC
(4 1 2) Thống kê doanh thu và lợi nhuận từ các mặt hàng, chọn top5
mặt hàng đã đem lại lợi nhuận thấp nhất cho công ty
SELECT TOP (5) dbo ChiTietHDBan MaHH, dbo HangHoa TenHang,
SUM((dbo ChiTietHDBan GiaBan - dbo HangHoa Gia) * dbo ChiTietHDBan SLBan)
AS LoiNhuanFROM dbo ChiTietHDBan INNER JOIN
dbo HangHoa ON dbo ChiTietHDBan MaHH = dbo HangHoa MaHHINNER JOIN
dbo HoaDonBan ON dbo ChiTietHDBan MaHD = dbo HoaDonBan MaHD
Trang 39GROUP BY dbo ChiTietHDBan MaHH, dbo HangHoa TenHang
ORDER BY LoiNhuan
(4 2) Thống kê top 3 đối tác chiến lược cung cấp mặt hàng đem lại lợi
nhuận cao nhất
SELECT TOP (3) dbo HoaDonMua MaNCC, dbo NhaCungCap TenNCC,
SUM((dbo HangHoa GiaBan - dbo HangHoa Gia) * dbo ChiTietHDMua SLMua)
AS LoiNhuanFROM dbo ChiTietHDMua INNER JOIN
dbo HangHoa ON dbo ChiTietHDMua MaHH = dbo HangHoa MaHHINNER JOIN
dbo HoaDonMua ON dbo ChiTietHDMua MaHD = dbo HoaDonMua MaHD
INNER JOIN
dbo NhaCungCap ON dbo HoaDonMua MaNCC =dbo NhaCungCap MaNCC
GROUP BY dbo HoaDonMua MaNCC, dbo NhaCungCap TenNCC
ORDER BY LoiNhuan DESC
(4 3) Doanh thu và lợi nhuận trung bình mỗi năm(4 4) Kiểm định các dòng máy phổ thông sẽ được nhiều người ưachuộng, các dòng máy cao cấp sẽ ít người mua hơn
Trang 40(4 5) Các khách hàng thường tập trung trong khu vực thành phố HCMvà
lân cận, khảo sát tính chính xác của nhận định
-SQL sErvEr 2005 ExprEss(53 5MB) -Window installEr 3 1(2 46MB) -DotnEtframEwork 3 5(197MB)
(4) Phần mềm quản trị: Management studio express(38 4MB)
B Tiến hành cài đặt các hỗ trợ
(1) Bạn cài đặt theo thứ tự Window installEr 3 1 >