Tiếp tục chúng ta sẽ tìm hiểu về bài tập SQL cơ bản của FPT FSOFT năm 2018. Bài tập này không khó, chúng ta sẽ cùng nhau giải và tìm ra đáp án cho từng câu hỏi.
Contents
SQL cơ bản FPT FSOFT 2018
Trước khi bắt đầu, hãy cùng tìm hiểu một số điều cần lưu ý về cấu trúc cơ sở dữ liệu:
Bạn đang xem: Bài tập SQL giải bài test SQL cơ bản FPT FSOFT 2018
- Bảng
KHACH_HANG
: lưu trữ thông tin của khách hàng - Bảng
PHONG
: lưu trữ thông tin phòng karaoke - Bảng
DICH_VU_DI_KEM
: lưu trữ thông tin các dịch vụ đi kèm được cung cấp tại quán Karaoke - Bảng
DAT_PHONG
: lưu trữ thông tin đặt phòng karaoke của khách hàng - Bảng
CHI_TIET_SU_DUNG_DV
: lưu trữ thông tin chi tiết khi khách hàng sử dụng các dịch vụ đi kèm PK
: là các trường tham gia vào khóa chính của bảng
Hãy xem qua hình ảnh dưới đây để hiểu rõ hơn về cấu trúc cơ sở dữ liệu:
Bây giờ chúng ta sẽ viết các câu lệnh SQL để thực hiện các yêu cầu sau (mỗi yêu cầu chỉ được viết tối đa 1 câu lệnh SQL):
Yêu cầu I:
Câu 1:
Xem thêm : Lý thuyết Hóa học 9 chi tiết, đầy đủ | Kiến thức trọng tâm
Liệt kê MaDatPhong
, MaDV
, SoLuong
của tất cả các dịch vụ có số lượng lớn hơn 3 và nhỏ hơn 10.
SELECT MADATPHONG, MADV, SOLUONG
FROM CHI_TIET_SU_DUNG_DV
WHERE SOLUONG > 3 AND SOLUONG < 10;
Câu 2:
Cập nhật dữ liệu trên trường GiaPhong
thuộc bảng PHONG
tăng lên 10,000 VNĐ so với giá phòng hiện tại, chỉ cập nhật giá phòng của những phòng có số khách tối đa lớn hơn 10.
UPDATE PHONG
SET GiaPhong = GiaPhong + 10000
WHERE SoKhachToiDa > 10;
Câu 3:
Xóa tất cả những đơn đặt phòng (từ bảng DAT_PHONG
) có trạng thái đặt (TrangThaiDat
) là “Da huy”.
DELETE FROM DAT_PHONG
WHERE TrangThaiDat = 'Da huy';
Yêu cầu II:
Câu 4:
Hiển thị TenKH
của những khách hàng có tên bắt đầu là một trong các ký tự “H”, “N”, “M” và có độ dài tối đa là 20 ký tự.
SELECT TenKH
FROM KHACH_HANG
WHERE TenKH LIKE 'H%' OR TenKH LIKE 'N%' OR TenKH LIKE 'M%' AND LENGTH(TenKH) <= 20;
Câu 5:
Hiển thị TenKH
của tất cả các khách hàng có trong hệ thống, mỗi TenKH
nào trùng nhau thì chỉ hiển thị một lần. Sinh viên sử dụng hai cách khác nhau để thực hiện yêu cầu trên, mỗi cách sẽ được 0,5 điểm.
SELECT DISTINCT TenKH FROM KHACH_HANG;
SELECT TenKH FROM KHACH_HANG GROUP BY TenKH;
Câu 6:
Hiển thị MaDV
, TenDV
, DonViTinh
, DonGia
của những dịch vụ đi kèm có DonViTinh
là “lon” và có DonGia
lớn hơn 10,000 VNĐ hoặc những dịch vụ đi kèm có DonViTinh
là “Cai” và có DonGia
nhỏ hơn 5,000 VNĐ.
SELECT MaDV, TenDV, DonViTinh, DonGia
FROM DICH_VU_DI_KEM
WHERE (DonViTinh = 'lon' AND DonGia > 10000) OR (DonViTinh = 'Cai' AND DonGia < 5000);
Câu 7:
Xem thêm : Câu hỏi trắc nghiệm ôn thi Chứng chỉ Ứng dụng CNTT Cơ bản (Tin học Căn bản)
Hiển thị MaDatPhong
, MaPhong
, LoaiPhong
, SoKhachToiDa
, GiaPhong
, MaKH
, TenKH
, SoDT
, NgayDat
, GioBatDau
, GioKetThuc
, MaDichVu
, SoLuong
, DonGia
của những đơn đặt phòng có năm đặt phòng là “2016”, “2017” và đặt những phòng có giá phòng > 50,000 VNĐ/1 giờ.
SELECT dp.MADATPHONG, dp.MAPHONG, p.LOAIPHONG, p.SoKhachToiDa, p.GiaPhong, kh.MAKH, kh.TenKH, kh.SoDT, dp.NgayDat, dp.GioBatDau, dp.GioKetThuc, dv.MaDichVu, ct.SoLuong, dv.DonGia
FROM DAT_PHONG dp
JOIN KHACH_HANG kh ON dp.MAKH = kh.MAKH
JOIN PHONG p ON dp.MAPHONG = p.MAPHONG
JOIN CHI_TIET_SU_DUNG_DV ct ON dp.MADATPHONG = ct.MADATPHONG
JOIN DICH_VU_DI_KEM dv ON ct.MADV = dv.MADV
WHERE (YEAR(NgayDat) = 2016 OR YEAR(NgayDat) = 2017) AND p.GiaPhong > 50000;
Yêu cầu III:
Câu 8:
Hiển thị MaDatPhong
, MaPhong
, LoaiPhong
, GiaPhong
, TenKH
, NgayDat
, TongTienHat
, TongTienSuDungDichVu
, TongTienThanhToan
tương ứng với từng mã đặt phòng có trong bảng DAT_PHONG
. Những đơn đặt phòng nào không sử dụng dịch vụ đi kèm thì cũng liệt kê thông tin của đơn đặt phòng đó ra.
SELECT dp.MADATPHONG, p.MAPHONG, p.LOAIPHONG, p.GiaPhong, kh.TenKH, dp.NgayDat, p.GiaPhong * TIME_TO_SEC(TIMEDIFF(dp.GioKetThuc, dp.GioBatDau)) AS TongTienHat, SUM(ct.SoLuong * dv.DonGia) AS TongTienSuDungDichVu, (p.GiaPhong * TIME_TO_SEC(TIMEDIFF(dp.GioKetThuc, dp.GioBatDau)) + SUM(ct.SoLuong * dv.DonGia)) AS TongTienThanhToan
FROM DAT_PHONG dp
JOIN KHACH_HANG kh ON dp.MAKH = kh.MAKH
JOIN PHONG p ON dp.MAPHONG = p.MAPHONG
JOIN CHI_TIET_SU_DUNG_DV ct ON dp.MADATPHONG = ct.MADATPHONG
JOIN DICH_VU_DI_KEM dv ON ct.MADV = dv.MADV
GROUP BY dp.MADATPHONG;
Câu 9:
Hiển thị MaKH
, TenKH
, DiaChi
, SoDT
của những khách hàng đã từng đặt phòng karaoke có địa chỉ ở “Hoa Xuan”.
SELECT kh.MAKH, kh.TenKH, kh.DiaChi, kh.SoDT
FROM KHACH_HANG kh
WHERE EXISTS (
SELECT *
FROM DAT_PHONG dp
WHERE kh.MAKH = dp.MAKH
) AND kh.DiaChi = 'Hoa Xuan';
Câu 10:
Hiển thị MaPhong
, LoaiPhong
, SoKhachToiDa
, GiaPhong
, SoLanDat
của những phòng được khách hàng đặt có số lần đặt lớn hơn 2 lần và trạng thái đặt là “Da dat”.
SELECT p.MAPHONG, p.LOAIPHONG, p.SoKhachToiDa, p.GiaPhong, COUNT(dp.MAPHONG) AS SoLanDat
FROM PHONG p
JOIN DAT_PHONG dp ON p.MAPHONG = dp.MAPHONG
WHERE dp.TRANGTHAIDAT = 'Da dat'
GROUP BY p.MAPHONG
HAVING COUNT(dp.MAPHONG) > 2;
Đây là đáp án cho bài test SQL cơ bản FPT FSOFT 2018. Hãy thử tự làm bài trước khi xem đáp án của chúng tôi từ việc tạo cơ sở dữ liệu. Đừng quá lo lắng nếu bạn không làm được ngay, chỉ cần có ý tưởng, bạn có thể tìm kiếm trên Google để tìm đáp án. Điều này sẽ giúp bạn cải thiện kỹ năng tìm kiếm trên Google :))
Trên đây là hướng dẫn giải bài tập SQL cơ bản FPT FSOFT 2018. Tiếp theo, chúng tôi sẽ chia sẻ với bạn bài tập SQL của năm 2019. Sau đó, chúng tôi sẽ chia sẻ các bài tập SQL nâng cao, Java cơ bản và Java nâng cao của FPT. Hy vọng bài chia sẻ này sẽ giúp bạn trong quá trình học tập. Nếu có bất kỳ câu hỏi nào, hãy để lại comment ở dưới, chúng tôi sẽ giải đáp cho bạn!
ĐỌC THÊM:
Bài viết tiếp theo: Bài tập SQL giải bài test SQL cơ bản FPT FSOFT 2019
Nguồn: https://ispacedanang.edu.vn
Danh mục: Học tập