Cho lượcđồ CSDL “Quảnlýcửahàngbánhngọt” nhưsau: - LOAI_BANH MA_LOAI, TEN_LOAI, MO_TA - BANH MA_BANH, TEN _BANH, DON_GIA, DON_VI_TINH, TRANG_THAI, MA_LOAI - KHACH_HANG MA_KHACH_HANG, TEN
Trang 11.1.CƠ SỞ DỮ LIỆU.
A. Cho lượcđồ CSDL “Quảnlýcửahàngbánhngọt” nhưsau:
- LOAI_BANH (MA_LOAI, TEN_LOAI, MO_TA)
- BANH (MA_BANH, TEN _BANH, DON_GIA,
DON_VI_TINH, TRANG_THAI, MA_LOAI)
- KHACH_HANG (MA_KHACH_HANG, TEN_KHACH_HANG,
DIEN_THOAI, EMAIL)
- HOA_DON (MA_HOA_DON, MA_KHACH_HANG,
NGAY_MUA)
- CHI_TIET_HOA_DON (MA_HOA_DON, MA_BANH, SO_LUONG)
Ghi chú: Trong bảng BANH: TRANG_THAI=1: còn hàng, TRANG_THAI=0: hết hàng.
1. Xác định KHÓA CHÍNH của các quan hệ:
LOAI_BANH: MA_LOAI
BANH: MA_BANH
KHACH_HANG: MA_KHACH_HANG
CHI_TIET_HOA_DON: MA_HOA_DON, MA_BANH
2. Xác định KHÓA NGOẠI trong lược đồ CSDL:
- LOAI_BANH: khôngcó
- BANH: MA_LOAI
- KHACH_HANG: khôngcó
- CHI_TIET_HOA_DON: MA_HOA_DON, MA_BANH
3. Sử dụng ngôn ngữ SQL thực hiện các yêu cầu sau:
a. Liệt kê tất cả các bánh gồm mã bánh, tên bánh, đơn giá của những bánh có đơn
vị tính là “kg” và thuộc loại bánh “Quy Bơ”
SELECT MA_BANH, TEN_BANH, DON_GIA
FROM BANH iner join LOAI_BANH on BANH.MA_LOAI =
LOAI_BANH.MA_LOAI
WHERE BANH.DON_VI_TINH = "kg" AND LOAI_BANH = " QuyBơ " VD: có sắp xếp thì thêm [ ORDER BY BANH.DON_GIA DESC ]
b. Liệtkêdanhsáchcácbánhhiệnđangcònhàngvàcóđơnvịtính “kg” hoặc “gói”
SELECT *
FROM BANH
WHERE TRANG_THAI = 1 AND ( DON _VI_TINH = "kg" OR
DON_VI_TINH = "goi"
c. Cho biếtthông tin kháchhàngmuagầnđâynhất (tên KH, ngàymua)
( SECLECT MAX ( NGAY_MUA) " Ngay Gan Nhat "
Trang 2FROM HOA_DON
SELECT TEN_KHAC_HANG, NGAY_MUA
FROM KHACH_HANG iner join HOA_DON on
KHACH_HANG.MA_KHACH_HANG =
HOA_DON.MA_KHACH_HANG
WHERE HOA_DON.NGAY_MUA = ( SELECT MAX ( NGAY_MUA) FROM HOA_DON )
d. Liệtkêcáchóađơncóngàymuatrongkhoảngtừngày ‘01/02/2014’ đến ‘10/03/2014’
SECLECT *
FROM HOA_DON
c1.WHERE NGAY_MUA >= " 2014 - 02 - 10 " AND NGAY_MUA <=
" 2014 - 03 - 01 "
C2 WHERE NGAY_MUA BETWEEN " 2014 - 02 - 01 " AND " 2014 -
03 - 10 "
e. Hãychobiếtmỗiloạibánhcóbaonhiêubánh (mãloại, tênloại, sốbánh)
(*) Truy vấn con viết để phục vụ cho truy vấn lớn
(*) Sau khi nhóm xong, có kèm điều kiện gì không " nếu có thì dùng " HAVING
SELECT -> trừ những cột thông kê ra, những cột còn lại thì SELECT
gì thì GROUP BY đó
SELECT LOAI_BANH.MA_LOAI, LOAI_BANH.TEN_LOAI, COUNT ( BANH.MA_BANH )
FROM LOAI_BANH iner join BANH on LOAI_BANH.MA_LOAI = BANH.MA_LOAI
GROUP BY LOAI_BANH.MA_LOAI, LOAI_BANH.TEN_LOAI
f. Hãyliệtkênhữngbánhđượcmuavàongày ‘08/03/2014’
SELECT BANH.TEN_BANH [ hoặc BANH * ]
FROM CHI_TIET_HOA_DON iner join HOA_DON on
CHI_TIET_HOA_DON.MA_HOA_DON = HOA_DON.MA_HOA_DON iner join BANH on BANH.MA _BANH =
CHI_TIET_HOA_DON.MA_BANH
WHERE HOA_DON.NGAY_MUA = " 2014 - 03 - 08 "
B. Cho lược đồ CSDL “Quản lý sinh viên” như sau:
KHOA (MA_KHOA, TEN_KHOA, VI_TRI)
Trang 3SINH_VIEN (MA_SV, HO_SV, TEN_SV, NGAY_SINH, NOI_SINH,
MON_HOC (MA_MON, TEN_MON, SO_TIET)
KET_QUA (MA_SV, MA_MON, DIEM)
SINH_VIEN: MA_SV
KET_QUA: MA_SV, MA_MON
SINH_VIEN: MA_KHOA
MON_HOC: khôngcó
KET_QUA: MA_SV, MA_MON
3. Sử dụng ngôn ngữ SQL thực hiện các yêu cầu sau:
a. Liệt kê danh sách các SV (mã sv, họ tên, ngày sinh) có năm sinh trong khoảng
từ năm 1988 ->1990
SELECT MA_SV, HO_SV + " " + TEN_SV as HO_VA_TEN, NGAY_SINH FROM SINH_VIEN
WHERE NGAY_SINH >= “1998-01-01” AND <= “1990-12-30”
b. Cho biết kết quả thi các môn (mã môn, tên môn, điểm) của SV ‘Nguyễn Thị Thanh’
SELECT MA_MON, TEN_MON, DIEM
FROM MON_HOC inner join KET_QUA
on MON_HOC MA_MON = KET_QUA.MA_MON iner join
SINH_VIEN on KET_QUA.MA_SV= SINH_VIEN.MA_SV
WHERE SINH_VIEN.HO_SV = “NGUYỄN” AND SINH_VIEN.TEN_SV=
“THỊ THANH”
c. Cho biết danh sách môn học (mã môn, tên môn, số tiết) các môn không có SV nào thi
SELECT *
FROM MON_HOC
WHERE MA_MON NOT IN (SELECT MA_MON FROM KET_QUA)
d. Cho biết họ tên, ngày sinh của SV lớn tuổi nhất
SELECT SINH_VIEN.HO_SV + " " + TEN_SV as Ho Va Ten,
SINH_VIEN.NGAY_SINH
FOM SINH_VIEN
WHERE SINH_VIEN.NGAY_SINH (SELECT MIN (NGAY_SINH)
FOM SINH_VIEN)
Trang 4e. Cho biết tên khoa và tổng số học viên đang học tại khoa, chỉ hiển thị các khoa
có số sinh viên >100
SELEC KHOA.MA_KHOA, KHOA.TEN_KHOA, COUNT ( MA_SV )
FROM SINH_VIEN inner join KHOA
SINH_VIEN.MA_KHOA = KHOA.MA_KHOA
GOUP BY KHOA.MA_KHOA, KHOA.TEN_KHOA
HAVING COUNT ( SINH_VIEN.MA_SV ) >= 100
1.2.CẤU TRÚC DỮ LIỆU.
Câu 1.Hãy điền thông tin cho cột “ Nội dung của hàng đợi Queue ” vàcột “ Kết quả trả về ”.
Hành động Nội dung của hàng
đợi Queue
Kết quả trả về
Khoi_tao_Q (pfirst,
plast)
Empty
EnQueue (pfirst,
plast, “10”)
0 10 EnQueue (pfirst,
plast, “12”)
01
EnQueue (pfirst,
plast, “14”)
01 2
DeQueue (pfirst,
plast)
0 1
0
10 DeQueue (pfirst,
plast)
0
14
0 1
EnQueue (pfirst,
plast, “16”)
0 1
EnQueue (pfirst,
plast, “18”)
01 2
0 1
DeQueue (pfirst,
plast)
0 1
0 1 2
EnQueue (pfirst,
plast, “20”)
0 1 2
0 1 2
DeQueue (pfirst, 0 1 0 1 2 3
Trang 5plast) 18 20 10 12 14 DeQueue (pfirst,
plast)
0 20
0 1 2 3 4
EnQueue (pfirst,
plast, “22”)
0 1
0 1 2 3 4
EnQueue (pfirst,
plast, “24”)
0 1 2
0 1 2 3 4
DeQueue (pfirst,
plast)
0 1
0 1 2 3 4 5
EnQueue (pfirst,
plast, “26”)
0 1 2
0 1 2 3 4 5
DeQueue (pfirst,
plast)
0 1
0 1 2 3 4 5 6
DeQueue (pfirst,
plast)
0 24
0 1 2 3 4 5
6 7
DeQueue (pfirst,
0 1 2 3 4 5 6
Câu 2.Cho biết STACK có thể chứa tối đa 5 phần tử Hãy cho biết kết quả của STACK vàmảng chứa kết quả sau khi lấy STACK ra, lần lượt thực hiện sau từng thao tác sau:
1
PUSH
(“Mai”)
Ma
i
isFull
( ):
FALSE
2
La
n
PUSH
(“Lan”)
Ma
i
isFull
( ):
FALSE
3
Cú
c
Trang 6n
PUSH
(“Cúc”)
Ma
i
isFull
( ):
FALSE
4
Trú
c
Cú
c
La
n
PUSH
(“Trúc”
)
Ma
i
isFull
( ):
FALSE
5
POP ( ) Cú
c isEmpty (
): FALSE
La n
arra
y
0
Trúc
M ai
6
POP ( )
isEmpty
( ): FALSE
La n
arr
ay
0
1
Trú
c
Cú c
M ai
7
POP ( )
isEmpty ( ):
FALSE
ar
ra
y
0 1
2
Trú
c
Cú
c
La n
M ai
8
PUSH
Trang 7(“Tùng” )
isEmpty ( ):
FALSE
T ùn g
ar
ra
y
0 1
2
Trú
c
Cú
c
La n
M ai
9
PUSH
(“Bách” )
B ác h isEmpty ( ):
FALSE
T ùn g
ar
ra
y
0 1
2
Trú
c
Cú
c
La n
M ai
10
Th ôn g PUSH
(“Thông” )
Bá ch isEmpty ( ):
FALSE
Tù ng
ar
ra
y
0
1 2
Trú
c
Cú
c
La n
Ma i
11
Li m Th ôn g PUSH
(“Lim” )
Bá ch isEmpty ( ):
FALSE
Tù ng
Trang 8ra
y
0
1 2
Trú
c
Cú
c
La n
Ma i
12
Lim Thôn g PUSH (“Tre”
)
Bách Tùng
Khôngthểthêm
“Tre” vào Stack
Mai
13
Thô ng
h isEmpty ( ):
FALSE
Tùn g
arr
ay
0 1
2 3
Trú
c
Cú
c
La n
Li m
Mai
14
ch isEmpty ( ): FALSE Tù
ng
arr
ay
0 1 2
3 4
Tr
úc
C
úc
L an
Li m
thô ng
Ma i
15
POP ( )
isEmpty ( ): FALSE Tù
ng
arr
ay
0 1 2 3
4 5
Tr
úc
C
úc
L an
Li m
Thô ng
Bá ch
Ma i
Trang 9POP ( )
isEmpty ( ): FALSE
arr
ay
0 1 2 3
4 5 6
Tr
úc
C
úc
L an
Li m
Thô ng
Bá ch
Tù ng
M ai
17
POP ( )
isEmpty ( ): FALSE
arr
ay
0 1 2 3 4
5 6 7
Tr
úc
C
úc
L an
Li m
Thô ng
Bá ch
Tù ng
M ai
Satckr ỗng
Câu 3: CÂY NHỊ PHÂN
a.Biểu diễn cây nhịp hân theo các Node sau: 11.-11, 6, 3, 27, -15, 8, 5, 15, -20, -1,
12, -7, -24, -3, 25
b.Biểu diễn cây nhị phân theo các Node sau: 43, 11, 887, 3, 33, 46, 0, 8, 32, 45, 78,
6, 76, 334
Trang 10c.Biểu diễn cây nhị phân theo các Node sau: 50, 17, 72, 12, 23, 54, 76, 9, 14, 19, 67
Duyệt cây nhị phân:
• Duyệt NLR:
Node
A
Nodes Left
BDE
Node Right
CFG
• Duyệt LNR:
Nodes
Left
DBE
Node
A
Node Right
FCG
• Duyệt LRN:
Nodes
Left
DEB
Node Right
FGC
Nod e
A
Cây nhị phân tìm kiếm:
1.Duyệt cây:
• Duyệt tiền thứ tự (NLR):
Nod
e
22
Nodes Left
17,15,13,16,21,
18
Node Right
29,31,3
Trang 11• Duyệt trung thứ tự (NLR):
Nodes Left
13,15,16,17,1
8,21
Node
22
Node Right
29,30,3 1
• Duyệt hậu thứ tự (NLR):
Nodes Left
13,16,15,18,2
1,17
Node Right
30,21,2 9
No de
22
2.Thêm vào cây các Node sau: 14,33,19
3.Vẽ lại cây sau khi xóa Node:13,16,31
ÔnThi TN- 2014
1.1.Cơ sở dữ liệu:
Cho lượcđồ CSDL Quản lý phần mềm sau:
- LOAI_PHAN_MEM (MA_LOAI, TEN_LOAI, DAC_DIEM_CHUNG)
- NHOM_THUC_HIEN (MA_NHOM, TEN_NHOM, SO_LUONG)
- PHAN_MEM (MA_PHAN_MEM, TEN_PHAN_MEM, NGAY_BAT_DAU, NGAY_KET_THUC, MO_TA, MA_LOAI, MA_NHOM)
- KHACH_HANG (MA_KHACH_HANG, TEN_KHACH_HANG, DIA_CHI, DIEN_THOAI, EMAIL)
Trang 12- HOP_DONG(MA_HOP_DONG, MA_KHACH_HANG, MA_PHAN_MEM, GIA_TRI_HOP_DONG, NGAY_KY, NGAY_NGHIEM_THU)
1) Xác định Khóa chính:
LOAI_PHAN_MEM: MA_LOAI
NHOM_THUC_HIEN: MA_NHOM
2) XácđịnhKhóangoại:
LOAI_PHAN_MEM: khôngcó
NHOM_THUC_HIEN: khôngcó
HOP_DONG: MA_KHACH_HANG, MA_PHAN_MEM
3) Sử dụng ngôn ngữ SQL thực hiện các yêu cầu sau:
a. Liệt kê tất cả phần mềm do nhóm có tên “Number 1” thực hiện và có ngày thực hiện bắt đầu trong tháng 6/2013.
SELECT *
FROM PHAN_MEM inner join
NHOM_THUC_HIEN ON
PHAN_MEM.MA_NHOM = NHOM_THUC_HIEN.MA_NHOM
WHERE NHOM_THUC_HIEN.TEN_NHOM= “Number 1”
(c1) PHAN_MEM.NGAY_BAT_DAU >= “ 2013-06-01 ” AND
NGAY_BAT_DAU <= “ 2013-06-31 ”
(c2) Month ( NGAY_BAT_DAU ) = 6 AND YEAR ( NGAY_BAT_DAU ) = 2013
b. Li t kê các phần mềm có tên “ Website ASP.Net ”.
SELECT *
FROM LOAI_PHAN_MEM inner join PHAN_MEM
ON LOAI_PHAN_MEM.MA_LOAI = PHAN_MEM.MA_LOAI
WHERE LOAI_PHAN_MEM.TEN_LOAI = “ Website ASP.Net ”
c.Liệt kê danh sách nhóm thực hiện từ 5 phần mềm trở lên.
SELECT NHOM_THUC_HIEN.MA_NHOM,
NHOM_THUC_HIEN.TEN_NHOM, COUNT (PHAN_MEM.MA_PHAN_MEM) FROM NHOM_THUC_HIEN inner join PHAN_MEM
ON NHOM_THUC_HIEN.MA_NHOM = PHAN_MEM.MA_NHOM
d. Cho biết hợp đồng có giá trị hợp đồng lớn nhất.
SELECT *
FROM HOP_DONG
Trang 13WHERE GIA_TRI_HOP_DONG = ( SELECT MAX GIA_TRI_HOP_DONG FROM HOP_DONG)
e.Liệt kê các loại phần mềm chưa có phần mềm nào thực hiện.
SELEC MA_LOAI
FROM PHAN_MEM
WHERE MA_LOAI Not In (SELECT MA_LOAI
FROM PHAN_MEM)
f Liệt kê những nhóm có số lượng thành viên từ 5 đến 10 người.
SELECT *
FROM NHOM_THUC_HIEN
WHERE SO_LUONG Between 5 AND 10
(C2) SO_LUONG >= 5 AND SO_LUONG <=10
1.2.Cấutrúcdữliệu:
Câu 1: Hãyđiềnthông tin chocột “Nội dung hàngđợi Queue” vàcột
“Kếtquảtrảvề”.
Hànhđộng Nội dung củahàngđợi
Queue
Kếtquảtrảvề
Khoi_tao_Q (pfirst,
plast)
Empty
EnQueue (pfirst, plast,
“A”)
0 A EnQueue (pfirst, plast,
“B”)
0 1
EnQueue (pfirst, plast,
“C”)
0 1 2
DeQueue (pfirst, plast) 0 1
0
A DeQueue (pfirst, plast) 0
C
0 1
EnQueue (pfirst, plast,
“D”)
0 1
EnQueue (pfirst, plast,
“E”)
0 1 2
0 1
Trang 14DeQueue (pfirst, plast) 0 1
0 1 2
EnQueue (pfirst, plast,
“F”)
0 1 2
0 1 2
DeQueue (pfirst, plast) 0 1
0 1 2 3
DeQueue (pfirst, plast) 0
F
0 1 2 3 4
EnQueue (pfirst, plast,
“G”)
0 1
0 1 2 3 4
EnQueue (pfirst, plast,
“H”)
0 1 2
0 1 2 3 4
DeQueue (pfirst, plast) 0 1
0 1 2 3 4 5
EnQueue (pfirst, plast,
“I”)
0 1 2
0 1 2 3 4 5
DeQueue (pfirst, plast) 0 1
0 1 2 3 4 5 6
DeQueue (pfirst, plast) 0
H
0 1 2 3 4 5
6 7
A B C D E F H I DeQueue (pfirst, plast)
Empty
0 1 2 3 4 56
Câu 2: Cho biết STACK cóthểchứatốiđa 5 phầntử Hãychobiếtkếtquảcủa
STACK vàmảngchứakếtquảsaukhilấytừ STACK ra,
saukhithựchiệnlầnlượtsautừngthaotácsau:
1
PUSH (“ a
”)
isFull ( ):
FALSE
2
b PUSH (“ b
”)
a isFull ( ):
FALSE
Trang 15c
b PUSH (“ c
”)
a isFull ( ):
FALSE
4
d
c
b PUSH (“ d
”)
a isFull ( ):
FALSE
5
POP ( ) c isEmpty
( ):
FALSE
b
arra
y
0
d
a
6
POP ( )
isEmpty
( ):
FALSE
b
arra
y
0 1
d c
a
7
POP ( )
isEmpty
( ):
FALSE
arra
y
0 1
2
a
8
PUSH (“
e ” )
isEmpty e
Trang 16( ):
FALSE
arra
y
0 1
2
a
9
PUSH (“ f
” )
f
isEmpty
( ):
FALSE
e
arra
y
0 1 2
a
10
g PUSH (“
g ” )
f
isEmpty
( ):
FALSE
e
arra
y
0 1
2
a
11
h g PUSH (“
h ” )
f
isEmpty
( ):
FALSE
e
arra
y
0 1 2
a
12
h g PUSH (“ i
” )
f e
Trang 17Khôngthểthêm “ i
” vào Stack
a
13
g
isEmpty ( ):
FALSE
e
arra
y
0 1 2
3
d c b h
a
14
isEmpty ( ):
FALSE
e
arra
y
0 1 2
3 4
d c b h g
a
15
POP ( )
isEmpty ( ):
FALSE
e
arra
y
0 1 2 3
4 5
d c b h g f
a
16
POP ( )
isEmpty ( ): FALSE
arra
y
0 1 2 3
4 5 6
d c b h g f
a
17
POP ( )
isEmpty ( ): FALSE
arra
y
0 1 2 3 4
5 6 7
d c b h g f e a
Satckrỗng
Trang 18Câu 3: Cây nhị phân tìm kiếm:
a. Vẽ cây: 16, 17, 23, 25, 20, 5, 7, 9, 6, 3, 4, 2, 21, 8, 27.
b. Xóa các Node sau: 4, 7, 25, 21.
c. Duyệt cây theo tiền thứtự ( NLR ):
Node
16
Nodes Left
5, 3, 2, 6, 9,
8
Node Right
23, 20, 27