By GokiSoft.com|
22:00 11/08/2020|
SQL Server/MySQL
[Share Code] bài giảng tim hiểu nâng cáo select , join trong lập trình SQL Server
Chủ Đề Học : Tìm hiểu xâu về select.
- Select
- Like
- And
- Not
- In
- Group By ... Having
- Order By
- Asc
- Desc
- Union
- Join
- Left Join
- Right Join
- Inner Join
- Full Outer Join
=================================================
================= Mini Project ==================
=================================================
Yêu cầu xậy một hệ thống cơ sở dữ liệu quản lý chuỗi khách sạn.
Phân tích các bảng sử dụng trong CSDL
- Khách sạn : hotel
- id : int -} primary key -} identity [1,1]
- name =} nvarchar[50]
- address =} nvarchar [200]
- type =} nvarchar [50]
- Phòng : room
- room_no =} nvarchar[20] =} primary key
- floor =} int
- capacity : int
- price =} float
- hotel_id : foreign key -} lien ket vs bang hotel [id]
- Thiết bị : device
- device_id : nvarchar [50] -} primary key
- name =} nvarchar[50]
- price =} float
- manufacturer_name : nvarchar [150]
- buy_date =} datetime
- shop_infor =} nvarchar [200]
- room_no =} nvarchar [20] =} foreign key =} lien ket voi bang Room [room_no]
- Note =} nvarchar [300]
- Menu đồ ăn, uống : menu
- id =} int =} primary key =} identity [1, 1]
- name =} nvarchar [50]
- price =} float
- buy_date =} date
- expired_date =} date
- number =} int
- Sử dụng lại : bài trước =} tạo CSDL, tạo bảng, insert dữ liệu
- Liệt kê thông tin phong theo đầu ra : tên khách sạn, loại khách sạn, địa chỉ, mã phòng, tầng mấy, giá, số lượng
- Liệt kế tất cả
- Khách sạn loại 5*, phòng 2 người
- Khách sạn loại 5*, phòng 2 người, giá 200000
- Khách sạn có địa chỉ ở quận Ba Đinh
- Khách sạn ko có địa chỉ ở quận Ba Đình
- Phòng chứa 1,2,3,5 người
Liệt kê thông tin : tên khách sạn, loại khách sạn, địa chỉ, số lượng phòng
Liệt kê thông tin : tên khách sạn, loại khách sạn, địa chỉ, số lượng phòng, số lượng phòng } 2
Liệt kê thông tin : tên khách sạn, loại khách sạn, địa chỉ, số lượng phòng =} Sắp xếp số lượng phọng tăng dần
Liệt kê thông tin : tên khách sạn, loại khách sạn, địa chỉ, số lượng phòng =} Sắp xếp số lượng phọng giảm dần
-- Tao CSDL => QuanLyKhachSan
create database QuanLyKhachSan
go
-- Active CSDL => QuanLyKhachSan
use QuanLyKhachSan
go
-- Tao bang hotel
create table hotel (
id int primary key identity(1, 1),
name nvarchar(50) not null,
address nvarchar(200),
type nvarchar(20)
)
go
-- Tao bang room
create table room (
room_no nvarchar(20) primary key,
floor int,
price float,
capacity int
)
go
-- Tao bang device
create table device (
device_id nvarchar(20) primary key,
name nvarchar(50),
price float,
manufacturer_name nvarchar(50),
buy_date date,
shop_infor nvarchar(200),
room_no nvarchar(20) references room (room_no),
note nvarchar(300)
)
go
-- Tao bang menu
create table menu (
id int primary key identity(1, 1),
name nvarchar(50),
price float,
buy_date date,
expired_date date,
number int
)
go
----- Them du lieu : INSERT
insert into hotel (name, address, type)
values
('Hoa Mai', '285 Doi Can, Ba Dinh, Ha Noi', '5*'),
('Sao Mai Diem Hen', 'Le Thanh Nghi, Hai Ba Trung, Ha Noi', '4*')
go
insert into room (room_no, floor, capacity, price)
values
('HM1001', 1, 2, 150000),
('HM1002', 1, 2, 100000),
('HM2001', 2, 1, 50000),
('HM2002', 2, 2, 150000)
go
insert into device(device_id, name, price, manufacturer_name, buy_date, shop_infor, room_no,
note)
values
('R001', 'Dieu Hoa Daikin 9000KWH', 10000000, 'Daikin', '2020-01-02', 'Media Mart', 'HM1001', ''),
('R002', 'Tivi', 3000000, 'LG', '2020-05-02', 'Media Mart', 'HM1001', ''),
('R003', 'Dieu Hoa', 10000000, 'Daikin', '2020-06-02', 'Media Mart', 'HM1002', ''),
('R004', 'Tivi', 5000000, 'Sony', '2020-02-02', 'Media Mart', 'HM1002', ''),
('R005', 'Dieu Hoa Daikin 9000KWH', 10000000, 'Daikin', '2020-10-02', 'Media Mart', 'HM2001', ''),
('R006', 'Shower Curtain', 500000, 'GokiSoft', '2020-11-02', 'Media Mart', 'HM2002', '')
go
insert into menu(name, price, buy_date, expired_date, number)
values
('Bo Huc', 20000, '2020-06-02', '2020-12-02', 50),
('Lavi', 15000, '2020-06-05', '2020-12-05', 100),
('Tra Xanh Oo', 15000, '2020-02-02', '2020-12-02', 50)
go
----- Hieu ky hon ve primary key & foreign key
select * from room
-- Cau lenh sau bi error => Ma HM1001 => ton tai trong bang room.
insert into room(room_no, floor, price, capacity)
values
('HM1001', 3, 200000, 2)
go
select * from room
select * from device
---- Y nghia su dung foreign key trong csdl
insert into device(device_id, name, price, manufacturer_name, buy_date, shop_infor, room_no,
note)
values
('R007', 'Dieu Hoa Daikin 9000KWH', 10000000, 'Daikin', '2020-01-02', 'Media Mart', 'HM2009', '')
go
--- Fix
alter table room
add hotel_id int references hotel(id)
select * from hotel
select * from room
update room set hotel_id = 1
----------------------- SELECT ---------------------------
---- Liệt kế tất cả
select hotel.name, hotel.address, hotel.type, room.room_no, room.floor, room.price, room.capacity
from hotel, room
where room.hotel_id = hotel.id
----- Khách sạn loại 5*, phòng 2 người
select hotel.name, hotel.address, hotel.type, room.room_no, room.floor, room.price, room.capacity
from hotel, room
where room.hotel_id = hotel.id
and hotel.type = '5*'
and room.capacity = 2
----- Khách sạn loại 5*, phòng 2 người, giá 200000
select hotel.name, hotel.address, hotel.type, room.room_no, room.floor, room.price, room.capacity
from hotel, room
where room.hotel_id = hotel.id
and hotel.type = '5*'
and room.capacity = 2
and room.price >= 200000
------ Khách sạn có địa chỉ ở quận Ba Đinh
select hotel.name, hotel.address, hotel.type, room.room_no, room.floor, room.price, room.capacity
from hotel, room
where room.hotel_id = hotel.id
and hotel.address like '%Ba Dinh%'
select hotel.name, hotel.address, hotel.type, room.room_no, room.floor, room.price, room.capacity
from hotel, room
where room.hotel_id = hotel.id
and hotel.address not like '%Ba Dinh%'
------ Phòng chứa 1,2,3,5 người
select hotel.name, hotel.address, hotel.type, room.room_no, room.floor, room.price, room.capacity
from hotel, room
where room.hotel_id = hotel.id
and (
room.capacity = 1
or room.capacity = 2
or room.capacity = 3
or room.capacity = 5
)
--- Viet cach khac
select hotel.name, hotel.address, hotel.type, room.room_no, room.floor, room.price, room.capacity
from hotel, room
where room.hotel_id = hotel.id
and room.capacity in (1, 2, 3, 5)
select hotel.name, hotel.address, hotel.type, room.room_no, room.floor, room.price, room.capacity
from hotel, room
where room.hotel_id = hotel.id
and room.capacity not in (2, 3, 5)
----- Liệt kê thông tin : tên khách sạn, loại khách sạn, địa chỉ, số lượng phòng
select * from hotel
select * from room
select hotel.name, hotel.address, hotel.type, room.room_no
from hotel, room
where hotel.id = room.hotel_id
select hotel.name, hotel.address, hotel.type, count(room.room_no) 'So Phong'
from hotel, room
where hotel.id = room.hotel_id
group by hotel.name, hotel.address, hotel.type
-- Liệt kê thông tin : tên khách sạn, loại khách sạn, địa chỉ, số lượng phòng, số lượng phòng > 2
insert into room(room_no, floor, price, capacity, hotel_id)
values
('SMDH1001', 3, 200000, 2, 2)
go
select hotel.name, hotel.address, hotel.type, count(room.room_no) 'So Phong'
from hotel, room
where hotel.id = room.hotel_id
group by hotel.name, hotel.address, hotel.type
having count(room.room_no) > 2
select hotel.name, hotel.address, hotel.type, count(room.room_no) 'So Phong'
from hotel, room
where hotel.id = room.hotel_id
group by hotel.name, hotel.address, hotel.type
order by 'So Phong' asc
select hotel.name, hotel.address, hotel.type, count(room.room_no) 'So Phong'
from hotel, room
where hotel.id = room.hotel_id
group by hotel.name, hotel.address, hotel.type
order by 'So Phong' desc
------ JOIN
select hotel.name, hotel.address, hotel.type, room.room_no
from hotel, room
where hotel.id = room.hotel_id
select * from hotel
select * from room
delete from room where hotel_id = 2
--- Chuyen menh de tren sang select inner join
select hotel.name, hotel.address, hotel.type, room.room_no
from hotel inner join room on hotel.id = room.hotel_id
--- TH hien thi tat ca du lieu trong bang hotel => left join
---- hotel : table left, room -> table right
select hotel.name, hotel.address, hotel.type, room.room_no
from hotel left join room on hotel.id = room.hotel_id
---- hotel : table right, room -> table left
select hotel.name, hotel.address, hotel.type, room.room_no
from room left join hotel on hotel.id = room.hotel_id
select hotel.name, hotel.address, hotel.type, room.room_no
from room right join hotel on hotel.id = room.hotel_id
select hotel.name, hotel.address, hotel.type, room.room_no
from room full outer join hotel on hotel.id = room.hotel_id
select hotel.name, hotel.address, hotel.type, count(room.room_no) 'So Phong'
from hotel left join room on hotel.id = room.hotel_id
group by hotel.name, hotel.address, hotel.type
having count(room.room_no) = 0
select * from hotel
select * from room
delete from room where hotel_id = 2
Tags:
Phản hồi từ học viên
5
(Dựa trên đánh giá ngày hôm nay)