Загрузка данных


create database `hotel`;
use `hotel`;

/* ==============================================================
*		То что относится к номерам.
*  ============================================================== */

create table `room_types` (
	id int primary key auto_increment,
    name varchar(255)
);

create table `room_categories` (
	id int primary key auto_increment,
    name varchar(255)
);

create table `rooms` (
	id int primary key auto_increment,
    type_id int,
    category_id int,
    number varchar(255),
    price decimal(10, 2),
    status varchar(255),
    
    foreign key (type_id) references room_types(id),
    foreign key (category_id) references room_categories(id)
);

/* ==============================================================
*		То что относится к парковкам.
*  ============================================================== */

create table `parking_types` (
	id int primary key auto_increment,
    name varchar(255)
);

create table `parking` (
	id int primary key auto_increment,
    type_id int,
    number varchar(255),
    price decimal(10, 2),
    
    foreign key (type_id) references parking_types(id)
);

/* ==============================================================
*		То что относится к гостям.
*  ============================================================== */

create table `guests` (
	id int primary key auto_increment,
    passport int
);

/* ==============================================================
*		То что относится к заездам(?).
*  ============================================================== */

create table `orders` (
	id int primary key auto_increment,
    checkin datetime,
    checkout datetime,
    guest_id int,
    guests_count int,
    room_payment decimal(10, 2),
    car_number varchar(255),
    parking_id int,
    parking_payment decimal(10, 2),
    
    foreign key (guest_id) references guests(id),
    foreign key (parking_id) references parking(id)
);


/* ==============================================================
*		Задание 1.
*  ============================================================== */

select guests.id, guests.passport
from orders
join rooms on orders.room_id = rooms.id
join guests on orders.guest_id = guests.id
where rooms.type_id = 2 and orders.parking_payment = 0.00;

/* ==============================================================
*		Задание 2.
*  ============================================================== */

delimiter //

create function `get_id_by_passport` (p_passport varchar(255))
returns int
begin
	declare out_id int;

	select guests.id into out_id
    from guests
    where guests.passport = p_passport;
    
    return out_id;
end //

delimiter ;

delimiter //

create procedure `new_procedure` (in p_passport varchar(255))
begin
	declare room_price decimal(10, 2);
    declare parking_price decimal(10, 2);
    
    declare guest_id int;
    
    select get_id_by_passport(p_passport) into guest_id;
    
    select rooms.price, parking.price
    into room_price, parking_price
    from orders
    join rooms on orders.room_id = rooms.id
    join parking on orders.parking_id = parking.id
    where orders.guest_id = guest_id;
    
    select room_price as room_payment, parking_price as parking_payment; 
end //

delimiter ;