Tags:

Bài tập SQL | Quản lý chuyến bay

Mô tả cơ sở dữ liệu

KHACHHANG(MAKH, TEN, DCHI, DTHOAI)\
Mỗi khách hàng có một mã để phân biệt với những người khác, có tên, địa chỉ và số điện thoại đểliên lạc.

NHANVIEN(MANV,TEN, DCHI, DTHOAI, LUONG, LOAINV)
Mỗi nhân viên của hãng hàng không có một tên, lương, địa chỉ, điện thoại và có một mã nhân viên duy nhất để phân biệt với các nhân viên khác. Nếu nhân viên là phi công thì giá trị thuộc tính LOAINV bằng 1, nếu nhân viên là tiếp viên thì giá trị LOAINV bằng 0.

LOAIMB(MALOAI, HANGSX)
Mỗi loại máy bay có một mã loại để phân biệt với các loại máy bay khác và do một hãng sản xuất.

MAYBAY(SOHIEU, MALOAI)
Mỗi máy bay có một số hiệu để phân biệt với các máy bay khác trong cùng một loại.

CHUYENBAY(MACB, SBDI, SBDEN, GIODI, GIODEN)
Một chuyến bay có một mã chuyến bay để phân biệt với các chuyến bay khác. Mỗi chuyến bay xuất phát từ một sân bay (SBDI) và hạ cánh tại một sân bay khác (SBDEN); khởi hành vào một giờ (GIODI) và hạ cánh vào một giờ khác (GIODEN).

LICHBAY(NGAYDI, MACB, SOHIEU, MALOAI)
Mỗi chuyến bay có thể có nhiều lịch bay. Mỗi lịch bay được xác định bởi một ngày khởi hành (NGAYDI) cụ thể và mã chuyến bay. Một lịch bay cụ thể chỉ sử dụng một máy bay. Giả sử mỗi chuyến bay chỉ được bố trí tối đa một lần cho một ngày.

DATCHO(MAKH, NGAYDI, MACB)
Mỗi khách hàng có thể đặt chỗ theo lịch bay của hãng hàng không đưa ra. Giả sử mỗi khách hàng chỉ được phép đặt tối đa một chỗ trên một chuyến bay vào một ngày cụ thể.

KHANANG(MANV, MALOAI)
Khả năng có thể lái loại máy bay của một phi công được biểu diễn bởi quan hệ KHANANG. Một phi công có thể biết lái nhiều loại máy bay khác nhau, và ngược lạI, mỗi loại máy bay có thể có nhiều phi công có khả năng lái.

PHANCONG(MANV, NGAYDI, MACB)
Các nhân viên được phân công vào một hay nhiều lịch bay. Thường đối với phi công, họ phải được xphân công lái những loại máy bay phù hợp với khả năng

Lược đồ cơ sở dữ liệu

Tạo dữ liệu ban đầu

Để thuận tiện cho việc viết truy vấn và dữ liệu để kiểm tra thì các bạn có thể thực thi đoạn scrpit sau

create database QL_ChuyenBay
go
use QL_ChuyenBay

-- Tạo bảng KHACHHANG
create table KHACHHANG
(
	MAKH nvarchar(15),
	TEN nvarchar(15),
	DCHI nvarchar(50),
	DTHOAI nvarchar(12),
	primary key (MAKH)
)

-- Tạo bảng NHANVIEN
create table NHANVIEN
(
	MANV nvarchar(15),
	TEN nvarchar(15),
	DCHI nvarchar(50),
	DTHOAI nvarchar(12),
	LUONG float,
	LOAINV bit,
	primary key (MANV)
)

-- Tạo bảng LOAIMB
create table LOAIMB
(
	MALOAI nvarchar(15),
	HANGSX nvarchar(15),
	primary key (MALOAI)
)
-- Tạo bảng MAYBAY
create table MAYBAY
(	
	SOHIEU int,
	MALOAI nvarchar(15),
	primary key (SOHIEU, MALOAI)
)

-- Tạo bảng chuyến bay
create table CHUYENBAY
(
	MACB nvarchar(4),
	SBDI nvarchar(3),
	SBDEN nvarchar(3),
	GIODI time,

	GIODEN time,
	primary key (MACB)
)

-- Tạo bảng LICHBAY
create table LICHBAY
(
	NGAYDI	datetime,
	MACB nvarchar(4),
	SOHIEU int,
	MALOAI nvarchar(15),
	primary key (NGAYDI, MACB)
)

-- Tạo bảng DATCHO
create table DATCHO
(
	MAKH nvarchar(15),
	NGAYDI datetime,
	MACB nvarchar(4),
	primary key(MAKH, NGAYDI, MACB)
)

-- Tạo bảng KHANANG
create table KHANANG
(
	MANV nvarchar(15),
	MALOAI nvarchar(15),
	primary key (MANV, MALOAI)
)


-- Tạo bảng PHANCONG
create table PHANCONG
(
	MANV nvarchar(15),
	NGAYDI datetime,
	MACB nvarchar(4),
	primary key (MANV, NGAYDI, MACB)
)


-- Tạo khóa ngoại cho bảng MAYBAY tham chiếu khóa chính của các table khác
	-- tham chiếu đến table LOAIMB
	alter table MAYBAY
	add constraint THUOC
	foreign key(MALOAI)
	references LOAIMB(MALOAI)	

-- Tạo khóa ngoại cho bảng LICHBAY tham chiếu đến khóa chính của các table khác
	-- Tham chiếu MACB của table CHUYENBAY
	alter table LICHBAY
	add constraint BAY
	foreign key (MACB)
	references CHUYENBAY(MACB)
	-- Tham chiếu SOHIEU, MALOAI của table MAYBAY
	alter table LICHBAY
	add constraint DINHDANH
	foreign key(SOHIEU, MALOAI)
	references MAYBAY(SOHIEU, MALOAI)

-- Tạo khóa ngoại cho table DATCHO tham chiếu đến khóa chính của các table khác
	-- Tham chiếu MAKH của table KHACHHANG
	alter table DATCHO
	add constraint DOITUONG
	foreign key (MAKH)
	references KHACHHANG(MAKH)

	-- Tham chiếu NGAYDI VÀ MACB của table LICHBAY
	alter table DATCHO
	add constraint PHUONGTIEN1
	foreign key (NGAYDI, MACB)
	references LICHBAY(NGAYDI, MACB)

-- Tạo khóa ngoại cho tablr KHANANG
	-- Tham chiếu MANV của table NHANVIEN
	alter table KHANANG
	add constraint PHUCVU
	foreign key (MANV)
	references NHANVIEN(MANV)
	-- Tham chiếu MALOAI của table LOAIMB
	alter table KHANANG
	add constraint T
	foreign key (MALOAI)
	references LOAIMB(MALOAI)
-- Tạo khóa ngoại cho table PHANCONG
	-- Tham chiếu MANV đến table NHANVIEN
	alter table PHANCONG
	add constraint NV
	foreign key (MANV)
	references NHANVIEN(MANV)
	--  Tham chiếu NGAYDI và MACB đến table LICHBAY
	alter table PHANCONG
	add constraint NV2
	foreign key( NGAYDI, MACB)
	references LICHBAY(NGAYDI, MACB)

	
	-- Nhập dữ liệu cho tablE KHACHHANG
	insert into KHACHHANG values ('0009',  'Nga', '223 Nguyen Trai', '8932220')
	insert into KHACHHANG values ('0101',  'Anh', '567 Tran Phu', '8826729')
	insert into KHACHHANG values ('0045',  'Thu', '285 Le Loi', '8932203')
	insert into KHACHHANG values ('0012',  'Ha', '435 Quang Trung', '8933232')
	insert into KHACHHANG values ('0238',  'Hung', '456 Pasteur', '9812101')
	insert into KHACHHANG values ('0397',  'Thanh', '234 Le Van Sy', '8952943')
	insert into KHACHHANG values ('0582',  'Mai', '789 Nguyen Du', null)
	insert into KHACHHANG values ('0934',  'Minh', '678 Le Lai', null)
	insert into KHACHHANG values ('0091',  'Hai', '345 Hung Vuong', '8893223')
	insert into KHACHHANG values ('0314',  'Phuong', '385 Vo Van Tuan', '8232320')
	insert into KHACHHANG values ('0613',  'Vu', '348 CMT8', '8343232')
	insert into KHACHHANG values ('0586',  'Son', '123 Bach Dang', '8556223')
	insert into KHACHHANG values ('0422',  'Tien', '75 Nguyen Thong', '8332222')


	--Nhập dữ liệu cho table CHUYENBAY
	insert into CHUYENBAY values ('100', 'SLC', 'BOS', '08:00','17:59' )
	insert into CHUYENBAY values ('112', 'DCA', 'DEN', '14:00','18:07' )
	insert into CHUYENBAY values ('121', 'STL', 'SLC', '07:00','9:13' )
	insert into CHUYENBAY values ('122', 'STL', 'YYV', '08:30','10:19' )
	insert into CHUYENBAY values ('206', 'DFW', 'STL', '09:00','11:40' )
	insert into CHUYENBAY values ('330', 'JFK', 'YYV', '16:00','18:53' )
	insert into CHUYENBAY values ('334', 'ORD', 'MIA', '12:00','14:14' )
	insert into CHUYENBAY values ('335', 'MIA', 'ORD', '15:00','17:14' )
	insert into CHUYENBAY values ('336', 'ORD', 'MIA', '18:00','20:14' )
	insert into CHUYENBAY values ('337', 'MIA', 'ORD', '20:30','23:53' )
	insert into CHUYENBAY values ('394', 'DFW', 'MIA', '19:00','21:30' )
	insert into CHUYENBAY values ('395', 'MIA', 'DFW', '21:00','23:43' )
	insert into CHUYENBAY values ('449', 'CDG', 'DEN', '10:00','19:29' )
	insert into CHUYENBAY values ('930', 'YYV', 'DCA', '13:00','16:10' )
	insert into CHUYENBAY values ('931', 'DCA', 'YYV', '17:00','18:10' )
	insert into CHUYENBAY values ('932', 'DCA', 'YYV', '18:00','19:10' )
	insert into CHUYENBAY values ('991', 'BOS', 'ORD', '17:00','18:22' )


	-- Nhập dữ liệu cho table LOAIMB
	insert into LOAIMB values  ('A310','Airbus')
	insert into LOAIMB values ('A320', 'Airbus')
	insert into LOAIMB values ('A330', 'Airbus')
	insert into LOAIMB values ('A340', 'Airbus')
	insert into LOAIMB values ('B727', 'Boeing')
	insert into LOAIMB values ('B747', 'Boeing')
	insert into LOAIMB values ('B757', 'Boeing')
	insert into LOAIMB values ('DC10', 'MD')
	insert into LOAIMB values ('DC9', 'MD')
	-- Nhập dữ liệu cho table NHANVIEN

	insert into NHANVIEN values ('1006', 'Chi', '12/6  Nguyen Kiem', '8120022', 150000, 0)
	insert into NHANVIEN values ('1005', 'Giao', '65 Nguyen Thai Son', '8324467', 500000, 0)
	insert into NHANVIEN values ('1001', 'Huong', '8 Dien Bien Phu', '8330733', 500000, 1)
	insert into NHANVIEN values ('1002', 'Phong', '1 Ly Thuong Kiet', '8308117', 150000, 1)
	insert into NHANVIEN values ('1004', 'Phuong', '351 Lac Long Quan', '8308155', 250000, 0)
	insert into NHANVIEN values ('1003', 'Quang', '78 Truong Dinh', '8324461', 350000, 1)
	insert into NHANVIEN values ('1007', 'Tam', '36 Nguyen Van Cu', '8458188', 500000, 0)

	

	-- Nhập dữ liệu cho table KHANANG
	insert into KHANANG values ('1001', 'B727')
	insert into KHANANG values ('1001', 'B747')
	insert into KHANANG values ('1001', 'DC10')
	insert into KHANANG values ('1001', 'DC9')
	insert into KHANANG values ('1002', 'A320')
	insert into KHANANG values ('1002', 'A340')
	insert into KHANANG values ('1002', 'B757')
	insert into KHANANG values ('1002', 'DC9')
	insert into KHANANG values ('1003', 'A310')
	insert into KHANANG values ('1003', 'DC9')


	-- Nhập dữ liệu cho table MAYBAY
	insert into MAYBAY VALUES (10, 'B747')
	insert into MAYBAY VALUES (11, 'B727')
	insert into MAYBAY VALUES (13, 'B727')
	insert into MAYBAY VALUES (13, 'B747')
	insert into MAYBAY VALUES (21, 'DC10')
	insert into MAYBAY VALUES (21, 'DC9')
	insert into MAYBAY VALUES (22, 'B757')
	insert into MAYBAY VALUES (22, 'DC9')
	insert into MAYBAY VALUES (23, 'DC9')
	insert into MAYBAY VALUES (24, 'DC9')
	insert into MAYBAY VALUES (70, 'A310')
	insert into MAYBAY VALUES (80, 'A310')
	insert into MAYBAY VALUES (93, 'B757')
	

	-- Nhập dữ liệu cho table LICHBAY 

	insert into LICHBAY values ('11/01/2000', '100', 80, 'A310')
	insert into LICHBAY values ('11/01/2000', '112', 21, 'DC10')
	insert into LICHBAY values ('11/01/2000', '206', 22, 'DC9')
	insert into LICHBAY values ('11/01/2000', '334', 10, 'B747')
	insert into LICHBAY values ('11/01/2000', '395', 23, 'DC9')
	insert into LICHBAY values ('11/01/2000', '991', 22, 'B757')
	insert into LICHBAY values ('11/01/2000', '337', 10, 'B747')
	insert into LICHBAY values ('10/31/2000', '100', 11, 'B727')
	insert into LICHBAY values ('10/31/2000', '112', 11, 'B727')
	insert into LICHBAY values ('10/31/2000', '206', 13, 'B727')
	insert into LICHBAY values ('10/31/2000', '334', 10, 'B747')
	insert into LICHBAY values ('10/31/2000', '335', 10, 'B747')
	insert into LICHBAY values ('10/31/2000', '337', 24, 'DC9')
	insert into LICHBAY values ('10/31/2000', '449', 70, 'A310')


	-- Nhập dữ liệu cho table DATCHO
	insert  into DATCHO values ('0009', '11/01/2000', 100)
	insert  into DATCHO values ('0009', '10/31/2000', 449)
	insert  into DATCHO values ('0045', '11/01/2000', 991)
	insert  into DATCHO values ('0012', '10/31/2000', 206)
	insert  into DATCHO values ('0238', '10/31/2000', 334)
	insert  into DATCHO values ('0582', '11/01/2000', 991)
	insert  into DATCHO values ('0091', '11/01/2000', 100)
	insert  into DATCHO values ('0314', '10/31/2000', 449)
	insert  into DATCHO values ('0613', '11/01/2000', 100)
	insert  into DATCHO values ('0586', '11/01/2000', 991)
	insert  into DATCHO values ('0586', '10/31/2000', 100)
	insert  into DATCHO values ('0422', '10/31/2000', 449)
	
	
	-- Nhập dữ liệu cho table PHANCONG
	insert into PHANCONG  values ('1001', '11/01/2000', '100')
	insert into PHANCONG  values ('1001', '10/31/2000', '100')
	insert into PHANCONG  values ('1002', '11/01/2000', '100')
	insert into PHANCONG  values ('1002', '10/31/2000', '100')
	insert into PHANCONG  values ('1003', '10/31/2000', '100')
	insert into PHANCONG  values ('1003', '10/31/2000', '337')
	insert into PHANCONG  values ('1004', '10/31/2000', '100')
	insert into PHANCONG  values ('1004', '10/31/2000', '337')
	insert into PHANCONG  values ('1005', '10/31/2000', '337')
	insert into PHANCONG  values ('1006', '11/01/2000', '991')
	insert into PHANCONG  values ('1006', '10/31/2000', '337')
	insert into PHANCONG  values ('1007', '11/01/2000', '112')
	insert into PHANCONG  values ('1007', '11/01/2000', '991')
	insert into PHANCONG  values ('1007', '10/31/2000', '206')

Bài tập

 

	-- 1, Cho biết mã số tên phi công, địa chỉ,  điện thoại của các phi công đã từng lái máy bay 747
	select NV.MANV,NV.TEN, NV.DCHI, NV.DTHOAI
	FROM NHANVIEN NV, LICHBAY LB, PHANCONG PC
	where LB.MALOAI = 'B747' and PC.MACB = LB.MACB AND PC.NGAYDI = LB.NGAYDI and PC.MANV = NV.MANV and NV.LOAINV = 1

-- 2, Cho biết mã số và ngày đi của các chuyến bay xuất phát từ sân bay DCA trong khoảng thời gian từ 14h - 18h
	select CB.MACB, LB.NGAYDI
	from CHUYENBAY CB, LICHBAY LB
	where (SBDI = 'DCA' and (GIODI between '14:00' and '18:00') and ( CB.MACB = LB.MACB))


	-- 3, Cho biết những nhân viên được phân công trên chuyến bay có mã số 100 xuất phát tại sân bay SLC. các dòng chữ xuất ra không được phép
	-- trùng lắp

	select DISTINCT NV.TEN
	from CHUYENBAY CB, NHANVIEN NV, PHANCONG PC, LICHBAY LB
	where ((CB.MACB = '100') and (SBDI = 'SLC') and PC.MACB = CB.MACB AND LB.MACB = CB.MACB and PC.NGAYDI = LB.NGAYDI AND NV.MANV = PC.MANV)


	-- 4,Cho biết mã loại và số hiệu máy bay đã từng xuất phát tại sân bay MIA. các dòng chữ xuất ra không được trùng lắp
	select DISTINCT MALOAI, SOHIEU
	FROM LICHBAY LB, CHUYENBAY CB
	where ((CB.SBDI = 'MIA') and (LB.MACB = CB.MACB))

	-- 5, Cho biết mã chuyến bay, ngày đi, cùng với tên, địa chỉ, điện thoại, của tất cả các hành khách đi trên chuyến bay đó, sắp xếp theo thứ
	-- tự tăng dần của mã chuyến bay và giảm dần theo ngày đi

	select DISTINCT LB.MACB, LB.NGAYDI,TEN, DCHI, DTHOAI
	from LICHBAY LB, KHACHHANG KH, DATCHO DT, CHUYENBAY CB
	where (DT.MAKH = KH.MAKH and DT.MACB = LB.MACB and LB.NGAYDI = DT.NGAYDI and CB.MACB = LB.MACB)
	order by LB.MACB ASC, LB.NGAYDI DESC


	--6, Cho biết mã chuyến bay, ngày đi, mã số và tên, địa chỉ điện thoại của tất cả những nhân viên được phân công trên chuyến bay đó.
	--tự tăng dần của mã chuyến bay và giảm dần theo ngày đi
		select MACB, NGAYDI, NV.MANV, NV.TEN, DCHI, DTHOAI
		FROM NHANVIEN NV, PHANCONG PC
		WHERE NV.MANV = PC.MANV
		order by PC.MACB ASC, PC.NGAYDI DESC
	-- 7, Cho biết mã chuyến bay, ngày đi, mã số và tên của những phi công	được phân vào chuyến bay hạ cánh xuống sân bay ORĐ

	select CB.MACB, LB.NGAYDI, NV.MANV, TEN
	from CHUYENBAY CB, NHANVIEN NV, PHANCONG PC, LICHBAY LB
	where (CB.MACB = PC.MACB and PC.NGAYDI = LB.NGAYDI and NV.MANV = PC.MANV and CB.SBDEN = 'ORD' and LB.MACB = CB.MACB)


	-- 8, Cho biết các chuyến bay (mã số chuyến bay, ngày đi và tên của phi công) trong đó phi công có mã số 1001 được phân công lái.
	select  PC.MACB, NGAYDI, TEN
	from NHANVIEN NV, PHANCONG PC
	where (NV.MANV = '1001' and NV.MANV = PC.MANV)

	-- 9, Cho biết thông tin(mã chuyến bay, sân bay đi, giờ đi, giờ đến, ngày đi) của những chuyến bay hạ cánh xuống DEN. Các chuyến bay được
	-- liệt kê theo ngày giảm dần, và sân bay xuất phát tăng dần
	select CB.MACB, SBDI, GIODI, GIODEN, NGAYDI
	from CHUYENBAY CB, LICHBAY LB
	where (CB.SBDEN = 'DEN' and CB.MACB = LB.MACB )
	order by NGAYDI DESC, SBDI ASC

	-- 10, Với mỗi phi công, cho biết hãng sản xuất và mã loại máy bay mà phi công này có khả năng lái. Xuất tên phi công, hãng sản xuất và MALOAI
	select TEN, HANGSX, LMB.MALOAI
	from KHANANG KN, NHANVIEN NV, LOAIMB LMB
	where( NV.MANV = KN.MANV and KN.MALOAI = LMB.MALOAI)


	-- 11, Cho biết mã phi công, tên phi công đã lái máy bay trong chuyến bay mã số 100, và ngày 11/1/2000
	select NV.MANV, TEN
	from NHANVIEN NV, PHANCONG PC, LICHBAY LB
	where (LB.MACB = '100' and  LB.NGAYDI = '11/01/2000' AND LB.MACB = PC.MACB AND NV.MANV = PC.MANV AND PC.NGAYDI = LB.NGAYDI)


	--12, Cho biết mã chuyến bay, mã nhân viên, tên nhân viên được phân công  vào chuyến bay xuất phát ngày 10/31/2000. tại sân bay MIA vào
	-- lúc 20h30
	select PC.MACB, NV.MANV, TEN
	from NHANVIEN NV, PHANCONG PC, CHUYENBAY CB, LICHBAY LB
	where(CB.SBDI = 'MIA' and CB.GIODI = '20:30' and LB.NGAYDI ='10/31/2000' and LB.MACB = LB.MACB and PC.NGAYDI = LB.NGAYDI and PC.MACB = LB.MACB and PC.MANV = NV.MANV and LB.MACB = CB.MACB)

	-- 13, Cho biết thông tin về chuyến bay mà phi công Quang đã lái(mã chuyến bay, số hiệu, mã loại, hãng sản xuất, )
		select PC.MACB, SOHIEU, LMB.MALOAI, LMB.HANGSX
		from NHANVIEN NV, PHANCONG PC, LOAIMB LMB, LICHBAY LB, CHUYENBAY CB
		where NV.MANV = PC.MANV and NV.TEN = 'Quang' and LB.MACB = PC.MACB and LB.MALOAI = LMB.MALOAI and LB.NGAYDI = PC.NGAYDI and LB.MACB = CB.MACB



	-- 14, Cho biết những phi công chưa được phân công chuyến bay nào
	
	select TEN
	from NHANVIEN 
	where (MANV NOT IN (select PC.MANV FROM PHANCONG PC))
	

	-- 15,Cho biết tên những khách hàng đã đi chuyến bay trên máy bay của hãng BOEING
	select DISTINCT TEN
	FROM KHACHHANG KH, LOAIMB LMB, LICHBAY LB, DATCHO DC, CHUYENBAY CB
	where (LMB.HANGSX = 'Boeing' and LB.MALOAI = LMB.MALOAI and DC.MAKH = KH.MAKH and DC.MACB = LB.MACB and DC.NGAYDI = LB.NGAYDI and CB.MACB = LB.MACB )


	-- Cho biết mã các chuyến bay chỉ bay với số hiệu là 10 và mã loại b747
	select DISTINCT MACB
	from LICHBAY LB
	where (LB.SOHIEU = 10 and LB.MALOAI = 'B747')

	--------------------------------------------------------------------------------------------------------------------------
	--											TUẦN 4

	-- Câu 17: với mỗi sân bay(SBDEN), cho biết số lượng chuyến bay hạ cánh xuống sân bay đó. Kêt quả được sắp xếp theo thứ tự tăng dần của
	-- số chuyến bay đến.
	select SBDEN, COUNT(*) AS SOLUONG
	FROM CHUYENBAY CB
	GROUP BY SBDEN 
	ORDER BY SOLUONG ASC
	-- Câu 18: Với mỗi sân bay đi(SBDI), cho biết số lượng sân bay xuất phát từ sân bay đó	, sắp xếp theo thứ tự tăng dần của chuyến bay xuất 
	-- phát
	select SBDI, COUNT(*) AS SOLUONG
	FROM CHUYENBAY CB
	GROUP BY SBDI
	ORDER BY SOLUONG ASC
	-- Câu 19: Với mỗi sân bay(SBDI), cho biết số lượng chuyến bay xuất phát theo từng ngày. Xuất ra mã sân bay, ngày và số lượng
	select SBDI, NGAYDI, COUNT(*) AS SOLUONG
	FROM CHUYENBAY CB, LICHBAY LB
	WHERE CB.MACB = LB.MACB
	GROUP BY SBDI, NGAYDI
	-- Câu 20: Với mỗi sân bay đến(SBDEN), cho biết số lượng chuyến bay hạ cánh theo từng ngày. Xuất ra mã	sân bay đến, ngày và số lượng.
	select SBDEN, NGAYDI, COUNT(*) AS SOLUONG
	FROM CHUYENBAY CB, LICHBAY LB
	WHERE CB.MACB = LB.MACB
	GROUP BY SBDEN, NGAYDI
	-- Câu 21: Với mỗi lịch bay, cho biết mã chuyến bay, ngày đi, cùng số lượng nhân viên không phải là phi công của chuyến bay đó
	select LB.MACB, LB.NGAYDI,COUNT(PC.MANV) AS SOLUONGNHANVIENKHONGTHAMGIA
	FROM LICHBAY LB, PHANCONG PC, NHANVIEN NV
	WHERE PC.NGAYDI = LB.NGAYDI AND PC.MACB = LB.MACB AND PC.MANV = NV.MANV AND NV.LOAINV = 0
	GROUP BY LB.MACB, LB.NGAYDI
	-- Câu 22: Số lượng chuyến bay xuất phát từ sân bay MIA vào ngày 11/01/2000
	SELECT COUNT(*) SOLUONG
	FROM CHUYENBAY CB, LICHBAY LB
	WHERE CB.SBDI = 'MIA' AND LB.NGAYDI = '11/01/2000' AND LB.MACB = CB.MACB
	-- Câu 23; Với mỗi chuyến bay cho biết mã chuyến bay, ngày đi, số lượng nhân viên được phân công trên chuyến bay đó, sắp theo thứ tự 
	-- giảm dần số lượng
	SELECT LB.MACB, LB.NGAYDI, COUNT(*) SOLUONGNHANVIENTHAMGIA
	FROM LICHBAY LB, NHANVIEN NV, PHANCONG PC
	WHERE PC.MACB = LB.MACB AND PC.NGAYDI = LB.NGAYDI AND PC.MANV = NV.MANV
	GROUP BY LB.MACB, LB.NGAYDI
	-- Câu 24: Với mỗi chuyến bay, cho biết mã chuyến bay, ngày đi, cùng với số lượng hành khách đã đặt chỗ của chuyến bay đó, sắp xếp theo thứ
	-- tự giảm dần của số lượng
	SELECT DC.MACB, DC.NGAYDI, COUNT(*) AS SOLUONGHANHKHACH
	FROM LICHBAY LB, DATCHO DC, KHACHHANG KH
	WHERE DC.MACB = LB.MACB AND DC.NGAYDI = LB.NGAYDI AND DC.MAKH = KH.MAKH
	GROUP BY DC.MACB, DC.NGAYDI
	ORDER BY SOLUONGHANHKHACH DESC
	-- Câu 25: Với mỗi chuyến bay, cho biết mã chuyến bay, ngày đi, tổng lương của phi hành đoàn. sắp tăng dần tổng lương
	SELECT PC.MACB, PC.NGAYDI, SUM(LUONG) AS TONGLUONG
	FROM LICHBAY LB, NHANVIEN NV, PHANCONG PC
	WHERE LB.NGAYDI = PC.NGAYDI AND LB.MACB = PC.MACB 
	GROUP BY PC.MACB, PC.NGAYDI
	-- 26: Cho biết lương trung bình của các nhân viên không là phi công
	SELECT AVG(LUONG) AS LUONGTRUNGBINHCUANHANVIEN
	FROM NHANVIEN NV
	WHERE NV.LOAINV = 0
	-- 27: Cho biết mức lương trung bình của các phi công
	SELECT AVG(LUONG) AS LUONGTRUNGBINHCUAPHICONG
	FROM NHANVIEN NV
	WHERE NV.LOAINV = 1
	-- 28: Với mỗi loại máy bay, cho biết số lượng chuyến bay đã bay trên loại máy bay đó hạ cánh xuống sân bay ORD/ Xuất mã loại máy bay và
	-- số lượng chuyến bay.
	SELECT LB.MALOAI, COUNT(*) SOLUONGCHUYENBAY
	FROM CHUYENBAY CB, LICHBAY LB
	WHERE LB.MACB = CB.MACB AND CB.SBDEN = 'ORD'
	GROUP BY LB.MALOAI 
	-- Câu 29: Cho biết sân bay(SBDI) và số lượng chuyến bay có nhiều hơn 2 chuyến bay xuất phát trong khoảng 10h đến 22h
	SELECT SBDI, COUNT(*) SOLUONG
	FROM CHUYENBAY CB
	WHERE GIODI BETWEEN '10:00' AND '22:00'
	GROUP BY SBDI
	HAVING COUNT(*) > 2
	-- Câu 30: Cho biết tên phi công đã được phân công vào ít nhất 2 chuyến bay trong cùng một ngày
	SELECT NV.TEN
	FROM PHANCONG PC, NHANVIEN NV
	WHERE PC.MANV = NV.MANV AND NV.LOAINV = 1
	GROUP BY NV.TEN
	HAVING COUNT(*) > 2
	-- Câu 31: Cho biết mã chuyến bay và ngày đi của những chuyến bay có ít hơn 3 hành khách đặt chỗ
	SELECT DC.MACB, DC.NGAYDI
	FROM LICHBAY LB, DATCHO DC
	WHERE LB.NGAYDI = DC.NGAYDI AND LB.MALOAI = DC.MACB 
	GROUP BY DC.NGAYDI, DC.MACB
	HAVING COUNT(DC.MAKH) < 3
	-- Câu 32: Cho biết số hiệu máy bay và loại máy bay mà phi công có mã 1001 được phân lái trên 2 lần
	SELECT SOHIEU, LB.MALOAI
	FROM PHANCONG PC, LICHBAY LB
	WHERE PC.MANV = '1001' AND PC.MACB = LB.MACB AND PC.NGAYDI = LB.NGAYDI
	GROUP BY LB.SOHIEU, LB.MALOAI
	HAVING COUNT(*) >2
	-- Câu 33: Với mỗi hãng sản xuất, cho biết số lượng loại máy bay mà hãng đó sản xuất. Xuất ra hãng sản xuất và số lượng.
	SELECT HANGSX, COUNT(LMB.MALOAI) AS SOLUONGMAYBAY
	FROM LOAIMB LMB, MAYBAY MB
	WHERE LMB.MALOAI = MB.MALOAI
	GROUP BY HANGSX
	-- Câu 34: Cho biết hãng sản xuất, mã loại và số hiệu của máy bay được sử dụng nhiều nhất
	SELECT HANGSX, LMB.MALOAI, LB.SOHIEU
	FROM LOAIMB LMB, LICHBAY LB
	WHERE LMB.MALOAI = LB.MALOAI 
	GROUP BY HANGSX, LMB.MALOAI, LB.SOHIEU
	HAVING COUNT(LB.SOHIEU) >= ALL(SELECT COUNT(*)
									 FROM LICHBAY LB2 
									 GROUP BY LB2.MALOAI, LB2.SOHIEU
									 )
	-- Câu 35: Cho biết tên nhân viên được phân công đi nhiều chuyến bay nhất
	SELECT NV.TEN
	FROM NHANVIEN NV, PHANCONG PC
	WHERE NV.MANV = PC.MANV AND NV.LOAINV = 0
	GROUP BY NV.TEN
	HAVING COUNT(NV.MANV) >= ALL (SELECT COUNT(*) 
							FROM PHANCONG PC, NHANVIEN NV
							WHERE NV.MANV = PC.MANV AND NV.LOAINV = 0
							GROUP BY PC.MANV)									
	-- Câu 36: Cho biết thông tin của phi công(Tên, địa chỉ, điện thoại) lái nhiều chuyến bay nhất
	SELECT NV.TEN, NV.DCHI, NV.DTHOAI
	FROM NHANVIEN NV, PHANCONG PC
	WHERE PC.MANV = NV.MANV AND NV.LOAINV = 1
	GROUP BY NV.TEN, NV.DCHI, NV.DTHOAI
	HAVING COUNT(*) >= ALL (SELECT COUNT(*)
							 FROM PHANCONG PC, NHANVIEN NV
							 WHERE PC.MANV = NV.MANV AND NV.LOAINV = 1
							 GROUP BY PC.MANV)
	-- Câu 37: Cho biết sân bay(SBDEN) và số lượng chuyến bay của sân bay có ít chuyến bay đáp xuống nhất
	SELECT SBDEN, COUNT(*) SOLUONGCHUYENBAYDAP
	FROM CHUYENBAY CB
	GROUP BY CB.SBDEN
	HAVING COUNT(*) <= ALL (SELECT COUNT(*)
							FROM CHUYENBAY CB
							GROUP BY CB.SBDEN)
	-- Câu 38: Cho biết sân bay(SBDI) và số lượng chuyến bay của sân bay có nhiều chuyến bay xuất phát nhất
	SELECT SBDI, COUNT(*) SOLUONGCHUYENBAYCATCANH
	FROM CHUYENBAY CB
	GROUP BY CB.SBDI
	HAVING COUNT(*) >= ALL (SELECT COUNT(*) 
							FROM CHUYENBAY CB
							GROUP BY CB.SBDI)
	-- Câu 39: Cho biết tên, địa chỉ, điện thoại của khách hàng đã đi trên nhiều chuyến bay nhất
	SELECT TEN, DCHI, DTHOAI
	FROM KHACHHANG KH, DATCHO DC
	WHERE KH.MAKH = DC.MAKH
	GROUP BY DC.MAKH
	HAVING COUNT(*) >= ALL (SELECT COUNT(*)
							FROM DATCHO DC
							GROUP BY DC.MAKH)
	-- Câu 40: Cho biết mã số, tên, lương của các phi công có khả năng lái nhiều máy bay nhất
	SELECT KN.MANV, TEN, LUONG
	FROM NHANVIEN NV, KHANANG KN
	WHERE NV.MANV = KN.MANV
	GROUP BY KN.MANV 
	HAVING COUNT(*) >= ALL (SELECT COUNT(*)
							FROM KHANANG KN
							GROUP BY KN.MANV)
		
	-- Câu 41: Cho biết thông tin của nhân viên(mã, tên, lương) của nhân viên có lương cao nhất
	SELECT MANV, TEN, LUONG
	FROM NHANVIEN 
	WHERE LUONG = (SELECT MAX(LUONG)
					FROM NHANVIEN)
	-- Câu 42: Cho biết tên, địa chỉ, của các nhân viên LƯƠNG cao nhất trong phi hành đoàn(các nhân viên được phân công trong 1 chuyến bay mà
	-- người đó tham gia
	SELECT TEN, DCHI
	FROM NHANVIEN NV
	WHERE EXISTS (  SELECT *
					FROM PHANCONG PC,  NHANVIEN NV1
					WHERE NV1.MANV = PC.MANV
					GROUP BY MACB, NGAYDI
					HAVING NV.LUONG IN(SELECT MAX(NV1.LUONG) 
									    FROM PHANCONG PC,  NHANVIEN NV1
										WHERE NV1.MANV = PC.MANV
										GROUP BY MACB, NGAYDI
										)
					)

	-- Câu 43: Cho biết mã chuyến bay, giờ đi, giờ đến của chuyến bay sớm nhất trong ngày
	SELECT CB.MACB, LB.NGAYDI, CB.GIODI, CB.GIODEN
	FROM LICHBAY LB, CHUYENBAY CB
	WHERE LB.MACB = CB.MACB AND EXISTS (

										SELECT*
										FROM LICHBAY LB1, CHUYENBAY CB1
										WHERE LB1.MACB = CB1.MACB AND LB.NGAYDI = LB1.NGAYDI
										GROUP BY LB1.NGAYDI
										HAVING CB.GIODI = MIN(CB1.GIODI)
										)
						

	

	-- Câu 44: Cho biết mã chuyến bay có thời gian bay dài nhất. Xuất ma ra mã chuyến bay và thời gian bay(tính bằng phút)
	SELECT CB.MACB, DATEDIFF(MI, CB.GIODI, CB.GIODEN)
	FROM CHUYENBAY CB
	WHERE DATEDIFF(MI, CB.GIODI, CB.GIODEN) >= ALL (SELECT DATEDIFF(MI, CB.GIODI, CB.GIODEN) 
												FROM CHUYENBAY CB)
	-- Câu 45: Cho biết mã chuyến bay có thời gian bay ít nhất. Xuất ra mã chuyến bay và thời gian bay
	SELECT CB.MACB, DATEDIFF(MI, CB.GIODI, CB.GIODEN)
	FROM CHUYENBAY CB
	WHERE DATEDIFF(MI, CB.GIODI, CB.GIODEN) <= ALL (SELECT DATEDIFF(MI, CB.GIODI, CB.GIODEN) 
												FROM CHUYENBAY CB)
	-- Câu 46: Cho biết mã chuyến bay, ngày đi của của những chuyến bay trên loại máy bay B747 nhiều nhất
	SELECT MACB, NGAYDI
	FROM LICHBAY LB
	WHERE EXISTS(
			SELECT *
			FROM LICHBAY LB1
			WHERE LB1.MALOAI = 'B747' AND LB1.MACB = LB.MACB
			GROUP BY MACB
			HAVING COUNT(LB1.NGAYDI) >= ALL (SELECT COUNT(LB2.NGAYDI)
									FROM LICHBAY LB2
									WHERE LB2.MALOAI = 'B747'
									GROUP BY MACB
								)
								)
	-- Câu 47: Với mỗi chuyến bay có trên 3 hành khách, cho biết mã chuyến bay và số lượng nhân viên trên chuyến bay đó. Xuất ra mã chuyến bay
	-- số lượng nhân viên
	SELECT LB.MACB, COUNT(DISTINCT PC.MANV) SOLUONGNHANVIEN
	FROM DATCHO DC, PHANCONG PC, LICHBAY LB
	WHERE DC.MACB = LB.MACB AND DC.NGAYDI = LB.NGAYDI AND PC.NGAYDI = LB.NGAYDI AND PC.MACB = LB.MACB
	GROUP BY LB.MACB, LB.NGAYDI
	HAVING COUNT(DISTINCT DC.MAKH) > 2
	
	-- 48: Với mỗi loại nhân viên có tổng lương	trên 600000, cho biết số lượng nhân viên trong từng loại nhân viên đó. xuất loại nhân viên,
	-- số lượng nhân viên tương ứng
	SELECT LOAINV, COUNT(MANV)
	FROM NHANVIEN NV
	GROUP BY LOAINV
	HAVING SUM(NV.LUONG) > 600000
	-- Câu 49: Với mỗi chuyến bay có trên 3 nhân viên, cho biết mã chuyến bay, và số lượng khách hàng đã đặt chỗ trên chuyến bay đó.
	SELECT LB.MACB, COUNT(DISTINCT DC.MAKH) SOLUONGKHACH
	FROM DATCHO DC, PHANCONG PC, LICHBAY LB
	WHERE DC.MACB = LB.MACB AND DC.NGAYDI = LB.NGAYDI AND PC.NGAYDI = LB.NGAYDI AND PC.MACB = LB.MACB
	GROUP BY LB.MACB, LB.NGAYDI
	HAVING COUNT(DISTINCT PC.MANV) > 1
	-- Câu 50:Với mỗi loại máy bay có nhiều hơn 1 chiếc, cho biết số lượng chuyến bay đã được bố trí bay bằng loại máy bay đó, xuất ra mã loạivà
	-- số lượng
	SELECT LB.MALOAI, COUNT(*) SOLUONGCHUYENBAY
	FROM LICHBAY LB
	WHERE LB.MALOAI IN (SELECT MALOAI
						FROM MAYBAY MB
						GROUP BY MALOAI
						HAVING COUNT(*) > 1)
	GROUP BY LB.MALOAI
	-------------------------------------------------------------------------------------------------------------------------------------

Bài tập tự luyện – Phép chia

Q51.  Cho biết mã những chuyến bay đã bay tất cả các máy bay của hãng “Boeing”.

Q52.  Cho biết mã và tên phi công có khả năng lái tất cả các máy bay của hãng “Airbus”.

Q53.  Cho biết tên nhân viên (không phải là phi công) được phân công bay vào tất cả các chuyến bay có mã 100.

Q54.  Cho biết ngày đi nào mà có tất cả các loại máy bay của hãng “Boeing” tham gia.

Q55.  Cho biết loại máy bay của hãng “Boeing” nào có tham gia vào tất cả các ngày đi.

Q56.  Cho biết mã và tên các khách hàng có đặt chổ trong tất cả các ngày từ 31/10/2000 đến 1/1/2000

Q57.  Cho biết mã và tên phi công không có khả năng lái được tất cả các máy bay của hãng “Airbus”

Q58.  Cho biết sân bay nào đã có tất cả các loại máy bay của hãng “Boeing” xuất phát.

3 2 votes
Article Rating
Subscribe
Notify of
guest
13 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
13
0
Would love your thoughts, please comment.x
()
x