Bài tập Cơ Sở Dữ Liệu Có Lời Giải – Phan Nguyễn Thụy An – UIT

Bài tập Cơ Sở Dữ Liệu
Phan Nguyễn Thụy An

Bài tập 1:
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 à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 à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 iệ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, hâ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 iê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.

I. Ngôn ngữ định nghĩa dữ liệu (Data Definition Language):1. Tạo các quan hệ và khai báo các khóa chính, khóa ngoại của quan hệ.2. Thêm vào thuộc tính GHICHU có kiểu dữ liệu varchar(20) cho quan hệ SANPHAM.3. Thêm vào thuộc tính LOAIKH có kiểu dữ liệu là tinyint cho quan hệ KHACHHANG.4. Sửa kiểu dữ liệu của thuộc tính GHICHU trong quan hệ SANPHAM thành varchar(100).5. Xóa thuộc tính GHICHU trong quan hệ SANPHAM.6. Làm thế nào để thuộc tính LOAIKH trong quan hệ KHACHHANG có thể lưu các giá trị là: “Vang ai”, “Thuong xuyen”, “Vip”, …7. Đơn vị tính của sản phẩm chỉ có thể là (“cây”,”hộp”,”cái”,”quyển”,”chục”)8. Giá bán của sản phẩm từ 500 đồng trở lên.9. Mỗi lần mua hàng, khách hàng phải mua ít nhất 1 sản phẩm.10. Ngày gia nhập của khách hàng thành viên phải lớn hơn ngày sinh của người đó.11. Ngày mua hàng (NGHD) của một khách hàng thành viên sẽ lớn hơn hoặc bằng ngày khách hàng đó ăng ký thành viên (NGDK).12. Ngày bán hàng (NGHD) của một nhân viên phải lớn hơn hoặc bằng ngày nhân viên đó vào làm.13. Mỗi một hóa đơn phải có ít nhất một chi tiết hóa đơn.14. Trị giá của một hóa đơn là tổng thành tiền (số lượng*đơn giá) của các chi tiết thuộc hóa đơn đó.15. Doanh số của một khách hàng là tổng trị giá các hóa đơn mà khách hàng thành viên đó đã mua.II. Ngôn ngữ thao tác dữ liệu (Data Manipulation Language):1. Nhập dữ liệu cho các quan hệ trên.2. Cập nhật giá tăng 5% đối với những sản phẩm do “Thai Lan” sản xuất.3. Cập nhật giá giảm 5% đối với những sản phẩm do “Trung Quoc” sản xuất có giá từ 10.000 trở xuống.4. Cập nhật giá trị LOAIKH là “Vip” đối với những khách hàng đăng ký thành viên trước ngày 1/1/2007 ó doanh số từ 10.000.000 trở lên hoặc khách hàng đăng ký thành viên từ 1/1/2007 trở về sau có doanh ố từ 2.000.000 trở lên.III. Viết các câu truy vấn:1. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quốc” sản xuất.2. In ra danh sách các sản phẩm (MASP, TENSP) có đơn vị tính là “cây”, ”quyển”.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”.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ừ 20.000 đến 30.000.5. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quốc” hoặc “Thái Lan” sản xuất có giá từ20.000 đến 30.000.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.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 óa đơn (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.9. In ra danh sách các sản phẩm (MASP,TENSP) được khách hàng có tên “Nguyễn Văn A” mua trong háng 10/2006.10. In ra số hóa đơn, trị giá các hóa đơn do nhân viên có tên “Nguyễn Văn B” lập trong ngày 10/10/2006.11. Tìm các số hóa đơn đã mua sản phẩm có mã số “BB01” hoặc “BB02”.12. Tìm các số hóa đơn đã mua sản phẩm có mã số “BB01” hoặc “BB02”, mỗi sản phẩm mua với số ượng từ 10 đến 20.13. Tìm các số hóa đơn mua cùng lúc 2 sản phẩm có mã số “BB01” và “BB02”, mỗi sản phẩm mua với số ượng từ 10 đến 20.14. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quốc” sản xuất hoặc các sản phẩm được bán a trong ngày 1/1/2007.15. In ra danh sách các sản phẩm (MASP,TENSP) không bán được.16. In ra danh sách các sản phẩm (MASP,TENSP) không bán được trong năm 2006.17. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quốc” sản xuất không bán được trong năm 2006.18. Có bao nhiêu hóa đơn không phải của khách hàng đăng ký thành viên mua?19. Cho biết trị giá hóa đơn cao nhất, thấp nhất là bao nhiêu ?20. Trị giá trung bình của tất cả các hóa đơn được bán ra trong năm 2006 là bao nhiêu?21. Tính doanh thu bán hàng trong năm 2006.22. Tìm số hóa đơn có trị giá cao nhất trong năm 2006.23. Tìm họ tên khách hàng đã mua hóa đơn có trị giá cao nhất trong năm 2006.24. In ra danh sách 3 khách hàng (MAKH, HOTEN) có doanh số cao nhất.25. In ra danh sách các sản phẩm (MASP, TENSP) có giá bán bằng 1 trong 3 mức giá cao nhất.26. In ra danh sách các sản phẩm (MASP, TENSP) do “Trung Quốc” sản xuất có giá bằng 1 trong 3 mức iá thấp nhất (của tất cả các sản phẩm).27. In ra danh sách các sản phẩm (MASP, TENSP) do “Trung Quốc” sản xuất có giá bằng 1 trong 3 mức iá thấp nhất (của sản phẩm do “Trung Quốc” sản xuất).28. * In ra danh sách 3 khách hàng (MAKH, HOTEN) có doanh số cao nhất (sắp xếp theo kiểu xếp hạng).29. Tính tổng số sản phẩm do “Trung Quốc” sản xuất.30. Tính tổng số sản phẩm của từng nước sản xuất.31. Với từng nước sản xuất, tìm giá bán cao nhất, thấp nhất, trung bình của các sản phẩm.32. Tính doanh thu bán hàng mỗi ngày.33. Tính tổng số lượng của từng sản phẩm bán ra trong ngày 28/10/2006.34. Tính doanh thu bán hàng của từng tháng trong năm 2006.35. Tìm khách hàng (MAKH, HOTEN) có số lần mua hàng nhiều nhất.36. Tìm sản phẩm (MASP, TENSP) có tổng số lượng bán ra thấp nhất trong năm 2006.37. Tháng mấy trong năm 2006, doanh số bán hàng thấp nhất ?38. Mỗi nước sản xuất, tìm sản phẩm (MASP,TENSP) có giá bán cao nhất.39. *Trong 10 khách hàng có doanh số cao nhất, tìm khách hàng có số lần mua hàng nhiều nhất.40. *Tìm nước sản xuất sản xuất ít nhất 3 sản phẩm có giá bán khác nhau

Gợi ý giải

CREATE TABLE KHACHHANG
(
 MAKH  char(4) PRIMARY KEY,
 HOTEN varchar(40),
 DCHI  varchar(50),
 SODT  varchar(20),
 NGSINH smalldatetime,
 NGDK  smalldatetime,
 DOANHSO money
)
CREATE TABLE NHANVIEN
(
 MANV  char(4)PRIMARY KEY,
 HOTEN varchar(40),
 SODT  varchar(20),
 NGVL  smalldatetime
)
CREATE TABLE SANPHAM
(
 MASP  char(4)PRIMARY KEY,
 TENSP varchar(40),
 DVT  varchar(20),
 NUOCSX varchar(40),
 GIA  money
)
CREATE TABLE HOADON
(
 SOHD  int PRIMARY KEY,
 NGHD  smalldatetime,
 MAKH  char(4) FOREIGN KEY REFERENCES KHACHHANG(MAKH),
 MANV  char(4) FOREIGN KEY REFERENCES NHANVIEN(MANV),
 TRIGIA money
)
CREATE TABLE CTHD
(
 SOHD  int FOREIGN KEY REFERENCES HOADON(SOHD),
 MASP  char(4) FOREIGN KEY REFERENCES SANPHAM(MASP),
 SL  int,
 CONSTRAINT PK_CTHD PRIMARY KEY (SOHD,MASP)
)
–I:DINH NGHIA DU LIEU
ALTER TABLE SANPHAM ADD GHICHU VARCHAR(20)
ALTER TABLE KHACHHANG ADD LOAIKH TINYINT 
ALTER TABLE SANPHAM ALTER COLUMN GHICHU VARCHAR(100)
ALTER TABLE SANPHAM DROP COLUMN GHICHU
ALTER TABLE KHACHHANG ALTER COLUMN LOAIKH VARCHAR(50)
ALTER TABLE SANPHAM ADD CONSTRAINT CHECK_DVT CHECK(DVT=’CAY’OR DVT=’CAI’OR DVT=’HOP’OR DVT=’QUYEN’OR DVT=’CHUC’)
ALTER TABLE SANPHAM ADD CONSTRAINT CHECK_GIA CHECK(GIA>=500)
ALTER TABLE KHACHHANG ADD CONSTRAINT CHECK_NGDK CHECK (NGDK>NGSINH)
 /*CAU 11*/
CREATE TRIGGER UPDATE_KH_C11
ON KHACHHANG
FOR UPDATE
AS
 DECLARE @NGDK SMALLDATETIME, 
   @NGHD SMALLDATETIME

 SELECT @NGDK=NGDK
 FROM  INSERTED
 
 IF(@NGDK>ANY(SELECT NGHD
    FROM  HOADON A, INSERTED I
    WHERE A.MAKH=I.MAKH))
  BEGIN
   ROLLBACK TRAN
   PRINT ‘ERROR!NGDK PHAI NHO HON NGHD’
  END
 ELSE
  PRINT’ SUCCESSFUL’
 ——-
CREATE TRIGGER HD_C11
ON HOADON
FOR INSERT,UPDATE
AS
 DECLARE @NGDK SMALLDATETIME, 
   @NGHD SMALLDATETIME

 SELECT @NGDK=NGDK,@NGHD=NGHD
 FROM  INSERTED I, KHACHHANG A
 WHERE I.MAKH=A.MAKH

 IF @NGHD<@NGDK
  BEGIN
   ROLLBACK TRAN
   PRINT ‘ERROR!NGHD PHAI LON HON NGDK’
  END
 ELSE
  PRINT’ SUCCESSFUL’
/*CAU 12*/
CREATE TRIGGER UPDATE_NV_C12
ON NHANVIEN
FOR UPDATE
AS
 DECLARE @NGVL SMALLDATETIME, 
   @NGHD SMALLDATETIME

 SELECT @NGVL=NGVL
 FROM  INSERTED
 
 IF(@NGVL>ANY(SELECT NGHD
    FROM  HOADON A, INSERTED I
    WHERE A.MANV=I.MANV))
  BEGIN
   ROLLBACK TRAN
   PRINT ‘ERROR!NGVL PHAI NHO HON NGHD’
  END
 ELSE
  PRINT’ SUCCESSFUL’
 ——-
CREATE TRIGGER HD_C12
ON HOADON
FOR INSERT,UPDATE
AS
 DECLARE @NGVL SMALLDATETIME, 
   @NGHD SMALLDATETIME

 SELECT @NGVL=NGVL,@NGHD=NGHD
 FROM  INSERTED I, NHANVIEN A
 WHERE I.MANV=A.MANV

 IF @NGHD<@NGVL
  BEGIN
   ROLLBACK TRAN
   PRINT ‘ERROR!NGHD PHAI LON HON NGVL’
  END
 ELSE
  PRINT’ SUCCESSFUL’
/*CAU 13*/
CREATE TRIGGER CTHD_C13
ON CTHD
FOR DELETE,UPDATE
AS
 DECLARE @SL  INT,
   @SOHD INT

 SELECT @SL=COUNT(A.SOHD),@SOHD=D.SOHD
 FROM  DELETED D,CTHD A
 WHERE A.SOHD=D.SOHD
 GROUP BY  D.SOHD

 IF(@SL<1)
  BEGIN
   DELETE FROM HOADON
   WHERE  SOHD=@SOHD
   PRINT ‘DA DELETE CTHD CUOI CUNG CUA HOADON TREN’
  END 
 ——
CREATE TRIGGER HOADON_C13
ON HOADON
FOR INSERT
AS
 DECLARE @SOHD INT

 SELECT @SOHD=SOHD
 FROM  INSERTED
 
 UPDATE CTHD
 SET  MASP=’NONE’,SL=0
 WHERE SOHD=@SOHD

 PRINT ‘SUCCESSFUL! DE NGHI UPDATE LAI CTHD(MAC DINH:MASP=”NONE”, SL=0)’
/*CAU 14*/
CREATE TRIGGER INSERT_HOADON_C14
ON HOADON
FOR INSERT
AS
 UPDATE HOADON
 SET  TRIGIA=0
 WHERE SOHD=(SELECT  SOHD
    FROM  INSERTED)
 PRINT’DA INSERT 1 HOADON VOI TRIGIA BAN DAU LA 0 VND’ 
 ————-
CREATE TRIGGER UPDATE_HOADON_C14
ON HOADON
FOR INSERT
AS
 UPDATE HOADON
 SET  TRIGIA=(SELECT TRIGIA
     FROM DELETED)
 WHERE SOHD=(SELECT  SOHD
    FROM  INSERTED)
 PRINT’DA UPDATE 1 HOADON VOI TRIGIA KHONG THAY DOI’
 ————-
CREATE TRIGGER INSERT_CTHD_C14
ON CTHD
FOR INSERT
AS
 DECLARE  @SL  INT,
   @GIA  MONEY,
   @SOHD INT

 SELECT @GIA=GIA,@SL=SL,@SOHD=SOHD
 FROM  INSERTED A, SANPHAM B
 WHERE A.MASP=B.MASP

 UPDATE HOADON
 SET  TRIGIA=TRIGIA+@SL*@GIA
  PRINT’DA INSERT 1 CTHD VA UPDATE LAI TRIGIA CUA HOADON TUONG UNG’
 ————–
CREATE TRIGGER DELETE_CTHD_C14
ON CTHD
FOR DELETE
AS
 DECLARE  @SL  INT,
   @GIA  MONEY,
   @SOHD INT

 SELECT @GIA=GIA,@SL=SL,@SOHD=SOHD
 FROM  DELETED A, SANPHAM B
 WHERE A.MASP=B.MASP

 UPDATE HOADON
 SET  TRIGIA=TRIGIA-@SL*@GIA
  PRINT’DA DELETE 1 CTHD VA UPDATE LAI TRIGIA CUA HOADON TUONG UNG’
 ——————-
CREATE TRIGGER UPDATE_CTHD_C14
ON CTHD
FOR UPDATE
AS
 DECLARE  @SL_CU INT,
   @SL_MOI INT,   
   @GIA_CU MONEY,
   @GIA_MOI MONEY,
   @SOHD_CU INT,
   @SOHD_MOI INT

 SELECT @GIA_CU=GIA,@SL_CU=SL,@SOHD_CU=SOHD
 FROM  DELETED A, SANPHAM B
 WHERE A.MASP=B.MASP
 
 SELECT @GIA_MOI=GIA,@SL_MOI=SL,@SOHD_MOI=SOHD
 FROM  INSERTED A, SANPHAM B
 WHERE A.MASP=B.MASP

 IF(@SOHD_CU=@SOHD_MOI)
  BEGIN
   UPDATE HOADON
   SET  TRIGIA=TRIGIA+@SL_MOI*@GIA_MOI-@SL_CU*@GIA_CU
   WHERE SOHD=@SOHD_CU
  END
 ELSE
  BEGIN
   UPDATE HOADON
   SET  TRIGIA=TRIGIA-@SL_CU*@GIA_CU
   WHERE SOHD=@SOHD_CU

   UPDATE HOADON
   SET  TRIGIA=TRIGIA+@SL_MOI*@GIA_MOI
   WHERE SOHD=@SOHD_MOI
  END
 PRINT’DA UPDATE 1 CTHD VA UPDATE LAI TRIGIA CUA HOADON TUONG UNG’
 ——————-
CREATE TRIGGER UPDATE_HOADON_C14
ON  HOADON
FOR  INSERT
AS
 DECLARE @GIA_CU MONEY,
   @GIA_MOI MONEY,
   @SOHD INT,
   @SL  INT
   
 SELECT @GIA_CU=GIA
 FROM  DELETED
 SELECT @GIA_MOI=GIA
 FROM  INSERTED

 SELECT @SOHD=SOHD,@SL=SL
 FROM  INSERTED A, CTHD B
 WHERE A.MASP=B.MASP

 UPDATE HOADON
 SET  TRIGIA=TRIGIA+@SL*(@GIA_MOI-@GIA_CU) 
 WHERE SOHD=@SOHD
  PRINT’DA UPDATE 1 HOADON VOI TRIGIA KHONG THAY DOI’
/*CAU 15*/
CREATE TRIGGER INSERT_KHACHHANG_C15
ON KHACHHANG
FOR INSERT
AS
 DECLARE @MAKH CHAR(4)

 SELECT @MAKH=MAKH
 FROM  INSERTED
 
 UPDATE KHACHHANG
 SET  DOANHSO=0
 WHERE MAKH=@MAKH

 PRINT ‘DA INSERT 1 KHACHHANG MOI VOI DOANHSO BAN DAU LA 0 VND’
 —————-
CREATE TRIGGER UPDATE_KHACHHANG_C15
ON KHACHHANG
FOR UPDATE
AS
 DECLARE @MAKH  CHAR(4),
   @DOANHSO_CU MONEY

 SELECT @MAKH=MAKH
 FROM  INSERTED
 
 SELECT @DOANHSO_CU=DOANHSO
 FROM  DELETED
 
 UPDATE KHACHHANG
 SET  DOANHSO=@DOANHSO_CU
 WHERE MAKH=@MAKH

 PRINT ‘DA UPDATE 1 KHACHHANG’
 —————-
CREATE TRIGGER INSERT_HOADON_C15
ON HOADON
FOR INSERT
AS
 DECLARE @TRIGIA MONEY,
   @MAKH CHAR(4)

 SELECT @MAKH=MAKH,@TRIGIA=TRIGIA
 FROM  INSERTED
 
 UPDATE KHACHHANG
 SET  DOANHSO=DOANHSO+@TRIGIA
 WHERE MAKH=@MAKH

 PRINT ‘DA INSERT 1 HODON MOI VA UPDATE LAI DOANHSO CUA KH CO SOHD TREN’

 ———–
CREATE TRIGGER DELETE_HOADON_C15
ON HOADON
FOR DELETE
AS
 DECLARE @TRIGIA MONEY,
   @MAKH CHAR(4)

 SELECT @MAKH=MAKH,@TRIGIA=TRIGIA
 FROM  DELETED
 
 UPDATE KHACHHANG
 SET  DOANHSO=DOANHSO-@TRIGIA
 WHERE MAKH=@MAKH

 PRINT ‘DA DELETE 1 HODON MOI VA UPDATE LAI DOANHSO CUA KH CO SOHD TREN’
 —————
CREATE TRIGGER UPDATE_HOADON_C15
ON HOADON
FOR UPDATE
AS
 DECLARE @TRIGIA_CU MONEY,
   @TRIGIA_MOI MONEY,
   @MAKH  CHAR(4)

 SELECT @MAKH=MAKH,@TRIGIA_MOI=TRIGIA
 FROM  INSERTED

 SELECT @MAKH=MAKH,@TRIGIA_CU=TRIGIA
 FROM  DELETED
  
 UPDATE KHACHHANG
 SET  DOANHSO=DOANHSO+@TRIGIA_MOI-@TRIGIA_CU
 WHERE MAKH=@MAKH

 PRINT ‘DA UPDATE 1 HOADON MOI VA UPDATE LAI DOANHSO CUA KH CO SOHD TREN’
————————–TRUY VAN DU LIEU—————————————————————–
–CAU 1)
SELECT MASP,TENSP
FROM  SANPHAM
WHERE NUOCSX=’TRUNG QUOC’
–CAU 2)
SELECT MASP,TENSP
FROM  SANPHAM
WHERE DVT=’CAY’ OR DVT=’QUYEN’
–CAU 3)
SELECT MASP,TENSP
FROM  SANPHAM
WHERE MASP LIKE ‘B%01’
–CAU 4)
SELECT MASP,TENSP
FROM  SANPHAM
WHERE NUOCSX=’TRUNG QUOC’ AND GIA BETWEEN 30000 AND 40000
–CAU 5)
SELECT MASP,TENSP
FROM  SANPHAM
WHERE (NUOCSX=’TRUNG QUOC’ OR NUOCSX=’THAI LAN’) AND GIA BETWEEN 30000 AND 40000
–CAU 6)
SELECT SOHD,TRIGIA
FROM  HOADON
WHERE NGHD=’1/1/2007′ OR NGHD=’2/1/2007′
–CAU 7)
SELECT SOHD,TRIGIA
FROM  HOADON
WHERE MONTH(NGHD)=1 AND YEAR(NGHD)=2007
ORDER BY  NGHD ASC,TRIGIA DESC
–CAU 8)
SELECT A.MAKH,HOTEN
FROM  HOADON A, KHACHHANG B
WHERE A.MAKH=B.MAKH AND NGHD=’1/1/2007′
–CAU 9)
SELECT SOHD,TRIGIA
FROM  HOADON A, NHANVIEN B
WHERE A.MANV=B.MANV AND NGHD=’28/10/2006′ AND HOTEN=’NGUYEN VAN B’ 
–CAU 10)
SELECT C.MASP, TENSP
FROM  HOADON A, KHACHHANG B, CTHD C, SANPHAM D
WHERE A.MAKH=B.MAKH AND A.SOHD=C.SOHD AND C.MASP=D.MASP AND
  MONTH(NGHD)=10 AND YEAR(NGHD)=2006 AND HOTEN=’NGUYEN VAN A’ 
–CAU 11)
SELECT SOHD
FROM  CTHD
WHERE MASP=’BB01’OR MASP=’BB02′
–CAU 12)
SELECT SOHD
FROM  CTHD
WHERE (MASP=’BB01’OR MASP=’BB02′) AND SL BETWEEN 10 AND 20
–CAU 13)
SELECT SOHD
FROM  CTHD
WHERE SL BETWEEN 10 AND 20 AND MASP=’BB01′
  AND SOHD IN (  SELECT SOHD
     FROM  CTHD
     WHERE MASP=’BB02′)
–CAU 14)
SELECT DISTINCT A.MASP,TENSP
FROM  SANPHAM A, HOADON B, CTHD C
WHERE NUOCSX=’TRUNG QUOC’ OR
  (B.SOHD=C.SOHD AND C.MASP=A.MASP AND NGHD=’1/1/2007′) 
–CAU 15)
SELECT MASP, TENSP
FROM  SANPHAM
WHERE MASP NOT IN ( SELECT MASP
     FROM  CTHD)
–CAU 16)
SELECT MASP, TENSP
FROM  SANPHAM
WHERE MASP NOT IN ( SELECT A.MASP
     FROM  CTHD A, HOADON B
     WHERE A.SOHD=B.SOHD AND YEAR(NGHD)=2006)
–CAU 17)
SELECT MASP, TENSP
FROM  SANPHAM
WHERE NUOCSX=’TRUNG QUOC’ AND
  MASP NOT IN ( SELECT A.MASP
     FROM  CTHD A, HOADON B
     WHERE A.SOHD=B.SOHD AND YEAR(NGHD)=2006)
–CAU 18)
SELECT DISTINCT SOHD
FROM  CTHD A
WHERE NOT EXISTS(SELECT *
    FROM  SANPHAM B
    WHERE NUOCSX=’SINGAPORE’ AND
      NOT EXISTS(SELECT *
        FROM  CTHD C
        WHERE C.MASP=B.MASP AND C.SOHD=A.SOHD))
–CAU 19)
–CAU 20)
SELECT COUNT(SOHD)
FROM  HOADON
WHERE MAKH IS NULL
–CAU 21)
SELECT COUNT(DISTINCT MASP)
FROM  HOADON A, CTHD B
WHERE A.SOHD=B.SOHD AND YEAR(NGHD)=2006
–CAU 22)
SELECT MAX(TRIGIA) [TRI GIA CAO NHAT],MIN(TRIGIA) [TRI GIA THAP NHAT] 
FROM  HOADON
–CAU 23)
SELECT AVG(TRIGIA)
FROM  HOADON
WHERE YEAR(NGHD)=2006
–CAU 24)
SELECT SUM(TRIGIA) [DOANH THU]
FROM  HOADON
WHERE YEAR(NGHD)=2006
–CAU 27)
SELECT *
FROM  KHACHHANG
WHERE DOANHSO IN(SELECT TOP 3 DOANHSO
    FROM   KHACHHANG
    ORDER BY   DOANHSO DESC)  
–CAU 28)
SELECT *
FROM  SANPHAM
WHERE GIA IN(SELECT TOP 3  GIA
    FROM   SANPHAM
    ORDER BY   GIA DESC)  
–CAU 29)
SELECT *
FROM  SANPHAM
WHERE NUOCSX=’THAI LAN’ AND GIA IN(SELECT TOP 3  GIA
        FROM   SANPHAM
        ORDER BY   GIA DESC) 
–CAU 30)
SELECT *
FROM  SANPHAM
WHERE NUOCSX=’TRUNG QUOC’ AND GIA IN(SELECT TOP 3  GIA
        FROM   SANPHAM
        WHERE  NUOCSX=’TRUNG QUOC’
        ORDER BY   GIA DESC) 
–CAU 31)
SELECT *
FROM  KHACHHANG
WHERE DOANHSO IN(SELECT TOP 3 DOANHSO
    FROM   KHACHHANG
    ORDER BY   DOANHSO DESC)  
ORDER BY DOANHSO DESC
–CAU 32)
SELECT COUNT(MASP)
FROM  SANPHAM
WHERE NUOCSX=’TRUNG QUOC’
–CAU 33)
SELECT NUOCSX,COUNT(MASP) [SO SAN PHAM]
FROM  SANPHAM
GROUP BY  NUOCSX
–CAU 34)
SELECT NUOCSX,MIN(GIA) [GIA THAP NHAT], AVG(GIA) [GIA TB], MAX(GIA) [GIA CAO NHAT]
FROM  SANPHAM
GROUP BY  NUOCSX
–CAU 35)
SELECT NGHD,SUM(TRIGIA) [DOANH THU]
FROM  HOADON
GROUP BY  NGHD
–CAU 36)
SELECT MASP,SUM(SL) [TONG SO LUONG]
FROM  HOADON A, CTHD B
WHERE A.SOHD=B.SOHD AND MONTH(NGHD)=10 AND YEAR(NGHD)=2006 
GROUP BY MASP 
–CAU 37)
SELECT MONTH(NGHD) THANG,SUM(TRIGIA) [DOANH THU]
FROM  HOADON A, CTHD B
WHERE A.SOHD=B.SOHD AND YEAR(NGHD)=2006 
GROUP BY MONTH(NGHD)
–CAU 38)
SELECT *
FROM  HOADON
WHERE SOHD IN (SELECT SOHD
    FROM  CTHD
    GROUP BY SOHD
    HAVING COUNT(DISTINCT MASP)>=4)
–CAU 39)
SELECT *
FROM  HOADON
WHERE SOHD IN (SELECT SOHD
    FROM  CTHD A, SANPHAM B
    WHERE A.MASP=B.MASP AND NUOCSX=’VIET NAM’
    GROUP BY SOHD
    HAVING COUNT(DISTINCT A.MASP)=3)
–CAU 40)
SELECT *
FROM  KHACHHANG
WHERE MAKH IN (SELECT MAKH
    FROM  HOADON
    GROUP BY MAKH
    HAVING COUNT(SOHD)>=ALL(SELECT  COUNT(SOHD)
          FROM  HOADON
          GROUP BY MAKH))
–CAU 41)
SELECT MONTH(NGHD) THANG
FROM  HOADON
WHERE YEAR(NGHD)=2006
GROUP BY MONTH(NGHD)
HAVING SUM(TRIGIA)>=ALL(SELECT SUM(TRIGIA)
     FROM  HOADON
     WHERE YEAR(NGHD)=2006
     GROUP BY MONTH(NGHD))
–CAU 42)
SELECT B.MASP, TENSP
FROM  SANPHAM A,CTHD B, HOADON C
WHERE A.MASP=B.MASP AND B.SOHD=C.SOHD AND YEAR(NGHD)=2006
GROUP BY B.MASP,TENSP
HAVING SUM(SL)>=ALL(SELECT  SUM(SL)
     FROM  CTHD A, HOADON B
     WHERE A.SOHD=B.SOHD AND YEAR(NGHD)=2006
     GROUP BY MASP)
–CAU 43)
SELECT NUOCSX,MASP, TENSP
FROM  SANPHAM A
WHERE GIA=(SELECT MAX(GIA)
   FROM  SANPHAM B
   WHERE A.NUOCSX=B.NUOCSX)
GROUP BY NUOCSX,MASP,TENSP
–CAU 44)
SELECT NUOCSX
FROM  SANPHAM
GROUP BY NUOCSX
HAVING COUNT(DISTINCT GIA)>=3
–CAU 45)
SELECT *
FROM  KHACHHANG
WHERE MAKH IN (SELECT A.MAKH
    FROM  HOADON A, KHACHHANG B
    WHERE A.MAKH=B.MAKH AND
      DOANHSO IN (SELECT TOP 10 DOANHSO
        FROM  KHACHHANG
        ORDER BY DOANHSO DESC) 
    GROUP BY A.MAKH
    HAVING COUNT(SOHD)>=ALL(SELECT  COUNT(SOHD)
          FROM  HOADON A, KHACHHANG B
          WHERE A.MAKH=B.MAKH AND
            DOANHSO IN (SELECT TOP 10 DOANHSO
               FROM  KHACHHANG
               ORDER BY DOANHSO DESC)  
          GROUP BY A.MAKH))

Link download bài tập , hướng dẫn giải 

Xem thêm tài liệu cơ sở dữ liệu