Up5me
Trang chủ > Câu hỏi lẻ > 6ebQirTUcMvH

Đề bài

Cho một cơ sở dữ liệu về quản lí phòng cho thuê như sau:

khachsan(idKS, tenKS, diachi)

phong(idPhong, idKS, loaiP, giaP)

datphong(idKS, idKH, ngaynhan, ngaytra, idPhong)

khach(idKH, hoten, sdt)

Hãy viết câu lệnh SQL cho các yêu cầu dưới đây:

a) Khởi tạo cơ sở dữ liệu dựa trên mô tả.

b) Liệt kê các khách ở khách sạn Villa trong ngày 5/4/2024.

c) Liệt kê các phòng có mức giá trên 5.000.000 đồng theo từng tên khách sạn.

Xem lời giải

Phương pháp giải

Lời giải chi tiết

Để giải quyết các yêu cầu của bài toán, chúng ta cần sử dụng ngôn ngữ SQL để thực hiện các thao tác trên cơ sở dữ liệu. Dưới đây là các bước giải cụ thể:

a) Khởi tạo cơ sở dữ liệu dựa trên mô tả:

Để khởi tạo cơ sở dữ liệu, chúng ta cần tạo các bảng với các trường dữ liệu đã mô tả. Dưới đây là các câu lệnh SQL để tạo các bảng:

CREATE TABLE khachsan (
    idKS INT PRIMARY KEY,
    tenKS VARCHAR(255),
    diachi VARCHAR(255)
);

CREATE TABLE phong (
    idPhong INT PRIMARY KEY,
    idKS INT,
    loaiP VARCHAR(50),
    giaP DECIMAL(10, 2),
    FOREIGN KEY (idKS) REFERENCES khachsan(idKS)
);

CREATE TABLE datphong (
    idKS INT,
    idKH INT,
    ngaynhan DATE,
    ngaytra DATE,
    idPhong INT,
    PRIMARY KEY (idKS, idKH, ngaynhan, idPhong),
    FOREIGN KEY (idKS) REFERENCES khachsan(idKS),
    FOREIGN KEY (idPhong) REFERENCES phong(idPhong)
);

CREATE TABLE khach (
    idKH INT PRIMARY KEY,
    hoten VARCHAR(255),
    sdt VARCHAR(15)
);

b) Liệt kê các khách ở khách sạn Villa trong ngày 5/4/2024:

Để liệt kê các khách, chúng ta cần kết hợp các bảng khachsan, datphong, và khach để lấy thông tin:

SELECT khach.hoten, khach.sdt 
FROM khachsan 
JOIN datphong ON khachsan.idKS = datphong.idKS
JOIN khach ON datphong.idKH = khach.idKH
WHERE khachsan.tenKS = 'Villa' 
AND '2024-04-05' BETWEEN datphong.ngaynhan AND datphong.ngaytra;

Câu lệnh trên sẽ chọn ra tất cả khách có mặt ở khách sạn "Villa" vào khoảng thời gian từ ngày nhận cho đến ngày trả là 5/4/2024.

c) Liệt kê các phòng có mức giá trên 5.000.000 đồng theo từng tên khách sạn:

Để thực hiện yêu cầu này, chúng ta sẽ sử dụng bảng phongkhachsan:

SELECT khachsan.tenKS, phong.idPhong, phong.loaiP, phong.giaP
FROM phong
JOIN khachsan ON phong.idKS = khachsan.idKS
WHERE phong.giaP > 5000000;

Câu truy vấn này liệt kê những phòng có giá trên 5.000.000 đồng, đồng thời hiển thị thông tin tên khách sạn.

Chú ý

Chú ý khi giải

  • Khi tạo bảng, hãy đảm bảo rằng các thuộc tính khóa ngoại (Foreign Key) được thiết lập chính xác để duy trì liên kết giữa các bảng.
  • Khi viết các truy vấn câu lệnh SELECT, cần chú ý điều kiện lọc để kết hợp chính xác dữ liệu từ nhiều bảng dựa trên các trường liên quan nhằm đảm bảo kết quả đầu ra chính xác.
  • Hãy đảm bảo định dạng ngày tháng trong các câu truy vấn phải phù hợp với định dạng của hệ quản trị cơ sở dữ liệu mà bạn sử dụng.
  • Cần lưu ý đến kiểu dữ liệu và kích thước của các trường trong bảng, đảm bảo phù hợp với giá trị lưu trữ thực tế cũng như tối ưu hóa hiệu suất cơ sở dữ liệu.