Professional Documents
Culture Documents
Truy vấn SQLPEA2023
Truy vấn SQLPEA2023
FROM Rentals
FROM Rentals
FROM Rentals
Ví dụ 4: Kết hợp thông tin từ nhiều bảng - Cars, Rentals, Customers, Locations và Phone Numbers
PhoneNumbers.Phone_Number
FROM Rentals
Ví dụ 5: Kết hợp thông tin từ các bảng Cars, Rentals, Customers và Labels
Labels.Description AS Car_Label
FROM Rentals
Ví dụ 6: Kết hợp thông tin từ nhiều bảng - Rentals, Customers, Locations và Cars
FROM Rentals
Ví dụ 7: Truy vấn thông tin chi tiết về đặt hàng kèm thông tin khách hàng và loại xe
SELECT
R.Reservation_Number,
C.First_Name,
C.Last_Name,
Ca.Brand,
Ca.Model,
R.Pick_up_date,
R.Return_date,
R.Amount
FROM Rentals R
Ví dụ 8: Truy vấn thông tin khách hàng, loại xe và thông tin đặt hàng được thực hiện sau tháng 5 năm
2015
SELECT
C.First_Name,
C.Last_Name,
Ca.Brand,
Ca.Model,
R.Pick_up_date,
R.Return_date,
R.Amount
FROM Rentals R
Ví dụ 9: Truy vấn thông tin chi tiết về khách hàng, loại xe và đặt hàng có giá trị thuê xe lớn hơn 200
USD
SELECT
C.First_Name,
C.Last_Name,
Ca.Brand,
Ca.Model,
R.Amount
FROM Rentals R
Ví dụ 10: Truy vấn thông tin về khách hàng, loại xe và đặt hàng có thời gian thuê xe trên 7 ngày
SELECT
C.First_Name,
C.Last_Name,
Ca.Brand,
Ca.Model,
R.Pick_up_date,
R.Return_date
FROM Rentals R
INNER JOIN Customers C ON R.Customer_ID = C.ID
Ví dụ 11: Truy vấn thông tin chi tiết về đặt hàng, loại xe và địa chỉ của khách hàng
SELECT
R.Reservation_Number,
C.First_Name,
C.Last_Name,
Ca.Brand,
Ca.Model,
L.Street,
L.Street_Number,
L.City,
C.State,
C.Country
FROM Rentals R
Ví dụ 12: Truy vấn thông tin về đặt hàng, loại xe và tổng số lần thuê của mỗi loại xe
SELECT
Ca.Brand,
Ca.Model,
COUNT(R.Reservation_Number) AS TotalRentals
FROM Rentals R
SELECT
R.Reservation_Number,
C.First_Name,
C.Last_Name,
Ca.Brand,
Ca.Model,
L.Street AS Return_Street,
L.Street_Number AS Return_Street_Number,
L.City AS Return_City,
C.State AS Return_State,
C.Country AS Return_Country
FROM Rentals R
Ví dụ 14: Truy vấn thông tin chi tiết về đặt hàng, loại xe và danh sách các thuộc tính của từng loại xe
SELECT
R.Reservation_Number,
Ca.Brand,
Ca.Model,
JSON_QUERY(Ca.Description) AS Car_Details
FROM Rentals R
SELECT
C.First_Name,
C.Last_Name,
Ca.Brand,
Ca.Model,
COUNT(R.Reservation_Number) AS TotalRentals
FROM Rentals R
Ví dụ 16: Truy vấn thông tin về các đặt hàng, loại xe và thông tin địa chỉ của khách hàng đã thuê xe tại
một địa điểm cụ thể
SELECT
C.First_Name,
C.Last_Name,
Ca.Brand,
Ca.Model,
L.Street,
L.Street_Number,
L.City,
C.State,
C.Country
FROM Rentals R
WHERE R.Pick_up_location = 1;
Ví dụ 17: Truy vấn thông tin chi tiết về đặt hàng, loại xe và thông tin chi tiết về thuộc tính của từng loại
xe theo tháng
SELECT
YEAR(R.Pick_up_date) AS Rent_Year,
MONTH(R.Pick_up_date) AS Rent_Month,
Ca.Brand,
Ca.Model,
JSON_QUERY(Ca.Description) AS Car_Details
FROM Rentals R
Ví dụ 18: Truy vấn thông tin về các loại xe, tổng số lần thuê và tổng doanh thu từ mỗi loại xe
SELECT
Cars.Brand,
Cars.Model,
COUNT(R.Reservation_Number) AS TotalRentals,
SUM(R.Amount) AS TotalRevenue
FROM Cars
Ví dụ 19: Truy vấn thông tin về khách hàng, loại xe, và thông tin đặt hàng của khách hàng trong một
thời gian cụ thể
SELECT
Customers.First_Name,
Customers.Last_Name,
Cars.Brand,
Cars.Model,
R.Pick_up_date,
R.Return_date
FROM Customers
Ví dụ 20: Truy vấn thông tin về khách hàng, loại xe và địa chỉ của khách hàng có đặt hàng tại một địa
điểm cụ thể
SELECT
Customers.First_Name,
Customers.Last_Name,
Cars.Brand,
Cars.Model,
L.Street,
L.Street_Number,
L.City,
L.State,
L.Country
FROM Rentals R
WHERE R.Pick_up_location = 2; -- Điều kiện lấy thông tin từ địa điểm thuê xe có ID = 2 --(có thể thay đổi)
Ví dụ 21: Truy vấn thông tin chi tiết về khách hàng, loại xe và doanh thu từng tháng
SELECT
YEAR(R.Pick_up_date) AS Rent_Year,
MONTH(R.Pick_up_date) AS Rent_Month,
Customers.First_Name,
Customers.Last_Name,
Cars.Brand,
Cars.Model,
SUM(R.Amount) AS TotalRevenue
FROM Rentals R
Ví dụ 22: Truy vấn thông tin chi tiết về đặt hàng, loại xe và thông tin địa chỉ của khách hang
SELECT
R.Reservation_Number,
C.First_Name,
C.Last_Name,
Ca.Brand,
Ca.Model,
L.Street,
L.Street_Number,
L.City,
L.State,
L.Country
FROM Rentals R
SELECT
R.Reservation_Number,
C.First_Name,
C.Last_Name,
Ca.Brand,
Ca.Model,
L.Street AS Return_Street,
L.Street_Number AS Return_Street_Number,
L.City AS Return_City,
L.State AS Return_State,
L.Country AS Return_Country
FROM Rentals R
Ví dụ 24: Truy vấn thông tin chi tiết về đặt hàng, loại xe và danh sách các thuộc tính của từng loại xe có
màu đen (Black)
SELECT
R.Reservation_Number,
Ca.Brand,
Ca.Model,
JSON_QUERY(Ca.Description) AS Car_Details
FROM Rentals R
SELECT
YEAR(R.Pick_up_date) AS Rent_Year,
MONTH(R.Pick_up_date) AS Rent_Month,
Ca.Brand,
Ca.Model,
COUNT(R.Reservation_Number) AS TotalRentals,
SUM(R.Amount) AS TotalRevenue
FROM Rentals R
WHERE YEAR(R.Pick_up_date) = 2015 -- Chọn năm cụ thể (có thể thay đổi)
PROCEDURE
Ví dụ Procedure 3: Tạo một procedure để lấy thông tin về các đơn đặt xe của một khách hàng dựa
trên ID của khách hàng.
CREATE PROCEDURE GetCustomerReservations
@CustomerID INT
AS
BEGIN
END;
@PickUpDate DATE,
@ReturnDate DATE,
@CarID INT,
@CustomerID INT,
@PickUpLocation INT,
@ReturnLocation INT,
@Amount DECIMAL
AS
BEGIN
END;
Procedure 5: Tạo một procedure để cập nhật thông tin khách hàng.
@CustomerID INT,
@NewFirstName NVARCHAR(50),
@NewLastName NVARCHAR(50),
@NewEmail NVARCHAR(100)
AS
BEGIN
UPDATE Customers
WHERE ID = @CustomerID;
END;
Procedure 6: Tạo một procedure để xóa một đơn đặt xe dựa trên số đặt.
@ReservationNumber INT
AS
BEGIN
END;
Procedure 7: Tạo một procedure để tính tổng số tiền các đơn đặt xe của một khách hàng dựa trên ID
của khách hàng.
@CustomerID INT
AS
BEGIN
FROM Rentals
END;
Procedure 8: Tạo một procedure để cập nhật thông tin vị trí địa chỉ trong bảng địa điểm.
@LocationID INT,
@NewStreet NVARCHAR(100),
@NewCity NVARCHAR(50),
@NewCountry NVARCHAR(50)
AS
BEGIN
UPDATE Locations
WHERE ID = @LocationID;
END;
Procedure 9: Tạo một procedure để lấy thông tin về các xe được đặt nhiều lần.
AS
BEGIN
FROM Rentals
END;
Procedure 10: Tạo một procedure để tính tổng số lần đặt xe theo mỗi loại xe.
AS
BEGIN
FROM Cars
END;
Procedure 11: Tạo một procedure để cập nhật số điện thoại cho một khách hàng dựa trên ID.
@CustomerID INT,
@NewPhoneNumber NVARCHAR(20)
AS
BEGIN
UPDATE Customers
WHERE ID = @CustomerID;
END;
Procedure 12: Tạo một procedure để lấy thông tin về các đơn đặt xe trong một thời gian cụ thể
@StartDate DATE,
@EndDate DATE
AS
BEGIN
SELECT *
FROM Rentals
END;
Procedure 13: Tạo một procedure để lấy thông tin chi tiết của một đơn đặt xe dựa trên số đặt.
@ReservationNumber INT
AS
BEGIN
SELECT *
FROM Rentals
END;
Procedure 14: Tạo một procedure để thêm một khách hàng mới.
@SSN INT,
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50),
@Email NVARCHAR(100),
@MobilePhone NVARCHAR(20),
@State NVARCHAR(50),
@Country NVARCHAR(50)
AS
BEGIN
INSERT INTO Customers (SSN, First_Name, Last_Name, Email, Mobile_phone, State, Country)
END;
Procedure 15: Tạo một procedure để lấy thông tin về tất cả khách hàng trong một quốc gia cụ thể.
@CountryName NVARCHAR(50)
AS
BEGIN
SELECT *
FROM Customers
WHERE Country = @CountryName;
END;
Procedure 16: Tạo một procedure để cập nhật thông tin chi tiết về một xe dựa trên ID.
@CarID INT,
@NewDescription NVARCHAR(255),
@NewColor NVARCHAR(50)
AS
BEGIN
UPDATE Cars
WHERE ID = @CarID;
END;
Procedure 17: Tạo một procedure để lấy thông tin chi tiết của một khách hàng dựa trên ID.
@CustomerID INT
AS
BEGIN
SELECT *
FROM Customers
WHERE ID = @CustomerID;
END;
Procedure 18: Tạo một procedure để thêm một đơn đặt xe mới.
@PickUpDate DATE,
@ReturnDate DATE,
@CarID INT,
@CustomerID INT,
@PickUpLocation INT,
@ReturnLocation INT,
@Amount DECIMAL
AS
BEGIN
END;
Procedure 19: Tạo một procedure để lấy thông tin về tất cả các đặt xe được thực hiện bởi một khách
hàng cụ thể.
@CustomerID INT
AS
BEGIN
SELECT *
FROM Rentals
END;
Procedure 20: Tạo một procedure để cập nhật thông tin chi tiết về một địa điểm dựa trên ID
@LocationID INT,
@NewStreet NVARCHAR(100),
@NewCity NVARCHAR(50),
@NewCountry NVARCHAR(50)
AS
BEGIN
UPDATE Locations
WHERE ID = @LocationID;
END;
Procedure 21: Tạo một procedure để lấy thông tin về tất cả các đặt xe trong một khoảng thời gian cụ
thể.
@StartDate DATE,
@EndDate DATE
AS
BEGIN
SELECT *
FROM Rentals
END;
Procedure 22: Tạo một procedure để cập nhật thông tin chi tiết của một khách hàng.
@CustomerID INT,
@NewEmail NVARCHAR(100),
@NewMobilePhone NVARCHAR(20)
AS
BEGIN
UPDATE Customers
END;
Procedure 23: Tạo một procedure để lấy thông tin về tất cả các khách hàng có đặt xe trong một thời
gian cụ thể.
@StartDate DATE,
@EndDate DATE
AS
BEGIN
FROM Customers
END;
Procedure 24: Tạo một procedure để xóa thông tin về một đặt xe dựa trên số đặt.
@ReservationNumber INT
AS
BEGIN
END;
Procedure 25: Tạo một procedure để tính toán số lượng xe đã được thuê bởi mỗi khách hàng.
AS
BEGIN
FROM Rentals;
OPEN customer_cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FROM Rentals
END;
CLOSE customer_cursor;
DEALLOCATE customer_cursor;
END;
Procedure 26: Tạo một procedure để tính toán tổng số lần mà mỗi khách hàng đã thuê các loại xe khác
nhau.
AS
BEGIN
CREATE TABLE #TempRentals (
CustomerID INT,
CarCategoryCount INT
);
FROM Rentals;
OPEN customer_cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FROM Rentals
END;
CLOSE customer_cursor;
DEALLOCATE customer_cursor;
END;
Procedure 27: Tạo một procedure để tính toán tổng doanh thu từ việc thuê xe theo từng tháng của
một năm cụ thể.
@Year INT
AS
BEGIN
MonthNumber INT,
TotalRevenue DECIMAL(10, 2)
);
BEGIN
SELECT
MONTH(Pick_up_date) AS MonthNumber,
SUM(Amount) AS TotalRevenue
FROM Rentals
GROUP BY MONTH(Pick_up_date);
END;
END;
Procedure 28: Tạo một procedure để tổng hợp thông tin chi tiết về khách hàng và số lần thuê xe.
AS
BEGIN
CustomerID INT,
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
TotalRentals INT
);
SELECT
C.ID AS CustomerID,
C.First_Name AS FirstName,
C.Last_Name AS LastName,
ISNULL(SUM(R.Amount), 0) AS TotalRentals
FROM Customers C
END;
Procedure 29: Tạo một procedure để kiểm tra và cập nhật thông tin đặt xe với các điều kiện cụ thể.
CREATE PROCEDURE UpdateRentalInformation
AS
BEGIN
ReservationNumber INT,
ReturnDate DATE
);
SELECT
Reservation_Number,
CASE
ELSE Amount
END AS NewAmount,
CASE
ELSE Return_date
END AS ReturnDate
FROM Rentals
WHERE Pick_up_date <= GETDATE() AND Return_date <= GETDATE(); -- Điều kiện: Thời gian hiện tại
UPDATE Rentals
FROM #UpdatedRentals UR
END;
Procedure 30: Tạo một procedure để tính toán tổng doanh thu từ việc thuê xe theo từng tháng của
năm cụ thể và lưu kết quả vào bảng tổng hợp.
@Year INT
AS
BEGIN
MonthNumber INT,
Year INT,
TotalRevenue DECIMAL(10, 2)
);
BEGIN
SELECT
@Month AS MonthNumber,
@Year AS Year,
SUM(Amount) AS TotalRevenue
FROM Rentals
END;
Trigger
Trigger 1: Tạo một trigger để kiểm tra việc thêm mới đơn đặt xe.
ON Rentals
AFTER INSERT
AS
BEGIN
BEGIN
PRINT 'Lỗi: Ngày trả xe không thể trước ngày nhận xe.';
ROLLBACK;
END
END;
Trigger 2: Tạo một trigger để cập nhật thông tin khi thay đổi địa chỉ khách hàng.
ON Customers
AFTER UPDATE
AS
BEGIN
IF UPDATE(State) OR UPDATE(Country)
BEGIN
UPDATE Customers
END
END;
Trigger 3: Tạo một trigger để kiểm tra việc xóa thông tin khách hàng.
ON Customers
INSTEAD OF DELETE
AS
BEGIN
END;
Trigger 4: Tạo một trigger để tự động cập nhật thông tin ngày trả xe khi ngày nhận xe thay đổi.
ON Rentals
AS
BEGIN
UPDATE Rentals
FROM Reservations
END;
Trigger 5: Tạo một trigger để ghi log khi có sự thay đổi trong bảng khách hàng.
CREATE TRIGGER CustomerChangeLog
ON Customers
AS
BEGIN
BEGIN
END
END;
Trigger 6: Tạo một trigger để kiểm tra việc thay đổi giá trị số tiền trong bảng đặt xe.
ON Rentals
AFTER UPDATE
AS
BEGIN
IF UPDATE(Amount)
BEGIN
BEGIN
ROLLBACK;
END
END
END;
Trigger 7: Tạo một trigger để tự động cập nhật ngày trả xe khi ngày nhận xe thay đổi.
AS
BEGIN
UPDATE Rentals
FROM Reservations
END;
Trigger 8: Tạo một trigger để kiểm tra việc thêm mới thông tin khách hàng.
ON Customers
AFTER INSERT
AS
BEGIN
IF NOT EXISTS (SELECT * FROM inserted WHERE First_Name IS NOT NULL AND Last_Name IS NOT
NULL AND Email IS NOT NULL)
BEGIN
ROLLBACK;
END
END;
Trigger 9: Tạo một trigger để ghi log khi có sự thay đổi trong bảng đặt xe.
ON Rentals
AS
BEGIN
BEGIN
END
END;
Trigger 10: Tạo một trigger để kiểm tra việc thêm mới thông tin đặt xe.
ON Rentals
AFTER INSERT
AS
BEGIN
BEGIN
ROLLBACK;
END
END;
Trigger 11: Tạo một trigger để cập nhật thông tin khi địa chỉ đón xe thay đổi.
ON Rentals
AS
BEGIN
UPDATE Reservations
FROM Rentals
INNER JOIN inserted ON Rentals.Reservation_Number = inserted.Reservation_Number;
END;
Trigger 12: Tạo một trigger để kiểm tra việc xóa thông tin loại xe.
ON Labels
INSTEAD OF DELETE
AS
BEGIN
BEGIN
END
ELSE
BEGIN
END
END;
Trigger 13: Tạo một trigger để kiểm tra việc thay đổi số lượng xe trong bảng đặt xe.
ON Rentals
AS
BEGIN
BEGIN
ROLLBACK;
END
END;
Trigger 14: Tạo một trigger để ghi log khi có thay đổi trong bảng khách hàng.
ON Customers
AS
BEGIN
IF (SELECT COUNT(*) FROM inserted) > 0 OR (SELECT COUNT(*) FROM deleted) > 0
BEGIN
END
END;
Trigger 15: Tạo một trigger để kiểm tra việc thêm mới thông tin vị trí địa điểm.
ON Locations
AFTER INSERT
AS
BEGIN
BEGIN
ROLLBACK;
END
END;
Trigger 16: Tạo một trigger để cập nhật ngày trả xe khi ngày nhận xe thay đổi.
ON Rentals
AS
BEGIN
UPDATE Rentals
FROM Rentals
END;
Trigger 17: Tạo một trigger để kiểm tra việc cập nhật thông tin xe.
ON Cars
AFTER UPDATE
AS
BEGIN
IF (SELECT COUNT(*) FROM deleted WHERE Brand <> inserted.Brand OR Model <> inserted.Model) > 0
BEGIN
PRINT 'Không thể thay đổi thương hiệu hoặc mô hình của xe.';
ROLLBACK;
END
END;
Trigger 18: Tạo một trigger để ghi log khi có sự thay đổi trong bảng đặt xe.
CREATE TRIGGER ReservationChangeLog
ON Rentals
AS
BEGIN
END;
Trigger 19: Tạo một trigger để kiểm tra việc thêm mới thông tin khách hàng.
ON Customers
AFTER INSERT
AS
BEGIN
IF (SELECT COUNT(*) FROM inserted WHERE First_Name IS NULL OR Last_Name IS NULL OR Email IS
NULL) > 0
BEGIN
PRINT 'Không thể thêm khách hàng với thông tin trống.';
ROLLBACK;
END
END;
Trigger 20: Tạo một trigger để kiểm tra việc thay đổi số lượng xe trong bảng đặt xe.
ON Rentals
AFTER UPDATE
AS
BEGIN
IF (SELECT COUNT(*) FROM Cars) > 150
BEGIN
ROLLBACK;
END
END;
Trigger 21: Tạo một trigger để kiểm tra việc thêm mới thông tin đặt xe.
ON Rentals
AFTER INSERT
AS
BEGIN
BEGIN
ROLLBACK;
END
END;
Trigger 22: Tạo một trigger để ghi log khi có sự thay đổi trong bảng khách hàng.
ON Customers
AS
BEGIN
Trigger 23: Tạo một trigger để ghi log khi có sự thay đổi trong bảng đặt xe.
ON Rentals
AS
BEGIN
END;
Trigger 24: Tạo một trigger để kiểm tra việc thay đổi giá trị số tiền trong đơn đặt xe.
ON Rentals
AFTER UPDATE
AS
BEGIN
BEGIN
ROLLBACK;
END
END;
Trigger 25: Tạo một trigger để ghi lại thông tin khi có dữ liệu mới được thêm vào bảng 'Rentals'.
ON Rentals
AFTER INSERT
AS
BEGIN
END;
Trigger 26: Tạo một trigger để cập nhật thông tin khi có sự thay đổi trong bảng 'Reservations'.
ON Rentals
AFTER UPDATE
AS
BEGIN
UPDATE Rentals
FROM Rentals R
END;
Trigger 27: Tạo một trigger để ngăn chặn việc xóa thông tin khách hàng nếu có đặt hàng liên kết với
khách hàng đó.
ON Customers
INSTEAD OF DELETE
AS
BEGIN
IF EXISTS (SELECT 1 FROM Reservations WHERE Customer_ID IN (SELECT deleted.ID FROM deleted))
BEGIN
RAISERROR('Cannot delete this customer as there are reservations linked to this customer.', 16, 1);
END
ELSE
BEGIN
END
END;
Trigger 28: Tạo một trigger để cập nhật tổng số lượng xe được thuê trong bảng khi có thông tin đặt
hàng mới được thêm vào bảng Reservations.
ON Rentals
AFTER INSERT
AS
BEGIN
UPDATE Cars
WHERE ID = @CarID;
END;
Trigger 29: Tạo một trigger để theo dõi và ghi lại thông tin khi có dữ liệu được cập nhật trong bảng
'Customers'.
AFTER UPDATE
AS
BEGIN
FROM deleted d
SET @ChangeDescription = 'Customer details updated - Old Values: ' + @OldValue + ', New Values: ' +
@NewValue;
END;