Tin 11: Thực hành Cơ sở dữ liệu kinh doanh trái cây FreshFruit

Web Publisher User

LÝ THUYẾT CẦN NHỚ: CƠ SỞ DỮ LIỆU & SQL CƠ BẢN

1. Các kiểu dữ liệu thường dùng

- INT: Số nguyên (dùng cho số lượng, mã số tự tăng,...).

- FLOAT / DECIMAL: Số thực (dùng cho tiền tệ, điểm số).

- CHAR(n): Chuỗi ký tự độ dài cố định (dùng cho mã số, ví dụ: CHAR(2)).

- VARCHAR(n): Chuỗi ký tự độ dài thay đổi (dùng cho tên, địa chỉ, ghi chú).

- DATE: Lưu trữ ngày, tháng, năm.

2. Các ràng buộc (Constraints)

- PRIMARY KEY (Khóa chính): Xác định duy nhất một hàng, không được trùng, không được rỗng.

- FOREIGN KEY (Khóa ngoại): Liên kết dữ liệu giữa 2 bảng, tham chiếu đến khóa chính của bảng khác.

- CHECK: Kiểm tra điều kiện dữ liệu nhập vào (ví dụ: \( > 0 \)).

- NOT NULL: Không được phép để trống.

3. Các câu lệnh SQL cơ bản

- CREATE DATABASE: Tạo cơ sở dữ liệu mới.

- CREATE TABLE: Tạo bảng mới.

- ALTER TABLE: Sửa đổi cấu trúc bảng (thêm/sửa/xóa cột hoặc ràng buộc).

- INSERT INTO: Thêm dữ liệu vào bảng.

- SELECT: Truy vấn (lấy) dữ liệu từ bảng.


PHIẾU THỰC HÀNH TIN 11

CƠ SỞ DỮ LIỆU KINH DOANH TRÁI CÂY

I. MỤC TIÊU

- Tạo được cơ sở dữ liệu và các bảng có khóa chính, khóa ngoại.

- Thực hiện nhập dữ liệu và truy vấn dữ liệu cơ bản.

- Vận dụng kiến thức để giải quyết bài toán thực tế.

II. BÀI TOÁN

Cửa hàng FreshFruit cần xây dựng CSDL để quản lí việc kinh doanh trái cây gồm: trái cây, nhà cung cấp, khách hàng, hóa đơn và chi tiết hóa đơn.

III. NỘI DUNG THỰC HÀNH & HƯỚNG DẪN GIẢI (SQL)

Câu 1: Tạo CSDL có tên: QL_KINHDOANH_TRAICAY.

Đáp án tham khảo:

CREATE DATABASE QL_KINHDOANH_TRAICAY;
USE QL_KINHDOANH_TRAICAY;

Câu 2: Tạo bảng TRAICAY gồm:

- MaTC (CHAR(2), khóa chính)

- TenTC (VARCHAR(50))

- DonGia (INT, \(>0\))

- DonViTinh (VARCHAR(20))

Đáp án tham khảo:

CREATE TABLE TRAICAY (
    MaTC CHAR(2) PRIMARY KEY,
    TenTC VARCHAR(50),
    DonGia INT CHECK (DonGia > 0),
    DonViTinh VARCHAR(20)
);

Câu 3: Tạo bảng NHACUNGCAP:

- MaNCC (INT, khóa chính)

- TenNCC (VARCHAR(50))

- DienThoai (VARCHAR(15))

- DiaChi (VARCHAR(100))

Đáp án tham khảo:

CREATE TABLE NHACUNGCAP (
    MaNCC INT PRIMARY KEY,
    TenNCC VARCHAR(50),
    DienThoai VARCHAR(15),
    DiaChi VARCHAR(100)
);

Câu 4: Thêm trường MaNCC vào bảng TRAICAY và tạo khóa ngoại liên kết NHACUNGCAP.

Đáp án tham khảo:

-- Thêm cột MaNCC
ALTER TABLE TRAICAY ADD MaNCC INT;

-- Tạo khóa ngoại
ALTER TABLE TRAICAY 
ADD FOREIGN KEY (MaNCC) REFERENCES NHACUNGCAP(MaNCC);

Câu 5: Tạo bảng KHACHHANG:

- MaKH (INT, khóa chính)

- TenKH (VARCHAR(50))

- DienThoai (VARCHAR(15))

Đáp án tham khảo:

CREATE TABLE KHACHHANG (
    MaKH INT PRIMARY KEY,
    TenKH VARCHAR(50),
    DienThoai VARCHAR(15)
);

Câu 6: Nhập dữ liệu:

- Ít nhất 5 trái cây

- 3 nhà cung cấp

- 5 khách hàng

Đáp án tham khảo:

-- Nhập Nhà Cung Cấp trước (vì có khóa ngoại ở bảng Trái Cây)
INSERT INTO NHACUNGCAP VALUES (1, 'Vườn Rau Má', '0901236789', 'Thanh Hóa');
INSERT INTO NHACUNGCAP VALUES (2, 'Nông Trại Việt', '0912345678', 'Tiền Giang');
INSERT INTO NHACUNGCAP VALUES (3, 'TTKT Fruit Plus', '0983654321', 'TP.HCM');

-- Nhập Trái Cây
INSERT INTO TRAICAY VALUES ('T1', 'Táo Mỹ', 60000, 'Kg', 3);
INSERT INTO TRAICAY VALUES ('T2', 'Xoài Cát', 45000, 'Kg', 2);
INSERT INTO TRAICAY VALUES ('T3', 'Nho Đen', 120000, 'Kg', 3);
INSERT INTO TRAICAY VALUES ('T4', 'Dưa Hấu', 15000, 'Kg', 2);
INSERT INTO TRAICAY VALUES ('T5', 'Cam Sành', 30000, 'Kg', 1);

-- Nhập Khách Hàng
INSERT INTO KHACHHANG VALUES (1, 'Nguyễn Văn A', '0909000111');
INSERT INTO KHACHHANG VALUES (2, 'Trần Thị B', '0909000222');
INSERT INTO KHACHHANG VALUES (3, 'Lê Văn C', '0909000333');
INSERT INTO KHACHHANG VALUES (4, 'Phạm Thị D', '0909000444');
INSERT INTO KHACHHANG VALUES (5, 'Hoàng Văn E', '0909000555');

Câu 7: Truy vấn:

1. Hiển thị toàn bộ trái cây.

2. Hiển thị tên trái cây và đơn giá.

3. Trái cây có đơn giá \(> 50000\).

4. Sắp xếp theo đơn giá giảm dần.

Đáp án tham khảo:

-- 7.1
SELECT * FROM TRAICAY;

-- 7.2
SELECT TenTC, DonGia FROM TRAICAY;

-- 7.3
SELECT * FROM TRAICAY WHERE DonGia > 50000;

-- 7.4 (DESC là cách xếp order giảm dần theo order by)
SELECT * FROM TRAICAY ORDER BY DonGia DESC;

Câu 8: Hiển thị tên trái cây và tên nhà cung cấp.

Đáp án tham khảo:

SELECT T.TenTC, N.TenNCC -- gán biến T cho bảng TRAICAY và N cho NHACUNGCAP
FROM TRAICAY T 
JOIN NHACUNGCAP N ON T.MaNCC = N.MaNCC;

Câu 9: Tạo bảng HOADON:

- MaHD (INT, khóa chính)

- MaKH (INT, khóa ngoại)

- NgayBan (DATE)

Đáp án tham khảo:

CREATE TABLE HOADON (
    MaHD INT PRIMARY KEY,
    MaKH INT,
    NgayBan DATE,
    FOREIGN KEY (MaKH) REFERENCES KHACHHANG(MaKH)
);

Câu 10: Tạo bảng CT_HOADON:

- MaHD (INT, khóa ngoại)

- MaTC (khóa ngoại CHAR(2))

- SoLuong (INT, \(>0\))

- Khóa chính ghép: (MaHD, MaTC)

Đáp án tham khảo:

CREATE TABLE CT_HOADON (
    MaHD INT,
    MaTC CHAR(2),
    SoLuong INT CHECK (SoLuong > 0),
    PRIMARY KEY (MaHD, MaTC),
    FOREIGN KEY (MaHD) REFERENCES HOADON(MaHD),
    FOREIGN KEY (MaTC) REFERENCES TRAICAY(MaTC)
);

Câu 11: Truy vấn nâng cao:

1. Tổng số lượng trái cây theo hóa đơn.

2. Tên khách hàng – ngày bán – tổng tiền.

3. Trái cây bán nhiều nhất.

Đáp án tham khảo:

-- Chuẩn bị dữ liệu mẫu cho Hóa Đơn để test
INSERT INTO HOADON VALUES (1, 1, '2023-10-20');
INSERT INTO CT_HOADON VALUES (1, 'T1', 2);
INSERT INTO CT_HOADON VALUES (1, 'T3', 1);

-- 11.1 Tổng số lượng trái cây theo hóa đơn
SELECT MaHD, SUM(SoLuong) AS TongSoLuong 
FROM CT_HOADON 
GROUP BY MaHD;

-- 11.2 Tên khách hàng – ngày bán – tổng tiền
-- Tổng tiền = Số lượng * Đơn giá
SELECT KH.TenKH, HD.NgayBan, SUM(CT.SoLuong * TC.DonGia) AS TongTien
FROM KHACHHANG KH
JOIN HOADON HD ON KH.MaKH = HD.MaKH
JOIN CT_HOADON CT ON HD.MaHD = CT.MaHD
JOIN TRAICAY TC ON CT.MaTC = TC.MaTC
GROUP BY KH.TenKH, HD.NgayBan;

-- 11.3 Trái cây bán nhiều nhất (theo tổng số lượng đã bán)
SELECT TC.TenTC, SUM(CT.SoLuong) AS TongDaBan
FROM TRAICAY TC
JOIN CT_HOADON CT ON TC.MaTC = CT.MaTC
GROUP BY TC.TenTC
ORDER BY TongDaBan DESC LIMIT 1;
-- Lưu ý: Nếu dùng SQL khác thì thay 'LIMIT 1' bằng 'SELECT TOP 1' ở cuối câu lệnh.

IV. KẾT QUẢ

Học sinh lưu file CSDL và nộp theo yêu cầu của giáo viên.

تعليقان (2)

  1. người qua đường
    người qua đường
    bài giải chi tiết và rõ ràng
    1. Admin
      Admin
      Cảm ơn bạn!
Chúng tôi rất vui khi bạn muốn đóng góp ý kiến. Để đảm bảo môi trường trao đổi lành mạnh, vui lòng tuân thủ các quy định sau:

1. Sử dụng tiếng Việt có dấu đầy đủ, tránh viết tắt.
2. Bình luận sẽ được kiểm duyệt trước khi công khai.
3. Tôn trọng người khác và đóng góp ý kiến xây dựng.
4. Tuân thủ chính sách của Google và TTKT.

Cảm ơn bạn đã đồng hành cùng chúng tôi!

CẢNH BÁO

Gần đây, chúng tôi phát hiện nội dung bị chụp màn hình và chia sẻ trái phép. TTKT khuyến cáo bạn không nên chụp màn hình mà hãy chia sẻ link đến bài viết để tôn trọng tác giả và tránh bị vô hiệu hóa tài khoản.

Yêu cầu Đăng nhập

Để tiếp tục sử dụng, vui lòng đăng nhập.