Bài tập đại số quan hệ cơ sở dữ liệu có lời giải

You're Reading a Free Preview
Pages 4 to 6 are not shown in this preview.

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.

Bài tập đại số quan hệ cơ sở dữ liệu có lời giải

Bài tập đại số quan hệ cơ sở dữ liệu có lời giải

Bài tập đại số quan hệ cơ sở dữ liệu có lời giải

Bài tập đại số quan hệ cơ sở dữ liệu có lời giải

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

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 LIEUALTER 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 GHICHUALTER 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_C11ON KHACHHANGFOR UPDATEAS 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_C11ON HOADONFOR INSERT,UPDATEAS 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_C12ON NHANVIENFOR UPDATEAS 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_C12ON HOADONFOR INSERT,UPDATEAS 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_C13ON CTHDFOR DELETE,UPDATEAS 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_C13ON HOADONFOR INSERTAS

 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_C14ON HOADONFOR INSERTAS 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_C14ON HOADONFOR INSERTAS 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_C14ON CTHDFOR INSERTAS 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_C14ON CTHDFOR DELETEAS 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_C14ON CTHDFOR UPDATEAS 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_C14ON  HOADONFOR  INSERTAS 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_C15ON KHACHHANGFOR INSERTAS

 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_C15ON KHACHHANGFOR UPDATEAS 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_C15ON HOADONFOR INSERTAS 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_C15ON HOADONFOR DELETEAS 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_C15ON HOADONFOR UPDATEAS 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,TENSPFROM  SANPHAMWHERE NUOCSX='TRUNG QUOC'--CAU 2)SELECT MASP,TENSPFROM  SANPHAMWHERE DVT='CAY' OR DVT='QUYEN'--CAU 3)SELECT MASP,TENSPFROM  SANPHAMWHERE MASP LIKE 'B%01'--CAU 4)SELECT MASP,TENSPFROM  SANPHAMWHERE NUOCSX='TRUNG QUOC' AND GIA BETWEEN 30000 AND 40000--CAU 5)SELECT MASP,TENSPFROM  SANPHAMWHERE (NUOCSX='TRUNG QUOC' OR NUOCSX='THAI LAN') AND GIA BETWEEN 30000 AND 40000--CAU 6)SELECT SOHD,TRIGIAFROM  HOADONWHERE NGHD='1/1/2007' OR NGHD='2/1/2007'--CAU 7)SELECT SOHD,TRIGIAFROM  HOADONWHERE MONTH(NGHD)=1 AND YEAR(NGHD)=2007ORDER BY  NGHD ASC,TRIGIA DESC--CAU 8)SELECT A.MAKH,HOTENFROM  HOADON A, KHACHHANG BWHERE A.MAKH=B.MAKH AND NGHD='1/1/2007'--CAU 9)SELECT SOHD,TRIGIAFROM  HOADON A, NHANVIEN BWHERE A.MANV=B.MANV AND NGHD='28/10/2006' AND HOTEN='NGUYEN VAN B' --CAU 10)SELECT C.MASP, TENSPFROM  HOADON A, KHACHHANG B, CTHD C, SANPHAM DWHERE 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 SOHDFROM  CTHDWHERE MASP='BB01'OR MASP='BB02'--CAU 12)SELECT SOHDFROM  CTHDWHERE (MASP='BB01'OR MASP='BB02') AND SL BETWEEN 10 AND 20--CAU 13)SELECT SOHDFROM  CTHDWHERE SL BETWEEN 10 AND 20 AND MASP='BB01'  AND SOHD IN (  SELECT SOHD     FROM  CTHD     WHERE MASP='BB02')--CAU 14)SELECT DISTINCT A.MASP,TENSPFROM  SANPHAM A, HOADON B, CTHD CWHERE NUOCSX='TRUNG QUOC' OR  (B.SOHD=C.SOHD AND C.MASP=A.MASP AND NGHD='1/1/2007') --CAU 15)SELECT MASP, TENSPFROM  SANPHAMWHERE MASP NOT IN ( SELECT MASP     FROM  CTHD)--CAU 16)SELECT MASP, TENSPFROM  SANPHAMWHERE MASP NOT IN ( SELECT A.MASP     FROM  CTHD A, HOADON B     WHERE A.SOHD=B.SOHD AND YEAR(NGHD)=2006)--CAU 17)SELECT MASP, TENSPFROM  SANPHAMWHERE 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 SOHDFROM  CTHD AWHERE 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  HOADONWHERE MAKH IS NULL--CAU 21)SELECT COUNT(DISTINCT MASP)FROM  HOADON A, CTHD BWHERE 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  HOADONWHERE YEAR(NGHD)=2006--CAU 24)SELECT SUM(TRIGIA) [DOANH THU]FROM  HOADONWHERE YEAR(NGHD)=2006--CAU 27)SELECT *FROM  KHACHHANGWHERE DOANHSO IN(SELECT TOP 3 DOANHSO    FROM   KHACHHANG    ORDER BY   DOANHSO DESC)  --CAU 28)SELECT *FROM  SANPHAMWHERE GIA IN(SELECT TOP 3  GIA    FROM   SANPHAM    ORDER BY   GIA DESC)  --CAU 29)SELECT *FROM  SANPHAMWHERE NUOCSX='THAI LAN' AND GIA IN(SELECT TOP 3  GIA        FROM   SANPHAM        ORDER BY   GIA DESC) --CAU 30)SELECT *FROM  SANPHAMWHERE NUOCSX='TRUNG QUOC' AND GIA IN(SELECT TOP 3  GIA        FROM   SANPHAM        WHERE  NUOCSX='TRUNG QUOC'        ORDER BY   GIA DESC) --CAU 31)SELECT *FROM  KHACHHANGWHERE DOANHSO IN(SELECT TOP 3 DOANHSO    FROM   KHACHHANG    ORDER BY   DOANHSO DESC)  ORDER BY DOANHSO DESC--CAU 32)SELECT COUNT(MASP)FROM  SANPHAMWHERE NUOCSX='TRUNG QUOC'--CAU 33)SELECT NUOCSX,COUNT(MASP) [SO SAN PHAM]FROM  SANPHAMGROUP BY  NUOCSX--CAU 34)SELECT NUOCSX,MIN(GIA) [GIA THAP NHAT], AVG(GIA) [GIA TB], MAX(GIA) [GIA CAO NHAT]FROM  SANPHAMGROUP BY  NUOCSX--CAU 35)SELECT NGHD,SUM(TRIGIA) [DOANH THU]FROM  HOADONGROUP BY  NGHD--CAU 36)SELECT MASP,SUM(SL) [TONG SO LUONG]FROM  HOADON A, CTHD BWHERE 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 BWHERE A.SOHD=B.SOHD AND YEAR(NGHD)=2006 GROUP BY MONTH(NGHD)--CAU 38)SELECT *FROM  HOADONWHERE SOHD IN (SELECT SOHD    FROM  CTHD    GROUP BY SOHD    HAVING COUNT(DISTINCT MASP)>=4)--CAU 39)SELECT *FROM  HOADONWHERE 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  KHACHHANGWHERE 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) THANGFROM  HOADONWHERE YEAR(NGHD)=2006GROUP 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, TENSPFROM  SANPHAM A,CTHD B, HOADON CWHERE A.MASP=B.MASP AND B.SOHD=C.SOHD AND YEAR(NGHD)=2006GROUP BY B.MASP,TENSPHAVING 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, TENSPFROM  SANPHAM AWHERE GIA=(SELECT MAX(GIA)   FROM  SANPHAM B   WHERE A.NUOCSX=B.NUOCSX)GROUP BY NUOCSX,MASP,TENSP--CAU 44)SELECT NUOCSXFROM  SANPHAMGROUP BY NUOCSXHAVING COUNT(DISTINCT GIA)>=3--CAU 45)SELECT *FROM  KHACHHANGWHERE 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