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)