1. Các quan hệ của CSDL quản lý bán hàng
Cho cơ sở dữ liệu quản lý bán hàng gồm có các quan hệ sau:
KHACHHANG (MAKH, HOTEN, DCHI, SODT, NGSINH, DOANHSO, NGDK)
Tân từ: Quan hệ khách hàng sẽ lưu trữ thông tin của khách hàng thành viên gồm có các thuộc tính: mã khách hàng, họ tên, địa chỉ, số điện thoại, ngày sinh, ngày đăng ký và doanh số (tổng trị giá các hóa đơn của khách hàng thành viên này).
NHANVIEN (MANV,HOTEN, NGVL, SODT)
Tân từ: Mỗi nhân viên bán hàng cần ghi nhận họ tên, ngày vào làm, điện thọai liên lạc, mỗi nhân viên phân biệt với nhau bằng mã nhân viên.
SANPHAM (MASP,TENSP, DVT, NUOCSX, GIA)
Tân từ: Mỗi sản phẩm có một mã số, một tên gọi, đơn vị tính, nước sản xuất và một giá bán.
HOADON (SOHD, NGHD, MAKH, MANV, TRIGIA)
Tân từ: Khi mua hàng, mỗi khách hàng sẽ nhận một hóa đơn tính tiền, trong đó sẽ có số hóa đơn, ngày mua, nhân viên nào bán hàng, trị giá của hóa đơn là bao nhiêu và mã số của khách hàng nếu là khách hàng thành viên.
CTHD (SOHD,MASP,SL)
Tân từ: Diễn giải chi tiết trong mỗi hóa đơn gồm có những sản phẩm gì với số lượng là bao nhiêu.
Các bạn chạy SQL sau để thêm vào các dữ liệu ban đầu
CREATE DATABASE QLBH_1004_TEST GO ----------------------------------------------------- ----------------------------------------------------- USE QLBH_1004_TEST GO --------------------------------------------- -- KHACHANG CREATE TABLE KHACHHANG( MAKH char(4) not null, HOTEN varchar(40), DCHI varchar(50), SODT varchar(20), NGSINH smalldatetime, NGDK smalldatetime, DOANHSO money, constraint pk_kh primary key(MAKH) ) --------------------------------------------- -- NHANVIEN CREATE TABLE NHANVIEN( MANV char(4) not null, HOTEN varchar(40), SODT varchar(20), NGVL smalldatetime constraint pk_nv primary key(MANV) ) --------------------------------------------- -- SANPHAM CREATE TABLE SANPHAM( MASP char(4) not null, TENSP varchar(40), DVT varchar(20), NUOCSX varchar(40), GIA money, constraint pk_sp primary key(MASP) ) --------------------------------------------- -- HOADON CREATE TABLE HOADON( SOHD int not null, NGHD smalldatetime, MAKH char(4), MANV char(4), TRIGIA money, constraint pk_hd primary key(SOHD) ) --------------------------------------------- -- CTHD CREATE TABLE CTHD( SOHD int, MASP char(4), SL int, constraint pk_cthd primary key(SOHD,MASP) ) -- Khoa ngoai cho bang HOADON ALTER TABLE HOADON ADD CONSTRAINT fk01_HD FOREIGN KEY(MAKH) REFERENCES KHACHHANG(MAKH) ALTER TABLE HOADON DROP CONSTRAINT FK01_HD ALTER TABLE HOADON ADD CONSTRAINT fk02_HD FOREIGN KEY(MANV) REFERENCES NHANVIEN(MANV) ALTER TABLE HOADON DROP CONSTRAINT FK02_HD -- Khoa ngoai cho bang CTHD ALTER TABLE CTHD ADD CONSTRAINT fk01_CTHD FOREIGN KEY(SOHD) REFERENCES HOADON(SOHD) ALTER TABLE CTHD DROP CONSTRAINT FK01_CTHD ALTER TABLE CTHD ADD CONSTRAINT fk02_CTHD FOREIGN KEY(MASP) REFERENCES SANPHAM(MASP) ALTER TABLE CTHD DROP CONSTRAINT FK02_CTHD ----------------------------------------------------- ----------------------------------------------------- set dateformat dmy ------------------------------- -- KHACHHANG insert into khachhang values('KH01','Nguyen Van A','731 Tran Hung Dao, Q5, TpHCM','8823451','22/10/1960','22/07/2006',13060000) insert into khachhang values('KH02','Tran Ngoc Han','23/5 Nguyen Trai, Q5, TpHCM','908256478','03/04/1974','30/07/2006',280000) insert into khachhang values('KH03','Tran Ngoc Linh','45 Nguyen Canh Chan, Q1, TpHCM','938776266','12/06/1980','08/05/2006',3860000) insert into khachhang values('KH04','Tran Minh Long','50/34 Le Dai Hanh, Q10, TpHCM','917325476','09/03/1965','10/02/2006',250000) insert into khachhang values('KH05','Le Nhat Minh','34 Truong Dinh, Q3, TpHCM','8246108','10/03/1950','28/10/2006',21000) insert into khachhang values('KH06','Le Hoai Thuong','227 Nguyen Van Cu, Q5, TpHCM','8631738','31/12/1981','24/11/2006',915000) insert into khachhang values('KH07','Nguyen Van Tam','32/3 Tran Binh Trong, Q5, TpHCM','916783565','06/04/1971','12/01/2006',12500) insert into khachhang values('KH08','Phan Thi Thanh','45/2 An Duong Vuong, Q5, TpHCM','938435756','10/01/1971','13/12/2006',365000) insert into khachhang values('KH09','Le Ha Vinh','873 Le Hong Phong, Q5, TpHCM','8654763','03/09/1979','14/01/2007',70000) insert into khachhang values('KH10','Ha Duy Lap','34/34B Nguyen Trai, Q1, TpHCM','8768904','02/05/1983','16/01/2007',67500) ------------------------------- -- NHANVIEN insert into nhanvien values('NV01','Nguyen Nhu Nhut','927345678','13/04/2006') insert into nhanvien values('NV02','Le Thi Phi Yen','987567390','21/04/2006') insert into nhanvien values('NV03','Nguyen Van B','997047382','27/04/2006') insert into nhanvien values('NV04','Ngo Thanh Tuan','913758498','24/06/2006') insert into nhanvien values('NV05','Nguyen Thi Truc Thanh','918590387','20/07/2006') ------------------------------- -- SANPHAM insert into sanpham values('BC01','But chi','cay','Singapore',3000) insert into sanpham values('BC02','But chi','cay','Singapore',5000) insert into sanpham values('BC03','But chi','cay','Viet Nam',3500) insert into sanpham values('BC04','But chi','hop','Viet Nam',30000) insert into sanpham values('BB01','But bi','cay','Viet Nam',5000) insert into sanpham values('BB02','But bi','cay','Trung Quoc',7000) insert into sanpham values('BB03','But bi','hop','Thai Lan',100000) insert into sanpham values('TV01','Tap 100 giay mong','quyen','Trung Quoc',2500) insert into sanpham values('TV02','Tap 200 giay mong','quyen','Trung Quoc',4500) insert into sanpham values('TV03','Tap 100 giay tot','quyen','Viet Nam',3000) insert into sanpham values('TV04','Tap 200 giay tot','quyen','Viet Nam',5500) insert into sanpham values('TV05','Tap 100 trang','chuc','Viet Nam',23000) insert into sanpham values('TV06','Tap 200 trang','chuc','Viet Nam',53000) insert into sanpham values('TV07','Tap 100 trang','chuc','Trung Quoc',34000) insert into sanpham values('ST01','So tay 500 trang','quyen','Trung Quoc',40000) insert into sanpham values('ST02','So tay loai 1','quyen','Viet Nam',55000) insert into sanpham values('ST03','So tay loai 2','quyen','Viet Nam',51000) insert into sanpham values('ST04','So tay','quyen','Thai Lan',55000) insert into sanpham values('ST05','So tay mong','quyen','Thai Lan',20000) insert into sanpham values('ST06','Phan viet bang','hop','Viet Nam',5000) insert into sanpham values('ST07','Phan khong bui','hop','Viet Nam',7000) insert into sanpham values('ST08','Bong bang','cai','Viet Nam',1000) insert into sanpham values('ST09','But long','cay','Viet Nam',5000) insert into sanpham values('ST10','But long','cay','Trung Quoc',7000) ------------------------------- -- HOADON insert into hoadon values(1001,'23/07/2006','KH01','NV01',320000) insert into hoadon values(1002,'12/08/2006','KH01','NV02',840000) insert into hoadon values(1003,'23/08/2006','KH02','NV01',100000) insert into hoadon values(1004,'01/09/2006','KH02','NV01',180000) insert into hoadon values(1005,'20/10/2006','KH01','NV02',3800000) insert into hoadon values(1006,'16/10/2006','KH01','NV03',2430000) insert into hoadon values(1007,'28/10/2006','KH03','NV03',510000) insert into hoadon values(1008,'28/10/2006','KH01','NV03',440000) insert into hoadon values(1009,'28/10/2006','KH03','NV04',200000) insert into hoadon values(1010,'01/11/2006','KH01','NV01',5200000) insert into hoadon values(1011,'04/11/2006','KH04','NV03',250000) insert into hoadon values(1012,'30/11/2006','KH05','NV03',21000) insert into hoadon values(1013,'12/12/2006','KH06','NV01',5000) insert into hoadon values(1014,'31/12/2006','KH03','NV02',3150000) insert into hoadon values(1015,'01/01/2007','KH06','NV01',910000) insert into hoadon values(1016,'01/01/2007','KH07','NV02',12500) insert into hoadon values(1017,'02/01/2007','KH08','NV03',35000) insert into hoadon values(1018,'13/01/2007','KH08','NV03',330000) insert into hoadon values(1019,'13/01/2007','KH01','NV03',30000) insert into hoadon values(1020,'14/01/2007','KH09','NV04',70000) insert into hoadon values(1021,'16/01/2007','KH10','NV03',67500) insert into hoadon values(1022,'16/01/2007',Null,'NV03',7000) insert into hoadon values(1023,'17/01/2007',Null,'NV01',330000) ------------------------------- -- CTHD insert into cthd values(1001,'TV02',10) insert into cthd values(1001,'ST01',5) insert into cthd values(1001,'BC01',5) insert into cthd values(1001,'BC02',10) insert into cthd values(1001,'ST08',10) insert into cthd values(1002,'BC04',20) insert into cthd values(1002,'BB01',20) insert into cthd values(1002,'BB02',20) insert into cthd values(1003,'BB03',10) insert into cthd values(1004,'TV01',20) insert into cthd values(1004,'TV02',10) insert into cthd values(1004,'TV03',10) insert into cthd values(1004,'TV04',10) insert into cthd values(1005,'TV05',50) insert into cthd values(1005,'TV06',50) insert into cthd values(1006,'TV07',20) insert into cthd values(1006,'ST01',30) insert into cthd values(1006,'ST02',10) insert into cthd values(1007,'ST03',10) insert into cthd values(1008,'ST04',8) insert into cthd values(1009,'ST05',10) insert into cthd values(1010,'TV07',50) insert into cthd values(1010,'ST07',50) insert into cthd values(1010,'ST08',100) insert into cthd values(1010,'ST04',50) insert into cthd values(1010,'TV03',100) insert into cthd values(1011,'ST06',50) insert into cthd values(1012,'ST07',3) insert into cthd values(1013,'ST08',5) insert into cthd values(1014,'BC02',80) insert into cthd values(1014,'BB02',100) insert into cthd values(1014,'BC04',60) insert into cthd values(1014,'BB01',50) insert into cthd values(1015,'BB02',30) insert into cthd values(1015,'BB03',7) insert into cthd values(1016,'TV01',5) insert into cthd values(1017,'TV02',1) insert into cthd values(1017,'TV03',1) insert into cthd values(1017,'TV04',5) insert into cthd values(1018,'ST04',6) insert into cthd values(1019,'ST05',1) insert into cthd values(1019,'ST06',2) insert into cthd values(1020,'ST07',10) insert into cthd values(1021,'ST08',5) insert into cthd values(1021,'TV01',7) insert into cthd values(1021,'TV02',10) insert into cthd values(1022,'ST07',1) insert into cthd values(1023,'ST04',6) ---------------------------------------------------------------- ---------------------------------------------------------------- SELECT * FROM KHACHHANG SELECT * FROM NHANVIEN SELECT * FROM SANPHAM SELECT * FROM HOADON SELECT * FROM CTHD
2. Bảng thuộc tính của CSDL quản lý bán hàng
Quan hệ | Thuộc tính | Diễn giải | Kiểu dữ liệu |
KHACHHANG | MAKH | Mã khách hàng | char(4) |
HOTEN | Họ tên | varchar(40) | |
DCHI | Địa chỉ | varchar(50) | |
SODT | Số điện thọai | varchar(20) | |
NGSINH | Ngày sinh | smalldatetime | |
NGDK | Ngày đăng ký thành viên | smalldatetime | |
DOANHSO | Tổng trị giá các hóa đơn khách hàng đã mua | money | |
NHANVIEN | MANV | Mã nhân viên | char(4) |
HOTEN | Họ tên | varchar(40) | |
SODT | Số điện thoại | varchar(20) | |
NGVL | Ngày vào làm | smalldatetime | |
SANPHAM | MASP | Mã sản phẩm | char(4) |
TENSP | Tên sản phẩm | varchar(40) | |
DVT | Đơn vị tính | varchar(20) | |
NUOCSX | Nước sản xuất | varchar(40) | |
GIA | Giá bán | money | |
HOADON | SOHD | Số hóa đơn | int |
NGHD | Ngày mua hàng | smalldatetime | |
MAKH | Mã khách hàng nào mua | char(4) | |
MANV | Nhân viên bán hàng | char(4) | |
TRIGIA | Trị giá hóa đơn | money | |
CTHD | SOHD | Số hóa đơn | int |
MASP | Mã sản phẩm | char(4) | |
SL | Số lượng | int |
3. Bài tập truy vấn SQL dựa trên CSDL quản lí bán hàng
1. In ra danh sách các sản phẩm chỉ lấy (MASP,TENSP) do “Trung Quoc” sản xuất.
SELECT MASP,TENSP, NUOCSX FROM SANPHAM WHERE NUOCSX = 'TRUNG QUOC'
2. In ra danh sách các sản phẩm chỉ lấy (MASP, TENSP) có đơn vị tính là “cay”, ”quyen”
Câu này bạn có thể so sánh bằng trực tiếp tương tự như câu trên bằng cách tình những dòng thỏa DVT = ‘CAY’ OR DVT = ‘QUYEN’
SELECT MASP,TENSP FROM SANPHAM WHERE DVT = 'CAY' OR DVT = 'QUYEN'
Hoặc bạn có thể sử dụng tập hợp trong trường hợp này
SELECT MASP,TENSP FROM SANPHAM WHERE DVT IN ('CAY','QUYEN')
3. In ra danh sách các sản phẩm (MASP,TENSP) có mã sản phẩm bắt đầu là “B” và kết thúc là “01”.
SELECT MASP, TENSP FROM SANPHAM WHERE MASP LIKE 'B%01'
4. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quốc” sản xuất có giá từ 30.000 đến 40.000.
SELECT MASP,TENSP, NUOCSX,GIA FROM SANPHAM WHERE NUOCSX = 'TRUNG QUOC' AND GIA>=30000 AND GIA<=40000
Sử dụng BETWEEN để thay cho GIA>=30000 AND GIA<=40000
SELECT MASP,TENSP, NUOCSX,GIA FROM SANPHAM WHERE NUOCSX = 'TRUNG QUOC' AND GIA BETWEEN 30000 AND 40000
5. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quoc” hoặc “Viet Nam” sản xuất có giá từ 30.000 đến 40.000.
SELECT MASP,TENSP, NUOCSX,GIA FROM SANPHAM WHERE (NUOCSX = 'TRUNG QUOC' OR NUOCSX = 'VIET NAM') AND GIA>=30000 AND GIA<=40000
Hoặc sử dụng lệnh BEETWEEN và tập hợp như sau:
SELECT MASP,TENSP, NUOCSX,GIA FROM SANPHAM WHERE NUOCSX in ('VIET NAM', 'TRUNG QUOC') AND GIA BETWEEN 30000 AND 40000
6. In ra các số hóa đơn, trị giá hóa đơn bán ra trong ngày 1/1/2007 và ngày 2/1/2007.
SELECT SOHD,TRIGIA FROM HOADON WHERE NGHD = '1/1/2007' OR NGHD = '2/1/2007'
Hoặc sử dụng tập hợp như sau:
SELECT SOHD,TRIGIA FROM HOADON WHERE NGHD in ('1/1/2007','2/1/2007')
7. In ra các số hóa đơn, trị giá hóa đơn trong tháng 1/2007, sắp xếp theo ngày (tăng dần) và trị giá của hóa đơn (giảm dần).
SELECT SOHD,NGHD,TRIGIA FROM HOADON WHERE MONTH(NGHD)=1 AND YEAR(NGHD)=2007 ORDER BY NGHD ASC, TRIGIA DESC
Các bạn lấy tháng và năm bằng hàm Month và Year
Sắp xếp các dòng bằng cách sử dụng ORDER BY <tên thuộc tính> <cách sắp xếp ASC(tăng dần)|DESC(giảm dần)>
8. In ra danh sách các khách hàng (MAKH, HOTEN) đã mua hàng trong ngày 1/1/2007.
SELECT KHACHHANG.MAKH,HOTEN FROM KHACHHANG JOIN HOADON ON KHACHHANG.MAKH = HOADON.MAKH WHERE NGHD = '1/1/2007'
Hoặc
SELECT KHACHHANG.MAKH,HOTEN FROM KHACHHANG, HOADON WHERE KHACHHANG.MAKH = HOADON.MAKH and HOADON.NGHD = '1/1/2007'
9. In ra số hóa đơn, trị giá các hóa đơn do nhân viên có tên “Nguyen Van B” lập trong ngày 28/10/2006.
SELECT HOADON.SOHD, HOADON.TRIGIA FROM NHANVIEN, HOADON WHERE NHANVIEN.HOTEN = 'Nguyen Van B' AND NHANVIEN.MANV = HOADON.MANV AND HOADON.NGHD = '28/10/2006'
10. In ra danh sách các sản phẩm (MASP,TENSP) được khách hàng có tên “Nguyen Van A” mua trong tháng 10/2006.
SELECT sp.MASP, sp.TENSP FROM KHACHHANG kh, HOADON hd, CTHD ct, SANPHAM sp WHERE kh.HOTEN='Nguyen Van A' AND hd.MAKH = kh.MAKH AND year(hd.NGHD)=2006 AND month(hd.NGHD)=10 AND ct.SOHD=hd.SOHD AND sp.MASP=ct.MASP
ad cho em hỏi, phần trị giá hoá đơn ấy ạ, mình có thể làm theo hướng (số lượng sp1*đơn giá)+ (số lượng sp2)*đơn giá 2 +(…) ko ạ? Và nếu có thì mình có thể làm như thế nào ạ?
câu 5 em ko hiểu chỗ này:
WHERE(NUOCSX = ‘TRUNG QUOC’ OR NUOCSX = ‘VIET NAM’) vì sao lại để dấu ngoặc đơn ở trước (NUOCSX = ‘TRUNG QUOC’ OR NUOCSX = ‘VIET NAM’) vậy
Ghi sao mà không được em :p
[CSDL] BT Thực hành 1 truy vấn SQL – Phần 2 sao phần này mình không coi được vậy ad?