Thử giải đề thi SQL giữa kỳ. Mọi người tham khảo

Thảo luận trong 'SQL' bắt đầu bởi sunboy, 22 Tháng ba 2011.

  1. Offline

    sunboy

    • Thành viên sáng lập

    • No thing
    Số bài viết:
    1.616
    Đã được thích:
    1.340
    Điểm thành tích:
    1.000

    Đề thi

    [IMG]

    Yêu cầu:
    1. Hãy viết lệnh SQL để tạo cấu trúc các bảng trên với số lượng 1 lần mượn không quá 3 quyển.
    2.
    Lập danh sách những độc giả nam của lớp MM04A có mượn sách ở thư viện.
    3.
    Lập danh sách những độc giả của lớp MM04A có mượn sách ở thư viện nhưng chưa trả, gồm có các trường sau: MaDG, Hoten, Masach, Tensach, Ngaymuon, Ngayhen.
    4. Thống kê trong thư viện có bao nhiêu sách của mỗi tác giả.
    5. Lập danh sách liệt kê ngày có tổng số lượng sách được mượn lớn hơn tổng số lượng sách mà nhân viên “NV02” cho mượn.
    6. Tính tổng số sách do độc giả “Nguyễn Văn An” mượn nhưng chưa trả.
    7. Thêm một bản ghi mới vào bảng DMSach; dữ liệu phù hợp nhưng không được nhập giá trị null.
    8. Thay đổi ngày hẹn trả của độc giả “DG01” thành 1/7/2010; và xóa sách “Toán kinh tế” trong bảng DMSach.
    9. Tính số sách mượn trung bình trong 1 ngày.
    10. Liệt kê những sách trong thư viện nhưng chưa từng có người mượn, sắp xếp theo thứ tự tăng dần của tác giả.
    11. Hiển thị thông tin về cuốn sách được mượn nhiều nhất gồm: Masach, Tensach, tacgia.
    12. Hiển thị những cuốn sách lượng mượn trung bình trong 1 lần lớn hơn 2.
    13. Hiển thị những cuốn sách được mượn trong tháng 2 năm 2011.
    14. Tính tổng số lượng sách được mượn trong tháng 3 năm 2010.
    15. Hiển thị những độc giả chưa bao giờ mượn sách.




    Giải: (câu 9 thua, nên không đưa vô)

    PHP:

    -- bai tap quan ly thu vien
    -- cau 1--Hãy viết lệnh SQL để tạo cấu trúc các bảng trên với số lượng 1 lần mượn không quá 3 quyển.
    CREATE TABLE DMSACH
    (MASACH varchar(10not null constraint FK_DMS primary key,
    TENSACH varchar(100not null,
    TACGIA varchar(50not null,
    NHAXB varchar(100),
    NAMXB float(10),
    SOTRANG float(10));

    CREATE TABLE DOCGIA
    (MADG varchar(10not null constraint FK_DG primary key,
    HOTEN varchar(100not null,
    NGAYSINH datetime,
    GIOITINH varchar(10),
    DIACHI varchar(100),
    DIENTHOAI varchar(20));

    CREATE TABLE MUONTRA
    (MADG varchar(10not null references DOCGIA(MADG),
    MASACH varchar(10not null references DMSACH(MASACH),
    MANV varchar(10not null,
    NGAYMUON datetime not null,
    NGAYHEN datetime,
    NGAYTRA datetime,
    SOLUONG float(10not null check(SOLUONG<=3),
    GHICHU varchar(100),
    constraint FK_DKM primary key (MADG,MASACH,NGAYMUON));

    INSERT INTO DMSACH
    VALUES
    ('TM02','Quan tri du an','Nguyen Quang Dung','NXB Tai Chinh',2010,300);

    INSERT INTO DOCGIA
    VALUES
    ('DG01','Nguyen Van An',12/01/1990,'Nam','MM04A',0904636232);

    -- 
    cau 2--Lập danh sách những độc giả nam của lớp MM04A có mượn sách ở thư viện

    SELECT  DOCGIA.HOTENDOCGIA.DIACHIDOCGIA.GIOITINH
    FROM DOCGIA
    MUONTRA
    WHERE DOCGIA
    .MADG MUONTRA.MADG and DOCGIA.GIOITINH='Nam' and DOCGIA.DIACHI='MM04A'
    GROUP BY DOCGIA.HOTENDOCGIA.DIACHIDOCGIA.GIOITINH

    -- Cau 3--Lập danh sách những độc giả của lớp MM04A có mượn sách ở thư viện nhưng chưa trảgồm có các trường sauMaDGHotenMasachTensachNgaymuonNgayhen.
    SELECT MUONTRA.MADGDOCGIA.HOTENMUONTRA.MASACHDMSACH.TENSACHMUONTRA.NGAYMUONMUONTRA.NGAYHEN
    FROM DMSACH
    MUONTRADOCGIA
    WHERE MUONTRA
    .MADG DOCGIA.MADG and DMSACH.MASACH MUONTRA.MASACH and DOCGIA.DIACHI 'MM04A'
    and MUONTRA.NGAYTRA is null
    GROUP BY MUONTRA
    .MADGDOCGIA.HOTENMUONTRA.MASACHDMSACH.TENSACHMUONTRA.NGAYMUONMUONTRA.NGAYHEN

    --Cau 4--Thống kê trong thư viện có bao nhiêu sách của mỗi tác giả.
    SELECT DMSACH.TACGIACOUNT(DMSACH.MASACH) as SOLUONG
    FROM DMSACH
    GROUP BY DMSACH
    .TACGIA


    -- cau 5 --Lập danh sách liệt kê ngày có tổng số lượng sách được mượn lớn hơn tổng số lượng sách mà nhân viên “NV02” cho mượn.
    SELECT MUONTRA.NGAYMUONSUM(MUONTRA.SOLUONG) as TONGMUON
    FROM MUONTRA
    GROUP BY MUONTRA
    .NGAYMUON 
    HAVING SUM
    (MUONTRA.SOLUONG)>= (SELECT SUM(MUONTRA.SOLUONG) as TONG
    FROM MUONTRA
    WHERE MUONTRA
    .MANV='NV02')

    -- 
    cau 6-- Tính tổng số sách do độc giả “Nguyễn Văn An” mượn nhưng chưa trả.
    SELECT DOCGIA.HOTENSUM(MUONTRA.SOLUONG)
    FROM DOCGIAMUONTRA
    WHERE DOCGIA
    .HOTEN='Nguyen Van An' and DOCGIA.MADG=MUONTRA.MADG and MUONTRA.NGAYTRA is null
    GROUP BY DOCGIA
    .HOTEN

    --cau 7--Thêm một bản ghi mới vào bảng DMSachdữ liệu phù hợp nhưng không được nhập giá trị null.
    INSERT INTO DMSACH
    VALUES
    ('MM02','Thiet Ke Website voi Joomla!','Bui Tan Viet','VietHanITC',2011,350);

    --
    cau 8-- Thay đổi ngày hẹn trả của độc giả “DG01” thành 1/7/2010và xóa sách “Toán kinh tế” trong bảng DMSach.
    UPDATE MUONTRA
    SET MUONTRA
    .NGAYHEN=01/07/2010 WHERE MUONTRA.MADG='DG01'

    DELETE FROM DMSACH WHERE DMSACH.TENSACH='Toan Kinh Te'


    -- cau 10-- Liệt kê những sách trong thư viện nhưng chưa từng có người mượnsắp xếp theo thứ tự tăng dần của tác giả.

    SELECT DMSACH.MASACHDMSACH.TENSACH
    FROM DMSACH
    MUONTRA 
    WHERE DMSACH
    .MASACH not in (SELECT MUONTRA.MASACH FROM MUONTRA GROUP BY MUONTRA.MASACH)
    GROUP BY DMSACH.MASACHDMSACH.TENSACH
     ORDER BY 2 ASC

    -- cau 11 -- Hiển thị thông tin về cuốn sách được mượn nhiều nhất gồmMasachTensachtacgia.
    SELECT MUONTRA.MASACHDMSACH.TENSACHDMSACH.TACGIAMUONTRA.SOLUONG
    FROM MUONTRA
    ,DMSACH
    WHERE MUONTRA
    .MASACH DMSACH.MASACH and MUONTRA.SOLUONG = (select max(MUONTRA.SOLUONGFROM MUONTRA)
    -- 
    cau 12 --Hiển thị những cuốn sách lượng mượn trung bình trong 1 lần lớn hơn 2.

    SELECT MUONTRA
    .MASACHDMSACH.TENSACH
    FROM MUONTRA
    DMSACH
    WHERE MUONTRA
    .MASACH DMSACH.MASACH and MUONTRA.SOLUONG >=

    -- cau 13 -- Hiển thị những cuốn sách được mượn trong tháng 2 năm 2011.
    SELECT MUONTRA
    .MASACHDMSACH.TENSACHMUONTRA.NGAYMUON
    FROM MUONTRA
    DMSACH
    WHERE MUONTRA
    .MASACH DMSACH.MASACH and month(MUONTRA.NGAYMUON)=02

    -- cau 14 -- Tính tổng số lượng sách được mượn trong tháng 3 năm 2010.
    SELECT SUM
    (MUONTRA.SOLUONG)
    FROM MUONTRADMSACH
    WHERE MUONTRA
    .MASACH DMSACH.MASACH and month(MUONTRA.NGAYMUON) = 02 and year(MUONTRA.NGAYMUON) = 2010

    -- cau 15-- Hiển thị những độc giả chưa bao giờ mượn sách.
    SELECT DOCGIA.MADGDOCGIA.HOTEN
    FROM DOCGIA
    WHERE DOCGIA
    .MADG not in (SELECT MUONTRA.MADG FROM MUONTRA)
    GROUP BY DOCGIA.MADGDOCGIA.HOTEN
    haihung_9xchickenkon thích bài này.
  2. Offline

    Ronaldo

    • Friends

    Số bài viết:
    1.313
    Đã được thích:
    321
    Điểm thành tích:
    220
    mấy câu khó làm được hết trơn mà mình nghĩ câu dể nhất lại pó tay nhỉ.

    Câu9
    câu 9 ngắn củn cởn ^!^
    chickenkon thích bài này.
  3. Offline

    sunboy

    • Thành viên sáng lập

    • No thing
    Số bài viết:
    1.616
    Đã được thích:
    1.340
    Điểm thành tích:
    1.000
    Cái đề là 9. Tính số sách mượn trung bình trong "1" ngày. Chứ không phải là "mỗi ngày". Kết quả như chú làm là ra nhiều dòng.
    Còn theo tớ hiểu thì tính trung bình một ngày mượn bao nhiêu quyển. Nghĩa là đáp án là một con số. (lấy tổng mượn tất cả chia cho số ngày)

    Cô đính chính lại đề rồi. Sửa lại là mỗi :D
  4. Offline

    Mr.H

    • Thành Viên Mới

    Số bài viết:
    191
    Đã được thích:
    75
    Điểm thành tích:
    0
    cái câu này nó vớ vẩn thế nào ấy. nếu là trung bình 1 ngày thì phải là: Tống số sách mượn/(số ngày) (số ngày tính từ ngày Thư Viện mở cửa đến ngày hiện tại) __ __!
  5. Offline

    sunboy

    • Thành viên sáng lập

    • No thing
    Số bài viết:
    1.616
    Đã được thích:
    1.340
    Điểm thành tích:
    1.000
    Mình và mấy đứa cũng nghĩ vậy. Cô cũng đồng ý. Nhưng chịu, làm lỗi. Còn cách như Ronaldo thì phải sửa "1" thành "mỗi", lúc này lấy tổng sách cho mượn trong một ngày rồi chia cho số lần mượn
  6. Offline

    Ronaldo

    • Friends

    Số bài viết:
    1.313
    Đã được thích:
    321
    Điểm thành tích:
    220
    rứa chắc phải sài 2 lần group by mất !
  7. Offline

    sunboy

    • Thành viên sáng lập

    • No thing
    Số bài viết:
    1.616
    Đã được thích:
    1.340
    Điểm thành tích:
    1.000
    Ronaldo làm được chưa post lên xem với... chẳng bít làm sa cả
    lunipro9x thích bài này.
  8. Offline

    lunipro9x

    • Thành Viên Mới

    Số bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    0
    giup m tl cac cau nay nha...nhung thanh vien uu tu
    1. Tạo các loại index một cách thích hợp và theo dõi tác động của các lệnh này khi thực hiện các lệnh truy vấn (select).
    3. Sau khi đã có thông tin về ThanhTien trong HoaDonChiTiet, hãy cập nhật thông tin của trường Tien trong hóa đơn = tổng số tiền của các mặt hàng có trong hóa đơn = tổng của cột ThanhTien của các bản ghi trong HoaDonChiTiet có cùng số hóa đơn (MaHD). Cập nhật trường TongSoTien=Tien*(1+Thue).
    4. Hiển thị danh sách các mặt hàng với đầy đủ các thông tin sau: Loại hàng, mã hàng, tên hàng sắp xếp tăng dần theo tên hàng.
    5. Liệt kê từng mặt hàng và tổng số hàng đã bán (có trong hóa đơn chi tiết) theo từng mặt hàng.
    6. Liệt kê từng mặt hàng và tổng số tiền đã bán (có trong hóa đơn chi tiết) theo từng mặt hàng.
    7. Liệt kê chi tiết các mặt hàng đã bán bao gồm các thông tin sau:
    Số hóa đơn, Mã sản phẩm (hàng), tên sản phẩm, đơn giá, số lượng, giảm giá và thành tiền. Chỉ liệt kê những mặt hàng có giảm giá trên 1% (tức là trường GiamGia > 0.01), và ThanhTien <10000.
    8. Hãy liệt kê danh sách khách hàng với đầy đủ các thông tin như: Mã khách hàng, tên khách hàng, địa chỉ, điện thoại, số hóa đơn đã đặt mua hàng trong tháng 3 năm 1997. (Chỉ liệt kê các khách hàng này và sắp xếp theo thứ tự tăng dần của họ và tên).
    9. Liệt kê danh sách các mặt hàng đã bán theo từng loại hàng. Với mỗi loại hàng tính tổng số mặt hàng đã bán, tổng số tiền và cuối cùng có tổng số tất cả mặt hàng đã bán và tổng số tiền.
    10. Liệt kê danh sách tất cả các khách hàng đã mua hàng trong tháng 11/2006 và tổng số tiền mà học đã mua.
    11. Liệt kê danh sách tất cả các nhân viên và số tiền hàng họ bán được trong tháng 11/2006.
    12. Viết Stored Procedure có tên là procProductList có hai tham số vào là pYear và pMonth. Cả hai tham số là số nguyên chỉ năm và tháng. Procedure có một tham số OUTPUT là pMaLoaiHang, là mã của loại hàng đã bán được số tiền nhiều nhất trong tháng pMonth và năm pYear. Số tiền cho mỗi mặt hàng là: DonGia x SoLuong, không tính đến GiamGia. Sau khi viết xong Procedure thì thử lại, sau đó in ra mã và cả tên loại hàng có mã là pMaLoaiHang.
    13. Viết Function có tên là funcDonGia có tham số vào là mã mặt hàng (sản phẩm) và trả về đơn giá của mặt hàng này. Viết lệnh thử lại kết quả trên màn hình.
    14. Viết trigger xóa bản ghi trong bảng LoaiSanPham. Khi xóa thi lưu thông tin mã loại sản phẩm (MaLoaiSP), và thông tin ngày xóa (DelDate) vào bảng LoaiSP_Hist đồng thời xóa các bản ghi tương ứng trong các bảng liên quan (tức là các bảng có chứa khóa ngoại tham chiếu đến bảng LoaiSanPham.
    --- Nhập chung bài viết, 18 Tháng một 2013 ---
    thanks nhieu

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí