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.
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ể:
Để 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)
);
Để 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.
Để thực hiện yêu cầu này, chúng ta sẽ sử dụng bảng phong và khachsan:
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ú ý khi giải